Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link’s group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.
POST
/
tables
/
{table_id}
/
columns
/
{column_id}
/
release
/
Keep a linked value's column as a plain column
curl --request POST \
--url https://api.getoneprofile.ai/tables/{table_id}/columns/{column_id}/release/ \
--header 'X-API-Key: <api-key>'
The column group this column belongs to, or null. Groups are user-managed entities delivered on the column list's groups; this field is the membership edge, and the members' order is simply the columns' position order.
MANUAL cells are user-editable; FORMULA cells are a pure computed
chain over other columns; ENRICHMENT cells are produced by an external
action (an AI model, a research agent) run once per row. Formula and
enrichment cells are both computed (read-only in the grid) but only
enrichment work leaves the process and costs credits.
SOURCE cells hold one imported record verbatim, written only by the
table's import source. Like MANUAL it is an externally-written leaf
rather than a computed node (it joins no run plan and derives from no
other column), but unlike MANUAL nobody may edit or retype it: the
whole point is that a refresh can overwrite it wholesale, and every
get_path column promoted off it reads paths that only survive while
its shape does.
EXPORT cells hold the RECEIPT of pushing the row to a connected
destination (status, the destination record id, when it happened), never
the row's own data. The mirror image of SOURCE: where a source column
is an externally-written leaf, an export column is an externally-READ
leaf. It joins the run plan like a computed column (its mappings are
dependencies, so a changed input re-pushes) but nothing may depend on it
in turn, nobody may edit it (a hand-edited receipt would silently pin the
row out of future pushes), and re-running it means "push again", not
"re-answer".
SEQUENCE cells hold a contact's live status in an email sequence, or
the messages it sent them, written by the outreach send engine and nobody
else: an externally-written leaf with no run plan, no dependencies, no user
edits, no retyping. A status column, like EXPORT receipts, may not be
referenced in a formula: the status only exists to be looked at, never
derived from. A messages column may, the way a SOURCE record may: the
engine requests a run of its dependents whenever it rewrites a cell. The
columns are created by the sequence that targets the table, not from the
add-column catalog.
Every filter operator this column admits, in display order. The server owns the list so a picker cannot offer a pairing the rows query will reject: value operators follow the storage slot, and a computed column additionally admits the execution-state family (has an error, has results, has not run, is stale, ...), which reads run metadata a manual column never writes.
A row filter predicate.
Which operators are legal depends on the column's data type; the service
validates the pairing and rejects a mismatch, so an operator here is a
vocabulary entry rather than a promise it applies everywhere.
Two families live here. The VALUE operators ask about what a cell holds and
are keyed off the column's storage slot. The STATE operators ask about what
the last run DID to the cell (errored, skipped, never ran, went stale) and
are keyed off the column's kind instead: they read the compute metadata that
only a computed column ever writes, and mean nothing on a hand-typed one.
Whether the AI assistant created this column through a workspace action. A fact about who made it, not a state: it stays true after a person edits the column.
The definition has changed since these cells were last computed, so they are stale. Set by a save made with suppress_run, cleared when the column next finishes a run.
When set, run_condition is inherited from this column group and is rewritten whenever the group's changes. Set a run_condition on the column to override it, or clear the column's to inherit again.
When set, the column follows this saved view's filter as its run condition. The engine evaluates view membership at run time rather than reading run_condition. Editing the run condition directly detaches from the view.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Oneprofile","description":"How to use Oneprofile: find leads, enrich them, and run outreach.","colors":{"primary":"#0F5F5C","light":"#23CCC9","dark":"#15807E"},"appearance":{"default":"light"},"navbar":{"primary":{"type":"button","label":"Open Oneprofile","href":"https://app.getoneprofile.ai"}},"footer":{"socials":{"x":"https://x.com/getoneprofile","linkedin":"https://www.linkedin.com/company/getoneprofile"},"links":[{"header":"Product","items":[{"label":"Open Oneprofile","href":"https://app.getoneprofile.ai"},{"label":"Pricing","href":"https://www.getoneprofile.ai/pricing"},{"label":"Integrations","href":"https://www.getoneprofile.ai/integrations"}]},{"header":"Resources","items":[{"label":"Changelog","href":"https://docs.getoneprofile.ai/changelog"},{"label":"Blog","href":"https://www.getoneprofile.ai/blog"},{"label":"Contact support","href":"mailto:support@getoneprofile.ai"}]},{"header":"Legal","items":[{"label":"Terms of service","href":"https://www.getoneprofile.ai/terms"},{"label":"Privacy policy","href":"https://www.getoneprofile.ai/privacy-policy"}]}]},"icons":{"library":"lucide"},"integrations":{"posthog":{"apiKey":"phc_p9VapX8hW4khZqlz1QX0fNdDP8jtRhJiTofklwMgjaS","apiHost":"https://k.getoneprofile.ai"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"variables":{"appUrl":"https://app.getoneprofile.ai"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"oneprofile","hasAudioNarration":false,"actualSubdomain":"oneprofile","customDomains":["docs.getoneprofile.ai"],"gitSource":{"type":"github","owner":"getoneprofile","repo":"oneprofile","deployBranch":"master","contentDirectory":"product-docs/docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aefab40bc1b65540a859992","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API reference","count":662},{"language":"default","tag":"Endpoints","count":660},{"language":"default","tag":"sequences","count":111},{"language":"default","tag":"Documentation","count":101},{"language":"default","tag":"accounts","count":40},{"language":"default","tag":"table-enrichments","count":34},{"language":"default","tag":"senders","count":32},{"language":"default","tag":"find-leads","count":30},{"language":"default","tag":"inbox","count":27},{"language":"default","tag":"Outreach","count":26}],"searchSettings":{"maxResults":6}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column","slug":"/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column","pageMetadata":{"title":"Keep a linked value's column as a plain column","description":"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link's group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/{column_id}/release/","href":"/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link’s group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Keep a linked value's column as a plain column","description":"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link's group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/{column_id}/release/","href":"/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link's group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.","operationId":"keep_link_values","parameters":["fd587e6c-157d-4df3-ba71-21b948253ddc","0468d0de-8ca3-4fbf-ad04-db906d0935ed","9e206497-0211-4417-b296-1ffbf8998fa5"],"responses":{"200":"65551c8f-b569-43a8-86c7-9c5740779e5a","401":"12f6c2d2-7653-4137-908d-ba6090ff173c","403":"8f2abe9c-3bf1-4797-bdf1-a7c7ccf604bc","404":"f36f3c0b-bbfa-4534-866d-e91fa05c598f","422":"226b2993-15c2-4717-8603-906c6548cc27","500":"f40d42aa-fdc0-478e-a7e7-41cfde43b2fe","502":"7c87c159-d53e-4c7b-8c7b-7e5b44df4179","503":"9ddc8bb4-caac-4d46-a91f-ff4b2fd0bb06"},"security":["94399af3-cf55-4f3f-a437-e3d161220625","32654ed0-444a-4578-8444-73a722a53390"],"summary":"Keep a linked value's column as a plain column","tags":["table-columns"],"method":"post","type":"path","servers":["872fd99c-23cb-4948-950d-72c52598aabf"],"path":"/tables/{table_id}/columns/{column_id}/release/","baseUrlOptions":["https://api.getoneprofile.ai"],"title":"Keep a linked value's column as a plain column","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"fd587e6c-157d-4df3-ba71-21b948253ddc":{"in":"path","name":"table_id","required":true,"schema":{"format":"uuid","title":"Table Id","type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}},"0468d0de-8ca3-4fbf-ad04-db906d0935ed":{"in":"path","name":"column_id","required":true,"schema":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}},"9e206497-0211-4417-b296-1ffbf8998fa5":{"description":"Answer exactly as the real call would, changing nothing.","in":"query","name":"dry_run","required":false,"schema":{"default":false,"description":"Answer exactly as the real call would, changing nothing.","title":"Dry Run","type":"boolean","isRequired":false,"uniqueKey":"","typeLabel":"boolean"}}},"responses":{"65551c8f-b569-43a8-86c7-9c5740779e5a":{"content":{"application/json":{"schema":{"description":"A table column with its definition and dependency metadata.","properties":{"column_type":{"description":"The semantic type; what the cell renders and validates as.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","isRequired":true,"uniqueKey":"column_type","typeLabel":"enum\u003cstring>"},"created_at":{"format":"date-time","title":"Created At","type":"string","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"data_type":{"description":"The storage type `column_type` resolves to, and so which typed value slot the cells live in. Derived, never chosen.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"title":"PropertyType","type":"string","isRequired":true,"uniqueKey":"data_type","typeLabel":"enum\u003cstring>"},"definition":{"oneOf":[{"type":"object","title":"ManualColumnDefinition","description":"Definition of a manual column: typed, user-editable cells.","properties":{"default_value":{"oneOf":[{"type":"string","title":"Default Value","uniqueKey":"definition.oneOf.0.default_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Default Value","uniqueKey":"definition.oneOf.0.default_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Default Value","uniqueKey":"definition.oneOf.0.default_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Default Value","uniqueKey":"definition.oneOf.0.default_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Default Value","uniqueKey":"definition.oneOf.0.default_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.0.default_value","typeLabel":"string | integer | number | boolean | null"},"kind":{"const":"manual","default":"manual","title":"Kind","type":"string","uniqueKey":"definition.oneOf.0.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.0","typeLabel":"ManualColumnDefinition · object"},{"type":"object","title":"FormulaColumnDefinition","description":"Definition of a formula column: a pure-function chain over other columns.","required":["chain"],"properties":{"chain":{"oneOf":[{"type":"object","title":"TableCopy","description":"Copy the input value unchanged.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.0.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.0.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"copy","default":"copy","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.0.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.0.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.0.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.0.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.0.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.0.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.0.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.0.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.0.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.0","typeLabel":"TableCopy · object"},{"type":"object","title":"TableChangeCase","description":"Change the case of a string value.","required":["mode"],"properties":{"mode":{"enum":["lower","upper","title"],"title":"Mode","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.1.mode","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.1.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.1.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"change_case","default":"change_case","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.1.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.1.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.1.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.1.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.1.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.1.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.1.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.1.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.1.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.1","typeLabel":"TableChangeCase · object"},{"type":"object","title":"TableTrim","description":"Strip leading and trailing whitespace from a string value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.2.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.2.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"trim","default":"trim","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.2.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.2.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.2.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.2.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.2.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.2.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.2.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.2.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.2.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.2","typeLabel":"TableTrim · object"},{"type":"object","title":"TableReplace","description":"Replace all occurrences of a substring.","required":["old","new"],"properties":{"new":{"title":"New","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.3.new","typeLabel":"string"},"old":{"title":"Old","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.3.old","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.3.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.3.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"replace","default":"replace","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.3.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.3.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.3.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.3.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.3.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.3.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.3.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.3.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.3.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.3","typeLabel":"TableReplace · object"},{"type":"object","title":"TableRegexExtract","description":"Extract a regex group from a string value.","required":["pattern"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.4.pattern","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.4.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.4.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"regex_extract","default":"regex_extract","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.4.function","typeLabel":"string"},"group":{"default":0,"title":"Group","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.4.group","typeLabel":"integer"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.4.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.4.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.4.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.4.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.4.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.4.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.4.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.4.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.4","typeLabel":"TableRegexExtract · object"},{"type":"object","title":"TableRegexReplace","description":"Replace regex matches in a string value.","required":["pattern","replacement"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.5.pattern","typeLabel":"string"},"replacement":{"title":"Replacement","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.5.replacement","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.5.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.5.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"regex_replace","default":"regex_replace","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.5.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.5.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.5.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.5.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.5.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.5.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.5.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.5.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.5.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.5","typeLabel":"TableRegexReplace · object"},{"type":"object","title":"TableConcatenate","description":"Join several values into one string.\n\nSources are ORDERED and may mix columns with the results of earlier steps:\n``[First name, step 2]`` and ``[step 2, First name]`` are different strings,\nwhich is why there is one list rather than a list of columns beside a list\nof steps.\n\nThe field keeps its original name: every stored definition holds\n``source_column_ids``, and the list is still overwhelmingly columns. Only\nthe item type widened, so old definitions validate untouched.","required":["source_column_ids"],"properties":{"source_column_ids":{"description":"Values to join, in order. A UUID reads that column on the row; a step reference reads an earlier step's output.","items":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.1","typeLabel":"StepRef · object"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX]","typeLabel":"string\u003cuuid> | StepRef · object"},"title":"Source Column Ids","type":"array","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_column_ids","typeLabel":"(string\u003cuuid> | StepRef · object)[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.6.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.6.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"concatenate","default":"concatenate","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.6.function","typeLabel":"string"},"ignore_empty":{"default":true,"title":"Ignore Empty","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.6.ignore_empty","typeLabel":"boolean"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.6.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.6.next","typeLabel":"null"},"separator":{"default":" ","title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.6.separator","typeLabel":"string"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.6.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.6","typeLabel":"TableConcatenate · object"},{"type":"object","title":"TableArithmetic","description":"Apply an arithmetic operator with a constant or column-valued operand.","required":["operator","operand"],"properties":{"operand":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.0.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.1.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Operand","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Operand","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Operand","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Operand","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Operand","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand.oneOf.6","typeLabel":"null"}],"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operand","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"operator":{"enum":["add","subtract","multiply","divide"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.operator","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.7.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"arithmetic","default":"arithmetic","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.function","typeLabel":"string"},"next":{"oneOf":[{"type":"object","title":"TableCopy","description":"Copy the input value unchanged.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0.fallback_value","typeLabel":"any"},"function":{"const":"copy","default":"copy","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.0","typeLabel":"TableCopy · object"},{"type":"object","title":"TableChangeCase","description":"Change the case of a string value.","required":["mode"],"properties":{"mode":{"enum":["lower","upper","title"],"title":"Mode","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.mode","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.fallback_value","typeLabel":"any"},"function":{"const":"change_case","default":"change_case","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.1","typeLabel":"TableChangeCase · object"},{"type":"object","title":"TableTrim","description":"Strip leading and trailing whitespace from a string value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2.fallback_value","typeLabel":"any"},"function":{"const":"trim","default":"trim","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.2","typeLabel":"TableTrim · object"},{"type":"object","title":"TableReplace","description":"Replace all occurrences of a substring.","required":["old","new"],"properties":{"new":{"title":"New","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.new","typeLabel":"string"},"old":{"title":"Old","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.old","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.fallback_value","typeLabel":"any"},"function":{"const":"replace","default":"replace","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.3","typeLabel":"TableReplace · object"},{"type":"object","title":"TableRegexExtract","description":"Extract a regex group from a string value.","required":["pattern"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.pattern","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.fallback_value","typeLabel":"any"},"function":{"const":"regex_extract","default":"regex_extract","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.function","typeLabel":"string"},"group":{"default":0,"title":"Group","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.group","typeLabel":"integer"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.4","typeLabel":"TableRegexExtract · object"},{"type":"object","title":"TableRegexReplace","description":"Replace regex matches in a string value.","required":["pattern","replacement"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.pattern","typeLabel":"string"},"replacement":{"title":"Replacement","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.replacement","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.fallback_value","typeLabel":"any"},"function":{"const":"regex_replace","default":"regex_replace","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.5","typeLabel":"TableRegexReplace · object"},{"type":"object","title":"TableConcatenate","description":"Join several values into one string.\n\nSources are ORDERED and may mix columns with the results of earlier steps:\n``[First name, step 2]`` and ``[step 2, First name]`` are different strings,\nwhich is why there is one list rather than a list of columns beside a list\nof steps.\n\nThe field keeps its original name: every stored definition holds\n``source_column_ids``, and the list is still overwhelmingly columns. Only\nthe item type widened, so old definitions validate untouched.","required":["source_column_ids"],"properties":{"source_column_ids":{"description":"Values to join, in order. A UUID reads that column on the row; a step reference reads an earlier step's output.","items":{"type":"any","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.source_column_ids.items.[INDEX]","typeLabel":"any"},"title":"Source Column Ids","type":"array","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.source_column_ids","typeLabel":"any[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.fallback_value","typeLabel":"any"},"function":{"const":"concatenate","default":"concatenate","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.function","typeLabel":"string"},"ignore_empty":{"default":true,"title":"Ignore Empty","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.ignore_empty","typeLabel":"boolean"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.next","typeLabel":"any"},"separator":{"default":" ","title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.separator","typeLabel":"string"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.6","typeLabel":"TableConcatenate · object"},{"title":"Next"},{"type":"object","title":"TableRound","description":"Round a numeric value to a precision.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.fallback_value","typeLabel":"any"},"function":{"const":"round","default":"round","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.function","typeLabel":"string"},"mode":{"default":"round","enum":["round","ceil","floor"],"title":"Mode","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.mode","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.next","typeLabel":"any"},"precision":{"default":0,"title":"Precision","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.precision","typeLabel":"integer"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.8","typeLabel":"TableRound · object"},{"type":"object","title":"TableClamp","description":"Clamp a numeric value to an inclusive range.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.fallback_value","typeLabel":"any"},"function":{"const":"clamp","default":"clamp","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.function","typeLabel":"string"},"max_value":{"type":"any","title":"Max Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.max_value","typeLabel":"any"},"min_value":{"type":"any","title":"Min Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.min_value","typeLabel":"any"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.9","typeLabel":"TableClamp · object"},{"type":"object","title":"TableDateFormat","description":"Convert a date between iso/unix/unix_ms representations.","required":["input_format","output_format"],"properties":{"input_format":{"enum":["iso","unix","unix_ms"],"title":"Input Format","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.input_format","typeLabel":"enum\u003cstring>"},"output_format":{"enum":["iso","unix","unix_ms"],"title":"Output Format","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.output_format","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.fallback_value","typeLabel":"any"},"function":{"const":"date_format","default":"date_format","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.10","typeLabel":"TableDateFormat · object"},{"type":"object","title":"TableDateExtract","description":"Extract a component (year, month, ...) from a date value.","required":["component"],"properties":{"component":{"enum":["year","month","day","hour","minute","second"],"title":"Component","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.component","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.fallback_value","typeLabel":"any"},"function":{"const":"date_extract","default":"date_extract","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.11","typeLabel":"TableDateExtract · object"},{"type":"object","title":"TableDateArithmetic","description":"Add or subtract a fixed duration from a date value.","required":["operator","amount","unit"],"properties":{"amount":{"title":"Amount","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.amount","typeLabel":"integer"},"operator":{"enum":["add","subtract"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.operator","typeLabel":"enum\u003cstring>"},"unit":{"enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.unit","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.fallback_value","typeLabel":"any"},"function":{"const":"date_arithmetic","default":"date_arithmetic","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.12","typeLabel":"TableDateArithmetic · object"},{"type":"object","title":"TableListFirst","description":"Take the first element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13.fallback_value","typeLabel":"any"},"function":{"const":"list_first","default":"list_first","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.13","typeLabel":"TableListFirst · object"},{"type":"object","title":"TableListLast","description":"Take the last element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14.fallback_value","typeLabel":"any"},"function":{"const":"list_last","default":"list_last","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.14","typeLabel":"TableListLast · object"},{"type":"object","title":"TableListNth","description":"Take the element at an index of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.fallback_value","typeLabel":"any"},"function":{"const":"list_nth","default":"list_nth","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.function","typeLabel":"string"},"index":{"default":0,"title":"Index","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.index","typeLabel":"integer"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.15","typeLabel":"TableListNth · object"},{"type":"object","title":"TableListJoin","description":"Join list elements into a string with a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.fallback_value","typeLabel":"any"},"function":{"const":"list_join","default":"list_join","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.next","typeLabel":"any"},"separator":{"default":", ","title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.separator","typeLabel":"string"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.16","typeLabel":"TableListJoin · object"},{"type":"object","title":"TableListCount","description":"Count the elements of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17.fallback_value","typeLabel":"any"},"function":{"const":"list_count","default":"list_count","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.17","typeLabel":"TableListCount · object"},{"type":"object","title":"TableListPluck","description":"Pull one field out of every object in a list.\n\nEnrichment payloads routinely carry lists of objects\n(``[{\"value\": \"Payroll\"}, {\"value\": \"HR\"}]``) where the useful thing is\nthe field, not the wrapper. Plucking turns that into ``[\"Payroll\", \"HR\"]``\nso ``list_join`` and friends can work on it; items without the field\nbecome empty and scalar items pass through unchanged.","required":["field"],"properties":{"field":{"minLength":1,"title":"Field","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.field","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.fallback_value","typeLabel":"any"},"function":{"const":"list_pluck","default":"list_pluck","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.18","typeLabel":"TableListPluck · object"},{"type":"object","title":"TableListUnique","description":"De-duplicate list elements, keeping first-seen order.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19.fallback_value","typeLabel":"any"},"function":{"const":"list_unique","default":"list_unique","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.19","typeLabel":"TableListUnique · object"},{"type":"object","title":"TableListSplit","description":"Split a string value into a list on a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.fallback_value","typeLabel":"any"},"function":{"const":"list_split","default":"list_split","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.next","typeLabel":"any"},"separator":{"default":",","title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.separator","typeLabel":"string"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.20","typeLabel":"TableListSplit · object"},{"type":"object","title":"TableCoalesce","description":"Substitute a default (a literal or another column) when the input is empty.","required":["default_value"],"properties":{"default_value":{"type":"any","title":"Default Value","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.default_value","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.fallback_value","typeLabel":"any"},"function":{"const":"coalesce","default":"coalesce","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.21","typeLabel":"TableCoalesce · object"},{"type":"object","title":"TableIfThenElse","description":"Pick one of two values based on a comparison.\n\nEach of the three slots takes a literal or a column, so this expresses both\n\"if this column is over that column\" and \"use A, else use B\". Neither of\nthose was reachable while they were constants.","required":["operator"],"properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.operator","typeLabel":"enum\u003cstring>"},"compare_value":{"type":"any","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.compare_value","typeLabel":"any"},"else_value":{"type":"any","title":"Else Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.else_value","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.fallback_value","typeLabel":"any"},"function":{"const":"if_then_else","default":"if_then_else","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.source_step","typeLabel":"any"},"then_value":{"type":"any","title":"Then Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22.then_value","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.22","typeLabel":"TableIfThenElse · object"},{"type":"object","title":"TableConditions","description":"Fold several comparisons into ONE boolean.\n\nThe engine's only boolean combinator, and the shape a column's\n``run_condition`` is authored in: \"only run where Employees > 50 AND\nCountry is US\". Nothing else here joins predicates: ``if_then_else``\ncompares exactly one pair and returns a value rather than a verdict. So\nwithout this a multi-clause gate could only be reached by chaining steps\nthat pipe a truthy stand-in forward, which no editor could read back.\n\nOne joiner over clauses and, at most one level down, groups of clauses:\n\"A and (B or C)\". That is precisely the row filter's shape, so a view's\nfilter can be saved as a gate and read back as a filter without loss; a\ndeeper tree would be expressible on one side only. Reads its clauses'\noperands directly and ignores the piped input, so it is a leaf rather\nthan a transform.","required":["clauses"],"properties":{"clauses":{"items":{"type":"any","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.clauses.items.[INDEX]","typeLabel":"any"},"maxItems":8,"minItems":1,"title":"Clauses","type":"array","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.clauses","typeLabel":"any[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.fallback_value","typeLabel":"any"},"function":{"const":"conditions","default":"conditions","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.function","typeLabel":"string"},"joiner":{"default":"and","enum":["and","or"],"title":"Joiner","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.joiner","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.next","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.23","typeLabel":"TableConditions · object"},{"type":"object","title":"TableValueMapping","description":"Map input values through a lookup table.","required":["mapping"],"properties":{"mapping":{"additionalProperties":{"type":"any","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.mapping.additionalProperties","typeLabel":"any"},"title":"Mapping","type":"object","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.mapping","typeLabel":"Mapping · object"},"default_value":{"type":"any","title":"Default Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.default_value","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.fallback_value","typeLabel":"any"},"function":{"const":"value_mapping","default":"value_mapping","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.24","typeLabel":"TableValueMapping · object"},{"type":"object","title":"TableToString","description":"Coerce the input to a string.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25.fallback_value","typeLabel":"any"},"function":{"const":"to_string","default":"to_string","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.25","typeLabel":"TableToString · object"},{"type":"object","title":"TableToInt","description":"Coerce the input to an integer.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26.fallback_value","typeLabel":"any"},"function":{"const":"to_int","default":"to_int","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.26","typeLabel":"TableToInt · object"},{"type":"object","title":"TableToFloat","description":"Coerce the input to a float.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27.fallback_value","typeLabel":"any"},"function":{"const":"to_float","default":"to_float","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.27","typeLabel":"TableToFloat · object"},{"type":"object","title":"TableToBool","description":"Coerce the input to a boolean.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28.fallback_value","typeLabel":"any"},"function":{"const":"to_bool","default":"to_bool","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.28","typeLabel":"TableToBool · object"},{"type":"object","title":"TableToDate","description":"Coerce the input to a date.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.fallback_value","typeLabel":"any"},"function":{"const":"to_date","default":"to_date","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.function","typeLabel":"string"},"input_format":{"default":"auto","enum":["iso","unix","unix_ms","auto"],"title":"Input Format","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.input_format","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.29","typeLabel":"TableToDate · object"},{"type":"object","title":"TablePhoneE164","description":"Normalize a phone number to E.164 format.","properties":{"default_region":{"default":"US","title":"Default Region","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.default_region","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.fallback_value","typeLabel":"any"},"function":{"const":"phone_e164","default":"phone_e164","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.30","typeLabel":"TablePhoneE164 · object"},{"type":"object","title":"TableUtmParse","description":"Extract a UTM parameter from a URL value.","required":["parameter"],"properties":{"parameter":{"enum":["source","medium","campaign","term","content"],"title":"Parameter","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.parameter","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.fallback_value","typeLabel":"any"},"function":{"const":"utm_parse","default":"utm_parse","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.31","typeLabel":"TableUtmParse · object"},{"type":"object","title":"TableUrlDomain","description":"Reduce a URL to its bare registrable-looking host.\n\nA website field arrives as a whole URL (``https://www.acme.com/about``)\nbut the thing that joins, dedupes and enriches is ``acme.com``. Doing it\nwith ``regex_extract`` means every caller hand-writes the same fragile\npattern, so the parse lives here once and uses a real URL parser.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32.fallback_value","typeLabel":"any"},"function":{"const":"url_domain","default":"url_domain","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.32","typeLabel":"TableUrlDomain · object"},{"type":"object","title":"TableCompanyDomain","description":"Reduce a company's website URL to the company's own registrable domain.\n\nThree differences from ``url_domain``, which stays the generic read (a\ncolumn of LinkedIn profile URLs legitimately reduces to ``linkedin.com``\nthere):\n\nHosts that name a platform rather than the company (LinkedIn and Facebook\npages, link aggregators, review sites, vendor partner directories) come out\nempty. A company whose only listed website is its LinkedIn page has no\nderivable domain, and an empty cell says so; ``linkedin.com`` is worse than\nempty because it joins, dedupes and syncs as if it were real.\n\nThe result is the domain someone REGISTERED, not the bare host: a provider\nthat lists ``careers.acme.com`` is describing ``acme.com``. A subdomain\njoins against nothing and sends an agent somewhere that often does not\nresolve. Page builders that give each customer their own label are the\nexception the Public Suffix List already encodes, so ``acme.wixsite.com``\nsurvives whole rather than collapsing into ``wixsite.com``.\n\n``company_name`` guards the case those two cannot: a directory listing\nreduces to the DIRECTORY owner's domain, so\n``cloudpartners.transform.microsoft.com`` becomes ``microsoft.com``: right\nshape, wrong company, and nothing downstream can tell. Pointed at the\ncolumn naming the employer, the domain is dropped when the two disagree.\nOptional: without it the other two rules still apply.","properties":{"company_name":{"type":"any","title":"Company Name","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.company_name","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.fallback_value","typeLabel":"any"},"function":{"const":"company_domain","default":"company_domain","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.33","typeLabel":"TableCompanyDomain · object"},{"type":"object","title":"TableGetPath","description":"Read a dotted path out of an object- or list-valued cell.\n\nObject and list columns were storable but unreadable: nothing in the\ncatalog could reach a field inside one, so an enrichment payload landed in\na cell and stopped there. Segments index dicts by key and lists by integer\nposition: ``employees.count``, ``emails.0.address``.\n\n``output_type`` is declared rather than derived because a JSON path can\nland on anything, and the column's data type has to be known before a\nsingle row is evaluated.","required":["path"],"properties":{"path":{"minLength":1,"title":"Path","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.path","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.fallback_value","typeLabel":"any"},"function":{"const":"get_path","default":"get_path","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.next","typeLabel":"any"},"output_type":{"description":"Type of a property. Used while creating/updating/deleting properties.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"title":"PropertyType","type":"string","default":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.output_type","typeLabel":"enum\u003cstring>"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.34","typeLabel":"TableGetPath · object"},{"type":"object","title":"TableFormat","description":"Build a string from a positional template and a list of arguments.\n\n``concatenate`` joins whole columns with one separator, which cannot\nproduce \"Enterprise: Acme (12.4%)\". Placeholders are positional only\n(``{0}``, ``{1}``) so the template stays data, not an expression language.\n\nLike ``concatenate`` this takes no ``source_column_id``: its inputs are its\narguments, not the value flowing down the chain.","required":["template"],"properties":{"template":{"minLength":1,"title":"Template","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.template","typeLabel":"string"},"arguments":{"items":{"type":"any","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.arguments.items.[INDEX]","typeLabel":"any"},"maxItems":10,"title":"Arguments","type":"array","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.arguments","typeLabel":"any[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.fallback_value","typeLabel":"any"},"function":{"const":"format","default":"format","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.next","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.35","typeLabel":"TableFormat · object"},{"type":"object","title":"TableDateDiff","description":"The signed duration between this step's date and another date.\n\n``date_arithmetic`` shifts a date by a CONSTANT amount, so the gap between\ntwo date columns had no expression. Positive when the step's own date is\nthe later of the two.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.fallback_value","typeLabel":"any"},"function":{"const":"date_diff","default":"date_diff","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.next","typeLabel":"any"},"other":{"type":"any","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.other","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.source_step","typeLabel":"any"},"unit":{"default":"days","enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36.unit","typeLabel":"enum\u003cstring>"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.36","typeLabel":"TableDateDiff · object"},{"type":"object","title":"TableKeywords","description":"The most frequent meaningful words in a text or list value.\n\nReads a body of text (a scraped page, a bio, a job description) and\nreturns the words that carry its subject, ordered most frequent first.\nStopwords (\"the\", \"and\", \"with\") are dropped: a frequency count that keeps\nthem returns the same five words for every row and says nothing about any\nof them.\n\nDeterministic and pure: no model call, so a keyword column costs nothing\nand re-runs identically.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.fallback_value","typeLabel":"any"},"function":{"const":"keywords","default":"keywords","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.function","typeLabel":"string"},"limit":{"default":10,"description":"How many keywords to keep, most frequent first.","maximum":100,"minimum":1,"title":"Limit","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.limit","typeLabel":"integer"},"min_length":{"default":3,"description":"Shortest word to consider; anything shorter is noise.","maximum":20,"minimum":1,"title":"Min Length","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.min_length","typeLabel":"integer"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.37","typeLabel":"TableKeywords · object"},{"type":"object","title":"TableListFilter","description":"Keep only the list items whose field passes a test.\n\nAn enrichment payload lands as a list of objects (every job opening, every\nfunding round, every contact) and the row usually wants a subset of it:\nthe engineering roles, the rounds after 2024, the contacts with an email.\nWithout this the whole list is the only thing a cell can hold.\n\n``field`` is a dotted path INSIDE each item (``location.country``); leaving\nit empty tests the item itself, which is what a list of plain strings\nneeds. ``exists``/``missing`` ignore ``value``: they ask only whether the\nfield is there.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.fallback_value","typeLabel":"any"},"field":{"default":"","description":"Dotted path inside each item; empty tests the item itself.","maxLength":200,"title":"Field","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.field","typeLabel":"string"},"function":{"const":"list_filter","default":"list_filter","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.next","typeLabel":"any"},"operator":{"default":"eq","enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","exists","missing"],"title":"Operator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.operator","typeLabel":"enum\u003cstring>"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.source_step","typeLabel":"any"},"value":{"type":"any","title":"Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38.value","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.38","typeLabel":"TableListFilter · object"},{"type":"object","title":"TableListSort","description":"Order a list, ascending or descending.\n\n``list_unique`` and ``list_join`` both preserve whatever order the source\nhappened to arrive in, which is fine until the cell is meant to be READ:\na top-3 of anything, a chronological history, an alphabetised tag list.\n\n``field`` names the dotted path to sort objects BY; empty sorts the items\nthemselves. Values that cannot be compared with each other (a number next\nto a string) are ordered by type first, so the sort is total instead of\nraising on the row where the data is mixed.","properties":{"direction":{"default":"asc","enum":["asc","desc"],"title":"Direction","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.direction","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.fallback_value","typeLabel":"any"},"field":{"default":"","description":"Dotted path inside each item to sort by; empty sorts the items.","maxLength":200,"title":"Field","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.field","typeLabel":"string"},"function":{"const":"list_sort","default":"list_sort","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.39","typeLabel":"TableListSort · object"},{"type":"object","title":"TableListIntersect","description":"The values this list shares with another: the overlap, in the first list's order.\n\nThe scoring question every ICP fit column asks: which of the buyer's tags,\ntechnologies or keywords are ALSO on my target list. Doing it by hand meant\none ``if_then_else`` per tag.\n\n``other`` is a column holding the second list, or literal text split on\n``separator``. Matching ignores case and surrounding spaces, because the\ntwo lists come from different sources and \"Shopify \" never equals \"shopify\"\nwhen it matters most.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.fallback_value","typeLabel":"any"},"function":{"const":"list_intersect","default":"list_intersect","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.next","typeLabel":"any"},"other":{"type":"any","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.other","typeLabel":"any"},"separator":{"default":",","description":"Splits ``other`` when it is text rather than a list.","maxLength":10,"title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.separator","typeLabel":"string"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.40","typeLabel":"TableListIntersect · object"},{"type":"object","title":"TableTextSimilarity","description":"How alike two pieces of text are, as a percentage.\n\nThe dedupe and match question: is \"Acme Inc.\" the same company as \"Acme,\nInc\"? An exact comparison says no and a human says obviously yes, so the\nhonest answer is a number the row can threshold on.\n\nCase and surrounding whitespace never count: they are formatting, not\ndifference. 100 means identical after that normalisation, 0 means nothing\nin common.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.fallback_value","typeLabel":"any"},"function":{"const":"text_similarity","default":"text_similarity","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.next","typeLabel":"any"},"other":{"type":"any","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.other","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.41","typeLabel":"TableTextSimilarity · object"},{"type":"object","title":"TableDetectLanguage","description":"The language a piece of text is written in, as an ISO 639-1 code.\n\nRoutes a row before anything expensive touches it: which sequence to\nenrol a lead into, which reviewer sees a scraped page, whether to\ntranslate at all.\n\nScript comes first (Cyrillic, Greek, Hebrew, Arabic, Han, kana and\nhangul each answer on their own) and Latin text is decided by the\nfunction words it uses. That is a heuristic, not a model: it is\ndeterministic, free, and honest about not knowing, returning null when\nthe text is too short or matches nothing.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42.fallback_value","typeLabel":"any"},"function":{"const":"detect_language","default":"detect_language","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.42","typeLabel":"TableDetectLanguage · object"},{"type":"object","title":"TableScoreWords","description":"Score text by the weighted words it contains.\n\nThe rules half of lead scoring, without a model: \"enterprise\" is worth 3,\n\"student\" is worth -5, and the cell adds up whatever the row's text,\ntags or tech stack actually say. Expressing the same thing with\n``if_then_else`` needs one step per word and runs out of chain depth at ten.\n\nWeights are a plain object: word or phrase to number. Matching is\ncase-insensitive; a multi-word key matches as a phrase. ``count_repeats``\ndecides whether saying \"enterprise\" three times scores three times, which\nis the difference between weighing a claim and weighing a page.","properties":{"count_repeats":{"default":false,"description":"Score every occurrence rather than once per distinct word.","title":"Count Repeats","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.count_repeats","typeLabel":"boolean"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.fallback_value","typeLabel":"any"},"function":{"const":"score_words","default":"score_words","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.source_step","typeLabel":"any"},"weights":{"additionalProperties":{"type":"number","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.weights.additionalProperties","typeLabel":"number"},"description":"Word or phrase to score, e.g. {'enterprise': 3, 'student': -5}.","title":"Weights","type":"object","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43.weights","typeLabel":"Weights · object"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.43","typeLabel":"TableScoreWords · object"},{"type":"object","title":"TableHash","description":"Hash a value: the identifier ad platforms and clean rooms ask for.\n\nUploading an audience means handing over hashed emails, never raw ones,\nand the hash has to be produced the way the platform specifies:\nlowercased and trimmed first, hex digest out. That normalisation is the\npart people get wrong by hand, so it happens here rather than in three\nchained steps.","properties":{"algorithm":{"default":"sha256","enum":["sha256","sha1","md5"],"title":"Algorithm","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.algorithm","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.fallback_value","typeLabel":"any"},"function":{"const":"hash","default":"hash","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.next","typeLabel":"any"},"normalize":{"default":true,"description":"Trim and lowercase before hashing, as ad platforms require.","title":"Normalize","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.normalize","typeLabel":"boolean"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.44","typeLabel":"TableHash · object"},{"type":"object","title":"TableUriEncode","description":"Percent-encode a value so it survives being put in a URL.\n\nEvery search-URL column builds the same thing (a query string with a\ncompany name in it) and every one of them breaks on the first ampersand\nor accent. Encoding belongs one step before the URL is assembled, not in\na regex chain that handles the four characters someone remembered.\n\n``component`` escapes everything reserved, which is what a query value\nneeds; ``full`` leaves ``:/?#`` alone so an entire URL stays usable.\nLists are encoded item by item.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.fallback_value","typeLabel":"any"},"function":{"const":"uri_encode","default":"uri_encode","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.function","typeLabel":"string"},"mode":{"default":"component","enum":["component","full"],"title":"Mode","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.mode","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.45","typeLabel":"TableUriEncode · object"},{"type":"object","title":"TableUrlValid","description":"Whether a value is a usable web address.\n\nThe gate in front of every scrape, screenshot and HTTP column: a row whose\n\"website\" cell holds \"n/a\", \"coming soon\" or a bare company name should\nnever spend a credit finding that out. True means the value parses as a\nhost with a real-looking domain, not that the site answers. A formula\ncannot make a request, and pretending otherwise would be the one dishonest\nthing this function could do.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.fallback_value","typeLabel":"any"},"function":{"const":"url_valid","default":"url_valid","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.next","typeLabel":"any"},"require_scheme":{"default":false,"description":"Demand http:// or https://; off accepts a bare domain.","title":"Require Scheme","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.require_scheme","typeLabel":"boolean"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.46","typeLabel":"TableUrlValid · object"},{"type":"object","title":"TableEmailPermutations","description":"The candidate work-email addresses for a name at a domain.\n\nWhat a verifier needs to be pointed at: nine or so patterns companies\nactually use, in the order they are actually common, so the cheapest\nverification step has a list to work through instead of one guess.\n\nThe piped value is the person's name: \"Ada Lovelace\", or a first name\nwith ``last_name`` supplying the rest. Anything after the first and last\ntoken (middle names, suffixes) is ignored rather than permuted, which is\nwhat keeps the list nine long instead of ninety.","properties":{"domain":{"type":"any","title":"Domain","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.domain","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.fallback_value","typeLabel":"any"},"function":{"const":"email_permutations","default":"email_permutations","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.function","typeLabel":"string"},"last_name":{"type":"any","title":"Last Name","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.last_name","typeLabel":"any"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.47","typeLabel":"TableEmailPermutations · object"},{"type":"object","title":"TableRoundRobin","description":"Assign each row to one of a list of owners, evenly.\n\nLead routing, as a column: the rep, the region, the sending inbox. The\npiped value is the row's IDENTITY (its email, domain or id) and the\nowner is derived from a hash of it rather than from the row's position.\n\nThat is a deliberate departure from a counter-based round robin, and it is\nthe only version that behaves: re-running the column, adding rows above,\nor sorting the view all leave every existing row with the owner it already\nhad. A counter reassigns half the table the first time anything moves,\nwhich in a CRM means the wrong rep gets the follow-up.","properties":{"assignees":{"description":"The owners to distribute across, e.g. rep names or inboxes.","items":{"type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.assignees.items.[INDEX]","typeLabel":"string"},"maxItems":200,"title":"Assignees","type":"array","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.assignees","typeLabel":"string[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.fallback_value","typeLabel":"any"},"function":{"const":"round_robin","default":"round_robin","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48.source_step","typeLabel":"any"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.48","typeLabel":"TableRoundRobin · object"},{"type":"object","title":"TableWeightedRoundRobin","description":"Assign each row to an owner, in proportion to each owner's share.\n\nThe version real teams need: a senior rep takes three leads for every one\na new hire gets, one region absorbs twice the volume of another. Shares are\nwhole numbers and mean exactly what they look like: 3 and 1 is three\nquarters and one quarter.\n\nStable per row for the same reason ``round_robin`` is: the owner comes from\na hash of the row's identity, so nothing already assigned moves when the\ntable grows or the view is sorted. Changing the SHARES does move rows,\nbecause that is what changing them means.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.fallback_value","typeLabel":"any"},"function":{"const":"weighted_round_robin","default":"weighted_round_robin","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.source_step","typeLabel":"any"},"weights":{"additionalProperties":{"type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.weights.additionalProperties","typeLabel":"integer"},"description":"Owner to share, e.g. {'ada': 3, 'grace': 1}.","title":"Weights","type":"object","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49.weights","typeLabel":"Weights · object"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.49","typeLabel":"TableWeightedRoundRobin · object"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.7.next.oneOf.50","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.7.next","typeLabel":"TableCopy · object | TableChangeCase · object | TableTrim · object | TableReplace · object | TableRegexExtract · object | TableRegexReplace · object | TableConcatenate · object | TableRound · object | TableClamp · object | TableDateFormat · object | TableDateExtract · object | TableDateArithmetic · object | TableListFirst · object | TableListLast · object | TableListNth · object | TableListJoin · object | TableListCount · object | TableListPluck · object | TableListUnique · object | TableListSplit · object | TableCoalesce · object | TableIfThenElse · object | TableConditions · object | TableValueMapping · object | TableToString · object | TableToInt · object | TableToFloat · object | TableToBool · object | TableToDate · object | TablePhoneE164 · object | TableUtmParse · object | TableUrlDomain · object | TableCompanyDomain · object | TableGetPath · object | TableFormat · object | TableDateDiff · object | TableKeywords · object | TableListFilter · object | TableListSort · object | TableListIntersect · object | TableTextSimilarity · object | TableDetectLanguage · object | TableScoreWords · object | TableHash · object | TableUriEncode · object | TableUrlValid · object | TableEmailPermutations · object | TableRoundRobin · object | TableWeightedRoundRobin · object | null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.7.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.7.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.7.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.7.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.7.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.7.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.7","typeLabel":"TableArithmetic · object"},{"type":"object","title":"TableRound","description":"Round a numeric value to a precision.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.8.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.8.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"round","default":"round","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.8.function","typeLabel":"string"},"mode":{"default":"round","enum":["round","ceil","floor"],"title":"Mode","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.8.mode","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.8.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.8.next","typeLabel":"null"},"precision":{"default":0,"title":"Precision","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.8.precision","typeLabel":"integer"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.8.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.8.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.8.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.8.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.8.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.8.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.8","typeLabel":"TableRound · object"},{"type":"object","title":"TableClamp","description":"Clamp a numeric value to an inclusive range.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.9.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.9.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"clamp","default":"clamp","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.9.function","typeLabel":"string"},"max_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Max Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Max Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Max Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Max Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Max Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.9.max_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"min_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Min Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Min Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Min Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Min Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Min Value","uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.9.min_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.9.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.9.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.9.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.9.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.9.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.9.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.9.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.9.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.9","typeLabel":"TableClamp · object"},{"type":"object","title":"TableDateFormat","description":"Convert a date between iso/unix/unix_ms representations.","required":["input_format","output_format"],"properties":{"input_format":{"enum":["iso","unix","unix_ms"],"title":"Input Format","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.10.input_format","typeLabel":"enum\u003cstring>"},"output_format":{"enum":["iso","unix","unix_ms"],"title":"Output Format","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.10.output_format","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.10.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.10.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_format","default":"date_format","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.10.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.10.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.10.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.10.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.10.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.10.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.10.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.10.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.10.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.10","typeLabel":"TableDateFormat · object"},{"type":"object","title":"TableDateExtract","description":"Extract a component (year, month, ...) from a date value.","required":["component"],"properties":{"component":{"enum":["year","month","day","hour","minute","second"],"title":"Component","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.11.component","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.11.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.11.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_extract","default":"date_extract","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.11.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.11.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.11.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.11.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.11.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.11.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.11.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.11.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.11.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.11","typeLabel":"TableDateExtract · object"},{"type":"object","title":"TableDateArithmetic","description":"Add or subtract a fixed duration from a date value.","required":["operator","amount","unit"],"properties":{"amount":{"title":"Amount","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.12.amount","typeLabel":"integer"},"operator":{"enum":["add","subtract"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.12.operator","typeLabel":"enum\u003cstring>"},"unit":{"enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.12.unit","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.12.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.12.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_arithmetic","default":"date_arithmetic","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.12.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.12.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.12.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.12.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.12.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.12.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.12.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.12.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.12.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.12","typeLabel":"TableDateArithmetic · object"},{"type":"object","title":"TableListFirst","description":"Take the first element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.13.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.13.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_first","default":"list_first","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.13.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.13.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.13.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.13.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.13.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.13.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.13.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.13.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.13.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.13","typeLabel":"TableListFirst · object"},{"type":"object","title":"TableListLast","description":"Take the last element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.14.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.14.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_last","default":"list_last","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.14.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.14.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.14.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.14.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.14.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.14.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.14.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.14.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.14.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.14","typeLabel":"TableListLast · object"},{"type":"object","title":"TableListNth","description":"Take the element at an index of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.15.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.15.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_nth","default":"list_nth","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.15.function","typeLabel":"string"},"index":{"default":0,"title":"Index","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.15.index","typeLabel":"integer"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.15.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.15.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.15.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.15.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.15.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.15.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.15.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.15.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.15","typeLabel":"TableListNth · object"},{"type":"object","title":"TableListJoin","description":"Join list elements into a string with a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.16.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.16.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_join","default":"list_join","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.16.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.16.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.16.next","typeLabel":"null"},"separator":{"default":", ","title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.16.separator","typeLabel":"string"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.16.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.16.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.16.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.16.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.16.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.16.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.16","typeLabel":"TableListJoin · object"},{"type":"object","title":"TableListCount","description":"Count the elements of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.17.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.17.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_count","default":"list_count","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.17.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.17.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.17.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.17.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.17.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.17.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.17.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.17.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.17.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.17","typeLabel":"TableListCount · object"},{"type":"object","title":"TableListPluck","description":"Pull one field out of every object in a list.\n\nEnrichment payloads routinely carry lists of objects\n(``[{\"value\": \"Payroll\"}, {\"value\": \"HR\"}]``) where the useful thing is\nthe field, not the wrapper. Plucking turns that into ``[\"Payroll\", \"HR\"]``\nso ``list_join`` and friends can work on it; items without the field\nbecome empty and scalar items pass through unchanged.","required":["field"],"properties":{"field":{"minLength":1,"title":"Field","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.18.field","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.18.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.18.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_pluck","default":"list_pluck","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.18.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.18.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.18.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.18.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.18.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.18.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.18.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.18.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.18.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.18","typeLabel":"TableListPluck · object"},{"type":"object","title":"TableListUnique","description":"De-duplicate list elements, keeping first-seen order.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.19.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.19.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_unique","default":"list_unique","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.19.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.19.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.19.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.19.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.19.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.19.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.19.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.19.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.19.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.19","typeLabel":"TableListUnique · object"},{"type":"object","title":"TableListSplit","description":"Split a string value into a list on a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.20.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.20.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_split","default":"list_split","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.20.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.20.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.20.next","typeLabel":"null"},"separator":{"default":",","title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.20.separator","typeLabel":"string"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.20.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.20.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.20.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.20.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.20.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.20.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.20","typeLabel":"TableListSplit · object"},{"type":"object","title":"TableCoalesce","description":"Substitute a default (a literal or another column) when the input is empty.","required":["default_value"],"properties":{"default_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.0.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.1.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Default Value","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Default Value","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Default Value","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Default Value","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Default Value","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value.oneOf.6","typeLabel":"null"}],"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.default_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.21.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.21.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"coalesce","default":"coalesce","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.21.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.21.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.21.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.21.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.21.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.21.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.21.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.21.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.21.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.21","typeLabel":"TableCoalesce · object"},{"type":"object","title":"TableIfThenElse","description":"Pick one of two values based on a comparison.\n\nEach of the three slots takes a literal or a column, so this expresses both\n\"if this column is over that column\" and \"use A, else use B\". Neither of\nthose was reachable while they were constants.","required":["operator"],"properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.operator","typeLabel":"enum\u003cstring>"},"compare_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.compare_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"else_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Else Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Else Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Else Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Else Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Else Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.else_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.22.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"if_then_else","default":"if_then_else","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.22.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.22.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.22.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.22.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.source_step","typeLabel":"integer | null"},"then_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Then Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Then Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Then Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Then Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Then Value","uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.22.then_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.22","typeLabel":"TableIfThenElse · object"},{"type":"object","title":"TableConditions","description":"Fold several comparisons into ONE boolean.\n\nThe engine's only boolean combinator, and the shape a column's\n``run_condition`` is authored in: \"only run where Employees > 50 AND\nCountry is US\". Nothing else here joins predicates: ``if_then_else``\ncompares exactly one pair and returns a value rather than a verdict. So\nwithout this a multi-clause gate could only be reached by chaining steps\nthat pipe a truthy stand-in forward, which no editor could read back.\n\nOne joiner over clauses and, at most one level down, groups of clauses:\n\"A and (B or C)\". That is precisely the row filter's shape, so a view's\nfilter can be saved as a gate and read back as a filter without loss; a\ndeeper tree would be expressible on one side only. Reads its clauses'\noperands directly and ignores the piped input, so it is a leaf rather\nthan a transform.","required":["clauses"],"properties":{"clauses":{"items":{"oneOf":[{"type":"object","title":"GateClause","description":"One comparison inside a :class:`TableConditions` step.\n\n``source`` is an ``Operand`` rather than a bare ``UUID`` deliberately, and\nthe dependency walk is the reason: ``chain_refs._walk_for_column_refs`` collects\n:class:`ColumnRef` instances reflectively wherever they are nested, but a\nbare UUID on a nested model is invisible to it. Spelled as an operand, a\nclause's column lands in ``run_condition_column_ids`` (and therefore in\nthe compute page's read projection) for free. Spelled as a UUID it would\nevaluate against a missing value on every row.\n\n``compare_value`` also admits a list of strings, which is what the two list\noperators take: the terms a filter panel collects as chips arrive exactly as\nthe row filter receives them, and a string holding ``\"a, b, c\"`` is read the\nsame way, so a hand-typed gate is not held to a stricter shape.","required":["operator"],"properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","contains_any_of","not_contains_any_of","starts_with","is_empty","is_not_empty","is_true","is_false"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.operator","typeLabel":"enum\u003cstring>"},"compare_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.5","typeLabel":"boolean"},{"type":"array","items":{"type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.6.items.[INDEX]","typeLabel":"string"},"title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.6","typeLabel":"string[]"},{"type":"null","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value.oneOf.7","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | string[] | null"},"source":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0","typeLabel":"GateClause · object"},{"type":"object","title":"GateGroup","description":"A parenthesised run of clauses, joined among themselves.\n\nHolds clauses and never other groups: one level of nesting is expressible\nand a second is not, by construction rather than by validation. That is the\nrow filter's own rule (``TableRowFilterGroup``), adopted here for the same\nreason and one more: a filter can only be saved as a gate losslessly if the\ngate can say exactly what the filter says (``A and (B or C)``) and no\nmore, so nothing a gate expresses is ever unreadable as a filter.","required":["clauses"],"properties":{"clauses":{"items":{"description":"One comparison inside a :class:`TableConditions` step.\n\n``source`` is an ``Operand`` rather than a bare ``UUID`` deliberately, and\nthe dependency walk is the reason: ``chain_refs._walk_for_column_refs`` collects\n:class:`ColumnRef` instances reflectively wherever they are nested, but a\nbare UUID on a nested model is invisible to it. Spelled as an operand, a\nclause's column lands in ``run_condition_column_ids`` (and therefore in\nthe compute page's read projection) for free. Spelled as a UUID it would\nevaluate against a missing value on every row.\n\n``compare_value`` also admits a list of strings, which is what the two list\noperators take: the terms a filter panel collects as chips arrive exactly as\nthe row filter receives them, and a string holding ``\"a, b, c\"`` is read the\nsame way, so a hand-typed gate is not held to a stricter shape.","properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","contains_any_of","not_contains_any_of","starts_with","is_empty","is_not_empty","is_true","is_false"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"compare_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.5","typeLabel":"boolean"},{"type":"array","items":{"type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.6.items.[INDEX]","typeLabel":"string"},"title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.6","typeLabel":"string[]"},{"type":"null","title":"Compare Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value.oneOf.7","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | string[] | null"},"source":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Source","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"}},"required":["operator"],"title":"GateClause","type":"object","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX]","typeLabel":"GateClause · object"},"maxItems":8,"minItems":1,"title":"Clauses","type":"array","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses","typeLabel":"GateClause · object[]"},"joiner":{"default":"and","enum":["and","or"],"title":"Joiner","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.joiner","typeLabel":"enum\u003cstring>"},"type":{"const":"group","default":"group","title":"Type","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1","typeLabel":"GateGroup · object"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX]","typeLabel":"GateClause · object | GateGroup · object"},"maxItems":8,"minItems":1,"title":"Clauses","type":"array","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.clauses","typeLabel":"(GateClause · object | GateGroup · object)[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.23.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"conditions","default":"conditions","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.function","typeLabel":"string"},"joiner":{"default":"and","enum":["and","or"],"title":"Joiner","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.23.joiner","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.23.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.next","typeLabel":"null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.23.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.23.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.23.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.23","typeLabel":"TableConditions · object"},{"type":"object","title":"TableValueMapping","description":"Map input values through a lookup table.","required":["mapping"],"properties":{"mapping":{"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.1","typeLabel":"integer"},{"type":"number","uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.2","typeLabel":"number"},{"type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.3","typeLabel":"boolean"},{"type":"null","uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping.additionalProperties","typeLabel":"string | integer | number | boolean | null"},"title":"Mapping","type":"object","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.24.mapping","typeLabel":"Mapping · object"},"default_value":{"oneOf":[{"type":"string","title":"Default Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.default_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Default Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.default_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Default Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.default_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Default Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.default_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Default Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.default_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.24.default_value","typeLabel":"string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.24.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.24.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"value_mapping","default":"value_mapping","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.24.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.24.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.24.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.24.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.24.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.24.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.24.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.24.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.24.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.24","typeLabel":"TableValueMapping · object"},{"type":"object","title":"TableToString","description":"Coerce the input to a string.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.25.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.25.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_string","default":"to_string","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.25.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.25.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.25.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.25.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.25.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.25.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.25.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.25.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.25.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.25","typeLabel":"TableToString · object"},{"type":"object","title":"TableToInt","description":"Coerce the input to an integer.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.26.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.26.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_int","default":"to_int","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.26.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.26.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.26.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.26.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.26.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.26.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.26.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.26.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.26.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.26","typeLabel":"TableToInt · object"},{"type":"object","title":"TableToFloat","description":"Coerce the input to a float.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.27.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.27.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_float","default":"to_float","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.27.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.27.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.27.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.27.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.27.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.27.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.27.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.27.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.27.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.27","typeLabel":"TableToFloat · object"},{"type":"object","title":"TableToBool","description":"Coerce the input to a boolean.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.28.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.28.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_bool","default":"to_bool","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.28.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.28.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.28.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.28.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.28.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.28.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.28.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.28.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.28.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.28","typeLabel":"TableToBool · object"},{"type":"object","title":"TableToDate","description":"Coerce the input to a date.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.29.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.29.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_date","default":"to_date","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.29.function","typeLabel":"string"},"input_format":{"default":"auto","enum":["iso","unix","unix_ms","auto"],"title":"Input Format","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.29.input_format","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.29.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.29.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.29.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.29.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.29.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.29.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.29.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.29.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.29","typeLabel":"TableToDate · object"},{"type":"object","title":"TablePhoneE164","description":"Normalize a phone number to E.164 format.","properties":{"default_region":{"default":"US","title":"Default Region","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.30.default_region","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.30.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.30.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"phone_e164","default":"phone_e164","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.30.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.30.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.30.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.30.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.30.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.30.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.30.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.30.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.30.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.30","typeLabel":"TablePhoneE164 · object"},{"type":"object","title":"TableUtmParse","description":"Extract a UTM parameter from a URL value.","required":["parameter"],"properties":{"parameter":{"enum":["source","medium","campaign","term","content"],"title":"Parameter","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.31.parameter","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.31.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.31.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"utm_parse","default":"utm_parse","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.31.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.31.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.31.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.31.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.31.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.31.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.31.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.31.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.31.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.31","typeLabel":"TableUtmParse · object"},{"type":"object","title":"TableUrlDomain","description":"Reduce a URL to its bare registrable-looking host.\n\nA website field arrives as a whole URL (``https://www.acme.com/about``)\nbut the thing that joins, dedupes and enriches is ``acme.com``. Doing it\nwith ``regex_extract`` means every caller hand-writes the same fragile\npattern, so the parse lives here once and uses a real URL parser.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.32.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.32.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"url_domain","default":"url_domain","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.32.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.32.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.32.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.32.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.32.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.32.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.32.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.32.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.32.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.32","typeLabel":"TableUrlDomain · object"},{"type":"object","title":"TableCompanyDomain","description":"Reduce a company's website URL to the company's own registrable domain.\n\nThree differences from ``url_domain``, which stays the generic read (a\ncolumn of LinkedIn profile URLs legitimately reduces to ``linkedin.com``\nthere):\n\nHosts that name a platform rather than the company (LinkedIn and Facebook\npages, link aggregators, review sites, vendor partner directories) come out\nempty. A company whose only listed website is its LinkedIn page has no\nderivable domain, and an empty cell says so; ``linkedin.com`` is worse than\nempty because it joins, dedupes and syncs as if it were real.\n\nThe result is the domain someone REGISTERED, not the bare host: a provider\nthat lists ``careers.acme.com`` is describing ``acme.com``. A subdomain\njoins against nothing and sends an agent somewhere that often does not\nresolve. Page builders that give each customer their own label are the\nexception the Public Suffix List already encodes, so ``acme.wixsite.com``\nsurvives whole rather than collapsing into ``wixsite.com``.\n\n``company_name`` guards the case those two cannot: a directory listing\nreduces to the DIRECTORY owner's domain, so\n``cloudpartners.transform.microsoft.com`` becomes ``microsoft.com``: right\nshape, wrong company, and nothing downstream can tell. Pointed at the\ncolumn naming the employer, the domain is dropped when the two disagree.\nOptional: without it the other two rules still apply.","properties":{"company_name":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Company Name","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Company Name","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Company Name","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Company Name","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Company Name","uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.33.company_name","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.33.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.33.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"company_domain","default":"company_domain","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.33.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.33.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.33.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.33.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.33.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.33.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.33.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.33.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.33.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.33","typeLabel":"TableCompanyDomain · object"},{"type":"object","title":"TableGetPath","description":"Read a dotted path out of an object- or list-valued cell.\n\nObject and list columns were storable but unreadable: nothing in the\ncatalog could reach a field inside one, so an enrichment payload landed in\na cell and stopped there. Segments index dicts by key and lists by integer\nposition: ``employees.count``, ``emails.0.address``.\n\n``output_type`` is declared rather than derived because a JSON path can\nland on anything, and the column's data type has to be known before a\nsingle row is evaluated.","required":["path"],"properties":{"path":{"minLength":1,"title":"Path","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.34.path","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.34.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.34.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"get_path","default":"get_path","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.34.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.34.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.34.next","typeLabel":"null"},"output_type":{"description":"Type of a property. Used while creating/updating/deleting properties.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"title":"PropertyType","type":"string","default":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.34.output_type","typeLabel":"enum\u003cstring>"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.34.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.34.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.34.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.34.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.34.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.34.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.34","typeLabel":"TableGetPath · object"},{"type":"object","title":"TableFormat","description":"Build a string from a positional template and a list of arguments.\n\n``concatenate`` joins whole columns with one separator, which cannot\nproduce \"Enterprise: Acme (12.4%)\". Placeholders are positional only\n(``{0}``, ``{1}``) so the template stays data, not an expression language.\n\nLike ``concatenate`` this takes no ``source_column_id``: its inputs are its\narguments, not the value flowing down the chain.","required":["template"],"properties":{"template":{"minLength":1,"title":"Template","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.35.template","typeLabel":"string"},"arguments":{"items":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.1","typeLabel":"StepRef · object"},{"type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.2","typeLabel":"string"},{"type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.3","typeLabel":"integer"},{"type":"number","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.4","typeLabel":"number"},{"type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.5","typeLabel":"boolean"},{"type":"null","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX]","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"maxItems":10,"title":"Arguments","type":"array","uniqueKey":"definition.oneOf.1.chain.oneOf.35.arguments","typeLabel":"(ColumnRef · object | StepRef · object | string | integer | number | boolean | null)[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.35.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.35.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"format","default":"format","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.35.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.35.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.35.next","typeLabel":"null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.35.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.35.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.35.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.35","typeLabel":"TableFormat · object"},{"type":"object","title":"TableDateDiff","description":"The signed duration between this step's date and another date.\n\n``date_arithmetic`` shifts a date by a CONSTANT amount, so the gap between\ntwo date columns had no expression. Positive when the step's own date is\nthe later of the two.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.36.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.36.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_diff","default":"date_diff","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.36.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.36.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.36.next","typeLabel":"null"},"other":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.36.other.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.36.other","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.36.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.36.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.36.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.36.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.36.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.36.source_step","typeLabel":"integer | null"},"unit":{"default":"days","enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.36.unit","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.36","typeLabel":"TableDateDiff · object"},{"type":"object","title":"TableKeywords","description":"The most frequent meaningful words in a text or list value.\n\nReads a body of text (a scraped page, a bio, a job description) and\nreturns the words that carry its subject, ordered most frequent first.\nStopwords (\"the\", \"and\", \"with\") are dropped: a frequency count that keeps\nthem returns the same five words for every row and says nothing about any\nof them.\n\nDeterministic and pure: no model call, so a keyword column costs nothing\nand re-runs identically.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.37.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.37.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"keywords","default":"keywords","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.37.function","typeLabel":"string"},"limit":{"default":10,"description":"How many keywords to keep, most frequent first.","maximum":100,"minimum":1,"title":"Limit","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.37.limit","typeLabel":"integer"},"min_length":{"default":3,"description":"Shortest word to consider; anything shorter is noise.","maximum":20,"minimum":1,"title":"Min Length","type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.37.min_length","typeLabel":"integer"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.37.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.37.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.37.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.37.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.37.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.37.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.37.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.37.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.37","typeLabel":"TableKeywords · object"},{"type":"object","title":"TableListFilter","description":"Keep only the list items whose field passes a test.\n\nAn enrichment payload lands as a list of objects (every job opening, every\nfunding round, every contact) and the row usually wants a subset of it:\nthe engineering roles, the rounds after 2024, the contacts with an email.\nWithout this the whole list is the only thing a cell can hold.\n\n``field`` is a dotted path INSIDE each item (``location.country``); leaving\nit empty tests the item itself, which is what a list of plain strings\nneeds. ``exists``/``missing`` ignore ``value``: they ask only whether the\nfield is there.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.38.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.38.fallback_value","typeLabel":"string | integer | number | boolean | null"},"field":{"default":"","description":"Dotted path inside each item; empty tests the item itself.","maxLength":200,"title":"Field","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.38.field","typeLabel":"string"},"function":{"const":"list_filter","default":"list_filter","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.38.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.38.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.38.next","typeLabel":"null"},"operator":{"default":"eq","enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","exists","missing"],"title":"Operator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.38.operator","typeLabel":"enum\u003cstring>"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.38.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.38.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.38.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.38.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.38.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.38.source_step","typeLabel":"integer | null"},"value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Value","uniqueKey":"definition.oneOf.1.chain.oneOf.38.value.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.38.value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.38","typeLabel":"TableListFilter · object"},{"type":"object","title":"TableListSort","description":"Order a list, ascending or descending.\n\n``list_unique`` and ``list_join`` both preserve whatever order the source\nhappened to arrive in, which is fine until the cell is meant to be READ:\na top-3 of anything, a chronological history, an alphabetised tag list.\n\n``field`` names the dotted path to sort objects BY; empty sorts the items\nthemselves. Values that cannot be compared with each other (a number next\nto a string) are ordered by type first, so the sort is total instead of\nraising on the row where the data is mixed.","properties":{"direction":{"default":"asc","enum":["asc","desc"],"title":"Direction","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.39.direction","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.39.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.39.fallback_value","typeLabel":"string | integer | number | boolean | null"},"field":{"default":"","description":"Dotted path inside each item to sort by; empty sorts the items.","maxLength":200,"title":"Field","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.39.field","typeLabel":"string"},"function":{"const":"list_sort","default":"list_sort","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.39.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.39.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.39.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.39.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.39.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.39.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.39.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.39.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.39.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.39","typeLabel":"TableListSort · object"},{"type":"object","title":"TableListIntersect","description":"The values this list shares with another: the overlap, in the first list's order.\n\nThe scoring question every ICP fit column asks: which of the buyer's tags,\ntechnologies or keywords are ALSO on my target list. Doing it by hand meant\none ``if_then_else`` per tag.\n\n``other`` is a column holding the second list, or literal text split on\n``separator``. Matching ignores case and surrounding spaces, because the\ntwo lists come from different sources and \"Shopify \" never equals \"shopify\"\nwhen it matters most.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.40.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.40.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_intersect","default":"list_intersect","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.40.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.40.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.40.next","typeLabel":"null"},"other":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.40.other.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.40.other","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"separator":{"default":",","description":"Splits ``other`` when it is text rather than a list.","maxLength":10,"title":"Separator","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.40.separator","typeLabel":"string"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.40.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.40.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.40.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.40.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.40.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.40.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.40","typeLabel":"TableListIntersect · object"},{"type":"object","title":"TableTextSimilarity","description":"How alike two pieces of text are, as a percentage.\n\nThe dedupe and match question: is \"Acme Inc.\" the same company as \"Acme,\nInc\"? An exact comparison says no and a human says obviously yes, so the\nhonest answer is a number the row can threshold on.\n\nCase and surrounding whitespace never count: they are formatting, not\ndifference. 100 means identical after that normalisation, 0 means nothing\nin common.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.41.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.41.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"text_similarity","default":"text_similarity","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.41.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.41.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.41.next","typeLabel":"null"},"other":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Other","uniqueKey":"definition.oneOf.1.chain.oneOf.41.other.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.41.other","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.41.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.41.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.41.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.41.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.41.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.41.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.41","typeLabel":"TableTextSimilarity · object"},{"type":"object","title":"TableDetectLanguage","description":"The language a piece of text is written in, as an ISO 639-1 code.\n\nRoutes a row before anything expensive touches it: which sequence to\nenrol a lead into, which reviewer sees a scraped page, whether to\ntranslate at all.\n\nScript comes first (Cyrillic, Greek, Hebrew, Arabic, Han, kana and\nhangul each answer on their own) and Latin text is decided by the\nfunction words it uses. That is a heuristic, not a model: it is\ndeterministic, free, and honest about not knowing, returning null when\nthe text is too short or matches nothing.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.42.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.42.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"detect_language","default":"detect_language","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.42.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.42.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.42.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.42.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.42.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.42.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.42.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.42.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.42.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.42","typeLabel":"TableDetectLanguage · object"},{"type":"object","title":"TableScoreWords","description":"Score text by the weighted words it contains.\n\nThe rules half of lead scoring, without a model: \"enterprise\" is worth 3,\n\"student\" is worth -5, and the cell adds up whatever the row's text,\ntags or tech stack actually say. Expressing the same thing with\n``if_then_else`` needs one step per word and runs out of chain depth at ten.\n\nWeights are a plain object: word or phrase to number. Matching is\ncase-insensitive; a multi-word key matches as a phrase. ``count_repeats``\ndecides whether saying \"enterprise\" three times scores three times, which\nis the difference between weighing a claim and weighing a page.","properties":{"count_repeats":{"default":false,"description":"Score every occurrence rather than once per distinct word.","title":"Count Repeats","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.43.count_repeats","typeLabel":"boolean"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.43.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.43.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"score_words","default":"score_words","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.43.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.43.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.43.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.43.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.43.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.43.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.43.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.43.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.43.source_step","typeLabel":"integer | null"},"weights":{"additionalProperties":{"type":"number","uniqueKey":"definition.oneOf.1.chain.oneOf.43.weights.additionalProperties","typeLabel":"number"},"description":"Word or phrase to score, e.g. {'enterprise': 3, 'student': -5}.","title":"Weights","type":"object","uniqueKey":"definition.oneOf.1.chain.oneOf.43.weights","typeLabel":"Weights · object"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.43","typeLabel":"TableScoreWords · object"},{"type":"object","title":"TableHash","description":"Hash a value: the identifier ad platforms and clean rooms ask for.\n\nUploading an audience means handing over hashed emails, never raw ones,\nand the hash has to be produced the way the platform specifies:\nlowercased and trimmed first, hex digest out. That normalisation is the\npart people get wrong by hand, so it happens here rather than in three\nchained steps.","properties":{"algorithm":{"default":"sha256","enum":["sha256","sha1","md5"],"title":"Algorithm","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.44.algorithm","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.44.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.44.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"hash","default":"hash","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.44.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.44.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.44.next","typeLabel":"null"},"normalize":{"default":true,"description":"Trim and lowercase before hashing, as ad platforms require.","title":"Normalize","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.44.normalize","typeLabel":"boolean"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.44.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.44.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.44.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.44.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.44.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.44.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.44","typeLabel":"TableHash · object"},{"type":"object","title":"TableUriEncode","description":"Percent-encode a value so it survives being put in a URL.\n\nEvery search-URL column builds the same thing (a query string with a\ncompany name in it) and every one of them breaks on the first ampersand\nor accent. Encoding belongs one step before the URL is assembled, not in\na regex chain that handles the four characters someone remembered.\n\n``component`` escapes everything reserved, which is what a query value\nneeds; ``full`` leaves ``:/?#`` alone so an entire URL stays usable.\nLists are encoded item by item.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.45.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.45.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"uri_encode","default":"uri_encode","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.45.function","typeLabel":"string"},"mode":{"default":"component","enum":["component","full"],"title":"Mode","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.45.mode","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.45.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.45.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.45.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.45.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.45.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.45.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.45.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.45.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.45","typeLabel":"TableUriEncode · object"},{"type":"object","title":"TableUrlValid","description":"Whether a value is a usable web address.\n\nThe gate in front of every scrape, screenshot and HTTP column: a row whose\n\"website\" cell holds \"n/a\", \"coming soon\" or a bare company name should\nnever spend a credit finding that out. True means the value parses as a\nhost with a real-looking domain, not that the site answers. A formula\ncannot make a request, and pretending otherwise would be the one dishonest\nthing this function could do.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.46.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.46.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"url_valid","default":"url_valid","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.46.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.46.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.46.next","typeLabel":"null"},"require_scheme":{"default":false,"description":"Demand http:// or https://; off accepts a bare domain.","title":"Require Scheme","type":"boolean","uniqueKey":"definition.oneOf.1.chain.oneOf.46.require_scheme","typeLabel":"boolean"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.46.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.46.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.46.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.46.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.46.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.46.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.46","typeLabel":"TableUrlValid · object"},{"type":"object","title":"TableEmailPermutations","description":"The candidate work-email addresses for a name at a domain.\n\nWhat a verifier needs to be pointed at: nine or so patterns companies\nactually use, in the order they are actually common, so the cheapest\nverification step has a list to work through instead of one guess.\n\nThe piped value is the person's name: \"Ada Lovelace\", or a first name\nwith ``last_name`` supplying the rest. Anything after the first and last\ntoken (middle names, suffixes) is ignored rather than permuted, which is\nwhat keeps the list nine long instead of ninety.","properties":{"domain":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Domain","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Domain","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Domain","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Domain","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Domain","uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.47.domain","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.47.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.47.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"email_permutations","default":"email_permutations","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.47.function","typeLabel":"string"},"last_name":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Last Name","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Last Name","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Last Name","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Last Name","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Last Name","uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name.oneOf.6","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.47.last_name","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.47.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.47.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.47.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.47.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.47.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.47.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.47.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.47.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.47","typeLabel":"TableEmailPermutations · object"},{"type":"object","title":"TableRoundRobin","description":"Assign each row to one of a list of owners, evenly.\n\nLead routing, as a column: the rep, the region, the sending inbox. The\npiped value is the row's IDENTITY (its email, domain or id) and the\nowner is derived from a hash of it rather than from the row's position.\n\nThat is a deliberate departure from a counter-based round robin, and it is\nthe only version that behaves: re-running the column, adding rows above,\nor sorting the view all leave every existing row with the owner it already\nhad. A counter reassigns half the table the first time anything moves,\nwhich in a CRM means the wrong rep gets the follow-up.","properties":{"assignees":{"description":"The owners to distribute across, e.g. rep names or inboxes.","items":{"type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.48.assignees.items.[INDEX]","typeLabel":"string"},"maxItems":200,"title":"Assignees","type":"array","uniqueKey":"definition.oneOf.1.chain.oneOf.48.assignees","typeLabel":"string[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.48.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.48.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"round_robin","default":"round_robin","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.48.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.48.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.48.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.48.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.48.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.48.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.48.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.48.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.48.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.48","typeLabel":"TableRoundRobin · object"},{"type":"object","title":"TableWeightedRoundRobin","description":"Assign each row to an owner, in proportion to each owner's share.\n\nThe version real teams need: a senior rep takes three leads for every one\na new hire gets, one region absorbs twice the volume of another. Shares are\nwhole numbers and mean exactly what they look like: 3 and 1 is three\nquarters and one quarter.\n\nStable per row for the same reason ``round_robin`` is: the owner comes from\na hash of the row's identity, so nothing already assigned moves when the\ntable grows or the view is sorted. Changing the SHARES does move rows,\nbecause that is what changing them means.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"definition.oneOf.1.chain.oneOf.49.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"definition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.49.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"weighted_round_robin","default":"weighted_round_robin","title":"Function","type":"string","uniqueKey":"definition.oneOf.1.chain.oneOf.49.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"definition.oneOf.1.chain.oneOf.49.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.49.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"definition.oneOf.1.chain.oneOf.49.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"definition.oneOf.1.chain.oneOf.49.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.49.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"definition.oneOf.1.chain.oneOf.49.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"definition.oneOf.1.chain.oneOf.49.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.1.chain.oneOf.49.source_step","typeLabel":"integer | null"},"weights":{"additionalProperties":{"type":"integer","uniqueKey":"definition.oneOf.1.chain.oneOf.49.weights.additionalProperties","typeLabel":"integer"},"description":"Owner to share, e.g. {'ada': 3, 'grace': 1}.","title":"Weights","type":"object","uniqueKey":"definition.oneOf.1.chain.oneOf.49.weights","typeLabel":"Weights · object"}},"isRequired":true,"uniqueKey":"definition.oneOf.1.chain.oneOf.49","typeLabel":"TableWeightedRoundRobin · object"}],"isRequired":true,"uniqueKey":"definition.oneOf.1.chain","typeLabel":"TableCopy · object | TableChangeCase · object | TableTrim · object | TableReplace · object | TableRegexExtract · object | TableRegexReplace · object | TableConcatenate · object | TableArithmetic · object | TableRound · object | TableClamp · object | TableDateFormat · object | TableDateExtract · object | TableDateArithmetic · object | TableListFirst · object | TableListLast · object | TableListNth · object | TableListJoin · object | TableListCount · object | TableListPluck · object | TableListUnique · object | TableListSplit · object | TableCoalesce · object | TableIfThenElse · object | TableConditions · object | TableValueMapping · object | TableToString · object | TableToInt · object | TableToFloat · object | TableToBool · object | TableToDate · object | TablePhoneE164 · object | TableUtmParse · object | TableUrlDomain · object | TableCompanyDomain · object | TableGetPath · object | TableFormat · object | TableDateDiff · object | TableKeywords · object | TableListFilter · object | TableListSort · object | TableListIntersect · object | TableTextSimilarity · object | TableDetectLanguage · object | TableScoreWords · object | TableHash · object | TableUriEncode · object | TableUrlValid · object | TableEmailPermutations · object | TableRoundRobin · object | TableWeightedRoundRobin · object"},"kind":{"const":"formula","default":"formula","title":"Kind","type":"string","uniqueKey":"definition.oneOf.1.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.1","typeLabel":"FormulaColumnDefinition · object"},{"type":"object","title":"EnrichmentColumnDefinition","description":"Definition of an enrichment column: an external action run once per row.\n\nThe action is named by its registry key; everything the action needs to run\n(its prompt, model, output shape, settings) grows on this member rather\nthan on the column row, so the definition-version snapshot covers all of\nit.","required":["action_key"],"properties":{"action_key":{"description":"The enrichment action's registry key; validated against the catalog.","maxLength":100,"minLength":1,"title":"Action Key","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_key","typeLabel":"string"},"action_settings":{"oneOf":[{"type":"object","title":"UseAISettings","description":"Settings for the Use AI action, in both of its modes.\n\nONE action covers both \"answer from what the table already knows\" and\n\"go and find out\", because from the author's seat they are the same\nrequest with a different reach, and splitting them made people pick the\nwrong one. ``web_research`` is that reach, and it is what selects the\nmode: off runs a single completion over the row, on runs the bounded\nresearch agent (search, map, scrape, cite).\n\nIt defaults OFF. The cheap mode is the common one, a web run costs\nseveral times more per row, and a toggle that silently spends is the\nwrong default even when research is the better answer.\n\n``context`` is \"Provide context for task\"; ``examples`` are the few-shot\npairs that show the model what a good response looks like. Both are\nhard-capped so a pathological configuration cannot blow up the request or\nthe cost.\n\n``use_row_context`` defaults ON, and a column stored before the field\nexisted decodes to that same default (deliberately), so an author who\nnever thought to reference a column still gets a model that can see the\nrow. Turning it off narrows the run back to what the prompt itself names.\n\n``context_column_ids`` narrows ``use_row_context`` from the whole row to\na chosen subset: None (the default, and what every column stored before\nthe field existed decodes to) keeps every column (\"Entire row\" in the\neditor) while a list holds exactly the columns the author picked. It\nmeans nothing while ``use_row_context`` is off.\n\nThe remaining fields only bite in web mode. They are held on this one\nmodel rather than a nested \"agent settings\" object so that flipping\n``web_research`` never migrates a stored payload: a column that has been\nboth ways keeps whatever research scope it was last given.","properties":{"context":{"oneOf":[{"type":"string","title":"Context","maxLength":4000,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context.oneOf.0","typeLabel":"string"},{"type":"null","title":"Context","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context","typeLabel":"string | null"},"context_column_ids":{"oneOf":[{"type":"array","items":{"format":"uuid","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context_column_ids.oneOf.0.items.[INDEX]","typeLabel":"string\u003cuuid>"},"title":"Context Column Ids","description":"The columns folded in when use_row_context is on; None means every column (\"Entire row\"). Stored by identity so renames are safe, but deliberately NOT a dependency: a listed column that is later deleted simply stops appearing in the context rather than blocking the delete or joining the recompute graph.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context_column_ids.oneOf.0","typeLabel":"string\u003cuuid>[]"},{"type":"null","title":"Context Column Ids","description":"The columns folded in when use_row_context is on; None means every column (\"Entire row\"). Stored by identity so renames are safe, but deliberately NOT a dependency: a listed column that is later deleted simply stops appearing in the context rather than blocking the delete or joining the recompute graph.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context_column_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.context_column_ids","typeLabel":"string\u003cuuid>[] | null"},"examples":{"items":{"description":"One few-shot example: a sample input and the response it should get.","properties":{"input":{"maxLength":2000,"minLength":1,"title":"Input","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.examples.items.[INDEX].input","typeLabel":"string"},"output":{"maxLength":2000,"minLength":1,"title":"Output","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.examples.items.[INDEX].output","typeLabel":"string"}},"required":["input","output"],"title":"UseAIExample","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.examples.items.[INDEX]","typeLabel":"UseAIExample · object"},"maxItems":5,"title":"Examples","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.examples","typeLabel":"UseAIExample · object[]"},"find_work_email":{"default":false,"description":"Whether the model may buy a work email from the product's data suppliers while it researches, paid from the run's research budget. Off by default. For a column linked to a saved agent, the agent's own switch decides and this one is ignored.","title":"Find Work Email","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.find_work_email","typeLabel":"boolean"},"kind":{"const":"use_ai","default":"use_ai","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.kind","typeLabel":"string"},"read_linkedin_profile":{"default":false,"description":"Whether the model may read a LinkedIn profile through the product's data suppliers while it researches, paid from the run's research budget. Off by default; ignored on a column linked to a saved agent.","title":"Read Linkedin Profile","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.read_linkedin_profile","typeLabel":"boolean"},"saved_agent_id":{"oneOf":[{"type":"string","title":"Saved Agent Id","description":"Web research only: an org-level saved agent whose settings (effort, context) replace this column's own.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.saved_agent_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Saved Agent Id","description":"Web research only: an org-level saved agent whose settings (effort, context) replace this column's own.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.saved_agent_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.saved_agent_id","typeLabel":"string\u003cuuid> | null"},"starting_url_column_id":{"oneOf":[{"type":"string","title":"Starting Url Column Id","description":"Web research only: a column whose per-row value seeds the research. Stored by identity, so renames are safe.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.starting_url_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Starting Url Column Id","description":"Web research only: a column whose per-row value seeds the research. Stored by identity, so renames are safe.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.starting_url_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.starting_url_column_id","typeLabel":"string\u003cuuid> | null"},"stay_on_domain":{"default":false,"description":"Web research only: confine every site-targeting tool to the starting URL's domain.","title":"Stay On Domain","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.stay_on_domain","typeLabel":"boolean"},"use_business_context":{"default":false,"description":"Whether the org's AI business context is folded into the run's standing context. Off by default and folded at run time: the org edits its context in one place and every column that opted in follows, with no stored copy to go stale.","title":"Use Business Context","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.use_business_context","typeLabel":"boolean"},"use_row_context":{"default":true,"description":"Whether the rest of this row's columns are folded in as context, on top of whatever the prompt itself references.","title":"Use Row Context","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.use_row_context","typeLabel":"boolean"},"web_research":{"default":false,"description":"Whether the model may research the web. On turns this column into a bounded research agent that searches, reads pages and cites its sources; off answers from the row and the model's own knowledge. Off by default: a web run costs several times more per row.","title":"Web Research","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.0.web_research","typeLabel":"boolean"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.0","typeLabel":"UseAISettings · object"},{"type":"object","title":"BuiltinAgentSettings","description":"Settings for a built-in agent column: which columns supply which facts.\n\nThe same contract an :class:`EnrichmentSettings` column carries, and for\nthe same reason. A built-in agent is configured entirely server-side\n(prompt, model, reach and output shape all live on the agent row), so the\nONE thing a column decides is where each declared input comes from.\n\nThose bound cells are also all the agent sees. Its predecessor folded in\nthe whole row (optionally narrowed to a chosen subset), which made the\nsame agent read a different question on every table, cost the most on the\nwidest ones, and quietly answer from whatever cell happened to sit beside\nthe one it wanted. Now an input reaches the prompt only by being declared\nand bound, keyed by the agent's CANONICAL name (``domain``,\n``full_name``), so renaming a column changes nothing here.\n\nA stored binding whose declaration is gone is ignored rather than\nresurrecting a fact nobody asked for.","properties":{"input_bindings":{"additionalProperties":{"format":"uuid","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.1.input_bindings.additionalProperties","typeLabel":"string\u003cuuid>"},"description":"Declared input name → the column that supplies it.","maxProperties":8,"title":"Input Bindings","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.1.input_bindings","typeLabel":"Input Bindings · object"},"kind":{"const":"builtin","default":"builtin","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.1","typeLabel":"BuiltinAgentSettings · object"},{"type":"object","title":"AgentSettings","description":"Settings for the Agent web-research action.\n\n``starting_url_column_id`` binds a column whose per-row value seeds the\nresearch (stored by identity, like prompt references, so renames are safe\nand deletes are detectable). ``stay_on_domain`` confines every tool that\ntargets a site to that URL's domain and therefore requires a starting URL\nto scope to.\n\nThe two tool toggles are split by what a tool RETURNS, not by how many\ncalls it makes: ``allow_search`` governs discovery (web search and site\nmapping, which return URLs and snippets), ``allow_fetch`` governs content\nreads (scraping one page and crawling several).\n\n``use_row_context`` defaults ON, and a column stored before the field\nexisted decodes to that same default: an investigation whose subject is\nnamed in a column the prompt never mentions is the ordinary case, not the\nexception.\n\n``context`` is deliberately uncapped here. This shape is the run-time\nhandoff into the research loop, and by the time it is built the context\nis ASSEMBLED text: the column's own standing context with the org's\nbusiness context folded onto it. The length cap belongs on what an author\ntypes, and it lives there: on ``UseAISettings.context``, checked when the\ncolumn is saved. Re-checking the assembled string here failed every cell of\na column that was perfectly valid when saved, purely because the org had\nwritten a thorough business context.","properties":{"allow_fetch":{"default":true,"description":"Tool toggle: whether the agent may scrape pages and crawl sites.","title":"Allow Fetch","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.allow_fetch","typeLabel":"boolean"},"allow_search":{"default":true,"description":"Tool toggle: whether the agent may search the web and map sites.","title":"Allow Search","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.allow_search","typeLabel":"boolean"},"context":{"oneOf":[{"type":"string","title":"Context","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.context.oneOf.0","typeLabel":"string"},{"type":"null","title":"Context","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.context.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.context","typeLabel":"string | null"},"effort":{"description":"How hard the Agent works on each row.\n\nNamed levels rather than raw step counts: the level is the user-facing\ncontract, and what each level buys (step and page budgets) is a product\ndecision the loop maps internally. Re-tuning budgets never invalidates\nstored columns.","enum":["low","standard","high"],"title":"AgentEffortLevel","type":"string","default":"standard","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.effort","typeLabel":"enum\u003cstring>"},"kind":{"const":"agent","default":"agent","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.kind","typeLabel":"string"},"saved_agent_id":{"oneOf":[{"type":"string","title":"Saved Agent Id","description":"An org-level saved agent this column's settings derive from.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.saved_agent_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Saved Agent Id","description":"An org-level saved agent this column's settings derive from.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.saved_agent_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.saved_agent_id","typeLabel":"string\u003cuuid> | null"},"starting_url_column_id":{"oneOf":[{"type":"string","title":"Starting Url Column Id","description":"A column whose per-row value is the research's starting URL.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.starting_url_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Starting Url Column Id","description":"A column whose per-row value is the research's starting URL.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.starting_url_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.starting_url_column_id","typeLabel":"string\u003cuuid> | null"},"stay_on_domain":{"default":false,"description":"Whether site-targeting tools are confined to the starting URL's domain.","title":"Stay On Domain","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.stay_on_domain","typeLabel":"boolean"},"use_row_context":{"default":true,"description":"Whether the rest of this row's columns are folded in as context, on top of whatever the prompt itself references.","title":"Use Row Context","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.2.use_row_context","typeLabel":"boolean"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.2","typeLabel":"AgentSettings · object"},{"type":"object","title":"DevEchoSettings","description":"Settings for the development-only echo action.\n\nThe delay is configurable so pipeline tests can run fast; the action's\ndisplay name promises one second, which is the default.","properties":{"delay_ms":{"default":1000,"maximum":60000,"minimum":0,"title":"Delay Ms","type":"integer","uniqueKey":"definition.oneOf.2.action_settings.oneOf.3.delay_ms","typeLabel":"integer"},"kind":{"const":"dev_echo","default":"dev_echo","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.3.kind","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.3","typeLabel":"DevEchoSettings · object"},{"type":"object","title":"DevFlakySettings","description":"Settings for the development-only intermittent-failure action.\n\nFailures are deterministic PER ROW: whether a given row fails is a pure\nfunction of the seed and the row's identity, so a failing row fails\nidentically on every run, which is what makes retry policy, partial\nfailure and the errored re-run scope testable at all. Changing the seed\nchanges WHICH rows fail.","properties":{"error_class":{"description":"The error class every failing row reports.","enum":["timeout","rate_limited","quota_exhausted","provider_error","network","schema_violation","refused","invalid_input","no_data","enrichment_failed","sources_unavailable","unexpected"],"title":"EnrichmentErrorClass","type":"string","default":"provider_error","uniqueKey":"definition.oneOf.2.action_settings.oneOf.4.error_class","typeLabel":"enum\u003cstring>"},"failure_rate":{"default":0.5,"description":"The fraction of rows that fail.","maximum":1,"minimum":0,"title":"Failure Rate","type":"number","uniqueKey":"definition.oneOf.2.action_settings.oneOf.4.failure_rate","typeLabel":"number"},"kind":{"const":"dev_flaky","default":"dev_flaky","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.4.kind","typeLabel":"string"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"Varies which rows fail; None derives purely from row identity.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.4.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"Varies which rows fail; None derives purely from row identity.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.4.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.4.seed","typeLabel":"integer | null"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.4","typeLabel":"DevFlakySettings · object"},{"type":"object","title":"EnrichmentSettings","description":"Settings for a curated enrichment: which columns supply which facts.\n\nThe whole configuration of an enrichment column, and deliberately tiny.\nIts predecessor stored the entire fallback chain here: an ordered list of\nvendor operations, each with its own input mapping, assembled by the\ncustomer in the editor. That made the supply chain part of the customer's\ndata: visible in the API, editable by hand, and frozen at the moment they\nsaved it, so improving a chain meant migrating every column that had\ncopied it.\n\nNow the chain lives in the catalog and is resolved per run. A column\nstores only the outcome it wants (the action key) and where its inputs\ncome from, keyed by CANONICAL name (``full_name``, ``company_domain``),\nnever by whatever the vendor at the front of today's chain happens to call\nthem. Adding a supplier, reordering the chain or renaming a vendor's field\nchanges nothing here.","properties":{"input_bindings":{"additionalProperties":{"format":"uuid","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.5.input_bindings.additionalProperties","typeLabel":"string\u003cuuid>"},"description":"Canonical input name → the column that supplies it.","maxProperties":10,"title":"Input Bindings","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.5.input_bindings","typeLabel":"Input Bindings · object"},"kind":{"const":"enrichment","default":"enrichment","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.5.kind","typeLabel":"string"},"second_check":{"default":false,"description":"Whether an answer the enrichment marks as worth a second look (Verify email's catch-all) goes on to the next supplier instead of ending the lookup. Kept when no later supplier gives a definite answer. A second check that answers is charged as one more lookup. Only offered where the enrichment has such answers.","title":"Second Check","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.5.second_check","typeLabel":"boolean"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.5","typeLabel":"EnrichmentSettings · object"},{"type":"object","title":"ProviderSettings","description":"Settings for an integration-provider enrichment action.\n\nA provider action's inputs are STRUCTURED (named fields the provider's\noperation declares: full name, company domain, …), not a prompt. Each\nbinding maps one declared input name to the column whose per-row value\nfeeds it. Required inputs without a binding block the save; bound-but-empty\nrequired inputs skip the row at run time, before any provider call.","required":["input_bindings"],"properties":{"input_bindings":{"additionalProperties":{"format":"uuid","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.6.input_bindings.additionalProperties","typeLabel":"string\u003cuuid>"},"description":"Declared operation input name → source column id.","maxProperties":10,"minProperties":1,"title":"Input Bindings","type":"object","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.6.input_bindings","typeLabel":"Input Bindings · object"},"kind":{"const":"provider","default":"provider","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.6.kind","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.6","typeLabel":"ProviderSettings · object"},{"type":"object","title":"HttpApiSettings","description":"Settings for the HTTP API action: one request per row, described here.\n\nThe URL is the column's prompt, so it can carry ``{{column}}`` tokens the\nsame way every other prompt does and gets the same picker. Everything a\nURL cannot express lives here, and the body and header values carry\ncolumn references of the same kind (see ``HttpRequestTemplate``).\n\n``json_path`` is what turns a response into a CELL: an API answers with a\ndocument, and the column usually wants one value out of it. Dotted, with\ninteger segments indexing arrays: ``data.0.email``. Left empty the whole\ndecoded body lands in the cell.","properties":{"body":{"description":"Request body for POST/PUT/PATCH: text and column references, or a string in which {{Column name}} stands for that column's value in the row. Each value is escaped for the body's format, read off the Content-Type header (JSON, form or XML), or JSON when there is none and the body is JSON: inside a JSON string it is escaped text; outside one it is a single JSON value of the cell's own type.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.body","typeLabel":"EnrichmentPromptTemplate · object"},"headers":{"additionalProperties":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties","typeLabel":"EnrichmentPromptTemplate · object"},"description":"Sent with every row's request, e.g. an Authorization header. Each value is a template like the body: text and column references, or a string in which {{Column name}} stands for that column's value in the row.","maxProperties":20,"title":"Headers","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.headers","typeLabel":"Headers · object"},"json_path":{"default":"","description":"Dotted path to the value to keep, e.g. data.0.email.","maxLength":200,"title":"Json Path","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.json_path","typeLabel":"string"},"kind":{"const":"http_api","default":"http_api","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.kind","typeLabel":"string"},"method":{"default":"GET","enum":["GET","POST","PUT","PATCH","DELETE"],"title":"Method","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.7.method","typeLabel":"enum\u003cstring>"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.7","typeLabel":"HttpApiSettings · object"},{"type":"object","title":"HttpApiJwtSettings","description":"Settings for the JWT-authenticated HTTP API action.\n\nSame request as :class:`HttpApiSettings` with the one thing that cannot be\nhand-written in a header: a JWT minted per run from the caller's own\nsecret, so the token in flight is short-lived instead of a permanent\ncredential pasted into a header field.","properties":{"body":{"description":"Request body for POST/PUT/PATCH: text and column references, or a string in which {{Column name}} stands for that column's value in the row. Each value is escaped for the body's format, read off the Content-Type header (JSON, form or XML), or JSON when there is none and the body is JSON: inside a JSON string it is escaped text; outside one it is a single JSON value of the cell's own type.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.body","typeLabel":"EnrichmentPromptTemplate · object"},"headers":{"additionalProperties":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties","typeLabel":"EnrichmentPromptTemplate · object"},"description":"Sent with every row's request, e.g. an Authorization header. Each value is a template like the body: text and column references, or a string in which {{Column name}} stands for that column's value in the row.","maxProperties":20,"title":"Headers","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.headers","typeLabel":"Headers · object"},"json_path":{"default":"","maxLength":200,"title":"Json Path","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.json_path","typeLabel":"string"},"jwt_claims":{"additionalProperties":{"type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.jwt_claims.additionalProperties","typeLabel":"string"},"description":"Claims to sign, e.g. {'iss': 'oneprofile'}.","maxProperties":20,"title":"Jwt Claims","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.jwt_claims","typeLabel":"Jwt Claims · object"},"jwt_header":{"default":"Authorization","description":"Which header carries the token.","maxLength":100,"title":"Jwt Header","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.jwt_header","typeLabel":"string"},"jwt_prefix":{"default":"Bearer ","description":"Prefix in front of the token, e.g. 'Bearer '.","maxLength":20,"title":"Jwt Prefix","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.jwt_prefix","typeLabel":"string"},"jwt_secret":{"default":"","description":"The shared secret the token is signed with (HS256).","maxLength":1000,"title":"Jwt Secret","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.jwt_secret","typeLabel":"string"},"jwt_ttl_seconds":{"default":300,"description":"How long each minted token stays valid.","maximum":3600,"minimum":30,"title":"Jwt Ttl Seconds","type":"integer","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.jwt_ttl_seconds","typeLabel":"integer"},"kind":{"const":"http_api_jwt","default":"http_api_jwt","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.kind","typeLabel":"string"},"method":{"default":"GET","enum":["GET","POST","PUT","PATCH","DELETE"],"title":"Method","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.8.method","typeLabel":"enum\u003cstring>"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.8","typeLabel":"HttpApiJwtSettings · object"},{"type":"object","title":"ReferenceSettings","description":"Settings for a reference column: which other table, matched how, bringing back what.\n\nEach row points at ONE row of ``table_id``: the first key pair whose\ncanonical value (``table_types_service.reference_key``) equals some row's\nvalue there wins, and among several such rows the first in that table's\norder. Columns are held by id, so a rename on either side changes nothing.\nEvery field has a column of its own on the reference's table, and the\ncell shows the matched row by the other table's name column; neither is\na setting.","properties":{"fields":{"description":"The values brought back from the matched row, each one a column.","items":{"description":"One value a reference brings back from the row it points at.\n\nNamed and typed when it is picked and never renamed afterwards: a rename in\nthe other table would otherwise re-key every snapshot and break every\nprompt, formula and promoted column that reads the field by its name. The\ntarget column's id says which value fills it, and its type is that\ncolumn's own, whole records included.","properties":{"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX].name","typeLabel":"string"},"target_column_id":{"description":"The column of the other table this field reads.","format":"uuid","title":"Target Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX].target_column_id","typeLabel":"string\u003cuuid>"},"field_type":{"description":"The type a user picks for a table column.\n\nOrdered as the picker shows them, which is also the order the groups below\nrun in: text-ish, then numeric, then choice, then structured.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","default":"text","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX].field_type","typeLabel":"enum\u003cstring>"}},"required":["target_column_id","name"],"title":"ReferenceField","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX]","typeLabel":"ReferenceField · object"},"maxItems":50,"title":"Fields","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.fields","typeLabel":"ReferenceField · object[]"},"keys":{"description":"The pairs to match on, tried in order.","items":{"description":"One pair a reference matches on: a column of this table against a column of the other.","properties":{"source_column_id":{"description":"The column of THIS table whose value is matched.","format":"uuid","title":"Source Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.keys.items.[INDEX].source_column_id","typeLabel":"string\u003cuuid>"},"target_column_id":{"description":"The column of the other table it must equal.","format":"uuid","title":"Target Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.keys.items.[INDEX].target_column_id","typeLabel":"string\u003cuuid>"}},"required":["source_column_id","target_column_id"],"title":"ReferenceKey","type":"object","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.keys.items.[INDEX]","typeLabel":"ReferenceKey · object"},"maxItems":3,"title":"Keys","type":"array","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.keys","typeLabel":"ReferenceKey · object[]"},"kind":{"const":"reference","default":"reference","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.kind","typeLabel":"string"},"managed_by_search":{"default":false,"description":"Kept by a people search that follows the other table.","title":"Managed By Search","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.managed_by_search","typeLabel":"boolean"},"table_id":{"oneOf":[{"type":"string","title":"Table Id","description":"The table each row points into.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.table_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Table Id","description":"The table each row points into.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.table_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.9.table_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.9","typeLabel":"ReferenceSettings · object"},{"type":"object","title":"ReferencingRowsSettings","description":"Settings for a \"rows pointing here\" column: the other side of a reference.\n\n``reference_column_id`` is a reference column of ``table_id`` that points\ninto THIS table; each row here counts the rows there that point at it. The\nrows are listed by that table's name column, which is not a setting.","properties":{"kind":{"const":"referencing_rows","default":"referencing_rows","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.kind","typeLabel":"string"},"reference_column_id":{"oneOf":[{"type":"string","title":"Reference Column Id","description":"That table's reference column pointing into this one.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.reference_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Reference Column Id","description":"That table's reference column pointing into this one.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.reference_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.reference_column_id","typeLabel":"string\u003cuuid> | null"},"table_id":{"oneOf":[{"type":"string","title":"Table Id","description":"The table whose rows point here.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.table_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Table Id","description":"The table whose rows point here.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.table_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.10.table_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.10","typeLabel":"ReferencingRowsSettings · object"},{"type":"object","title":"IntegrationLookupSettings","description":"Settings for the connected-integration record lookup: which record, where.\n\nThe identity VALUE is not here. It arrives per row through the action's\nbound input column, like ``resolve_hostname``'s hostname. What a column\nfixes is the address: which of the org's connections to ask\n(``integration_id``: an ID, not a name, because two connections to one\nsystem are two different destinations), which record type, and which of\nthe SDK's declared identity fields the value keys on.\n\nAll three are plain identifiers rather than integration-stratum types on\npurpose: this module sits in the table stratum, which may not import the\nintegration domain, so the executor (which lives above both) resolves and\nvalidates them at run time. ``identity_field`` defaults empty so a\nhalf-configured draft can be saved; the executor skips such a column\nrather than guessing a key.","properties":{"identity_field":{"default":"","description":"The identity field the bound value keys on, e.g. 'id' or 'email'.","maxLength":255,"title":"Identity Field","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.11.identity_field","typeLabel":"string"},"integration_id":{"oneOf":[{"type":"string","title":"Integration Id","description":"The org's connection to read from.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.11.integration_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Integration Id","description":"The org's connection to read from.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.11.integration_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.11.integration_id","typeLabel":"string\u003cuuid> | null"},"kind":{"const":"integration_lookup","default":"integration_lookup","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.11.kind","typeLabel":"string"},"record_type":{"default":"","description":"The record type to fetch, e.g. 'user' or 'organization'.","maxLength":255,"title":"Record Type","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.11.record_type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.11","typeLabel":"IntegrationLookupSettings · object"},{"type":"object","title":"LinkedInBrowserSettings","description":"Settings for an enrichment run through a sender's own LinkedIn browser.\n\nThe row's LinkedIn address is not here: it arrives per row as the resolved\nprompt, a single reference to the bound column, the way a record lookup's\nidentity value does. What a column fixes is whose browser does the work\n(``sender_profile_id``): an ID, because two senders may share a name.\nA plain identifier on purpose: this module sits in the table stratum, which\nmay not import the outreach senders, so the executor (which lives above\nboth) resolves the sender and its LinkedIn connection at run time. None\nkeeps a half-configured draft saveable; the executor fails such a cell\nwith what to do rather than guessing a sender.","properties":{"kind":{"const":"linkedin_browser","default":"linkedin_browser","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.12.kind","typeLabel":"string"},"sender_profile_id":{"oneOf":[{"type":"string","title":"Sender Profile Id","description":"The sender whose LinkedIn browser reads the profiles.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.12.sender_profile_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Sender Profile Id","description":"The sender whose LinkedIn browser reads the profiles.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.12.sender_profile_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.12.sender_profile_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.12","typeLabel":"LinkedInBrowserSettings · object"},{"type":"object","title":"LinkedInCompanyGraphSettings","description":"Settings for researching a company's buying committee in a sender's own LinkedIn.\n\nAs with ``LinkedInBrowserSettings``, the company's LinkedIn page arrives\nper row as the resolved prompt, and ``sender_profile_id`` names whose\nbrowser opens it. ``max_people`` caps how many people the People tab\nsearch reads, each charged as it is read. ``view_profiles`` also opens\neach committee member's profile from the people table the column fills\n(a LinkedIn profile view each).","properties":{"kind":{"const":"linkedin_company_graph","default":"linkedin_company_graph","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.13.kind","typeLabel":"string"},"max_people":{"default":10,"description":"The most people one company's People tab search reads.","maximum":25,"minimum":1,"title":"Max People","type":"integer","uniqueKey":"definition.oneOf.2.action_settings.oneOf.13.max_people","typeLabel":"integer"},"sender_profile_id":{"oneOf":[{"type":"string","title":"Sender Profile Id","description":"The sender whose LinkedIn browser opens the company pages.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.13.sender_profile_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Sender Profile Id","description":"The sender whose LinkedIn browser opens the company pages.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.13.sender_profile_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.13.sender_profile_id","typeLabel":"string\u003cuuid> | null"},"view_profiles":{"default":false,"description":"Also open each committee member's LinkedIn profile from the people table.","title":"View Profiles","type":"boolean","uniqueKey":"definition.oneOf.2.action_settings.oneOf.13.view_profiles","typeLabel":"boolean"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.13","typeLabel":"LinkedInCompanyGraphSettings · object"},{"type":"object","title":"SendToTableSettings","description":"Settings for the send-to-table action: where the row goes.","properties":{"kind":{"const":"send_to_table","default":"send_to_table","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.14.kind","typeLabel":"string"},"table_id":{"oneOf":[{"type":"string","title":"Table Id","description":"The table each row is appended to.","format":"uuid","uniqueKey":"definition.oneOf.2.action_settings.oneOf.14.table_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Table Id","description":"The table each row is appended to.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.14.table_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings.oneOf.14.table_id","typeLabel":"string\u003cuuid> | null"},"target_column":{"default":"","description":"The column in that table this row's value is written to.","maxLength":255,"title":"Target Column","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.14.target_column","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.14","typeLabel":"SendToTableSettings · object"},{"type":"object","title":"RepDataSettings","description":"Settings for the rep-data action: which part of the identity to return.","properties":{"field":{"default":"email_address","enum":["email_address","display_name","first_name","last_name","signature","all"],"title":"Field","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.15.field","typeLabel":"enum\u003cstring>"},"kind":{"const":"rep_data","default":"rep_data","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.15.kind","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.15","typeLabel":"RepDataSettings · object"},{"type":"object","title":"OutreachActivitySettings","description":"Settings for the outreach-activity action: which signal to return.","properties":{"field":{"default":"summary","enum":["summary","in_live_sequence","live_sequences","reply_threads","total_matching_threads","last_reply_at","bounced"],"title":"Field","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.16.field","typeLabel":"enum\u003cstring>"},"kind":{"const":"outreach_activity","default":"outreach_activity","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.action_settings.oneOf.16.kind","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.action_settings.oneOf.16","typeLabel":"OutreachActivitySettings · object"},{"type":"null","title":"Action Settings","description":"Action-specific configuration; its kind must match the action key. None uses the action's defaults.","uniqueKey":"definition.oneOf.2.action_settings.oneOf.17","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.action_settings","typeLabel":"UseAISettings · object | BuiltinAgentSettings · object | AgentSettings · object | DevEchoSettings · object | DevFlakySettings · object | EnrichmentSettings · object | ProviderSettings · object | HttpApiSettings · object | HttpApiJwtSettings · object | ReferenceSettings · object | ReferencingRowsSettings · object | IntegrationLookupSettings · object | LinkedInBrowserSettings · object | LinkedInCompanyGraphSettings · object | SendToTableSettings · object | RepDataSettings · object | OutreachActivitySettings · object | null"},"kind":{"const":"enrichment","default":"enrichment","title":"Kind","type":"string","uniqueKey":"definition.oneOf.2.kind","typeLabel":"string"},"model_key":{"oneOf":[{"type":"string","title":"Model Key","description":"The user-facing model catalog key this column runs on; None uses the action's default model.","maxLength":100,"uniqueKey":"definition.oneOf.2.model_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Key","description":"The user-facing model catalog key this column runs on; None uses the action's default model.","uniqueKey":"definition.oneOf.2.model_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.model_key","typeLabel":"string | null"},"output":{"oneOf":[{"type":"object","title":"EnrichmentOutputFields","description":"The fields-mode output shape: repeatable named typed fields.\n\nThe default is Clay's: one text field named ``response``.","properties":{"fields":{"items":{"description":"One named, typed value an enrichment run returns.\n\nField types are drawn from the platform's existing column types, so any\nsingle field can later be promoted into an ordinary typed column without\ninventing a new type system.","properties":{"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].name","typeLabel":"string"},"choices":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Choices","description":"The fixed option list for a select field; None elsewhere.","maxItems":200,"uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Choices","description":"The fixed option list for a select field; None elsewhere.","uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices","typeLabel":"string[] | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Shown to the model: what this field should contain.","maxLength":500,"uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Shown to the model: what this field should contain.","uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].description","typeLabel":"string | null"},"field_type":{"description":"The type a user picks for a table column.\n\nOrdered as the picker shows them, which is also the order the groups below\nrun in: text-ish, then numeric, then choice, then structured.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","default":"text","uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX].field_type","typeLabel":"enum\u003cstring>"}},"required":["name"],"title":"EnrichmentOutputField","type":"object","uniqueKey":"definition.oneOf.2.output.oneOf.0.fields.items.[INDEX]","typeLabel":"EnrichmentOutputField · object"},"maxItems":50,"minItems":1,"title":"Fields","type":"array","uniqueKey":"definition.oneOf.2.output.oneOf.0.fields","typeLabel":"EnrichmentOutputField · object[]"},"mode":{"const":"fields","default":"fields","title":"Mode","type":"string","uniqueKey":"definition.oneOf.2.output.oneOf.0.mode","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.output.oneOf.0","typeLabel":"EnrichmentOutputFields · object"},{"type":"object","title":"EnrichmentOutputRawSchema","description":"The advanced output shape: a raw strict-mode JSON schema, verbatim.\n\nHeld to every strict-mode constraint at SAVE time by the service layer.\nThe shape is stored exactly as authored, and validation failures name the\nexact violated rule rather than surfacing at run time.","required":["json_schema"],"properties":{"json_schema":{"additionalProperties":true,"description":"A strict-mode JSON schema with an object root.","title":"Json Schema","type":"object","isRequired":true,"uniqueKey":"definition.oneOf.2.output.oneOf.1.json_schema","typeLabel":"Json Schema · object"},"mode":{"const":"json_schema","default":"json_schema","title":"Mode","type":"string","uniqueKey":"definition.oneOf.2.output.oneOf.1.mode","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.output.oneOf.1","typeLabel":"EnrichmentOutputRawSchema · object"}],"uniqueKey":"definition.oneOf.2.output","typeLabel":"EnrichmentOutputFields · object | EnrichmentOutputRawSchema · object"},"prompt":{"description":"The persisted instructions: ordered text and column-reference segments, references stored by column identity so renames never break a prompt.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.2.prompt.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.2.prompt.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.2.prompt.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.2.prompt","typeLabel":"EnrichmentPromptTemplate · object"}},"isRequired":true,"uniqueKey":"definition.oneOf.2","typeLabel":"EnrichmentColumnDefinition · object"},{"type":"object","title":"SourceColumnDefinition","description":"Definition of a source column: one imported record, held verbatim.\n\nCarries no configuration of its own. What to import, from where, and how\noften lives on the table's ``table_import_integration`` row, which points back here\nthrough ``object_column_id``; duplicating any of it on the column would\nonly create somewhere for the two to disagree.","properties":{"kind":{"const":"source","default":"source","title":"Kind","type":"string","uniqueKey":"definition.oneOf.3.kind","typeLabel":"string"}},"isRequired":true,"uniqueKey":"definition.oneOf.3","typeLabel":"SourceColumnDefinition · object"},{"type":"object","title":"ExportColumnDefinition","description":"Definition of an export column: one row pushed to a connected destination.\n\nThe cell holds the RECEIPT of that push (status, the destination record\nid, when it happened), never the row's own data (see\n``TableColumnKind.EXPORT``). The destination integration is named by id\nplus a denormalized ``integration_type``, for the same reason\n``table_import_integration`` denormalizes it: rendering a column must not need a join\ninto the integration stratum.","required":["integration_id","integration_type","record_type","fields"],"properties":{"fields":{"description":"The destination properties written, in mapping order.","items":{"description":"One destination property and where its value comes from.","properties":{"destination_field":{"maxLength":255,"minLength":1,"title":"Destination Field","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].destination_field","typeLabel":"string"},"source":{"description":"The per-row value written into ONE destination field.\n\n``template`` reuses the enrichment prompt format verbatim: ordered text\nand column-reference segments, references stored by column identity so a\nrename can never silently repoint a mapping and a delete is detectable.\n\nPASSTHROUGH RULE: when the template is exactly one whole-cell column\nreference (one segment, no path), the RAW stored cell value is sent, not\nits rendered text, so a LIST cell reaches a multi-select property as a list\nand a NUMBER cell as a number. Any other shape (text around a reference,\ntwo references, a path) renders to a string, because concatenation only\nhas a string answer.","properties":{"template":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source.template","typeLabel":"EnrichmentPromptTemplate · object"}},"title":"ExportValueSource","type":"object","isRequired":true,"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].source","typeLabel":"ExportValueSource · object"},"property_type":{"oneOf":[{"type":"string","title":"PropertyType","description":"The type the rendered value is coerced to before it is written, when the definition's ``typecast`` is on. It never creates the property: an export writes only to fields the destination already has. None means the destination's own type is authoritative and the value is sent as rendered.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].property_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The type the rendered value is coerced to before it is written, when the definition's ``typecast`` is on. It never creates the property: an export writes only to fields the destination already has. None means the destination's own type is authoritative and the value is sent as rendered.","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].property_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].property_type","typeLabel":"enum\u003cstring> | null"},"skip_if_blank":{"oneOf":[{"type":"boolean","title":"Skip If Blank","description":"Per-field override of the definition's ``remove_blanks``; None inherits it. Set False on one field to send an explicit blank that clears a destination value.","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].skip_if_blank.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Skip If Blank","description":"Per-field override of the definition's ``remove_blanks``; None inherits it. Set False on one field to send an explicit blank that clears a destination value.","uniqueKey":"definition.oneOf.4.fields.items.[INDEX].skip_if_blank.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.4.fields.items.[INDEX].skip_if_blank","typeLabel":"boolean | null"}},"required":["destination_field","source"],"title":"ExportFieldMapping","type":"object","uniqueKey":"definition.oneOf.4.fields.items.[INDEX]","typeLabel":"ExportFieldMapping · object"},"maxItems":200,"minItems":1,"title":"Fields","type":"array","isRequired":true,"uniqueKey":"definition.oneOf.4.fields","typeLabel":"ExportFieldMapping · object[]"},"integration_id":{"description":"The connected DESTINATION integration this column writes to.","format":"uuid","title":"Integration Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.integration_id","typeLabel":"string\u003cuuid>"},"integration_type":{"description":"Provider slug, denormalized so display needs no cross-stratum join.","maxLength":100,"minLength":1,"title":"Integration Type","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.integration_type","typeLabel":"string"},"record_type":{"description":"Which destination object to write: 'contacts', 'deals', a custom type.","maxLength":255,"minLength":1,"title":"Record Type","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.record_type","typeLabel":"string"},"action":{"description":"What one export cell does at the destination.\n\nIts own vocabulary, not a copy of the integration stratum's\n``WriteBehavior``: the members and their values differ, and\n``table_export_integration`` translates between the two at the seam\n(``_WRITE_BEHAVIOR_TO_EXPORT_ACTION``). Mirroring has no member here\nbecause it deletes and recreates the whole destination object, which is a\nwhole-object concern rather than a per-row one.","enum":["create","update","upsert"],"title":"ExportWriteAction","type":"string","default":"upsert","uniqueKey":"definition.oneOf.4.action","typeLabel":"enum\u003cstring>"},"batched":{"default":false,"description":"Write rows in destination-sized batches instead of one at a time. Faster, at a cost: the destination reports batch-level results, so receipts say 'pushed' rather than created-versus-updated, and a burst of writes can overwhelm automations attached to the destination. Off by default for that reason.","title":"Batched","type":"boolean","uniqueKey":"definition.oneOf.4.batched","typeLabel":"boolean"},"identity":{"description":"The destination fields the row may be identified by: the match key that decides create-versus-update, required for every action. More than one is an ordered FALLBACK, not a composite key: the first entry that renders a non-empty value for a row is the one that row is matched on, and the rest are not consulted. Order them most to least trustworthy ('match on work email, failing that personal email'). Matching on two fields at once is not offered because the destination contract takes a single identity field.","items":{"description":"One destination field the row may be IDENTIFIED by.\n\nDistinct from ``fields`` because identity is not written the way a\nproperty is: it selects the record for update/upsert, and it is what a\ncreate-only column matches on to avoid making a second copy. A row whose\nidentity renders empty is SKIPPED, never written. An unidentifiable row\nis the case the skip exists for.\n\nSeveral of these form an ordered FALLBACK, not a composite key: see\n``ExportColumnDefinition.identity``.","properties":{"destination_field":{"maxLength":255,"minLength":1,"title":"Destination Field","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].destination_field","typeLabel":"string"},"source":{"description":"The per-row value written into ONE destination field.\n\n``template`` reuses the enrichment prompt format verbatim: ordered text\nand column-reference segments, references stored by column identity so a\nrename can never silently repoint a mapping and a delete is detectable.\n\nPASSTHROUGH RULE: when the template is exactly one whole-cell column\nreference (one segment, no path), the RAW stored cell value is sent, not\nits rendered text, so a LIST cell reaches a multi-select property as a list\nand a NUMBER cell as a number. Any other shape (text around a reference,\ntwo references, a path) renders to a string, because concatenation only\nhas a string answer.","properties":{"template":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source.template","typeLabel":"EnrichmentPromptTemplate · object"}},"title":"ExportValueSource","type":"object","isRequired":true,"uniqueKey":"definition.oneOf.4.identity.items.[INDEX].source","typeLabel":"ExportValueSource · object"}},"required":["destination_field","source"],"title":"ExportIdentityMapping","type":"object","uniqueKey":"definition.oneOf.4.identity.items.[INDEX]","typeLabel":"ExportIdentityMapping · object"},"maxItems":4,"title":"Identity","type":"array","uniqueKey":"definition.oneOf.4.identity","typeLabel":"ExportIdentityMapping · object[]"},"kind":{"const":"export","default":"export","title":"Kind","type":"string","uniqueKey":"definition.oneOf.4.kind","typeLabel":"string"},"only_on_change":{"default":true,"description":"Skip a row whose outgoing payload is identical to the one last successfully written. The row-level idempotency knob; off, every run re-writes every row.","title":"Only On Change","type":"boolean","uniqueKey":"definition.oneOf.4.only_on_change","typeLabel":"boolean"},"remove_blanks":{"default":true,"description":"Drop fields whose rendered value is empty from the outgoing payload rather than sending a blank. Off, a blank clears the destination value: a deliberate act, not a default.","title":"Remove Blanks","type":"boolean","uniqueKey":"definition.oneOf.4.remove_blanks","typeLabel":"boolean"},"retry":{"description":"Retry, timeout and rate-limit behaviour for this column's writes.","properties":{"max_retries":{"default":3,"description":"Retry attempts per row beyond the first, when retrying at all.","maximum":10,"minimum":0,"title":"Max Retries","type":"integer","uniqueKey":"definition.oneOf.4.retry.max_retries","typeLabel":"integer"},"requests_per_minute":{"oneOf":[{"type":"integer","title":"Requests Per Minute","description":"Custom ceiling on write calls per minute. None means the destination's own pace. Its live rate-limit answers are honoured either way.","maximum":6000,"minimum":1,"uniqueKey":"definition.oneOf.4.retry.requests_per_minute.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Requests Per Minute","description":"Custom ceiling on write calls per minute. None means the destination's own pace. Its live rate-limit answers are honoured either way.","uniqueKey":"definition.oneOf.4.retry.requests_per_minute.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.4.retry.requests_per_minute","typeLabel":"integer | null"},"retry_on_failure":{"default":true,"description":"Retry a row whose failure is retryable: rate limits, server errors, network failures. Bad requests never retry: the same payload would fail the same way.","title":"Retry On Failure","type":"boolean","uniqueKey":"definition.oneOf.4.retry.retry_on_failure","typeLabel":"boolean"},"timeout_seconds":{"oneOf":[{"type":"integer","title":"Timeout Seconds","description":"Response timeout per destination request. None uses the platform default.","maximum":600,"minimum":1,"uniqueKey":"definition.oneOf.4.retry.timeout_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout Seconds","description":"Response timeout per destination request. None uses the platform default.","uniqueKey":"definition.oneOf.4.retry.timeout_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.4.retry.timeout_seconds","typeLabel":"integer | null"}},"title":"ExportRetryPolicy","type":"object","uniqueKey":"definition.oneOf.4.retry","typeLabel":"ExportRetryPolicy · object"},"typecast":{"default":true,"description":"Coerce each rendered value into the destination property's declared type before writing. Off, values are sent verbatim and the destination's own coercion applies.","title":"Typecast","type":"boolean","uniqueKey":"definition.oneOf.4.typecast","typeLabel":"boolean"},"update_mode":{"default":"patch","description":"replace overwrites the whole record, patch touches only the mapped fields, set_once writes only where the destination is empty. Degrades to patch at run time when the destination does not declare replace, the same fallback the sync export makes.","enum":["replace","patch","set_once"],"title":"Update Mode","type":"string","uniqueKey":"definition.oneOf.4.update_mode","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"definition.oneOf.4","typeLabel":"ExportColumnDefinition · object"},{"type":"object","title":"SequenceColumnDefinition","description":"Definition of a sequence column: one contact's live cadence state, or what it sent them.\n\nThe referenced sequence is denormalized by id only; rendering needs nothing\nbeyond the cell's own value, and the outreach stratum owns the write path\n(see ``TableColumnKind.SEQUENCE``).\n\nA LinkedIn profile column also carries a payload shape: the enrichment\nwhose answer it holds (``shape_action_key``) and that answer's declared\nfields (``output``), copied from the action when the column was made. With\nboth set, the column fans out, folds and promotes exactly like an\nenrichment column of that action, but it never runs: the sequence writes\nit. An older pod reads such a column as a step-less Browser use output\n(``_read_unknown_content``) and ignores both fields.","required":["sequence_id"],"properties":{"sequence_id":{"description":"The sequence whose enrolment status this column mirrors.","format":"uuid","title":"Sequence Id","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.5.sequence_id","typeLabel":"string\u003cuuid>"},"choices":{"description":"A select value's options; empty otherwise.","items":{"type":"string","uniqueKey":"definition.oneOf.5.choices.items.[INDEX]","typeLabel":"string"},"title":"Choices","type":"array","uniqueKey":"definition.oneOf.5.choices","typeLabel":"string[]"},"content":{"description":"Whether the column holds the contact's status, the messages sent to them, a value a Browser use step brought back, the outcome its run settled on, or the LinkedIn profile its profile views read.","enum":["status","messages","browser_output","browser_outcome","linkedin_profile"],"title":"SequenceColumnContent","type":"string","default":"status","uniqueKey":"definition.oneOf.5.content","typeLabel":"enum\u003cstring>"},"field_type":{"oneOf":[{"type":"string","title":"TableColumnType","description":"The type the step brings the value back as.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"uniqueKey":"definition.oneOf.5.field_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The type the step brings the value back as.","uniqueKey":"definition.oneOf.5.field_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.field_type","typeLabel":"enum\u003cstring> | null"},"hidden":{"default":false,"description":"Whether the value is kept out of sight: its cells show a mask.","title":"Hidden","type":"boolean","uniqueKey":"definition.oneOf.5.hidden","typeLabel":"boolean"},"kind":{"const":"sequence","default":"sequence","title":"Kind","type":"string","uniqueKey":"definition.oneOf.5.kind","typeLabel":"string"},"output":{"oneOf":[{"type":"object","title":"EnrichmentOutputFields","description":"The answer's declared fields, copied from that enrichment when the column was made.","properties":{"fields":{"items":{"description":"One named, typed value an enrichment run returns.\n\nField types are drawn from the platform's existing column types, so any\nsingle field can later be promoted into an ordinary typed column without\ninventing a new type system.","properties":{"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string","isRequired":true,"uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].name","typeLabel":"string"},"choices":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Choices","description":"The fixed option list for a select field; None elsewhere.","maxItems":200,"uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Choices","description":"The fixed option list for a select field; None elsewhere.","uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices","typeLabel":"string[] | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Shown to the model: what this field should contain.","maxLength":500,"uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Shown to the model: what this field should contain.","uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].description","typeLabel":"string | null"},"field_type":{"description":"The type a user picks for a table column.\n\nOrdered as the picker shows them, which is also the order the groups below\nrun in: text-ish, then numeric, then choice, then structured.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","default":"text","uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX].field_type","typeLabel":"enum\u003cstring>"}},"required":["name"],"title":"EnrichmentOutputField","type":"object","uniqueKey":"definition.oneOf.5.output.oneOf.0.fields.items.[INDEX]","typeLabel":"EnrichmentOutputField · object"},"maxItems":50,"minItems":1,"title":"Fields","type":"array","uniqueKey":"definition.oneOf.5.output.oneOf.0.fields","typeLabel":"EnrichmentOutputField · object[]"},"mode":{"const":"fields","default":"fields","title":"Mode","type":"string","uniqueKey":"definition.oneOf.5.output.oneOf.0.mode","typeLabel":"string"}},"uniqueKey":"definition.oneOf.5.output.oneOf.0","typeLabel":"EnrichmentOutputFields · object"},{"type":"null","description":"The answer's declared fields, copied from that enrichment when the column was made.","uniqueKey":"definition.oneOf.5.output.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.output","typeLabel":"EnrichmentOutputFields · object | null"},"output_key":{"oneOf":[{"type":"string","title":"Output Key","description":"The step's own key for the value, which outlives a rename.","maxLength":16,"uniqueKey":"definition.oneOf.5.output_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Output Key","description":"The step's own key for the value, which outlives a rename.","uniqueKey":"definition.oneOf.5.output_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.output_key","typeLabel":"string | null"},"shape_action_key":{"oneOf":[{"type":"string","title":"Shape Action Key","description":"The enrichment whose answer shape this column holds.","maxLength":100,"uniqueKey":"definition.oneOf.5.shape_action_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Shape Action Key","description":"The enrichment whose answer shape this column holds.","uniqueKey":"definition.oneOf.5.shape_action_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.shape_action_key","typeLabel":"string | null"},"step_id":{"oneOf":[{"type":"string","title":"Step Id","description":"The Browser use step whose value, or outcome, this column holds.","format":"uuid","uniqueKey":"definition.oneOf.5.step_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Step Id","description":"The Browser use step whose value, or outcome, this column holds.","uniqueKey":"definition.oneOf.5.step_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"definition.oneOf.5.step_id","typeLabel":"string\u003cuuid> | null"}},"isRequired":true,"uniqueKey":"definition.oneOf.5","typeLabel":"SequenceColumnDefinition · object"}],"isRequired":true,"uniqueKey":"definition","typeLabel":"ManualColumnDefinition · object | FormulaColumnDefinition · object | EnrichmentColumnDefinition · object | SourceColumnDefinition · object | ExportColumnDefinition · object | SequenceColumnDefinition · object"},"definition_version":{"description":"Bumped on definition changes; cosmetic edits leave it untouched.","title":"Definition Version","type":"integer","isRequired":true,"uniqueKey":"definition_version","typeLabel":"integer"},"depends_on_column_ids":{"description":"Direct chain inputs; empty for manual columns.","items":{"format":"uuid","type":"string","uniqueKey":"depends_on_column_ids.items.[INDEX]","typeLabel":"string\u003cuuid>"},"title":"Depends On Column Ids","type":"array","isRequired":true,"uniqueKey":"depends_on_column_ids","typeLabel":"string\u003cuuid>[]"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Author-written note on what the column holds; null when unset.","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Author-written note on what the column holds; null when unset.","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"display_name":{"title":"Display Name","type":"string","isRequired":true,"uniqueKey":"display_name","typeLabel":"string"},"group_id":{"oneOf":[{"type":"string","title":"Group Id","description":"The column group this column belongs to, or null. Groups are user-managed entities delivered on the column list's `groups`; this field is the membership edge, and the members' order is simply the columns' position order.","format":"uuid","isRequired":true,"uniqueKey":"group_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Group Id","description":"The column group this column belongs to, or null. Groups are user-managed entities delivered on the column list's `groups`; this field is the membership edge, and the members' order is simply the columns' position order.","isRequired":true,"uniqueKey":"group_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"group_id","typeLabel":"string\u003cuuid> | null"},"id":{"format":"uuid","title":"Id","type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"is_group_output":{"description":"Whether this member stays visible while its group is collapsed. Meaningful only while `group_id` is set. Every group keeps at least one output.","title":"Is Group Output","type":"boolean","isRequired":true,"uniqueKey":"is_group_output","typeLabel":"boolean"},"kind":{"description":"Kind of a table column.\n\n``MANUAL`` cells are user-editable; ``FORMULA`` cells are a pure computed\nchain over other columns; ``ENRICHMENT`` cells are produced by an external\naction (an AI model, a research agent) run once per row. Formula and\nenrichment cells are both computed (read-only in the grid) but only\nenrichment work leaves the process and costs credits.\n\n``SOURCE`` cells hold one imported record verbatim, written only by the\ntable's import source. Like ``MANUAL`` it is an externally-written leaf\nrather than a computed node (it joins no run plan and derives from no\nother column), but unlike ``MANUAL`` nobody may edit or retype it: the\nwhole point is that a refresh can overwrite it wholesale, and every\n``get_path`` column promoted off it reads paths that only survive while\nits shape does.\n\n``EXPORT`` cells hold the RECEIPT of pushing the row to a connected\ndestination (status, the destination record id, when it happened), never\nthe row's own data. The mirror image of ``SOURCE``: where a source column\nis an externally-written leaf, an export column is an externally-READ\nleaf. It joins the run plan like a computed column (its mappings are\ndependencies, so a changed input re-pushes) but nothing may depend on it\nin turn, nobody may edit it (a hand-edited receipt would silently pin the\nrow out of future pushes), and re-running it means \"push again\", not\n\"re-answer\".\n\n``SEQUENCE`` cells hold a contact's live status in an email sequence, or\nthe messages it sent them, written by the outreach send engine and nobody\nelse: an externally-written leaf with no run plan, no dependencies, no user\nedits, no retyping. A status column, like ``EXPORT`` receipts, may not be\nreferenced in a formula: the status only exists to be looked at, never\nderived from. A messages column may, the way a ``SOURCE`` record may: the\nengine requests a run of its dependents whenever it rewrites a cell. The\ncolumns are created by the sequence that targets the table, not from the\nadd-column catalog.","enum":["manual","formula","enrichment","source","export","sequence"],"title":"TableColumnKind","type":"string","isRequired":true,"uniqueKey":"kind","typeLabel":"enum\u003cstring>"},"position":{"title":"Position","type":"integer","isRequired":true,"uniqueKey":"position","typeLabel":"integer"},"supported_filter_operators":{"description":"Every filter operator this column admits, in display order. The server owns the list so a picker cannot offer a pairing the rows query will reject: value operators follow the storage slot, and a computed column additionally admits the execution-state family (has an error, has results, has not run, is stale, ...), which reads run metadata a manual column never writes.","items":{"description":"A row filter predicate.\n\nWhich operators are legal depends on the column's data type; the service\nvalidates the pairing and rejects a mismatch, so an operator here is a\nvocabulary entry rather than a promise it applies everywhere.\n\nTwo families live here. The VALUE operators ask about what a cell holds and\nare keyed off the column's storage slot. The STATE operators ask about what\nthe last run DID to the cell (errored, skipped, never ran, went stale) and\nare keyed off the column's kind instead: they read the compute metadata that\nonly a computed column ever writes, and mean nothing on a hand-typed one.","enum":["eq","neq","gt","gte","lt","lte","contains","not_contains","contains_any_of","not_contains_any_of","starts_with","is_true","is_false","is_empty","is_not_empty","has_error","has_no_error","has_results","has_no_results","has_not_run","is_stale","is_not_stale","run_condition_not_met","run_stopped"],"title":"TableFilterOperator","type":"string","uniqueKey":"supported_filter_operators.items.[INDEX]","typeLabel":"enum\u003cstring>"},"title":"Supported Filter Operators","type":"array","isRequired":true,"uniqueKey":"supported_filter_operators","typeLabel":"enum\u003cstring>[]"},"table_id":{"format":"uuid","title":"Table Id","type":"string","isRequired":true,"uniqueKey":"table_id","typeLabel":"string\u003cuuid>"},"type_options":{"oneOf":[{"type":"object","title":"SelectOptions","description":"Per-type options; null means the type's defaults.","properties":{"choices":{"items":{"description":"One option of a select or multi-select column.","properties":{"value":{"maxLength":255,"minLength":1,"title":"Value","type":"string","isRequired":true,"uniqueKey":"type_options.oneOf.0.choices.items.[INDEX].value","typeLabel":"string"},"color":{"oneOf":[{"type":"string","title":"Color","description":"A column colour token; None renders the neutral chip.","uniqueKey":"type_options.oneOf.0.choices.items.[INDEX].color.oneOf.0","typeLabel":"string"},{"type":"null","title":"Color","description":"A column colour token; None renders the neutral chip.","uniqueKey":"type_options.oneOf.0.choices.items.[INDEX].color.oneOf.1","typeLabel":"null"}],"uniqueKey":"type_options.oneOf.0.choices.items.[INDEX].color","typeLabel":"string | null"}},"required":["value"],"title":"SelectChoice","type":"object","uniqueKey":"type_options.oneOf.0.choices.items.[INDEX]","typeLabel":"SelectChoice · object"},"title":"Choices","type":"array","uniqueKey":"type_options.oneOf.0.choices","typeLabel":"SelectChoice · object[]"},"type":{"const":"select","default":"select","title":"Type","type":"string","uniqueKey":"type_options.oneOf.0.type","typeLabel":"string"}},"isRequired":true,"uniqueKey":"type_options.oneOf.0","typeLabel":"SelectOptions · object"},{"type":"object","title":"MultiSelectOptions","description":"Per-type options; null means the type's defaults.","properties":{"choices":{"items":{"description":"One option of a select or multi-select column.","properties":{"value":{"maxLength":255,"minLength":1,"title":"Value","type":"string","isRequired":true,"uniqueKey":"type_options.oneOf.1.choices.items.[INDEX].value","typeLabel":"string"},"color":{"oneOf":[{"type":"string","title":"Color","description":"A column colour token; None renders the neutral chip.","uniqueKey":"type_options.oneOf.1.choices.items.[INDEX].color.oneOf.0","typeLabel":"string"},{"type":"null","title":"Color","description":"A column colour token; None renders the neutral chip.","uniqueKey":"type_options.oneOf.1.choices.items.[INDEX].color.oneOf.1","typeLabel":"null"}],"uniqueKey":"type_options.oneOf.1.choices.items.[INDEX].color","typeLabel":"string | null"}},"required":["value"],"title":"SelectChoice","type":"object","uniqueKey":"type_options.oneOf.1.choices.items.[INDEX]","typeLabel":"SelectChoice · object"},"title":"Choices","type":"array","uniqueKey":"type_options.oneOf.1.choices","typeLabel":"SelectChoice · object[]"},"type":{"const":"multi_select","default":"multi_select","title":"Type","type":"string","uniqueKey":"type_options.oneOf.1.type","typeLabel":"string"}},"isRequired":true,"uniqueKey":"type_options.oneOf.1","typeLabel":"MultiSelectOptions · object"},{"type":"object","title":"CurrencyOptions","description":"Per-type options; null means the type's defaults.","properties":{"currency_code":{"default":"USD","description":"ISO-4217 code. Per column, not per cell: a column is denominated once.","maxLength":3,"minLength":3,"title":"Currency Code","type":"string","uniqueKey":"type_options.oneOf.2.currency_code","typeLabel":"string"},"precision":{"default":2,"description":"Digits kept after the point. A number written into the column (typed, pasted, imported or sent through the API) is rounded to them, half away from zero: 2.005 at 2 places is stored as 2.01. A formula, AI or enrichment value keeps every digit and only shows this many. Changing it later changes how existing values show, never the values themselves.","maximum":10,"minimum":0,"title":"Precision","type":"integer","uniqueKey":"type_options.oneOf.2.precision","typeLabel":"integer"},"type":{"const":"currency","default":"currency","title":"Type","type":"string","uniqueKey":"type_options.oneOf.2.type","typeLabel":"string"}},"isRequired":true,"uniqueKey":"type_options.oneOf.2","typeLabel":"CurrencyOptions · object"},{"type":"object","title":"DecimalOptions","description":"Per-type options; null means the type's defaults.","properties":{"precision":{"default":2,"description":"Digits kept after the point. A number written into the column (typed, pasted, imported or sent through the API) is rounded to them, half away from zero: 2.005 at 2 places is stored as 2.01. A formula, AI or enrichment value keeps every digit and only shows this many. Changing it later changes how existing values show, never the values themselves.","maximum":10,"minimum":0,"title":"Precision","type":"integer","uniqueKey":"type_options.oneOf.3.precision","typeLabel":"integer"},"type":{"const":"decimal","default":"decimal","title":"Type","type":"string","uniqueKey":"type_options.oneOf.3.type","typeLabel":"string"}},"isRequired":true,"uniqueKey":"type_options.oneOf.3","typeLabel":"DecimalOptions · object"},{"type":"null","description":"Per-type options; null means the type's defaults.","isRequired":true,"uniqueKey":"type_options.oneOf.4","typeLabel":"null"}],"isRequired":true,"uniqueKey":"type_options","typeLabel":"SelectOptions · object | MultiSelectOptions · object | CurrencyOptions · object | DecimalOptions · object | null"},"updated_at":{"format":"date-time","title":"Updated At","type":"string","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"ai_made":{"default":false,"description":"Whether the AI assistant created this column through a workspace action. A fact about who made it, not a state: it stays true after a person edits the column.","title":"Ai Made","type":"boolean","uniqueKey":"ai_made","typeLabel":"boolean"},"auto_run":{"default":true,"description":"Whether data changes recompute this column by themselves; explicit runs ignore it.","title":"Auto Run","type":"boolean","uniqueKey":"auto_run","typeLabel":"boolean"},"pending_recompute":{"default":false,"description":"The definition has changed since these cells were last computed, so they are stale. Set by a save made with `suppress_run`, cleared when the column next finishes a run.","title":"Pending Recompute","type":"boolean","uniqueKey":"pending_recompute","typeLabel":"boolean"},"refresh_interval_hours":{"default":0,"description":"Self re-run cadence in hours; 0 is off.","title":"Refresh Interval Hours","type":"integer","uniqueKey":"refresh_interval_hours","typeLabel":"integer"},"run_condition":{"oneOf":[{"type":"object","title":"ManualColumnDefinition","description":"The per-row gate, verbatim; null runs every row.","properties":{"default_value":{"oneOf":[{"type":"string","title":"Default Value","uniqueKey":"run_condition.oneOf.0.default_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Default Value","uniqueKey":"run_condition.oneOf.0.default_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Default Value","uniqueKey":"run_condition.oneOf.0.default_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Default Value","uniqueKey":"run_condition.oneOf.0.default_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Default Value","uniqueKey":"run_condition.oneOf.0.default_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.0.default_value","typeLabel":"string | integer | number | boolean | null"},"kind":{"const":"manual","default":"manual","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.0.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.0","typeLabel":"ManualColumnDefinition · object"},{"type":"object","title":"FormulaColumnDefinition","description":"The per-row gate, verbatim; null runs every row.","required":["chain"],"properties":{"chain":{"oneOf":[{"type":"object","title":"TableCopy","description":"Copy the input value unchanged.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"copy","default":"copy","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.0.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.0","typeLabel":"TableCopy · object"},{"type":"object","title":"TableChangeCase","description":"Change the case of a string value.","required":["mode"],"properties":{"mode":{"enum":["lower","upper","title"],"title":"Mode","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.mode","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"change_case","default":"change_case","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.1","typeLabel":"TableChangeCase · object"},{"type":"object","title":"TableTrim","description":"Strip leading and trailing whitespace from a string value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"trim","default":"trim","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.2.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.2","typeLabel":"TableTrim · object"},{"type":"object","title":"TableReplace","description":"Replace all occurrences of a substring.","required":["old","new"],"properties":{"new":{"title":"New","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.new","typeLabel":"string"},"old":{"title":"Old","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.old","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"replace","default":"replace","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.3","typeLabel":"TableReplace · object"},{"type":"object","title":"TableRegexExtract","description":"Extract a regex group from a string value.","required":["pattern"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.pattern","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"regex_extract","default":"regex_extract","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.function","typeLabel":"string"},"group":{"default":0,"title":"Group","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.group","typeLabel":"integer"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.4","typeLabel":"TableRegexExtract · object"},{"type":"object","title":"TableRegexReplace","description":"Replace regex matches in a string value.","required":["pattern","replacement"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.pattern","typeLabel":"string"},"replacement":{"title":"Replacement","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.replacement","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"regex_replace","default":"regex_replace","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.5","typeLabel":"TableRegexReplace · object"},{"type":"object","title":"TableConcatenate","description":"Join several values into one string.\n\nSources are ORDERED and may mix columns with the results of earlier steps:\n``[First name, step 2]`` and ``[step 2, First name]`` are different strings,\nwhich is why there is one list rather than a list of columns beside a list\nof steps.\n\nThe field keeps its original name: every stored definition holds\n``source_column_ids``, and the list is still overwhelmingly columns. Only\nthe item type widened, so old definitions validate untouched.","required":["source_column_ids"],"properties":{"source_column_ids":{"description":"Values to join, in order. A UUID reads that column on the row; a step reference reads an earlier step's output.","items":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX].oneOf.1","typeLabel":"StepRef · object"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_column_ids.items.[INDEX]","typeLabel":"string\u003cuuid> | StepRef · object"},"title":"Source Column Ids","type":"array","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_column_ids","typeLabel":"(string\u003cuuid> | StepRef · object)[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"concatenate","default":"concatenate","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.function","typeLabel":"string"},"ignore_empty":{"default":true,"title":"Ignore Empty","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.ignore_empty","typeLabel":"boolean"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.next","typeLabel":"null"},"separator":{"default":" ","title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.separator","typeLabel":"string"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.6","typeLabel":"TableConcatenate · object"},{"type":"object","title":"TableArithmetic","description":"Apply an arithmetic operator with a constant or column-valued operand.","required":["operator","operand"],"properties":{"operand":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.0.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.1.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Operand","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Operand","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Operand","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Operand","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Operand","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand.oneOf.6","typeLabel":"null"}],"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operand","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"operator":{"enum":["add","subtract","multiply","divide"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.operator","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"arithmetic","default":"arithmetic","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.function","typeLabel":"string"},"next":{"oneOf":[{"type":"object","title":"TableCopy","description":"Copy the input value unchanged.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0.fallback_value","typeLabel":"any"},"function":{"const":"copy","default":"copy","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.0","typeLabel":"TableCopy · object"},{"type":"object","title":"TableChangeCase","description":"Change the case of a string value.","required":["mode"],"properties":{"mode":{"enum":["lower","upper","title"],"title":"Mode","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.mode","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.fallback_value","typeLabel":"any"},"function":{"const":"change_case","default":"change_case","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.1","typeLabel":"TableChangeCase · object"},{"type":"object","title":"TableTrim","description":"Strip leading and trailing whitespace from a string value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2.fallback_value","typeLabel":"any"},"function":{"const":"trim","default":"trim","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.2","typeLabel":"TableTrim · object"},{"type":"object","title":"TableReplace","description":"Replace all occurrences of a substring.","required":["old","new"],"properties":{"new":{"title":"New","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.new","typeLabel":"string"},"old":{"title":"Old","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.old","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.fallback_value","typeLabel":"any"},"function":{"const":"replace","default":"replace","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.3","typeLabel":"TableReplace · object"},{"type":"object","title":"TableRegexExtract","description":"Extract a regex group from a string value.","required":["pattern"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.pattern","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.fallback_value","typeLabel":"any"},"function":{"const":"regex_extract","default":"regex_extract","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.function","typeLabel":"string"},"group":{"default":0,"title":"Group","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.group","typeLabel":"integer"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.4","typeLabel":"TableRegexExtract · object"},{"type":"object","title":"TableRegexReplace","description":"Replace regex matches in a string value.","required":["pattern","replacement"],"properties":{"pattern":{"title":"Pattern","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.pattern","typeLabel":"string"},"replacement":{"title":"Replacement","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.replacement","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.fallback_value","typeLabel":"any"},"function":{"const":"regex_replace","default":"regex_replace","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.5","typeLabel":"TableRegexReplace · object"},{"type":"object","title":"TableConcatenate","description":"Join several values into one string.\n\nSources are ORDERED and may mix columns with the results of earlier steps:\n``[First name, step 2]`` and ``[step 2, First name]`` are different strings,\nwhich is why there is one list rather than a list of columns beside a list\nof steps.\n\nThe field keeps its original name: every stored definition holds\n``source_column_ids``, and the list is still overwhelmingly columns. Only\nthe item type widened, so old definitions validate untouched.","required":["source_column_ids"],"properties":{"source_column_ids":{"description":"Values to join, in order. A UUID reads that column on the row; a step reference reads an earlier step's output.","items":{"type":"any","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.source_column_ids.items.[INDEX]","typeLabel":"any"},"title":"Source Column Ids","type":"array","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.source_column_ids","typeLabel":"any[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.fallback_value","typeLabel":"any"},"function":{"const":"concatenate","default":"concatenate","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.function","typeLabel":"string"},"ignore_empty":{"default":true,"title":"Ignore Empty","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.ignore_empty","typeLabel":"boolean"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.next","typeLabel":"any"},"separator":{"default":" ","title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.separator","typeLabel":"string"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.6","typeLabel":"TableConcatenate · object"},{"title":"Next"},{"type":"object","title":"TableRound","description":"Round a numeric value to a precision.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.fallback_value","typeLabel":"any"},"function":{"const":"round","default":"round","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.function","typeLabel":"string"},"mode":{"default":"round","enum":["round","ceil","floor"],"title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.mode","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.next","typeLabel":"any"},"precision":{"default":0,"title":"Precision","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.precision","typeLabel":"integer"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.8","typeLabel":"TableRound · object"},{"type":"object","title":"TableClamp","description":"Clamp a numeric value to an inclusive range.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.fallback_value","typeLabel":"any"},"function":{"const":"clamp","default":"clamp","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.function","typeLabel":"string"},"max_value":{"type":"any","title":"Max Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.max_value","typeLabel":"any"},"min_value":{"type":"any","title":"Min Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.min_value","typeLabel":"any"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.9","typeLabel":"TableClamp · object"},{"type":"object","title":"TableDateFormat","description":"Convert a date between iso/unix/unix_ms representations.","required":["input_format","output_format"],"properties":{"input_format":{"enum":["iso","unix","unix_ms"],"title":"Input Format","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.input_format","typeLabel":"enum\u003cstring>"},"output_format":{"enum":["iso","unix","unix_ms"],"title":"Output Format","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.output_format","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.fallback_value","typeLabel":"any"},"function":{"const":"date_format","default":"date_format","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.10","typeLabel":"TableDateFormat · object"},{"type":"object","title":"TableDateExtract","description":"Extract a component (year, month, ...) from a date value.","required":["component"],"properties":{"component":{"enum":["year","month","day","hour","minute","second"],"title":"Component","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.component","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.fallback_value","typeLabel":"any"},"function":{"const":"date_extract","default":"date_extract","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.11","typeLabel":"TableDateExtract · object"},{"type":"object","title":"TableDateArithmetic","description":"Add or subtract a fixed duration from a date value.","required":["operator","amount","unit"],"properties":{"amount":{"title":"Amount","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.amount","typeLabel":"integer"},"operator":{"enum":["add","subtract"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.operator","typeLabel":"enum\u003cstring>"},"unit":{"enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.unit","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.fallback_value","typeLabel":"any"},"function":{"const":"date_arithmetic","default":"date_arithmetic","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.12","typeLabel":"TableDateArithmetic · object"},{"type":"object","title":"TableListFirst","description":"Take the first element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13.fallback_value","typeLabel":"any"},"function":{"const":"list_first","default":"list_first","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.13","typeLabel":"TableListFirst · object"},{"type":"object","title":"TableListLast","description":"Take the last element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14.fallback_value","typeLabel":"any"},"function":{"const":"list_last","default":"list_last","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.14","typeLabel":"TableListLast · object"},{"type":"object","title":"TableListNth","description":"Take the element at an index of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.fallback_value","typeLabel":"any"},"function":{"const":"list_nth","default":"list_nth","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.function","typeLabel":"string"},"index":{"default":0,"title":"Index","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.index","typeLabel":"integer"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.15","typeLabel":"TableListNth · object"},{"type":"object","title":"TableListJoin","description":"Join list elements into a string with a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.fallback_value","typeLabel":"any"},"function":{"const":"list_join","default":"list_join","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.next","typeLabel":"any"},"separator":{"default":", ","title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.separator","typeLabel":"string"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.16","typeLabel":"TableListJoin · object"},{"type":"object","title":"TableListCount","description":"Count the elements of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17.fallback_value","typeLabel":"any"},"function":{"const":"list_count","default":"list_count","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.17","typeLabel":"TableListCount · object"},{"type":"object","title":"TableListPluck","description":"Pull one field out of every object in a list.\n\nEnrichment payloads routinely carry lists of objects\n(``[{\"value\": \"Payroll\"}, {\"value\": \"HR\"}]``) where the useful thing is\nthe field, not the wrapper. Plucking turns that into ``[\"Payroll\", \"HR\"]``\nso ``list_join`` and friends can work on it; items without the field\nbecome empty and scalar items pass through unchanged.","required":["field"],"properties":{"field":{"minLength":1,"title":"Field","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.field","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.fallback_value","typeLabel":"any"},"function":{"const":"list_pluck","default":"list_pluck","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.18","typeLabel":"TableListPluck · object"},{"type":"object","title":"TableListUnique","description":"De-duplicate list elements, keeping first-seen order.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19.fallback_value","typeLabel":"any"},"function":{"const":"list_unique","default":"list_unique","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.19","typeLabel":"TableListUnique · object"},{"type":"object","title":"TableListSplit","description":"Split a string value into a list on a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.fallback_value","typeLabel":"any"},"function":{"const":"list_split","default":"list_split","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.next","typeLabel":"any"},"separator":{"default":",","title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.separator","typeLabel":"string"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.20","typeLabel":"TableListSplit · object"},{"type":"object","title":"TableCoalesce","description":"Substitute a default (a literal or another column) when the input is empty.","required":["default_value"],"properties":{"default_value":{"type":"any","title":"Default Value","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.default_value","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.fallback_value","typeLabel":"any"},"function":{"const":"coalesce","default":"coalesce","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.21","typeLabel":"TableCoalesce · object"},{"type":"object","title":"TableIfThenElse","description":"Pick one of two values based on a comparison.\n\nEach of the three slots takes a literal or a column, so this expresses both\n\"if this column is over that column\" and \"use A, else use B\". Neither of\nthose was reachable while they were constants.","required":["operator"],"properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.operator","typeLabel":"enum\u003cstring>"},"compare_value":{"type":"any","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.compare_value","typeLabel":"any"},"else_value":{"type":"any","title":"Else Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.else_value","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.fallback_value","typeLabel":"any"},"function":{"const":"if_then_else","default":"if_then_else","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.source_step","typeLabel":"any"},"then_value":{"type":"any","title":"Then Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22.then_value","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.22","typeLabel":"TableIfThenElse · object"},{"type":"object","title":"TableConditions","description":"Fold several comparisons into ONE boolean.\n\nThe engine's only boolean combinator, and the shape a column's\n``run_condition`` is authored in: \"only run where Employees > 50 AND\nCountry is US\". Nothing else here joins predicates: ``if_then_else``\ncompares exactly one pair and returns a value rather than a verdict. So\nwithout this a multi-clause gate could only be reached by chaining steps\nthat pipe a truthy stand-in forward, which no editor could read back.\n\nOne joiner over clauses and, at most one level down, groups of clauses:\n\"A and (B or C)\". That is precisely the row filter's shape, so a view's\nfilter can be saved as a gate and read back as a filter without loss; a\ndeeper tree would be expressible on one side only. Reads its clauses'\noperands directly and ignores the piped input, so it is a leaf rather\nthan a transform.","required":["clauses"],"properties":{"clauses":{"items":{"type":"any","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.clauses.items.[INDEX]","typeLabel":"any"},"maxItems":8,"minItems":1,"title":"Clauses","type":"array","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.clauses","typeLabel":"any[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.fallback_value","typeLabel":"any"},"function":{"const":"conditions","default":"conditions","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.function","typeLabel":"string"},"joiner":{"default":"and","enum":["and","or"],"title":"Joiner","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.joiner","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.next","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.23","typeLabel":"TableConditions · object"},{"type":"object","title":"TableValueMapping","description":"Map input values through a lookup table.","required":["mapping"],"properties":{"mapping":{"additionalProperties":{"type":"any","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.mapping.additionalProperties","typeLabel":"any"},"title":"Mapping","type":"object","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.mapping","typeLabel":"Mapping · object"},"default_value":{"type":"any","title":"Default Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.default_value","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.fallback_value","typeLabel":"any"},"function":{"const":"value_mapping","default":"value_mapping","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.24","typeLabel":"TableValueMapping · object"},{"type":"object","title":"TableToString","description":"Coerce the input to a string.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25.fallback_value","typeLabel":"any"},"function":{"const":"to_string","default":"to_string","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.25","typeLabel":"TableToString · object"},{"type":"object","title":"TableToInt","description":"Coerce the input to an integer.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26.fallback_value","typeLabel":"any"},"function":{"const":"to_int","default":"to_int","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.26","typeLabel":"TableToInt · object"},{"type":"object","title":"TableToFloat","description":"Coerce the input to a float.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27.fallback_value","typeLabel":"any"},"function":{"const":"to_float","default":"to_float","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.27","typeLabel":"TableToFloat · object"},{"type":"object","title":"TableToBool","description":"Coerce the input to a boolean.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28.fallback_value","typeLabel":"any"},"function":{"const":"to_bool","default":"to_bool","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.28","typeLabel":"TableToBool · object"},{"type":"object","title":"TableToDate","description":"Coerce the input to a date.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.fallback_value","typeLabel":"any"},"function":{"const":"to_date","default":"to_date","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.function","typeLabel":"string"},"input_format":{"default":"auto","enum":["iso","unix","unix_ms","auto"],"title":"Input Format","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.input_format","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.29","typeLabel":"TableToDate · object"},{"type":"object","title":"TablePhoneE164","description":"Normalize a phone number to E.164 format.","properties":{"default_region":{"default":"US","title":"Default Region","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.default_region","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.fallback_value","typeLabel":"any"},"function":{"const":"phone_e164","default":"phone_e164","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.30","typeLabel":"TablePhoneE164 · object"},{"type":"object","title":"TableUtmParse","description":"Extract a UTM parameter from a URL value.","required":["parameter"],"properties":{"parameter":{"enum":["source","medium","campaign","term","content"],"title":"Parameter","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.parameter","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.fallback_value","typeLabel":"any"},"function":{"const":"utm_parse","default":"utm_parse","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.31","typeLabel":"TableUtmParse · object"},{"type":"object","title":"TableUrlDomain","description":"Reduce a URL to its bare registrable-looking host.\n\nA website field arrives as a whole URL (``https://www.acme.com/about``)\nbut the thing that joins, dedupes and enriches is ``acme.com``. Doing it\nwith ``regex_extract`` means every caller hand-writes the same fragile\npattern, so the parse lives here once and uses a real URL parser.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32.fallback_value","typeLabel":"any"},"function":{"const":"url_domain","default":"url_domain","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.32","typeLabel":"TableUrlDomain · object"},{"type":"object","title":"TableCompanyDomain","description":"Reduce a company's website URL to the company's own registrable domain.\n\nThree differences from ``url_domain``, which stays the generic read (a\ncolumn of LinkedIn profile URLs legitimately reduces to ``linkedin.com``\nthere):\n\nHosts that name a platform rather than the company (LinkedIn and Facebook\npages, link aggregators, review sites, vendor partner directories) come out\nempty. A company whose only listed website is its LinkedIn page has no\nderivable domain, and an empty cell says so; ``linkedin.com`` is worse than\nempty because it joins, dedupes and syncs as if it were real.\n\nThe result is the domain someone REGISTERED, not the bare host: a provider\nthat lists ``careers.acme.com`` is describing ``acme.com``. A subdomain\njoins against nothing and sends an agent somewhere that often does not\nresolve. Page builders that give each customer their own label are the\nexception the Public Suffix List already encodes, so ``acme.wixsite.com``\nsurvives whole rather than collapsing into ``wixsite.com``.\n\n``company_name`` guards the case those two cannot: a directory listing\nreduces to the DIRECTORY owner's domain, so\n``cloudpartners.transform.microsoft.com`` becomes ``microsoft.com``: right\nshape, wrong company, and nothing downstream can tell. Pointed at the\ncolumn naming the employer, the domain is dropped when the two disagree.\nOptional: without it the other two rules still apply.","properties":{"company_name":{"type":"any","title":"Company Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.company_name","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.fallback_value","typeLabel":"any"},"function":{"const":"company_domain","default":"company_domain","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.33","typeLabel":"TableCompanyDomain · object"},{"type":"object","title":"TableGetPath","description":"Read a dotted path out of an object- or list-valued cell.\n\nObject and list columns were storable but unreadable: nothing in the\ncatalog could reach a field inside one, so an enrichment payload landed in\na cell and stopped there. Segments index dicts by key and lists by integer\nposition: ``employees.count``, ``emails.0.address``.\n\n``output_type`` is declared rather than derived because a JSON path can\nland on anything, and the column's data type has to be known before a\nsingle row is evaluated.","required":["path"],"properties":{"path":{"minLength":1,"title":"Path","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.path","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.fallback_value","typeLabel":"any"},"function":{"const":"get_path","default":"get_path","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.next","typeLabel":"any"},"output_type":{"description":"Type of a property. Used while creating/updating/deleting properties.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"title":"PropertyType","type":"string","default":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.output_type","typeLabel":"enum\u003cstring>"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.34","typeLabel":"TableGetPath · object"},{"type":"object","title":"TableFormat","description":"Build a string from a positional template and a list of arguments.\n\n``concatenate`` joins whole columns with one separator, which cannot\nproduce \"Enterprise: Acme (12.4%)\". Placeholders are positional only\n(``{0}``, ``{1}``) so the template stays data, not an expression language.\n\nLike ``concatenate`` this takes no ``source_column_id``: its inputs are its\narguments, not the value flowing down the chain.","required":["template"],"properties":{"template":{"minLength":1,"title":"Template","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.template","typeLabel":"string"},"arguments":{"items":{"type":"any","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.arguments.items.[INDEX]","typeLabel":"any"},"maxItems":10,"title":"Arguments","type":"array","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.arguments","typeLabel":"any[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.fallback_value","typeLabel":"any"},"function":{"const":"format","default":"format","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.next","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.35","typeLabel":"TableFormat · object"},{"type":"object","title":"TableDateDiff","description":"The signed duration between this step's date and another date.\n\n``date_arithmetic`` shifts a date by a CONSTANT amount, so the gap between\ntwo date columns had no expression. Positive when the step's own date is\nthe later of the two.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.fallback_value","typeLabel":"any"},"function":{"const":"date_diff","default":"date_diff","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.next","typeLabel":"any"},"other":{"type":"any","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.other","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.source_step","typeLabel":"any"},"unit":{"default":"days","enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36.unit","typeLabel":"enum\u003cstring>"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.36","typeLabel":"TableDateDiff · object"},{"type":"object","title":"TableKeywords","description":"The most frequent meaningful words in a text or list value.\n\nReads a body of text (a scraped page, a bio, a job description) and\nreturns the words that carry its subject, ordered most frequent first.\nStopwords (\"the\", \"and\", \"with\") are dropped: a frequency count that keeps\nthem returns the same five words for every row and says nothing about any\nof them.\n\nDeterministic and pure: no model call, so a keyword column costs nothing\nand re-runs identically.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.fallback_value","typeLabel":"any"},"function":{"const":"keywords","default":"keywords","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.function","typeLabel":"string"},"limit":{"default":10,"description":"How many keywords to keep, most frequent first.","maximum":100,"minimum":1,"title":"Limit","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.limit","typeLabel":"integer"},"min_length":{"default":3,"description":"Shortest word to consider; anything shorter is noise.","maximum":20,"minimum":1,"title":"Min Length","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.min_length","typeLabel":"integer"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.37","typeLabel":"TableKeywords · object"},{"type":"object","title":"TableListFilter","description":"Keep only the list items whose field passes a test.\n\nAn enrichment payload lands as a list of objects (every job opening, every\nfunding round, every contact) and the row usually wants a subset of it:\nthe engineering roles, the rounds after 2024, the contacts with an email.\nWithout this the whole list is the only thing a cell can hold.\n\n``field`` is a dotted path INSIDE each item (``location.country``); leaving\nit empty tests the item itself, which is what a list of plain strings\nneeds. ``exists``/``missing`` ignore ``value``: they ask only whether the\nfield is there.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.fallback_value","typeLabel":"any"},"field":{"default":"","description":"Dotted path inside each item; empty tests the item itself.","maxLength":200,"title":"Field","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.field","typeLabel":"string"},"function":{"const":"list_filter","default":"list_filter","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.next","typeLabel":"any"},"operator":{"default":"eq","enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","exists","missing"],"title":"Operator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.operator","typeLabel":"enum\u003cstring>"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.source_step","typeLabel":"any"},"value":{"type":"any","title":"Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38.value","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.38","typeLabel":"TableListFilter · object"},{"type":"object","title":"TableListSort","description":"Order a list, ascending or descending.\n\n``list_unique`` and ``list_join`` both preserve whatever order the source\nhappened to arrive in, which is fine until the cell is meant to be READ:\na top-3 of anything, a chronological history, an alphabetised tag list.\n\n``field`` names the dotted path to sort objects BY; empty sorts the items\nthemselves. Values that cannot be compared with each other (a number next\nto a string) are ordered by type first, so the sort is total instead of\nraising on the row where the data is mixed.","properties":{"direction":{"default":"asc","enum":["asc","desc"],"title":"Direction","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.direction","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.fallback_value","typeLabel":"any"},"field":{"default":"","description":"Dotted path inside each item to sort by; empty sorts the items.","maxLength":200,"title":"Field","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.field","typeLabel":"string"},"function":{"const":"list_sort","default":"list_sort","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.39","typeLabel":"TableListSort · object"},{"type":"object","title":"TableListIntersect","description":"The values this list shares with another: the overlap, in the first list's order.\n\nThe scoring question every ICP fit column asks: which of the buyer's tags,\ntechnologies or keywords are ALSO on my target list. Doing it by hand meant\none ``if_then_else`` per tag.\n\n``other`` is a column holding the second list, or literal text split on\n``separator``. Matching ignores case and surrounding spaces, because the\ntwo lists come from different sources and \"Shopify \" never equals \"shopify\"\nwhen it matters most.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.fallback_value","typeLabel":"any"},"function":{"const":"list_intersect","default":"list_intersect","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.next","typeLabel":"any"},"other":{"type":"any","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.other","typeLabel":"any"},"separator":{"default":",","description":"Splits ``other`` when it is text rather than a list.","maxLength":10,"title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.separator","typeLabel":"string"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.40","typeLabel":"TableListIntersect · object"},{"type":"object","title":"TableTextSimilarity","description":"How alike two pieces of text are, as a percentage.\n\nThe dedupe and match question: is \"Acme Inc.\" the same company as \"Acme,\nInc\"? An exact comparison says no and a human says obviously yes, so the\nhonest answer is a number the row can threshold on.\n\nCase and surrounding whitespace never count: they are formatting, not\ndifference. 100 means identical after that normalisation, 0 means nothing\nin common.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.fallback_value","typeLabel":"any"},"function":{"const":"text_similarity","default":"text_similarity","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.next","typeLabel":"any"},"other":{"type":"any","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.other","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.41","typeLabel":"TableTextSimilarity · object"},{"type":"object","title":"TableDetectLanguage","description":"The language a piece of text is written in, as an ISO 639-1 code.\n\nRoutes a row before anything expensive touches it: which sequence to\nenrol a lead into, which reviewer sees a scraped page, whether to\ntranslate at all.\n\nScript comes first (Cyrillic, Greek, Hebrew, Arabic, Han, kana and\nhangul each answer on their own) and Latin text is decided by the\nfunction words it uses. That is a heuristic, not a model: it is\ndeterministic, free, and honest about not knowing, returning null when\nthe text is too short or matches nothing.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42.fallback_value","typeLabel":"any"},"function":{"const":"detect_language","default":"detect_language","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.42","typeLabel":"TableDetectLanguage · object"},{"type":"object","title":"TableScoreWords","description":"Score text by the weighted words it contains.\n\nThe rules half of lead scoring, without a model: \"enterprise\" is worth 3,\n\"student\" is worth -5, and the cell adds up whatever the row's text,\ntags or tech stack actually say. Expressing the same thing with\n``if_then_else`` needs one step per word and runs out of chain depth at ten.\n\nWeights are a plain object: word or phrase to number. Matching is\ncase-insensitive; a multi-word key matches as a phrase. ``count_repeats``\ndecides whether saying \"enterprise\" three times scores three times, which\nis the difference between weighing a claim and weighing a page.","properties":{"count_repeats":{"default":false,"description":"Score every occurrence rather than once per distinct word.","title":"Count Repeats","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.count_repeats","typeLabel":"boolean"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.fallback_value","typeLabel":"any"},"function":{"const":"score_words","default":"score_words","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.source_step","typeLabel":"any"},"weights":{"additionalProperties":{"type":"number","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.weights.additionalProperties","typeLabel":"number"},"description":"Word or phrase to score, e.g. {'enterprise': 3, 'student': -5}.","title":"Weights","type":"object","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43.weights","typeLabel":"Weights · object"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.43","typeLabel":"TableScoreWords · object"},{"type":"object","title":"TableHash","description":"Hash a value: the identifier ad platforms and clean rooms ask for.\n\nUploading an audience means handing over hashed emails, never raw ones,\nand the hash has to be produced the way the platform specifies:\nlowercased and trimmed first, hex digest out. That normalisation is the\npart people get wrong by hand, so it happens here rather than in three\nchained steps.","properties":{"algorithm":{"default":"sha256","enum":["sha256","sha1","md5"],"title":"Algorithm","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.algorithm","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.fallback_value","typeLabel":"any"},"function":{"const":"hash","default":"hash","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.next","typeLabel":"any"},"normalize":{"default":true,"description":"Trim and lowercase before hashing, as ad platforms require.","title":"Normalize","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.normalize","typeLabel":"boolean"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.44","typeLabel":"TableHash · object"},{"type":"object","title":"TableUriEncode","description":"Percent-encode a value so it survives being put in a URL.\n\nEvery search-URL column builds the same thing (a query string with a\ncompany name in it) and every one of them breaks on the first ampersand\nor accent. Encoding belongs one step before the URL is assembled, not in\na regex chain that handles the four characters someone remembered.\n\n``component`` escapes everything reserved, which is what a query value\nneeds; ``full`` leaves ``:/?#`` alone so an entire URL stays usable.\nLists are encoded item by item.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.fallback_value","typeLabel":"any"},"function":{"const":"uri_encode","default":"uri_encode","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.function","typeLabel":"string"},"mode":{"default":"component","enum":["component","full"],"title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.mode","typeLabel":"enum\u003cstring>"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.45","typeLabel":"TableUriEncode · object"},{"type":"object","title":"TableUrlValid","description":"Whether a value is a usable web address.\n\nThe gate in front of every scrape, screenshot and HTTP column: a row whose\n\"website\" cell holds \"n/a\", \"coming soon\" or a bare company name should\nnever spend a credit finding that out. True means the value parses as a\nhost with a real-looking domain, not that the site answers. A formula\ncannot make a request, and pretending otherwise would be the one dishonest\nthing this function could do.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.fallback_value","typeLabel":"any"},"function":{"const":"url_valid","default":"url_valid","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.next","typeLabel":"any"},"require_scheme":{"default":false,"description":"Demand http:// or https://; off accepts a bare domain.","title":"Require Scheme","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.require_scheme","typeLabel":"boolean"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.46","typeLabel":"TableUrlValid · object"},{"type":"object","title":"TableEmailPermutations","description":"The candidate work-email addresses for a name at a domain.\n\nWhat a verifier needs to be pointed at: nine or so patterns companies\nactually use, in the order they are actually common, so the cheapest\nverification step has a list to work through instead of one guess.\n\nThe piped value is the person's name: \"Ada Lovelace\", or a first name\nwith ``last_name`` supplying the rest. Anything after the first and last\ntoken (middle names, suffixes) is ignored rather than permuted, which is\nwhat keeps the list nine long instead of ninety.","properties":{"domain":{"type":"any","title":"Domain","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.domain","typeLabel":"any"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.fallback_value","typeLabel":"any"},"function":{"const":"email_permutations","default":"email_permutations","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.function","typeLabel":"string"},"last_name":{"type":"any","title":"Last Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.last_name","typeLabel":"any"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.47","typeLabel":"TableEmailPermutations · object"},{"type":"object","title":"TableRoundRobin","description":"Assign each row to one of a list of owners, evenly.\n\nLead routing, as a column: the rep, the region, the sending inbox. The\npiped value is the row's IDENTITY (its email, domain or id) and the\nowner is derived from a hash of it rather than from the row's position.\n\nThat is a deliberate departure from a counter-based round robin, and it is\nthe only version that behaves: re-running the column, adding rows above,\nor sorting the view all leave every existing row with the owner it already\nhad. A counter reassigns half the table the first time anything moves,\nwhich in a CRM means the wrong rep gets the follow-up.","properties":{"assignees":{"description":"The owners to distribute across, e.g. rep names or inboxes.","items":{"type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.assignees.items.[INDEX]","typeLabel":"string"},"maxItems":200,"title":"Assignees","type":"array","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.assignees","typeLabel":"string[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.fallback_value","typeLabel":"any"},"function":{"const":"round_robin","default":"round_robin","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48.source_step","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.48","typeLabel":"TableRoundRobin · object"},{"type":"object","title":"TableWeightedRoundRobin","description":"Assign each row to an owner, in proportion to each owner's share.\n\nThe version real teams need: a senior rep takes three leads for every one\na new hire gets, one region absorbs twice the volume of another. Shares are\nwhole numbers and mean exactly what they look like: 3 and 1 is three\nquarters and one quarter.\n\nStable per row for the same reason ``round_robin`` is: the owner comes from\na hash of the row's identity, so nothing already assigned moves when the\ntable grows or the view is sorted. Changing the SHARES does move rows,\nbecause that is what changing them means.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"type":"any","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.fallback_value","typeLabel":"any"},"function":{"const":"weighted_round_robin","default":"weighted_round_robin","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.function","typeLabel":"string"},"next":{"type":"any","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.next","typeLabel":"any"},"source_column_id":{"type":"any","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.source_column_id","typeLabel":"any"},"source_step":{"type":"any","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.source_step","typeLabel":"any"},"weights":{"additionalProperties":{"type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.weights.additionalProperties","typeLabel":"integer"},"description":"Owner to share, e.g. {'ada': 3, 'grace': 1}.","title":"Weights","type":"object","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49.weights","typeLabel":"Weights · object"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.49","typeLabel":"TableWeightedRoundRobin · object"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next.oneOf.50","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.next","typeLabel":"TableCopy · object | TableChangeCase · object | TableTrim · object | TableReplace · object | TableRegexExtract · object | TableRegexReplace · object | TableConcatenate · object | TableRound · object | TableClamp · object | TableDateFormat · object | TableDateExtract · object | TableDateArithmetic · object | TableListFirst · object | TableListLast · object | TableListNth · object | TableListJoin · object | TableListCount · object | TableListPluck · object | TableListUnique · object | TableListSplit · object | TableCoalesce · object | TableIfThenElse · object | TableConditions · object | TableValueMapping · object | TableToString · object | TableToInt · object | TableToFloat · object | TableToBool · object | TableToDate · object | TablePhoneE164 · object | TableUtmParse · object | TableUrlDomain · object | TableCompanyDomain · object | TableGetPath · object | TableFormat · object | TableDateDiff · object | TableKeywords · object | TableListFilter · object | TableListSort · object | TableListIntersect · object | TableTextSimilarity · object | TableDetectLanguage · object | TableScoreWords · object | TableHash · object | TableUriEncode · object | TableUrlValid · object | TableEmailPermutations · object | TableRoundRobin · object | TableWeightedRoundRobin · object | null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.7","typeLabel":"TableArithmetic · object"},{"type":"object","title":"TableRound","description":"Round a numeric value to a precision.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"round","default":"round","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.function","typeLabel":"string"},"mode":{"default":"round","enum":["round","ceil","floor"],"title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.mode","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.next","typeLabel":"null"},"precision":{"default":0,"title":"Precision","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.precision","typeLabel":"integer"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.8.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.8","typeLabel":"TableRound · object"},{"type":"object","title":"TableClamp","description":"Clamp a numeric value to an inclusive range.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"clamp","default":"clamp","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.function","typeLabel":"string"},"max_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Max Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Max Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Max Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Max Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Max Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.max_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"min_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Min Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Min Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Min Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Min Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Min Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.min_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.9","typeLabel":"TableClamp · object"},{"type":"object","title":"TableDateFormat","description":"Convert a date between iso/unix/unix_ms representations.","required":["input_format","output_format"],"properties":{"input_format":{"enum":["iso","unix","unix_ms"],"title":"Input Format","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.input_format","typeLabel":"enum\u003cstring>"},"output_format":{"enum":["iso","unix","unix_ms"],"title":"Output Format","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.output_format","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_format","default":"date_format","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.10","typeLabel":"TableDateFormat · object"},{"type":"object","title":"TableDateExtract","description":"Extract a component (year, month, ...) from a date value.","required":["component"],"properties":{"component":{"enum":["year","month","day","hour","minute","second"],"title":"Component","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.component","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_extract","default":"date_extract","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.11","typeLabel":"TableDateExtract · object"},{"type":"object","title":"TableDateArithmetic","description":"Add or subtract a fixed duration from a date value.","required":["operator","amount","unit"],"properties":{"amount":{"title":"Amount","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.amount","typeLabel":"integer"},"operator":{"enum":["add","subtract"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.operator","typeLabel":"enum\u003cstring>"},"unit":{"enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.unit","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_arithmetic","default":"date_arithmetic","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.12","typeLabel":"TableDateArithmetic · object"},{"type":"object","title":"TableListFirst","description":"Take the first element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_first","default":"list_first","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.13.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.13","typeLabel":"TableListFirst · object"},{"type":"object","title":"TableListLast","description":"Take the last element of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_last","default":"list_last","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.14.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.14","typeLabel":"TableListLast · object"},{"type":"object","title":"TableListNth","description":"Take the element at an index of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_nth","default":"list_nth","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.function","typeLabel":"string"},"index":{"default":0,"title":"Index","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.index","typeLabel":"integer"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.15.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.15","typeLabel":"TableListNth · object"},{"type":"object","title":"TableListJoin","description":"Join list elements into a string with a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_join","default":"list_join","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.next","typeLabel":"null"},"separator":{"default":", ","title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.separator","typeLabel":"string"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.16.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.16","typeLabel":"TableListJoin · object"},{"type":"object","title":"TableListCount","description":"Count the elements of a list value.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_count","default":"list_count","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.17.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.17","typeLabel":"TableListCount · object"},{"type":"object","title":"TableListPluck","description":"Pull one field out of every object in a list.\n\nEnrichment payloads routinely carry lists of objects\n(``[{\"value\": \"Payroll\"}, {\"value\": \"HR\"}]``) where the useful thing is\nthe field, not the wrapper. Plucking turns that into ``[\"Payroll\", \"HR\"]``\nso ``list_join`` and friends can work on it; items without the field\nbecome empty and scalar items pass through unchanged.","required":["field"],"properties":{"field":{"minLength":1,"title":"Field","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.field","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_pluck","default":"list_pluck","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.18","typeLabel":"TableListPluck · object"},{"type":"object","title":"TableListUnique","description":"De-duplicate list elements, keeping first-seen order.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_unique","default":"list_unique","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.19.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.19","typeLabel":"TableListUnique · object"},{"type":"object","title":"TableListSplit","description":"Split a string value into a list on a separator.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_split","default":"list_split","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.next","typeLabel":"null"},"separator":{"default":",","title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.separator","typeLabel":"string"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.20.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.20","typeLabel":"TableListSplit · object"},{"type":"object","title":"TableCoalesce","description":"Substitute a default (a literal or another column) when the input is empty.","required":["default_value"],"properties":{"default_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.0.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.1.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Default Value","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Default Value","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Default Value","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Default Value","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Default Value","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value.oneOf.6","typeLabel":"null"}],"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.default_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"coalesce","default":"coalesce","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.21","typeLabel":"TableCoalesce · object"},{"type":"object","title":"TableIfThenElse","description":"Pick one of two values based on a comparison.\n\nEach of the three slots takes a literal or a column, so this expresses both\n\"if this column is over that column\" and \"use A, else use B\". Neither of\nthose was reachable while they were constants.","required":["operator"],"properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.operator","typeLabel":"enum\u003cstring>"},"compare_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.compare_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"else_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Else Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Else Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Else Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Else Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Else Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.else_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"if_then_else","default":"if_then_else","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.source_step","typeLabel":"integer | null"},"then_value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Then Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Then Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Then Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Then Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Then Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22.then_value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.22","typeLabel":"TableIfThenElse · object"},{"type":"object","title":"TableConditions","description":"Fold several comparisons into ONE boolean.\n\nThe engine's only boolean combinator, and the shape a column's\n``run_condition`` is authored in: \"only run where Employees > 50 AND\nCountry is US\". Nothing else here joins predicates: ``if_then_else``\ncompares exactly one pair and returns a value rather than a verdict. So\nwithout this a multi-clause gate could only be reached by chaining steps\nthat pipe a truthy stand-in forward, which no editor could read back.\n\nOne joiner over clauses and, at most one level down, groups of clauses:\n\"A and (B or C)\". That is precisely the row filter's shape, so a view's\nfilter can be saved as a gate and read back as a filter without loss; a\ndeeper tree would be expressible on one side only. Reads its clauses'\noperands directly and ignores the piped input, so it is a leaf rather\nthan a transform.","required":["clauses"],"properties":{"clauses":{"items":{"oneOf":[{"type":"object","title":"GateClause","description":"One comparison inside a :class:`TableConditions` step.\n\n``source`` is an ``Operand`` rather than a bare ``UUID`` deliberately, and\nthe dependency walk is the reason: ``chain_refs._walk_for_column_refs`` collects\n:class:`ColumnRef` instances reflectively wherever they are nested, but a\nbare UUID on a nested model is invisible to it. Spelled as an operand, a\nclause's column lands in ``run_condition_column_ids`` (and therefore in\nthe compute page's read projection) for free. Spelled as a UUID it would\nevaluate against a missing value on every row.\n\n``compare_value`` also admits a list of strings, which is what the two list\noperators take: the terms a filter panel collects as chips arrive exactly as\nthe row filter receives them, and a string holding ``\"a, b, c\"`` is read the\nsame way, so a hand-typed gate is not held to a stricter shape.","required":["operator"],"properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","contains_any_of","not_contains_any_of","starts_with","is_empty","is_not_empty","is_true","is_false"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.operator","typeLabel":"enum\u003cstring>"},"compare_value":{"type":"any","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.compare_value","typeLabel":"any"},"source":{"type":"any","title":"Source","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0.source","typeLabel":"any"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.0","typeLabel":"GateClause · object"},{"type":"object","title":"GateGroup","description":"A parenthesised run of clauses, joined among themselves.\n\nHolds clauses and never other groups: one level of nesting is expressible\nand a second is not, by construction rather than by validation. That is the\nrow filter's own rule (``TableRowFilterGroup``), adopted here for the same\nreason and one more: a filter can only be saved as a gate losslessly if the\ngate can say exactly what the filter says (``A and (B or C)``) and no\nmore, so nothing a gate expresses is ever unreadable as a filter.","required":["clauses"],"properties":{"clauses":{"items":{"description":"One comparison inside a :class:`TableConditions` step.\n\n``source`` is an ``Operand`` rather than a bare ``UUID`` deliberately, and\nthe dependency walk is the reason: ``chain_refs._walk_for_column_refs`` collects\n:class:`ColumnRef` instances reflectively wherever they are nested, but a\nbare UUID on a nested model is invisible to it. Spelled as an operand, a\nclause's column lands in ``run_condition_column_ids`` (and therefore in\nthe compute page's read projection) for free. Spelled as a UUID it would\nevaluate against a missing value on every row.\n\n``compare_value`` also admits a list of strings, which is what the two list\noperators take: the terms a filter panel collects as chips arrive exactly as\nthe row filter receives them, and a string holding ``\"a, b, c\"`` is read the\nsame way, so a hand-typed gate is not held to a stricter shape.","properties":{"operator":{"enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","contains_any_of","not_contains_any_of","starts_with","is_empty","is_not_empty","is_true","is_false"],"title":"Operator","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].operator","typeLabel":"enum\u003cstring>"},"compare_value":{"type":"any","title":"Compare Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].compare_value","typeLabel":"any"},"source":{"type":"any","title":"Source","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX].source","typeLabel":"any"}},"required":["operator"],"title":"GateClause","type":"object","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses.items.[INDEX]","typeLabel":"GateClause · object"},"maxItems":8,"minItems":1,"title":"Clauses","type":"array","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.clauses","typeLabel":"GateClause · object[]"},"joiner":{"default":"and","enum":["and","or"],"title":"Joiner","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.joiner","typeLabel":"enum\u003cstring>"},"type":{"const":"group","default":"group","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX].oneOf.1","typeLabel":"GateGroup · object"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses.items.[INDEX]","typeLabel":"GateClause · object | GateGroup · object"},"maxItems":8,"minItems":1,"title":"Clauses","type":"array","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.clauses","typeLabel":"(GateClause · object | GateGroup · object)[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"conditions","default":"conditions","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.function","typeLabel":"string"},"joiner":{"default":"and","enum":["and","or"],"title":"Joiner","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.joiner","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.next","typeLabel":"null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.23","typeLabel":"TableConditions · object"},{"type":"object","title":"TableValueMapping","description":"Map input values through a lookup table.","required":["mapping"],"properties":{"mapping":{"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.1","typeLabel":"integer"},{"type":"number","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.2","typeLabel":"number"},{"type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.3","typeLabel":"boolean"},{"type":"null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping.additionalProperties.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping.additionalProperties","typeLabel":"string | integer | number | boolean | null"},"title":"Mapping","type":"object","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.mapping","typeLabel":"Mapping · object"},"default_value":{"oneOf":[{"type":"string","title":"Default Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.default_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Default Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.default_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Default Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.default_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Default Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.default_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Default Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.default_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.default_value","typeLabel":"string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"value_mapping","default":"value_mapping","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.24","typeLabel":"TableValueMapping · object"},{"type":"object","title":"TableToString","description":"Coerce the input to a string.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_string","default":"to_string","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.25.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.25","typeLabel":"TableToString · object"},{"type":"object","title":"TableToInt","description":"Coerce the input to an integer.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_int","default":"to_int","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.26.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.26","typeLabel":"TableToInt · object"},{"type":"object","title":"TableToFloat","description":"Coerce the input to a float.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_float","default":"to_float","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.27.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.27","typeLabel":"TableToFloat · object"},{"type":"object","title":"TableToBool","description":"Coerce the input to a boolean.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_bool","default":"to_bool","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.28.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.28","typeLabel":"TableToBool · object"},{"type":"object","title":"TableToDate","description":"Coerce the input to a date.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"to_date","default":"to_date","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.function","typeLabel":"string"},"input_format":{"default":"auto","enum":["iso","unix","unix_ms","auto"],"title":"Input Format","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.input_format","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.29.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.29","typeLabel":"TableToDate · object"},{"type":"object","title":"TablePhoneE164","description":"Normalize a phone number to E.164 format.","properties":{"default_region":{"default":"US","title":"Default Region","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.default_region","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"phone_e164","default":"phone_e164","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.30.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.30","typeLabel":"TablePhoneE164 · object"},{"type":"object","title":"TableUtmParse","description":"Extract a UTM parameter from a URL value.","required":["parameter"],"properties":{"parameter":{"enum":["source","medium","campaign","term","content"],"title":"Parameter","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.parameter","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"utm_parse","default":"utm_parse","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.31","typeLabel":"TableUtmParse · object"},{"type":"object","title":"TableUrlDomain","description":"Reduce a URL to its bare registrable-looking host.\n\nA website field arrives as a whole URL (``https://www.acme.com/about``)\nbut the thing that joins, dedupes and enriches is ``acme.com``. Doing it\nwith ``regex_extract`` means every caller hand-writes the same fragile\npattern, so the parse lives here once and uses a real URL parser.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"url_domain","default":"url_domain","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.32.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.32","typeLabel":"TableUrlDomain · object"},{"type":"object","title":"TableCompanyDomain","description":"Reduce a company's website URL to the company's own registrable domain.\n\nThree differences from ``url_domain``, which stays the generic read (a\ncolumn of LinkedIn profile URLs legitimately reduces to ``linkedin.com``\nthere):\n\nHosts that name a platform rather than the company (LinkedIn and Facebook\npages, link aggregators, review sites, vendor partner directories) come out\nempty. A company whose only listed website is its LinkedIn page has no\nderivable domain, and an empty cell says so; ``linkedin.com`` is worse than\nempty because it joins, dedupes and syncs as if it were real.\n\nThe result is the domain someone REGISTERED, not the bare host: a provider\nthat lists ``careers.acme.com`` is describing ``acme.com``. A subdomain\njoins against nothing and sends an agent somewhere that often does not\nresolve. Page builders that give each customer their own label are the\nexception the Public Suffix List already encodes, so ``acme.wixsite.com``\nsurvives whole rather than collapsing into ``wixsite.com``.\n\n``company_name`` guards the case those two cannot: a directory listing\nreduces to the DIRECTORY owner's domain, so\n``cloudpartners.transform.microsoft.com`` becomes ``microsoft.com``: right\nshape, wrong company, and nothing downstream can tell. Pointed at the\ncolumn naming the employer, the domain is dropped when the two disagree.\nOptional: without it the other two rules still apply.","properties":{"company_name":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Company Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Company Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Company Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Company Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Company Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.company_name","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"company_domain","default":"company_domain","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.33","typeLabel":"TableCompanyDomain · object"},{"type":"object","title":"TableGetPath","description":"Read a dotted path out of an object- or list-valued cell.\n\nObject and list columns were storable but unreadable: nothing in the\ncatalog could reach a field inside one, so an enrichment payload landed in\na cell and stopped there. Segments index dicts by key and lists by integer\nposition: ``employees.count``, ``emails.0.address``.\n\n``output_type`` is declared rather than derived because a JSON path can\nland on anything, and the column's data type has to be known before a\nsingle row is evaluated.","required":["path"],"properties":{"path":{"minLength":1,"title":"Path","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.path","typeLabel":"string"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"get_path","default":"get_path","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.next","typeLabel":"null"},"output_type":{"description":"Type of a property. Used while creating/updating/deleting properties.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"title":"PropertyType","type":"string","default":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.output_type","typeLabel":"enum\u003cstring>"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.34","typeLabel":"TableGetPath · object"},{"type":"object","title":"TableFormat","description":"Build a string from a positional template and a list of arguments.\n\n``concatenate`` joins whole columns with one separator, which cannot\nproduce \"Enterprise: Acme (12.4%)\". Placeholders are positional only\n(``{0}``, ``{1}``) so the template stays data, not an expression language.\n\nLike ``concatenate`` this takes no ``source_column_id``: its inputs are its\narguments, not the value flowing down the chain.","required":["template"],"properties":{"template":{"minLength":1,"title":"Template","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.template","typeLabel":"string"},"arguments":{"items":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.1","typeLabel":"StepRef · object"},{"type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.2","typeLabel":"string"},{"type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.3","typeLabel":"integer"},{"type":"number","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.4","typeLabel":"number"},{"type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.5","typeLabel":"boolean"},{"type":"null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX].oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments.items.[INDEX]","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"maxItems":10,"title":"Arguments","type":"array","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.arguments","typeLabel":"(ColumnRef · object | StepRef · object | string | integer | number | boolean | null)[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"format","default":"format","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.next","typeLabel":"null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.35","typeLabel":"TableFormat · object"},{"type":"object","title":"TableDateDiff","description":"The signed duration between this step's date and another date.\n\n``date_arithmetic`` shifts a date by a CONSTANT amount, so the gap between\ntwo date columns had no expression. Positive when the step's own date is\nthe later of the two.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"date_diff","default":"date_diff","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.next","typeLabel":"null"},"other":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.other","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.source_step","typeLabel":"integer | null"},"unit":{"default":"days","enum":["days","hours","minutes","seconds"],"title":"Unit","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.36.unit","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.36","typeLabel":"TableDateDiff · object"},{"type":"object","title":"TableKeywords","description":"The most frequent meaningful words in a text or list value.\n\nReads a body of text (a scraped page, a bio, a job description) and\nreturns the words that carry its subject, ordered most frequent first.\nStopwords (\"the\", \"and\", \"with\") are dropped: a frequency count that keeps\nthem returns the same five words for every row and says nothing about any\nof them.\n\nDeterministic and pure: no model call, so a keyword column costs nothing\nand re-runs identically.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"keywords","default":"keywords","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.function","typeLabel":"string"},"limit":{"default":10,"description":"How many keywords to keep, most frequent first.","maximum":100,"minimum":1,"title":"Limit","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.limit","typeLabel":"integer"},"min_length":{"default":3,"description":"Shortest word to consider; anything shorter is noise.","maximum":20,"minimum":1,"title":"Min Length","type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.min_length","typeLabel":"integer"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.37.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.37","typeLabel":"TableKeywords · object"},{"type":"object","title":"TableListFilter","description":"Keep only the list items whose field passes a test.\n\nAn enrichment payload lands as a list of objects (every job opening, every\nfunding round, every contact) and the row usually wants a subset of it:\nthe engineering roles, the rounds after 2024, the contacts with an email.\nWithout this the whole list is the only thing a cell can hold.\n\n``field`` is a dotted path INSIDE each item (``location.country``); leaving\nit empty tests the item itself, which is what a list of plain strings\nneeds. ``exists``/``missing`` ignore ``value``: they ask only whether the\nfield is there.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.fallback_value","typeLabel":"string | integer | number | boolean | null"},"field":{"default":"","description":"Dotted path inside each item; empty tests the item itself.","maxLength":200,"title":"Field","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.field","typeLabel":"string"},"function":{"const":"list_filter","default":"list_filter","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.next","typeLabel":"null"},"operator":{"default":"eq","enum":["eq","neq","gt","lt","gte","lte","contains","not_contains","exists","missing"],"title":"Operator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.operator","typeLabel":"enum\u003cstring>"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.source_step","typeLabel":"integer | null"},"value":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38.value","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.38","typeLabel":"TableListFilter · object"},{"type":"object","title":"TableListSort","description":"Order a list, ascending or descending.\n\n``list_unique`` and ``list_join`` both preserve whatever order the source\nhappened to arrive in, which is fine until the cell is meant to be READ:\na top-3 of anything, a chronological history, an alphabetised tag list.\n\n``field`` names the dotted path to sort objects BY; empty sorts the items\nthemselves. Values that cannot be compared with each other (a number next\nto a string) are ordered by type first, so the sort is total instead of\nraising on the row where the data is mixed.","properties":{"direction":{"default":"asc","enum":["asc","desc"],"title":"Direction","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.direction","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.fallback_value","typeLabel":"string | integer | number | boolean | null"},"field":{"default":"","description":"Dotted path inside each item to sort by; empty sorts the items.","maxLength":200,"title":"Field","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.field","typeLabel":"string"},"function":{"const":"list_sort","default":"list_sort","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.39.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.39","typeLabel":"TableListSort · object"},{"type":"object","title":"TableListIntersect","description":"The values this list shares with another: the overlap, in the first list's order.\n\nThe scoring question every ICP fit column asks: which of the buyer's tags,\ntechnologies or keywords are ALSO on my target list. Doing it by hand meant\none ``if_then_else`` per tag.\n\n``other`` is a column holding the second list, or literal text split on\n``separator``. Matching ignores case and surrounding spaces, because the\ntwo lists come from different sources and \"Shopify \" never equals \"shopify\"\nwhen it matters most.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"list_intersect","default":"list_intersect","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.next","typeLabel":"null"},"other":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.other","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"separator":{"default":",","description":"Splits ``other`` when it is text rather than a list.","maxLength":10,"title":"Separator","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.separator","typeLabel":"string"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.40","typeLabel":"TableListIntersect · object"},{"type":"object","title":"TableTextSimilarity","description":"How alike two pieces of text are, as a percentage.\n\nThe dedupe and match question: is \"Acme Inc.\" the same company as \"Acme,\nInc\"? An exact comparison says no and a human says obviously yes, so the\nhonest answer is a number the row can threshold on.\n\nCase and surrounding whitespace never count: they are formatting, not\ndifference. 100 means identical after that normalisation, 0 means nothing\nin common.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"text_similarity","default":"text_similarity","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.next","typeLabel":"null"},"other":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Other","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.other","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.41","typeLabel":"TableTextSimilarity · object"},{"type":"object","title":"TableDetectLanguage","description":"The language a piece of text is written in, as an ISO 639-1 code.\n\nRoutes a row before anything expensive touches it: which sequence to\nenrol a lead into, which reviewer sees a scraped page, whether to\ntranslate at all.\n\nScript comes first (Cyrillic, Greek, Hebrew, Arabic, Han, kana and\nhangul each answer on their own) and Latin text is decided by the\nfunction words it uses. That is a heuristic, not a model: it is\ndeterministic, free, and honest about not knowing, returning null when\nthe text is too short or matches nothing.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"detect_language","default":"detect_language","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.42.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.42","typeLabel":"TableDetectLanguage · object"},{"type":"object","title":"TableScoreWords","description":"Score text by the weighted words it contains.\n\nThe rules half of lead scoring, without a model: \"enterprise\" is worth 3,\n\"student\" is worth -5, and the cell adds up whatever the row's text,\ntags or tech stack actually say. Expressing the same thing with\n``if_then_else`` needs one step per word and runs out of chain depth at ten.\n\nWeights are a plain object: word or phrase to number. Matching is\ncase-insensitive; a multi-word key matches as a phrase. ``count_repeats``\ndecides whether saying \"enterprise\" three times scores three times, which\nis the difference between weighing a claim and weighing a page.","properties":{"count_repeats":{"default":false,"description":"Score every occurrence rather than once per distinct word.","title":"Count Repeats","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.count_repeats","typeLabel":"boolean"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"score_words","default":"score_words","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.source_step","typeLabel":"integer | null"},"weights":{"additionalProperties":{"type":"number","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.weights.additionalProperties","typeLabel":"number"},"description":"Word or phrase to score, e.g. {'enterprise': 3, 'student': -5}.","title":"Weights","type":"object","uniqueKey":"run_condition.oneOf.1.chain.oneOf.43.weights","typeLabel":"Weights · object"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.43","typeLabel":"TableScoreWords · object"},{"type":"object","title":"TableHash","description":"Hash a value: the identifier ad platforms and clean rooms ask for.\n\nUploading an audience means handing over hashed emails, never raw ones,\nand the hash has to be produced the way the platform specifies:\nlowercased and trimmed first, hex digest out. That normalisation is the\npart people get wrong by hand, so it happens here rather than in three\nchained steps.","properties":{"algorithm":{"default":"sha256","enum":["sha256","sha1","md5"],"title":"Algorithm","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.algorithm","typeLabel":"enum\u003cstring>"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"hash","default":"hash","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.next","typeLabel":"null"},"normalize":{"default":true,"description":"Trim and lowercase before hashing, as ad platforms require.","title":"Normalize","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.normalize","typeLabel":"boolean"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.44.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.44","typeLabel":"TableHash · object"},{"type":"object","title":"TableUriEncode","description":"Percent-encode a value so it survives being put in a URL.\n\nEvery search-URL column builds the same thing (a query string with a\ncompany name in it) and every one of them breaks on the first ampersand\nor accent. Encoding belongs one step before the URL is assembled, not in\na regex chain that handles the four characters someone remembered.\n\n``component`` escapes everything reserved, which is what a query value\nneeds; ``full`` leaves ``:/?#`` alone so an entire URL stays usable.\nLists are encoded item by item.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"uri_encode","default":"uri_encode","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.function","typeLabel":"string"},"mode":{"default":"component","enum":["component","full"],"title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.mode","typeLabel":"enum\u003cstring>"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.45.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.45","typeLabel":"TableUriEncode · object"},{"type":"object","title":"TableUrlValid","description":"Whether a value is a usable web address.\n\nThe gate in front of every scrape, screenshot and HTTP column: a row whose\n\"website\" cell holds \"n/a\", \"coming soon\" or a bare company name should\nnever spend a credit finding that out. True means the value parses as a\nhost with a real-looking domain, not that the site answers. A formula\ncannot make a request, and pretending otherwise would be the one dishonest\nthing this function could do.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"url_valid","default":"url_valid","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.next","typeLabel":"null"},"require_scheme":{"default":false,"description":"Demand http:// or https://; off accepts a bare domain.","title":"Require Scheme","type":"boolean","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.require_scheme","typeLabel":"boolean"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.46.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.46","typeLabel":"TableUrlValid · object"},{"type":"object","title":"TableEmailPermutations","description":"The candidate work-email addresses for a name at a domain.\n\nWhat a verifier needs to be pointed at: nine or so patterns companies\nactually use, in the order they are actually common, so the cheapest\nverification step has a list to work through instead of one guess.\n\nThe piped value is the person's name: \"Ada Lovelace\", or a first name\nwith ``last_name`` supplying the rest. Anything after the first and last\ntoken (middle names, suffixes) is ignored rather than permuted, which is\nwhat keeps the list nine long instead of ninety.","properties":{"domain":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Domain","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Domain","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Domain","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Domain","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Domain","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.domain","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"email_permutations","default":"email_permutations","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.function","typeLabel":"string"},"last_name":{"oneOf":[{"type":"object","title":"ColumnRef","description":"A parameter that reads another column's cell value on the same row.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.0.column_id","typeLabel":"string\u003cuuid>"},"ref":{"const":"column","default":"column","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.0.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.0","typeLabel":"ColumnRef · object"},{"type":"object","title":"StepRef","description":"A parameter that reads an EARLIER step's output in the same chain.\n\nWithout this a chain could fork but never join. ``source_step`` already let\na unary step read back to an earlier result, but the only functions that\ntake several inputs at once (``concatenate`` and ``format``) could name\ncolumns and literals and nothing else. So \"upper-case the initial of one\ncolumn, do the same to another, then put the two together\" had no\nexpression: the two halves could be computed but never combined, and the\nauthor had to invert the whole formula into combine-first-then-extract.\n\nReading a step that is not strictly earlier has no value to read, so\n``chain_refs.validate_step_references`` rejects it at save time rather than\nletting the engine quietly substitute something else.","required":["step"],"properties":{"step":{"description":"1-based position of the step to read.","minimum":1,"title":"Step","type":"integer","isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.1.step","typeLabel":"integer"},"ref":{"const":"step","default":"step","title":"Ref","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.1.ref","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.1","typeLabel":"StepRef · object"},{"type":"string","title":"Last Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.2","typeLabel":"string"},{"type":"integer","title":"Last Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.3","typeLabel":"integer"},{"type":"number","title":"Last Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.4","typeLabel":"number"},{"type":"boolean","title":"Last Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.5","typeLabel":"boolean"},{"type":"null","title":"Last Name","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.last_name","typeLabel":"ColumnRef · object | StepRef · object | string | integer | number | boolean | null"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.47","typeLabel":"TableEmailPermutations · object"},{"type":"object","title":"TableRoundRobin","description":"Assign each row to one of a list of owners, evenly.\n\nLead routing, as a column: the rep, the region, the sending inbox. The\npiped value is the row's IDENTITY (its email, domain or id) and the\nowner is derived from a hash of it rather than from the row's position.\n\nThat is a deliberate departure from a counter-based round robin, and it is\nthe only version that behaves: re-running the column, adding rows above,\nor sorting the view all leave every existing row with the owner it already\nhad. A counter reassigns half the table the first time anything moves,\nwhich in a CRM means the wrong rep gets the follow-up.","properties":{"assignees":{"description":"The owners to distribute across, e.g. rep names or inboxes.","items":{"type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.assignees.items.[INDEX]","typeLabel":"string"},"maxItems":200,"title":"Assignees","type":"array","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.assignees","typeLabel":"string[]"},"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"round_robin","default":"round_robin","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.48.source_step","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.48","typeLabel":"TableRoundRobin · object"},{"type":"object","title":"TableWeightedRoundRobin","description":"Assign each row to an owner, in proportion to each owner's share.\n\nThe version real teams need: a senior rep takes three leads for every one\na new hire gets, one region absorbs twice the volume of another. Shares are\nwhole numbers and mean exactly what they look like: 3 and 1 is three\nquarters and one quarter.\n\nStable per row for the same reason ``round_robin`` is: the owner comes from\na hash of the row's identity, so nothing already assigned moves when the\ntable grows or the view is sorted. Changing the SHARES does move rows,\nbecause that is what changing them means.","properties":{"failure_mode":{"description":"What a formula cell resolves to when a step in its chain fails.\n\nApplies to the whole chain, read off the top-level function only.\n``SKIP`` is equivalent to ``SET_NULL`` for table cells (a cell always has a\nstored slot, so there is nothing to skip). Kept for shape compatibility.","enum":["pass_through_raw","set_null","static","skip"],"title":"TableFailureMode","type":"string","default":"set_null","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.failure_mode","typeLabel":"enum\u003cstring>"},"fallback_value":{"oneOf":[{"type":"string","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.3","typeLabel":"boolean"},{"type":"null","title":"Fallback Value","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.fallback_value.oneOf.4","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.fallback_value","typeLabel":"string | integer | number | boolean | null"},"function":{"const":"weighted_round_robin","default":"weighted_round_robin","title":"Function","type":"string","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.function","typeLabel":"string"},"next":{"oneOf":[{"title":"Next"},{"type":"null","title":"Next","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.next.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.next","typeLabel":"null"},"source_column_id":{"oneOf":[{"type":"string","title":"Source Column Id","format":"uuid","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.source_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Source Column Id","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.source_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.source_column_id","typeLabel":"string\u003cuuid> | null"},"source_step":{"oneOf":[{"type":"integer","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","minimum":1,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.source_step.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Source Step","description":"Read the result of an EARLIER step, by 1-based position, instead of the step immediately before. Lets a later step fork back to an intermediate value (splitting a URL once and then using both the raw split and something derived from it), which a strict pipeline cannot express. Ignored when source_column_id is set (a column wins over a step), and ignored by functions that read their arguments rather than the piped value. None reads the previous step.","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.source_step.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.source_step","typeLabel":"integer | null"},"weights":{"additionalProperties":{"type":"integer","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.weights.additionalProperties","typeLabel":"integer"},"description":"Owner to share, e.g. {'ada': 3, 'grace': 1}.","title":"Weights","type":"object","uniqueKey":"run_condition.oneOf.1.chain.oneOf.49.weights","typeLabel":"Weights · object"}},"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain.oneOf.49","typeLabel":"TableWeightedRoundRobin · object"}],"isRequired":true,"uniqueKey":"run_condition.oneOf.1.chain","typeLabel":"TableCopy · object | TableChangeCase · object | TableTrim · object | TableReplace · object | TableRegexExtract · object | TableRegexReplace · object | TableConcatenate · object | TableArithmetic · object | TableRound · object | TableClamp · object | TableDateFormat · object | TableDateExtract · object | TableDateArithmetic · object | TableListFirst · object | TableListLast · object | TableListNth · object | TableListJoin · object | TableListCount · object | TableListPluck · object | TableListUnique · object | TableListSplit · object | TableCoalesce · object | TableIfThenElse · object | TableConditions · object | TableValueMapping · object | TableToString · object | TableToInt · object | TableToFloat · object | TableToBool · object | TableToDate · object | TablePhoneE164 · object | TableUtmParse · object | TableUrlDomain · object | TableCompanyDomain · object | TableGetPath · object | TableFormat · object | TableDateDiff · object | TableKeywords · object | TableListFilter · object | TableListSort · object | TableListIntersect · object | TableTextSimilarity · object | TableDetectLanguage · object | TableScoreWords · object | TableHash · object | TableUriEncode · object | TableUrlValid · object | TableEmailPermutations · object | TableRoundRobin · object | TableWeightedRoundRobin · object"},"kind":{"const":"formula","default":"formula","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.1","typeLabel":"FormulaColumnDefinition · object"},{"type":"object","title":"EnrichmentColumnDefinition","description":"The per-row gate, verbatim; null runs every row.","required":["action_key"],"properties":{"action_key":{"description":"The enrichment action's registry key; validated against the catalog.","maxLength":100,"minLength":1,"title":"Action Key","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_key","typeLabel":"string"},"action_settings":{"oneOf":[{"type":"object","title":"UseAISettings","description":"Settings for the Use AI action, in both of its modes.\n\nONE action covers both \"answer from what the table already knows\" and\n\"go and find out\", because from the author's seat they are the same\nrequest with a different reach, and splitting them made people pick the\nwrong one. ``web_research`` is that reach, and it is what selects the\nmode: off runs a single completion over the row, on runs the bounded\nresearch agent (search, map, scrape, cite).\n\nIt defaults OFF. The cheap mode is the common one, a web run costs\nseveral times more per row, and a toggle that silently spends is the\nwrong default even when research is the better answer.\n\n``context`` is \"Provide context for task\"; ``examples`` are the few-shot\npairs that show the model what a good response looks like. Both are\nhard-capped so a pathological configuration cannot blow up the request or\nthe cost.\n\n``use_row_context`` defaults ON, and a column stored before the field\nexisted decodes to that same default (deliberately), so an author who\nnever thought to reference a column still gets a model that can see the\nrow. Turning it off narrows the run back to what the prompt itself names.\n\n``context_column_ids`` narrows ``use_row_context`` from the whole row to\na chosen subset: None (the default, and what every column stored before\nthe field existed decodes to) keeps every column (\"Entire row\" in the\neditor) while a list holds exactly the columns the author picked. It\nmeans nothing while ``use_row_context`` is off.\n\nThe remaining fields only bite in web mode. They are held on this one\nmodel rather than a nested \"agent settings\" object so that flipping\n``web_research`` never migrates a stored payload: a column that has been\nboth ways keeps whatever research scope it was last given.","properties":{"context":{"oneOf":[{"type":"string","title":"Context","maxLength":4000,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context.oneOf.0","typeLabel":"string"},{"type":"null","title":"Context","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context","typeLabel":"string | null"},"context_column_ids":{"oneOf":[{"type":"array","items":{"format":"uuid","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context_column_ids.oneOf.0.items.[INDEX]","typeLabel":"string\u003cuuid>"},"title":"Context Column Ids","description":"The columns folded in when use_row_context is on; None means every column (\"Entire row\"). Stored by identity so renames are safe, but deliberately NOT a dependency: a listed column that is later deleted simply stops appearing in the context rather than blocking the delete or joining the recompute graph.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context_column_ids.oneOf.0","typeLabel":"string\u003cuuid>[]"},{"type":"null","title":"Context Column Ids","description":"The columns folded in when use_row_context is on; None means every column (\"Entire row\"). Stored by identity so renames are safe, but deliberately NOT a dependency: a listed column that is later deleted simply stops appearing in the context rather than blocking the delete or joining the recompute graph.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context_column_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.context_column_ids","typeLabel":"string\u003cuuid>[] | null"},"examples":{"items":{"description":"One few-shot example: a sample input and the response it should get.","properties":{"input":{"maxLength":2000,"minLength":1,"title":"Input","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.examples.items.[INDEX].input","typeLabel":"string"},"output":{"maxLength":2000,"minLength":1,"title":"Output","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.examples.items.[INDEX].output","typeLabel":"string"}},"required":["input","output"],"title":"UseAIExample","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.examples.items.[INDEX]","typeLabel":"UseAIExample · object"},"maxItems":5,"title":"Examples","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.examples","typeLabel":"UseAIExample · object[]"},"find_work_email":{"default":false,"description":"Whether the model may buy a work email from the product's data suppliers while it researches, paid from the run's research budget. Off by default. For a column linked to a saved agent, the agent's own switch decides and this one is ignored.","title":"Find Work Email","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.find_work_email","typeLabel":"boolean"},"kind":{"const":"use_ai","default":"use_ai","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.kind","typeLabel":"string"},"read_linkedin_profile":{"default":false,"description":"Whether the model may read a LinkedIn profile through the product's data suppliers while it researches, paid from the run's research budget. Off by default; ignored on a column linked to a saved agent.","title":"Read Linkedin Profile","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.read_linkedin_profile","typeLabel":"boolean"},"saved_agent_id":{"oneOf":[{"type":"string","title":"Saved Agent Id","description":"Web research only: an org-level saved agent whose settings (effort, context) replace this column's own.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.saved_agent_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Saved Agent Id","description":"Web research only: an org-level saved agent whose settings (effort, context) replace this column's own.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.saved_agent_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.saved_agent_id","typeLabel":"string\u003cuuid> | null"},"starting_url_column_id":{"oneOf":[{"type":"string","title":"Starting Url Column Id","description":"Web research only: a column whose per-row value seeds the research. Stored by identity, so renames are safe.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.starting_url_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Starting Url Column Id","description":"Web research only: a column whose per-row value seeds the research. Stored by identity, so renames are safe.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.starting_url_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.starting_url_column_id","typeLabel":"string\u003cuuid> | null"},"stay_on_domain":{"default":false,"description":"Web research only: confine every site-targeting tool to the starting URL's domain.","title":"Stay On Domain","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.stay_on_domain","typeLabel":"boolean"},"use_business_context":{"default":false,"description":"Whether the org's AI business context is folded into the run's standing context. Off by default and folded at run time: the org edits its context in one place and every column that opted in follows, with no stored copy to go stale.","title":"Use Business Context","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.use_business_context","typeLabel":"boolean"},"use_row_context":{"default":true,"description":"Whether the rest of this row's columns are folded in as context, on top of whatever the prompt itself references.","title":"Use Row Context","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.use_row_context","typeLabel":"boolean"},"web_research":{"default":false,"description":"Whether the model may research the web. On turns this column into a bounded research agent that searches, reads pages and cites its sources; off answers from the row and the model's own knowledge. Off by default: a web run costs several times more per row.","title":"Web Research","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0.web_research","typeLabel":"boolean"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.0","typeLabel":"UseAISettings · object"},{"type":"object","title":"BuiltinAgentSettings","description":"Settings for a built-in agent column: which columns supply which facts.\n\nThe same contract an :class:`EnrichmentSettings` column carries, and for\nthe same reason. A built-in agent is configured entirely server-side\n(prompt, model, reach and output shape all live on the agent row), so the\nONE thing a column decides is where each declared input comes from.\n\nThose bound cells are also all the agent sees. Its predecessor folded in\nthe whole row (optionally narrowed to a chosen subset), which made the\nsame agent read a different question on every table, cost the most on the\nwidest ones, and quietly answer from whatever cell happened to sit beside\nthe one it wanted. Now an input reaches the prompt only by being declared\nand bound, keyed by the agent's CANONICAL name (``domain``,\n``full_name``), so renaming a column changes nothing here.\n\nA stored binding whose declaration is gone is ignored rather than\nresurrecting a fact nobody asked for.","properties":{"input_bindings":{"additionalProperties":{"format":"uuid","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.1.input_bindings.additionalProperties","typeLabel":"string\u003cuuid>"},"description":"Declared input name → the column that supplies it.","maxProperties":8,"title":"Input Bindings","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.1.input_bindings","typeLabel":"Input Bindings · object"},"kind":{"const":"builtin","default":"builtin","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.1.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.1","typeLabel":"BuiltinAgentSettings · object"},{"type":"object","title":"AgentSettings","description":"Settings for the Agent web-research action.\n\n``starting_url_column_id`` binds a column whose per-row value seeds the\nresearch (stored by identity, like prompt references, so renames are safe\nand deletes are detectable). ``stay_on_domain`` confines every tool that\ntargets a site to that URL's domain and therefore requires a starting URL\nto scope to.\n\nThe two tool toggles are split by what a tool RETURNS, not by how many\ncalls it makes: ``allow_search`` governs discovery (web search and site\nmapping, which return URLs and snippets), ``allow_fetch`` governs content\nreads (scraping one page and crawling several).\n\n``use_row_context`` defaults ON, and a column stored before the field\nexisted decodes to that same default: an investigation whose subject is\nnamed in a column the prompt never mentions is the ordinary case, not the\nexception.\n\n``context`` is deliberately uncapped here. This shape is the run-time\nhandoff into the research loop, and by the time it is built the context\nis ASSEMBLED text: the column's own standing context with the org's\nbusiness context folded onto it. The length cap belongs on what an author\ntypes, and it lives there: on ``UseAISettings.context``, checked when the\ncolumn is saved. Re-checking the assembled string here failed every cell of\na column that was perfectly valid when saved, purely because the org had\nwritten a thorough business context.","properties":{"allow_fetch":{"default":true,"description":"Tool toggle: whether the agent may scrape pages and crawl sites.","title":"Allow Fetch","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.allow_fetch","typeLabel":"boolean"},"allow_search":{"default":true,"description":"Tool toggle: whether the agent may search the web and map sites.","title":"Allow Search","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.allow_search","typeLabel":"boolean"},"context":{"oneOf":[{"type":"string","title":"Context","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.context.oneOf.0","typeLabel":"string"},{"type":"null","title":"Context","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.context.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.context","typeLabel":"string | null"},"effort":{"description":"How hard the Agent works on each row.\n\nNamed levels rather than raw step counts: the level is the user-facing\ncontract, and what each level buys (step and page budgets) is a product\ndecision the loop maps internally. Re-tuning budgets never invalidates\nstored columns.","enum":["low","standard","high"],"title":"AgentEffortLevel","type":"string","default":"standard","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.effort","typeLabel":"enum\u003cstring>"},"kind":{"const":"agent","default":"agent","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.kind","typeLabel":"string"},"saved_agent_id":{"oneOf":[{"type":"string","title":"Saved Agent Id","description":"An org-level saved agent this column's settings derive from.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.saved_agent_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Saved Agent Id","description":"An org-level saved agent this column's settings derive from.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.saved_agent_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.saved_agent_id","typeLabel":"string\u003cuuid> | null"},"starting_url_column_id":{"oneOf":[{"type":"string","title":"Starting Url Column Id","description":"A column whose per-row value is the research's starting URL.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.starting_url_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Starting Url Column Id","description":"A column whose per-row value is the research's starting URL.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.starting_url_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.starting_url_column_id","typeLabel":"string\u003cuuid> | null"},"stay_on_domain":{"default":false,"description":"Whether site-targeting tools are confined to the starting URL's domain.","title":"Stay On Domain","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.stay_on_domain","typeLabel":"boolean"},"use_row_context":{"default":true,"description":"Whether the rest of this row's columns are folded in as context, on top of whatever the prompt itself references.","title":"Use Row Context","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2.use_row_context","typeLabel":"boolean"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.2","typeLabel":"AgentSettings · object"},{"type":"object","title":"DevEchoSettings","description":"Settings for the development-only echo action.\n\nThe delay is configurable so pipeline tests can run fast; the action's\ndisplay name promises one second, which is the default.","properties":{"delay_ms":{"default":1000,"maximum":60000,"minimum":0,"title":"Delay Ms","type":"integer","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.3.delay_ms","typeLabel":"integer"},"kind":{"const":"dev_echo","default":"dev_echo","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.3.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.3","typeLabel":"DevEchoSettings · object"},{"type":"object","title":"DevFlakySettings","description":"Settings for the development-only intermittent-failure action.\n\nFailures are deterministic PER ROW: whether a given row fails is a pure\nfunction of the seed and the row's identity, so a failing row fails\nidentically on every run, which is what makes retry policy, partial\nfailure and the errored re-run scope testable at all. Changing the seed\nchanges WHICH rows fail.","properties":{"error_class":{"description":"The error class every failing row reports.","enum":["timeout","rate_limited","quota_exhausted","provider_error","network","schema_violation","refused","invalid_input","no_data","enrichment_failed","sources_unavailable","unexpected"],"title":"EnrichmentErrorClass","type":"string","default":"provider_error","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4.error_class","typeLabel":"enum\u003cstring>"},"failure_rate":{"default":0.5,"description":"The fraction of rows that fail.","maximum":1,"minimum":0,"title":"Failure Rate","type":"number","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4.failure_rate","typeLabel":"number"},"kind":{"const":"dev_flaky","default":"dev_flaky","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4.kind","typeLabel":"string"},"seed":{"oneOf":[{"type":"integer","title":"Seed","description":"Varies which rows fail; None derives purely from row identity.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4.seed.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Seed","description":"Varies which rows fail; None derives purely from row identity.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4.seed.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4.seed","typeLabel":"integer | null"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.4","typeLabel":"DevFlakySettings · object"},{"type":"object","title":"EnrichmentSettings","description":"Settings for a curated enrichment: which columns supply which facts.\n\nThe whole configuration of an enrichment column, and deliberately tiny.\nIts predecessor stored the entire fallback chain here: an ordered list of\nvendor operations, each with its own input mapping, assembled by the\ncustomer in the editor. That made the supply chain part of the customer's\ndata: visible in the API, editable by hand, and frozen at the moment they\nsaved it, so improving a chain meant migrating every column that had\ncopied it.\n\nNow the chain lives in the catalog and is resolved per run. A column\nstores only the outcome it wants (the action key) and where its inputs\ncome from, keyed by CANONICAL name (``full_name``, ``company_domain``),\nnever by whatever the vendor at the front of today's chain happens to call\nthem. Adding a supplier, reordering the chain or renaming a vendor's field\nchanges nothing here.","properties":{"input_bindings":{"additionalProperties":{"format":"uuid","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.5.input_bindings.additionalProperties","typeLabel":"string\u003cuuid>"},"description":"Canonical input name → the column that supplies it.","maxProperties":10,"title":"Input Bindings","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.5.input_bindings","typeLabel":"Input Bindings · object"},"kind":{"const":"enrichment","default":"enrichment","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.5.kind","typeLabel":"string"},"second_check":{"default":false,"description":"Whether an answer the enrichment marks as worth a second look (Verify email's catch-all) goes on to the next supplier instead of ending the lookup. Kept when no later supplier gives a definite answer. A second check that answers is charged as one more lookup. Only offered where the enrichment has such answers.","title":"Second Check","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.5.second_check","typeLabel":"boolean"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.5","typeLabel":"EnrichmentSettings · object"},{"type":"object","title":"ProviderSettings","description":"Settings for an integration-provider enrichment action.\n\nA provider action's inputs are STRUCTURED (named fields the provider's\noperation declares: full name, company domain, …), not a prompt. Each\nbinding maps one declared input name to the column whose per-row value\nfeeds it. Required inputs without a binding block the save; bound-but-empty\nrequired inputs skip the row at run time, before any provider call.","required":["input_bindings"],"properties":{"input_bindings":{"additionalProperties":{"format":"uuid","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.6.input_bindings.additionalProperties","typeLabel":"string\u003cuuid>"},"description":"Declared operation input name → source column id.","maxProperties":10,"minProperties":1,"title":"Input Bindings","type":"object","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.6.input_bindings","typeLabel":"Input Bindings · object"},"kind":{"const":"provider","default":"provider","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.6.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.6","typeLabel":"ProviderSettings · object"},{"type":"object","title":"HttpApiSettings","description":"Settings for the HTTP API action: one request per row, described here.\n\nThe URL is the column's prompt, so it can carry ``{{column}}`` tokens the\nsame way every other prompt does and gets the same picker. Everything a\nURL cannot express lives here, and the body and header values carry\ncolumn references of the same kind (see ``HttpRequestTemplate``).\n\n``json_path`` is what turns a response into a CELL: an API answers with a\ndocument, and the column usually wants one value out of it. Dotted, with\ninteger segments indexing arrays: ``data.0.email``. Left empty the whole\ndecoded body lands in the cell.","properties":{"body":{"description":"Request body for POST/PUT/PATCH: text and column references, or a string in which {{Column name}} stands for that column's value in the row. Each value is escaped for the body's format, read off the Content-Type header (JSON, form or XML), or JSON when there is none and the body is JSON: inside a JSON string it is escaped text; outside one it is a single JSON value of the cell's own type.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.body","typeLabel":"EnrichmentPromptTemplate · object"},"headers":{"additionalProperties":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers.additionalProperties","typeLabel":"EnrichmentPromptTemplate · object"},"description":"Sent with every row's request, e.g. an Authorization header. Each value is a template like the body: text and column references, or a string in which {{Column name}} stands for that column's value in the row.","maxProperties":20,"title":"Headers","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.headers","typeLabel":"Headers · object"},"json_path":{"default":"","description":"Dotted path to the value to keep, e.g. data.0.email.","maxLength":200,"title":"Json Path","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.json_path","typeLabel":"string"},"kind":{"const":"http_api","default":"http_api","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.kind","typeLabel":"string"},"method":{"default":"GET","enum":["GET","POST","PUT","PATCH","DELETE"],"title":"Method","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7.method","typeLabel":"enum\u003cstring>"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.7","typeLabel":"HttpApiSettings · object"},{"type":"object","title":"HttpApiJwtSettings","description":"Settings for the JWT-authenticated HTTP API action.\n\nSame request as :class:`HttpApiSettings` with the one thing that cannot be\nhand-written in a header: a JWT minted per run from the caller's own\nsecret, so the token in flight is short-lived instead of a permanent\ncredential pasted into a header field.","properties":{"body":{"description":"Request body for POST/PUT/PATCH: text and column references, or a string in which {{Column name}} stands for that column's value in the row. Each value is escaped for the body's format, read off the Content-Type header (JSON, form or XML), or JSON when there is none and the body is JSON: inside a JSON string it is escaped text; outside one it is a single JSON value of the cell's own type.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.body","typeLabel":"EnrichmentPromptTemplate · object"},"headers":{"additionalProperties":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers.additionalProperties","typeLabel":"EnrichmentPromptTemplate · object"},"description":"Sent with every row's request, e.g. an Authorization header. Each value is a template like the body: text and column references, or a string in which {{Column name}} stands for that column's value in the row.","maxProperties":20,"title":"Headers","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.headers","typeLabel":"Headers · object"},"json_path":{"default":"","maxLength":200,"title":"Json Path","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.json_path","typeLabel":"string"},"jwt_claims":{"additionalProperties":{"type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.jwt_claims.additionalProperties","typeLabel":"string"},"description":"Claims to sign, e.g. {'iss': 'oneprofile'}.","maxProperties":20,"title":"Jwt Claims","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.jwt_claims","typeLabel":"Jwt Claims · object"},"jwt_header":{"default":"Authorization","description":"Which header carries the token.","maxLength":100,"title":"Jwt Header","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.jwt_header","typeLabel":"string"},"jwt_prefix":{"default":"Bearer ","description":"Prefix in front of the token, e.g. 'Bearer '.","maxLength":20,"title":"Jwt Prefix","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.jwt_prefix","typeLabel":"string"},"jwt_secret":{"default":"","description":"The shared secret the token is signed with (HS256).","maxLength":1000,"title":"Jwt Secret","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.jwt_secret","typeLabel":"string"},"jwt_ttl_seconds":{"default":300,"description":"How long each minted token stays valid.","maximum":3600,"minimum":30,"title":"Jwt Ttl Seconds","type":"integer","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.jwt_ttl_seconds","typeLabel":"integer"},"kind":{"const":"http_api_jwt","default":"http_api_jwt","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.kind","typeLabel":"string"},"method":{"default":"GET","enum":["GET","POST","PUT","PATCH","DELETE"],"title":"Method","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8.method","typeLabel":"enum\u003cstring>"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.8","typeLabel":"HttpApiJwtSettings · object"},{"type":"object","title":"ReferenceSettings","description":"Settings for a reference column: which other table, matched how, bringing back what.\n\nEach row points at ONE row of ``table_id``: the first key pair whose\ncanonical value (``table_types_service.reference_key``) equals some row's\nvalue there wins, and among several such rows the first in that table's\norder. Columns are held by id, so a rename on either side changes nothing.\nEvery field has a column of its own on the reference's table, and the\ncell shows the matched row by the other table's name column; neither is\na setting.","properties":{"fields":{"description":"The values brought back from the matched row, each one a column.","items":{"description":"One value a reference brings back from the row it points at.\n\nNamed and typed when it is picked and never renamed afterwards: a rename in\nthe other table would otherwise re-key every snapshot and break every\nprompt, formula and promoted column that reads the field by its name. The\ntarget column's id says which value fills it, and its type is that\ncolumn's own, whole records included.","properties":{"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX].name","typeLabel":"string"},"target_column_id":{"description":"The column of the other table this field reads.","format":"uuid","title":"Target Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX].target_column_id","typeLabel":"string\u003cuuid>"},"field_type":{"description":"The type a user picks for a table column.\n\nOrdered as the picker shows them, which is also the order the groups below\nrun in: text-ish, then numeric, then choice, then structured.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","default":"text","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX].field_type","typeLabel":"enum\u003cstring>"}},"required":["target_column_id","name"],"title":"ReferenceField","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.fields.items.[INDEX]","typeLabel":"ReferenceField · object"},"maxItems":50,"title":"Fields","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.fields","typeLabel":"ReferenceField · object[]"},"keys":{"description":"The pairs to match on, tried in order.","items":{"description":"One pair a reference matches on: a column of this table against a column of the other.","properties":{"source_column_id":{"description":"The column of THIS table whose value is matched.","format":"uuid","title":"Source Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.keys.items.[INDEX].source_column_id","typeLabel":"string\u003cuuid>"},"target_column_id":{"description":"The column of the other table it must equal.","format":"uuid","title":"Target Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.keys.items.[INDEX].target_column_id","typeLabel":"string\u003cuuid>"}},"required":["source_column_id","target_column_id"],"title":"ReferenceKey","type":"object","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.keys.items.[INDEX]","typeLabel":"ReferenceKey · object"},"maxItems":3,"title":"Keys","type":"array","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.keys","typeLabel":"ReferenceKey · object[]"},"kind":{"const":"reference","default":"reference","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.kind","typeLabel":"string"},"managed_by_search":{"default":false,"description":"Kept by a people search that follows the other table.","title":"Managed By Search","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.managed_by_search","typeLabel":"boolean"},"table_id":{"oneOf":[{"type":"string","title":"Table Id","description":"The table each row points into.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.table_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Table Id","description":"The table each row points into.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.table_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9.table_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.9","typeLabel":"ReferenceSettings · object"},{"type":"object","title":"ReferencingRowsSettings","description":"Settings for a \"rows pointing here\" column: the other side of a reference.\n\n``reference_column_id`` is a reference column of ``table_id`` that points\ninto THIS table; each row here counts the rows there that point at it. The\nrows are listed by that table's name column, which is not a setting.","properties":{"kind":{"const":"referencing_rows","default":"referencing_rows","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.kind","typeLabel":"string"},"reference_column_id":{"oneOf":[{"type":"string","title":"Reference Column Id","description":"That table's reference column pointing into this one.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.reference_column_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Reference Column Id","description":"That table's reference column pointing into this one.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.reference_column_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.reference_column_id","typeLabel":"string\u003cuuid> | null"},"table_id":{"oneOf":[{"type":"string","title":"Table Id","description":"The table whose rows point here.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.table_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Table Id","description":"The table whose rows point here.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.table_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10.table_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.10","typeLabel":"ReferencingRowsSettings · object"},{"type":"object","title":"IntegrationLookupSettings","description":"Settings for the connected-integration record lookup: which record, where.\n\nThe identity VALUE is not here. It arrives per row through the action's\nbound input column, like ``resolve_hostname``'s hostname. What a column\nfixes is the address: which of the org's connections to ask\n(``integration_id``: an ID, not a name, because two connections to one\nsystem are two different destinations), which record type, and which of\nthe SDK's declared identity fields the value keys on.\n\nAll three are plain identifiers rather than integration-stratum types on\npurpose: this module sits in the table stratum, which may not import the\nintegration domain, so the executor (which lives above both) resolves and\nvalidates them at run time. ``identity_field`` defaults empty so a\nhalf-configured draft can be saved; the executor skips such a column\nrather than guessing a key.","properties":{"identity_field":{"default":"","description":"The identity field the bound value keys on, e.g. 'id' or 'email'.","maxLength":255,"title":"Identity Field","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11.identity_field","typeLabel":"string"},"integration_id":{"oneOf":[{"type":"string","title":"Integration Id","description":"The org's connection to read from.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11.integration_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Integration Id","description":"The org's connection to read from.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11.integration_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11.integration_id","typeLabel":"string\u003cuuid> | null"},"kind":{"const":"integration_lookup","default":"integration_lookup","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11.kind","typeLabel":"string"},"record_type":{"default":"","description":"The record type to fetch, e.g. 'user' or 'organization'.","maxLength":255,"title":"Record Type","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11.record_type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.11","typeLabel":"IntegrationLookupSettings · object"},{"type":"object","title":"LinkedInBrowserSettings","description":"Settings for an enrichment run through a sender's own LinkedIn browser.\n\nThe row's LinkedIn address is not here: it arrives per row as the resolved\nprompt, a single reference to the bound column, the way a record lookup's\nidentity value does. What a column fixes is whose browser does the work\n(``sender_profile_id``): an ID, because two senders may share a name.\nA plain identifier on purpose: this module sits in the table stratum, which\nmay not import the outreach senders, so the executor (which lives above\nboth) resolves the sender and its LinkedIn connection at run time. None\nkeeps a half-configured draft saveable; the executor fails such a cell\nwith what to do rather than guessing a sender.","properties":{"kind":{"const":"linkedin_browser","default":"linkedin_browser","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.12.kind","typeLabel":"string"},"sender_profile_id":{"oneOf":[{"type":"string","title":"Sender Profile Id","description":"The sender whose LinkedIn browser reads the profiles.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.12.sender_profile_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Sender Profile Id","description":"The sender whose LinkedIn browser reads the profiles.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.12.sender_profile_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.12.sender_profile_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.12","typeLabel":"LinkedInBrowserSettings · object"},{"type":"object","title":"LinkedInCompanyGraphSettings","description":"Settings for researching a company's buying committee in a sender's own LinkedIn.\n\nAs with ``LinkedInBrowserSettings``, the company's LinkedIn page arrives\nper row as the resolved prompt, and ``sender_profile_id`` names whose\nbrowser opens it. ``max_people`` caps how many people the People tab\nsearch reads, each charged as it is read. ``view_profiles`` also opens\neach committee member's profile from the people table the column fills\n(a LinkedIn profile view each).","properties":{"kind":{"const":"linkedin_company_graph","default":"linkedin_company_graph","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13.kind","typeLabel":"string"},"max_people":{"default":10,"description":"The most people one company's People tab search reads.","maximum":25,"minimum":1,"title":"Max People","type":"integer","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13.max_people","typeLabel":"integer"},"sender_profile_id":{"oneOf":[{"type":"string","title":"Sender Profile Id","description":"The sender whose LinkedIn browser opens the company pages.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13.sender_profile_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Sender Profile Id","description":"The sender whose LinkedIn browser opens the company pages.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13.sender_profile_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13.sender_profile_id","typeLabel":"string\u003cuuid> | null"},"view_profiles":{"default":false,"description":"Also open each committee member's LinkedIn profile from the people table.","title":"View Profiles","type":"boolean","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13.view_profiles","typeLabel":"boolean"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.13","typeLabel":"LinkedInCompanyGraphSettings · object"},{"type":"object","title":"SendToTableSettings","description":"Settings for the send-to-table action: where the row goes.","properties":{"kind":{"const":"send_to_table","default":"send_to_table","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.14.kind","typeLabel":"string"},"table_id":{"oneOf":[{"type":"string","title":"Table Id","description":"The table each row is appended to.","format":"uuid","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.14.table_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Table Id","description":"The table each row is appended to.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.14.table_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.14.table_id","typeLabel":"string\u003cuuid> | null"},"target_column":{"default":"","description":"The column in that table this row's value is written to.","maxLength":255,"title":"Target Column","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.14.target_column","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.14","typeLabel":"SendToTableSettings · object"},{"type":"object","title":"RepDataSettings","description":"Settings for the rep-data action: which part of the identity to return.","properties":{"field":{"default":"email_address","enum":["email_address","display_name","first_name","last_name","signature","all"],"title":"Field","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.15.field","typeLabel":"enum\u003cstring>"},"kind":{"const":"rep_data","default":"rep_data","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.15.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.15","typeLabel":"RepDataSettings · object"},{"type":"object","title":"OutreachActivitySettings","description":"Settings for the outreach-activity action: which signal to return.","properties":{"field":{"default":"summary","enum":["summary","in_live_sequence","live_sequences","reply_threads","total_matching_threads","last_reply_at","bounced"],"title":"Field","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.16.field","typeLabel":"enum\u003cstring>"},"kind":{"const":"outreach_activity","default":"outreach_activity","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.16.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.16","typeLabel":"OutreachActivitySettings · object"},{"type":"null","title":"Action Settings","description":"Action-specific configuration; its kind must match the action key. None uses the action's defaults.","uniqueKey":"run_condition.oneOf.2.action_settings.oneOf.17","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.action_settings","typeLabel":"UseAISettings · object | BuiltinAgentSettings · object | AgentSettings · object | DevEchoSettings · object | DevFlakySettings · object | EnrichmentSettings · object | ProviderSettings · object | HttpApiSettings · object | HttpApiJwtSettings · object | ReferenceSettings · object | ReferencingRowsSettings · object | IntegrationLookupSettings · object | LinkedInBrowserSettings · object | LinkedInCompanyGraphSettings · object | SendToTableSettings · object | RepDataSettings · object | OutreachActivitySettings · object | null"},"kind":{"const":"enrichment","default":"enrichment","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.2.kind","typeLabel":"string"},"model_key":{"oneOf":[{"type":"string","title":"Model Key","description":"The user-facing model catalog key this column runs on; None uses the action's default model.","maxLength":100,"uniqueKey":"run_condition.oneOf.2.model_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Model Key","description":"The user-facing model catalog key this column runs on; None uses the action's default model.","uniqueKey":"run_condition.oneOf.2.model_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.model_key","typeLabel":"string | null"},"output":{"oneOf":[{"type":"object","title":"EnrichmentOutputFields","description":"The fields-mode output shape: repeatable named typed fields.\n\nThe default is Clay's: one text field named ``response``.","properties":{"fields":{"items":{"description":"One named, typed value an enrichment run returns.\n\nField types are drawn from the platform's existing column types, so any\nsingle field can later be promoted into an ordinary typed column without\ninventing a new type system.","properties":{"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].name","typeLabel":"string"},"choices":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Choices","description":"The fixed option list for a select field; None elsewhere.","maxItems":200,"uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Choices","description":"The fixed option list for a select field; None elsewhere.","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].choices","typeLabel":"string[] | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Shown to the model: what this field should contain.","maxLength":500,"uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Shown to the model: what this field should contain.","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].description","typeLabel":"string | null"},"field_type":{"description":"The type a user picks for a table column.\n\nOrdered as the picker shows them, which is also the order the groups below\nrun in: text-ish, then numeric, then choice, then structured.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","default":"text","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX].field_type","typeLabel":"enum\u003cstring>"}},"required":["name"],"title":"EnrichmentOutputField","type":"object","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields.items.[INDEX]","typeLabel":"EnrichmentOutputField · object"},"maxItems":50,"minItems":1,"title":"Fields","type":"array","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.fields","typeLabel":"EnrichmentOutputField · object[]"},"mode":{"const":"fields","default":"fields","title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.2.output.oneOf.0.mode","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.output.oneOf.0","typeLabel":"EnrichmentOutputFields · object"},{"type":"object","title":"EnrichmentOutputRawSchema","description":"The advanced output shape: a raw strict-mode JSON schema, verbatim.\n\nHeld to every strict-mode constraint at SAVE time by the service layer.\nThe shape is stored exactly as authored, and validation failures name the\nexact violated rule rather than surfacing at run time.","required":["json_schema"],"properties":{"json_schema":{"additionalProperties":true,"description":"A strict-mode JSON schema with an object root.","title":"Json Schema","type":"object","isRequired":true,"uniqueKey":"run_condition.oneOf.2.output.oneOf.1.json_schema","typeLabel":"Json Schema · object"},"mode":{"const":"json_schema","default":"json_schema","title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.2.output.oneOf.1.mode","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.output.oneOf.1","typeLabel":"EnrichmentOutputRawSchema · object"}],"uniqueKey":"run_condition.oneOf.2.output","typeLabel":"EnrichmentOutputFields · object | EnrichmentOutputRawSchema · object"},"prompt":{"description":"The persisted instructions: ordered text and column-reference segments, references stored by column identity so renames never break a prompt.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.2.prompt.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.2.prompt.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.2.prompt.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.2.prompt","typeLabel":"EnrichmentPromptTemplate · object"}},"uniqueKey":"run_condition.oneOf.2","typeLabel":"EnrichmentColumnDefinition · object"},{"type":"object","title":"SourceColumnDefinition","description":"The per-row gate, verbatim; null runs every row.","properties":{"kind":{"const":"source","default":"source","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.3.kind","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.3","typeLabel":"SourceColumnDefinition · object"},{"type":"object","title":"ExportColumnDefinition","description":"The per-row gate, verbatim; null runs every row.","required":["integration_id","integration_type","record_type","fields"],"properties":{"fields":{"description":"The destination properties written, in mapping order.","items":{"description":"One destination property and where its value comes from.","properties":{"destination_field":{"maxLength":255,"minLength":1,"title":"Destination Field","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].destination_field","typeLabel":"string"},"source":{"description":"The per-row value written into ONE destination field.\n\n``template`` reuses the enrichment prompt format verbatim: ordered text\nand column-reference segments, references stored by column identity so a\nrename can never silently repoint a mapping and a delete is detectable.\n\nPASSTHROUGH RULE: when the template is exactly one whole-cell column\nreference (one segment, no path), the RAW stored cell value is sent, not\nits rendered text, so a LIST cell reaches a multi-select property as a list\nand a NUMBER cell as a number. Any other shape (text around a reference,\ntwo references, a path) renders to a string, because concatenation only\nhas a string answer.","properties":{"template":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source.template","typeLabel":"EnrichmentPromptTemplate · object"}},"title":"ExportValueSource","type":"object","isRequired":true,"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].source","typeLabel":"ExportValueSource · object"},"property_type":{"oneOf":[{"type":"string","title":"PropertyType","description":"The type the rendered value is coerced to before it is written, when the definition's ``typecast`` is on. It never creates the property: an export writes only to fields the destination already has. None means the destination's own type is authoritative and the value is sent as rendered.","enum":["string","integer","float","boolean","datetime","date","list","dict"],"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].property_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The type the rendered value is coerced to before it is written, when the definition's ``typecast`` is on. It never creates the property: an export writes only to fields the destination already has. None means the destination's own type is authoritative and the value is sent as rendered.","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].property_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].property_type","typeLabel":"enum\u003cstring> | null"},"skip_if_blank":{"oneOf":[{"type":"boolean","title":"Skip If Blank","description":"Per-field override of the definition's ``remove_blanks``; None inherits it. Set False on one field to send an explicit blank that clears a destination value.","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].skip_if_blank.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Skip If Blank","description":"Per-field override of the definition's ``remove_blanks``; None inherits it. Set False on one field to send an explicit blank that clears a destination value.","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].skip_if_blank.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX].skip_if_blank","typeLabel":"boolean | null"}},"required":["destination_field","source"],"title":"ExportFieldMapping","type":"object","uniqueKey":"run_condition.oneOf.4.fields.items.[INDEX]","typeLabel":"ExportFieldMapping · object"},"maxItems":200,"minItems":1,"title":"Fields","type":"array","isRequired":true,"uniqueKey":"run_condition.oneOf.4.fields","typeLabel":"ExportFieldMapping · object[]"},"integration_id":{"description":"The connected DESTINATION integration this column writes to.","format":"uuid","title":"Integration Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.integration_id","typeLabel":"string\u003cuuid>"},"integration_type":{"description":"Provider slug, denormalized so display needs no cross-stratum join.","maxLength":100,"minLength":1,"title":"Integration Type","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.integration_type","typeLabel":"string"},"record_type":{"description":"Which destination object to write: 'contacts', 'deals', a custom type.","maxLength":255,"minLength":1,"title":"Record Type","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.record_type","typeLabel":"string"},"action":{"description":"What one export cell does at the destination.\n\nIts own vocabulary, not a copy of the integration stratum's\n``WriteBehavior``: the members and their values differ, and\n``table_export_integration`` translates between the two at the seam\n(``_WRITE_BEHAVIOR_TO_EXPORT_ACTION``). Mirroring has no member here\nbecause it deletes and recreates the whole destination object, which is a\nwhole-object concern rather than a per-row one.","enum":["create","update","upsert"],"title":"ExportWriteAction","type":"string","default":"upsert","uniqueKey":"run_condition.oneOf.4.action","typeLabel":"enum\u003cstring>"},"batched":{"default":false,"description":"Write rows in destination-sized batches instead of one at a time. Faster, at a cost: the destination reports batch-level results, so receipts say 'pushed' rather than created-versus-updated, and a burst of writes can overwhelm automations attached to the destination. Off by default for that reason.","title":"Batched","type":"boolean","uniqueKey":"run_condition.oneOf.4.batched","typeLabel":"boolean"},"identity":{"description":"The destination fields the row may be identified by: the match key that decides create-versus-update, required for every action. More than one is an ordered FALLBACK, not a composite key: the first entry that renders a non-empty value for a row is the one that row is matched on, and the rest are not consulted. Order them most to least trustworthy ('match on work email, failing that personal email'). Matching on two fields at once is not offered because the destination contract takes a single identity field.","items":{"description":"One destination field the row may be IDENTIFIED by.\n\nDistinct from ``fields`` because identity is not written the way a\nproperty is: it selects the record for update/upsert, and it is what a\ncreate-only column matches on to avoid making a second copy. A row whose\nidentity renders empty is SKIPPED, never written. An unidentifiable row\nis the case the skip exists for.\n\nSeveral of these form an ordered FALLBACK, not a composite key: see\n``ExportColumnDefinition.identity``.","properties":{"destination_field":{"maxLength":255,"minLength":1,"title":"Destination Field","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].destination_field","typeLabel":"string"},"source":{"description":"The per-row value written into ONE destination field.\n\n``template`` reuses the enrichment prompt format verbatim: ordered text\nand column-reference segments, references stored by column identity so a\nrename can never silently repoint a mapping and a delete is detectable.\n\nPASSTHROUGH RULE: when the template is exactly one whole-cell column\nreference (one segment, no path), the RAW stored cell value is sent, not\nits rendered text, so a LIST cell reaches a multi-select property as a list\nand a NUMBER cell as a number. Any other shape (text around a reference,\ntwo references, a path) renders to a string, because concatenation only\nhas a string answer.","properties":{"template":{"description":"The persisted prompt: an ordered mix of text and column references.\n\nResolution to a per-row string happens at run time; the segment list is\nthe single source of truth the editor renders pills from and the executor\nsubstitutes values into.","properties":{"format":{"default":"plain","description":"How the editor reads text segments: 'markdown' renders them as markdown source, 'plain' verbatim. Templates saved before the field existed carry no value and default to 'plain', the safe reading. Purely editor metadata: run-time resolution concatenates text segments identically either way.","enum":["plain","markdown"],"title":"Format","type":"string","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.format","typeLabel":"enum\u003cstring>"},"segments":{"items":{"oneOf":[{"type":"object","title":"EnrichmentPromptTextSegment","description":"A literal run of prompt text.","required":["text"],"properties":{"text":{"maxLength":20000,"title":"Text","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.text","typeLabel":"string"},"type":{"const":"text","default":"text","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.0","typeLabel":"EnrichmentPromptTextSegment · object"},{"type":"object","title":"EnrichmentPromptColumnRefSegment","description":"An inline reference to another column's per-row value.\n\nStored by column IDENTITY, never by display name, so renaming a column can\nnever change what a prompt means, and a deleted column is detectable\nrather than silently resolving to nothing.","required":["column_id"],"properties":{"column_id":{"format":"uuid","title":"Column Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.column_id","typeLabel":"string\u003cuuid>"},"path":{"oneOf":[{"type":"string","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","maxLength":300,"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"null","title":"Path","description":"Dot-separated address of a sub-value inside a structured cell: output field names and zero-based list indices, e.g. 'competitors.0'. None references the whole cell. Emptiness for the required rule is judged on the addressed sub-value.","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.path","typeLabel":"string | null"},"required":{"default":true,"description":"Whether a row whose value for this column is empty is skipped entirely instead of run with a blank substituted.","title":"Required","type":"boolean","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"type":{"const":"column_ref","default":"column_ref","title":"Type","type":"string","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1.type","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX].oneOf.1","typeLabel":"EnrichmentPromptColumnRefSegment · object"}],"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments.items.[INDEX]","typeLabel":"EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object"},"maxItems":100,"title":"Segments","type":"array","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template.segments","typeLabel":"(EnrichmentPromptTextSegment · object | EnrichmentPromptColumnRefSegment · object)[]"}},"title":"EnrichmentPromptTemplate","type":"object","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source.template","typeLabel":"EnrichmentPromptTemplate · object"}},"title":"ExportValueSource","type":"object","isRequired":true,"uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX].source","typeLabel":"ExportValueSource · object"}},"required":["destination_field","source"],"title":"ExportIdentityMapping","type":"object","uniqueKey":"run_condition.oneOf.4.identity.items.[INDEX]","typeLabel":"ExportIdentityMapping · object"},"maxItems":4,"title":"Identity","type":"array","uniqueKey":"run_condition.oneOf.4.identity","typeLabel":"ExportIdentityMapping · object[]"},"kind":{"const":"export","default":"export","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.4.kind","typeLabel":"string"},"only_on_change":{"default":true,"description":"Skip a row whose outgoing payload is identical to the one last successfully written. The row-level idempotency knob; off, every run re-writes every row.","title":"Only On Change","type":"boolean","uniqueKey":"run_condition.oneOf.4.only_on_change","typeLabel":"boolean"},"remove_blanks":{"default":true,"description":"Drop fields whose rendered value is empty from the outgoing payload rather than sending a blank. Off, a blank clears the destination value: a deliberate act, not a default.","title":"Remove Blanks","type":"boolean","uniqueKey":"run_condition.oneOf.4.remove_blanks","typeLabel":"boolean"},"retry":{"description":"Retry, timeout and rate-limit behaviour for this column's writes.","properties":{"max_retries":{"default":3,"description":"Retry attempts per row beyond the first, when retrying at all.","maximum":10,"minimum":0,"title":"Max Retries","type":"integer","uniqueKey":"run_condition.oneOf.4.retry.max_retries","typeLabel":"integer"},"requests_per_minute":{"oneOf":[{"type":"integer","title":"Requests Per Minute","description":"Custom ceiling on write calls per minute. None means the destination's own pace. Its live rate-limit answers are honoured either way.","maximum":6000,"minimum":1,"uniqueKey":"run_condition.oneOf.4.retry.requests_per_minute.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Requests Per Minute","description":"Custom ceiling on write calls per minute. None means the destination's own pace. Its live rate-limit answers are honoured either way.","uniqueKey":"run_condition.oneOf.4.retry.requests_per_minute.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.4.retry.requests_per_minute","typeLabel":"integer | null"},"retry_on_failure":{"default":true,"description":"Retry a row whose failure is retryable: rate limits, server errors, network failures. Bad requests never retry: the same payload would fail the same way.","title":"Retry On Failure","type":"boolean","uniqueKey":"run_condition.oneOf.4.retry.retry_on_failure","typeLabel":"boolean"},"timeout_seconds":{"oneOf":[{"type":"integer","title":"Timeout Seconds","description":"Response timeout per destination request. None uses the platform default.","maximum":600,"minimum":1,"uniqueKey":"run_condition.oneOf.4.retry.timeout_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Timeout Seconds","description":"Response timeout per destination request. None uses the platform default.","uniqueKey":"run_condition.oneOf.4.retry.timeout_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.4.retry.timeout_seconds","typeLabel":"integer | null"}},"title":"ExportRetryPolicy","type":"object","uniqueKey":"run_condition.oneOf.4.retry","typeLabel":"ExportRetryPolicy · object"},"typecast":{"default":true,"description":"Coerce each rendered value into the destination property's declared type before writing. Off, values are sent verbatim and the destination's own coercion applies.","title":"Typecast","type":"boolean","uniqueKey":"run_condition.oneOf.4.typecast","typeLabel":"boolean"},"update_mode":{"default":"patch","description":"replace overwrites the whole record, patch touches only the mapped fields, set_once writes only where the destination is empty. Degrades to patch at run time when the destination does not declare replace, the same fallback the sync export makes.","enum":["replace","patch","set_once"],"title":"Update Mode","type":"string","uniqueKey":"run_condition.oneOf.4.update_mode","typeLabel":"enum\u003cstring>"}},"uniqueKey":"run_condition.oneOf.4","typeLabel":"ExportColumnDefinition · object"},{"type":"object","title":"SequenceColumnDefinition","description":"The per-row gate, verbatim; null runs every row.","required":["sequence_id"],"properties":{"sequence_id":{"description":"The sequence whose enrolment status this column mirrors.","format":"uuid","title":"Sequence Id","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.5.sequence_id","typeLabel":"string\u003cuuid>"},"choices":{"description":"A select value's options; empty otherwise.","items":{"type":"string","uniqueKey":"run_condition.oneOf.5.choices.items.[INDEX]","typeLabel":"string"},"title":"Choices","type":"array","uniqueKey":"run_condition.oneOf.5.choices","typeLabel":"string[]"},"content":{"description":"Whether the column holds the contact's status, the messages sent to them, a value a Browser use step brought back, the outcome its run settled on, or the LinkedIn profile its profile views read.","enum":["status","messages","browser_output","browser_outcome","linkedin_profile"],"title":"SequenceColumnContent","type":"string","default":"status","uniqueKey":"run_condition.oneOf.5.content","typeLabel":"enum\u003cstring>"},"field_type":{"oneOf":[{"type":"string","title":"TableColumnType","description":"The type the step brings the value back as.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"uniqueKey":"run_condition.oneOf.5.field_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The type the step brings the value back as.","uniqueKey":"run_condition.oneOf.5.field_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.field_type","typeLabel":"enum\u003cstring> | null"},"hidden":{"default":false,"description":"Whether the value is kept out of sight: its cells show a mask.","title":"Hidden","type":"boolean","uniqueKey":"run_condition.oneOf.5.hidden","typeLabel":"boolean"},"kind":{"const":"sequence","default":"sequence","title":"Kind","type":"string","uniqueKey":"run_condition.oneOf.5.kind","typeLabel":"string"},"output":{"oneOf":[{"type":"object","title":"EnrichmentOutputFields","description":"The answer's declared fields, copied from that enrichment when the column was made.","properties":{"fields":{"items":{"description":"One named, typed value an enrichment run returns.\n\nField types are drawn from the platform's existing column types, so any\nsingle field can later be promoted into an ordinary typed column without\ninventing a new type system.","properties":{"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string","isRequired":true,"uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].name","typeLabel":"string"},"choices":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Choices","description":"The fixed option list for a select field; None elsewhere.","maxItems":200,"uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Choices","description":"The fixed option list for a select field; None elsewhere.","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].choices","typeLabel":"string[] | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Shown to the model: what this field should contain.","maxLength":500,"uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Shown to the model: what this field should contain.","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].description","typeLabel":"string | null"},"field_type":{"description":"The type a user picks for a table column.\n\nOrdered as the picker shows them, which is also the order the groups below\nrun in: text-ish, then numeric, then choice, then structured.","enum":["text","paragraph","url","email","image_url","person","select","number","decimal","currency","checkbox","date","multi_select","list","object"],"title":"TableColumnType","type":"string","default":"text","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX].field_type","typeLabel":"enum\u003cstring>"}},"required":["name"],"title":"EnrichmentOutputField","type":"object","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields.items.[INDEX]","typeLabel":"EnrichmentOutputField · object"},"maxItems":50,"minItems":1,"title":"Fields","type":"array","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.fields","typeLabel":"EnrichmentOutputField · object[]"},"mode":{"const":"fields","default":"fields","title":"Mode","type":"string","uniqueKey":"run_condition.oneOf.5.output.oneOf.0.mode","typeLabel":"string"}},"uniqueKey":"run_condition.oneOf.5.output.oneOf.0","typeLabel":"EnrichmentOutputFields · object"},{"type":"null","description":"The answer's declared fields, copied from that enrichment when the column was made.","uniqueKey":"run_condition.oneOf.5.output.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.output","typeLabel":"EnrichmentOutputFields · object | null"},"output_key":{"oneOf":[{"type":"string","title":"Output Key","description":"The step's own key for the value, which outlives a rename.","maxLength":16,"uniqueKey":"run_condition.oneOf.5.output_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Output Key","description":"The step's own key for the value, which outlives a rename.","uniqueKey":"run_condition.oneOf.5.output_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.output_key","typeLabel":"string | null"},"shape_action_key":{"oneOf":[{"type":"string","title":"Shape Action Key","description":"The enrichment whose answer shape this column holds.","maxLength":100,"uniqueKey":"run_condition.oneOf.5.shape_action_key.oneOf.0","typeLabel":"string"},{"type":"null","title":"Shape Action Key","description":"The enrichment whose answer shape this column holds.","uniqueKey":"run_condition.oneOf.5.shape_action_key.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.shape_action_key","typeLabel":"string | null"},"step_id":{"oneOf":[{"type":"string","title":"Step Id","description":"The Browser use step whose value, or outcome, this column holds.","format":"uuid","uniqueKey":"run_condition.oneOf.5.step_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Step Id","description":"The Browser use step whose value, or outcome, this column holds.","uniqueKey":"run_condition.oneOf.5.step_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition.oneOf.5.step_id","typeLabel":"string\u003cuuid> | null"}},"uniqueKey":"run_condition.oneOf.5","typeLabel":"SequenceColumnDefinition · object"},{"type":"null","description":"The per-row gate, verbatim; null runs every row.","uniqueKey":"run_condition.oneOf.6","typeLabel":"null"}],"uniqueKey":"run_condition","typeLabel":"ManualColumnDefinition · object | FormulaColumnDefinition · object | EnrichmentColumnDefinition · object | SourceColumnDefinition · object | ExportColumnDefinition · object | SequenceColumnDefinition · object | null"},"run_condition_group_id":{"oneOf":[{"type":"string","title":"Run Condition Group Id","description":"When set, `run_condition` is inherited from this column group and is rewritten whenever the group's changes. Set a `run_condition` on the column to override it, or clear the column's to inherit again.","format":"uuid","uniqueKey":"run_condition_group_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Run Condition Group Id","description":"When set, `run_condition` is inherited from this column group and is rewritten whenever the group's changes. Set a `run_condition` on the column to override it, or clear the column's to inherit again.","uniqueKey":"run_condition_group_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition_group_id","typeLabel":"string\u003cuuid> | null"},"run_condition_view_id":{"oneOf":[{"type":"string","title":"Run Condition View Id","description":"When set, the column follows this saved view's filter as its run condition. The engine evaluates view membership at run time rather than reading `run_condition`. Editing the run condition directly detaches from the view.","format":"uuid","uniqueKey":"run_condition_view_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Run Condition View Id","description":"When set, the column follows this saved view's filter as its run condition. The engine evaluates view membership at run time rather than reading `run_condition`. Editing the run condition directly detaches from the view.","uniqueKey":"run_condition_view_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"run_condition_view_id","typeLabel":"string\u003cuuid> | null"},"run_delay_seconds":{"default":0,"description":"Pre-run wait in seconds; 0 runs immediately.","title":"Run Delay Seconds","type":"integer","uniqueKey":"run_delay_seconds","typeLabel":"integer"}},"required":["id","table_id","display_name","description","definition","kind","column_type","type_options","data_type","depends_on_column_ids","group_id","is_group_output","supported_filter_operators","definition_version","position","created_at","updated_at"],"title":"TableColumnReadSchema","type":"object","uniqueKey":"","typeLabel":"TableColumnReadSchema · object"},"examples":{"Example":{"title":"Example","value":{"column_type":"text","created_at":"2023-11-07T05:31:56Z","data_type":"string","definition":{"default_value":"\u003cstring>","kind":"manual"},"definition_version":123,"depends_on_column_ids":["3c90c3cc-0d44-4b50-8888-8dd25736052a"],"description":"\u003cstring>","display_name":"\u003cstring>","group_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","is_group_output":true,"kind":"manual","position":123,"supported_filter_operators":["eq"],"table_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","type_options":{"choices":[{"value":"\u003cstring>","color":"\u003cstring>"}],"type":"select"},"updated_at":"2023-11-07T05:31:56Z","ai_made":false,"auto_run":true,"pending_recompute":false,"refresh_interval_hours":0,"run_condition":{"default_value":"\u003cstring>","kind":"manual"},"run_condition_group_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","run_condition_view_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","run_delay_seconds":0}}},"exampleType":"generated"}},"description":"Successful Response","exampleType":"generated"},"12f6c2d2-7653-4137-908d-ba6090ff173c":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of why the request is unauthorized.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"UnauthorizedResponse","type":"object","uniqueKey":"","typeLabel":"UnauthorizedResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Unauthorized","exampleType":"generated"},"8f2abe9c-3bf1-4797-bdf1-a7c7ccf604bc":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of why the request is forbidden.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"ForbiddenResponse","type":"object","uniqueKey":"","typeLabel":"ForbiddenResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Forbidden","exampleType":"generated"},"f36f3c0b-bbfa-4534-866d-e91fa05c598f":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of why the resource was not found.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"NotFoundResponse","type":"object","uniqueKey":"","typeLabel":"NotFoundResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Table or column not found","exampleType":"generated"},"226b2993-15c2-4717-8603-906c6548cc27":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of the error. This is the error message to show to the user. You should also use the issues field to show more detailed error messages per field. Use this field for a single liner error message.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"issues":{"description":"The issues that caused the error. There can be multiple issues. Each issue is a user-facing error message.","items":{"properties":{"input":{"oneOf":[{"type":"string","title":"Input","description":"The user's input that caused the error.","isRequired":true,"uniqueKey":"issues.items.[INDEX].input.oneOf.0","typeLabel":"string"},{"type":"integer","title":"Input","description":"The user's input that caused the error.","isRequired":true,"uniqueKey":"issues.items.[INDEX].input.oneOf.1","typeLabel":"integer"},{"type":"number","title":"Input","description":"The user's input that caused the error.","isRequired":true,"uniqueKey":"issues.items.[INDEX].input.oneOf.2","typeLabel":"number"},{"type":"boolean","title":"Input","description":"The user's input that caused the error.","isRequired":true,"uniqueKey":"issues.items.[INDEX].input.oneOf.3","typeLabel":"boolean"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"issues.items.[INDEX].input.oneOf.4.items.[INDEX]","typeLabel":"any"},"title":"Input","description":"The user's input that caused the error.","isRequired":true,"uniqueKey":"issues.items.[INDEX].input.oneOf.4","typeLabel":"any[]"},{"type":"object","title":"Input","description":"The user's input that caused the error.","additionalProperties":true,"isRequired":true,"uniqueKey":"issues.items.[INDEX].input.oneOf.5","typeLabel":"Input · object"}],"isRequired":true,"uniqueKey":"issues.items.[INDEX].input","typeLabel":"string | integer | number | boolean | any[] | Input · object"},"loc":{"description":"The location of the error. Always contains 1 or 2 elements. The first element is the type of location (e.g. 'body', 'query', 'path', 'header'). The second element is the name of the field that caused the error. If the error is not related to a specific field, the second element is not present.","items":{"type":"string","uniqueKey":"issues.items.[INDEX].loc.items.[INDEX]","typeLabel":"string"},"title":"Loc","type":"array","isRequired":true,"uniqueKey":"issues.items.[INDEX].loc","typeLabel":"string[]"},"msg":{"description":"The message of the error. The error message to show to the user.","title":"Msg","type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].msg","typeLabel":"string"},"type":{"description":"The type of the error. Useful for frontend code to handle different types of errors.","title":"Type","type":"string","isRequired":true,"uniqueKey":"issues.items.[INDEX].type","typeLabel":"string"}},"required":["loc","msg","type","input"],"title":"UnprocessableEntityIssue","type":"object","uniqueKey":"issues.items.[INDEX]","typeLabel":"UnprocessableEntityIssue · object"},"title":"Issues","type":"array","isRequired":true,"uniqueKey":"issues","typeLabel":"UnprocessableEntityIssue · object[]"}},"required":["detail","issues"],"title":"UnprocessableEntityResponse","type":"object","uniqueKey":"","typeLabel":"UnprocessableEntityResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","issues":[{"input":"\u003cstring>","loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>"}]}}},"exampleType":"generated"}},"description":"Invalid request made to the API.","exampleType":"generated"},"f40d42aa-fdc0-478e-a7e7-41cfde43b2fe":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of why the server returned an error.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"ServerErrorResponse","type":"object","uniqueKey":"","typeLabel":"ServerErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Internal server error.","exampleType":"generated"},"7c87c159-d53e-4c7b-8c7b-7e5b44df4179":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of why the server returned an error.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"ServerErrorResponse","type":"object","uniqueKey":"","typeLabel":"ServerErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Bad gateway error.","exampleType":"generated"},"9ddc8bb4-caac-4d46-a91f-ff4b2fd0bb06":{"content":{"application/json":{"schema":{"properties":{"detail":{"description":"The detail of why the server returned an error.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"ServerErrorResponse","type":"object","uniqueKey":"","typeLabel":"ServerErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Service unavailable.","exampleType":"generated"}},"security":{"94399af3-cf55-4f3f-a437-e3d161220625":{"APIKeyHeader":{"in":"header","name":"X-API-Key","type":"apiKey","scopes":[],"schemeName":"APIKeyHeader"}},"32654ed0-444a-4578-8444-73a722a53390":{"HTTPBearer":{"scheme":"bearer","type":"http","scopes":[],"schemeName":"HTTPBearer"}}},"servers":{"872fd99c-23cb-4948-950d-72c52598aabf":{"url":"https://api.getoneprofile.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"in":"header","name":"X-API-Key","type":"apiKey","scopes":[],"schemeName":"APIKeyHeader"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"APIKeyHeader","name":"X-API-Key"}],"title":"APIKeyHeader"},{"schemes":[{"scheme":{"scheme":"bearer","type":"http","scopes":[],"schemeName":"HTTPBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"HTTPBearer","name":"Authorization"}],"title":"HTTPBearer"}]},"originalFileLocation":"openapi.json"},"subdomain":"oneprofile","siteName":"Oneprofile","title":"Keep a linked value's column as a plain column - Oneprofile","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T19:38:19.662Z","originalFileLocation":"api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link\u0026#x27;s group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Oneprofile\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/oneprofile/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/oneprofile/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/oneprofile/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/oneprofile/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Keep a linked value\u0026#x27;s column as a plain column - Oneprofile\">\u003cmeta data-mint-head property=\"og:description\" content=\"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link\u0026#x27;s group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Oneprofile\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://oneprofile.mintlify.site/_mintlify/api/og/v2?division=table-columns\u0026amp;title=Keep+a+linked+value%27s+column+as+a+plain+column\u0026amp;description=Release+a+column+that+a+Link+to+another+table+column+fills+with+one+value+it+brings+back%3A+the+link+stops+bringing+that+value+back%2C+and+the+column+becomes+a+plai\u0026amp;theme=1cb0ef22aea5a6474caa7c46\u0026amp;signature=4b0cce1401bb42a73fcd0ba3f78b056ed52a93f202192f4f7e9417294d645e36\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Keep a linked value\u0026#x27;s column as a plain column - Oneprofile\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link\u0026#x27;s group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://oneprofile.mintlify.site/_mintlify/api/og/v2?division=table-columns\u0026amp;title=Keep+a+linked+value%27s+column+as+a+plain+column\u0026amp;description=Release+a+column+that+a+Link+to+another+table+column+fills+with+one+value+it+brings+back%3A+the+link+stops+bringing+that+value+back%2C+and+the+column+becomes+a+plai\u0026amp;theme=1cb0ef22aea5a6474caa7c46\u0026amp;signature=4b0cce1401bb42a73fcd0ba3f78b056ed52a93f202192f4f7e9417294d645e36\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/oneprofile/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Oneprofile\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F5F5C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.getoneprofile.ai/#organization\",\"name\":\"Oneprofile\",\"url\":\"https://docs.getoneprofile.ai\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.getoneprofile.ai#website\",\"name\":\"Oneprofile\",\"url\":\"https://docs.getoneprofile.ai\",\"publisher\":{\"@id\":\"https://docs.getoneprofile.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column#webpage\",\"url\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column\",\"name\":\"Keep a linked value's column as a plain column\",\"description\":\"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link's group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.\",\"dateModified\":\"2026-11-07T19:38:19.662Z\",\"isPartOf\":{\"@id\":\"https://docs.getoneprofile.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.getoneprofile.ai/api-reference/accounts/list-accounts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"table-columns\",\"item\":\"https://docs.getoneprofile.ai/api-reference/table-columns/add-a-saved-agent-to-a-table\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Keep a linked value's column as a plain column\",\"item\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column#apireference\",\"headline\":\"Keep a linked value's column as a plain column\",\"name\":\"Keep a linked value's column as a plain column\",\"description\":\"Release a column that a Link to another table column fills with one value it brings back: the link stops bringing that value back, and the column becomes a plain column holding the values it has now, out of the link's group, for people to edit. The way to keep a value whose column the other table deleted. The column keeps its id, so views and columns reading it keep working. Refused for any other column.\",\"url\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column\",\"mainEntityOfPage\":{\"@id\":\"https://docs.getoneprofile.ai/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column#webpage\"},\"dateModified\":\"2026-11-07T19:38:19.662Z\",\"publisher\":{\"@id\":\"https://docs.getoneprofile.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.getoneprofile.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Oneprofile\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Oneprofile","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/get-started/welcome"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/find-people"}]},{"tab":"API reference","groups":[{"group":"API reference","pages":[{"title":"API reference","icon":"square-terminal","href":"/api-reference/introduction"}]},{"group":"Endpoints","pages":[{"group":"accounts","pages":[{"title":"List accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/","href":"/api-reference/accounts/list-accounts"},{"title":"List account industries","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/industries/","href":"/api-reference/accounts/list-account-industries"},{"title":"Count accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/length/","href":"/api-reference/accounts/count-accounts"},{"title":"Get a company logo","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/logos/{logo_name}/","href":"/api-reference/accounts/get-a-company-logo"},{"title":"List account merges","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/merges/","href":"/api-reference/accounts/list-account-merges"},{"title":"Merge two accounts","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/merges/","href":"/api-reference/accounts/merge-two-accounts"},{"title":"Preview an account merge","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/merges/preview/","href":"/api-reference/accounts/preview-an-account-merge"},{"title":"Undo an account merge","deprecated":null,"version":null,"openapi":"/openapi.json delete /accounts/merges/{from_key}/","href":"/api-reference/accounts/undo-an-account-merge"},{"title":"Find a person's account","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/of-person/","href":"/api-reference/accounts/find-a-persons-account"},{"title":"List account owners","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/owners/","href":"/api-reference/accounts/list-account-owners"},{"title":"List account sources","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/sources/","href":"/api-reference/accounts/list-account-sources"},{"title":"Get a table's account source","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/sources/{table_id}/","href":"/api-reference/accounts/get-a-tables-account-source"},{"title":"Update a table's account source","deprecated":null,"version":null,"openapi":"/openapi.json patch /accounts/sources/{table_id}/","href":"/api-reference/accounts/update-a-tables-account-source"},{"title":"Get what a table puts on Accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/sources/{table_id}/reach/","href":"/api-reference/accounts/get-what-a-table-puts-on-accounts"},{"title":"Split a website out of an account","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/splits/","href":"/api-reference/accounts/split-a-website-out-of-an-account"},{"title":"Preview splitting a website out of an account","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/splits/preview/","href":"/api-reference/accounts/preview-splitting-a-website-out-of-an-account"},{"title":"Fold a split-out website back in","deprecated":null,"version":null,"openapi":"/openapi.json delete /accounts/splits/{host}/","href":"/api-reference/accounts/fold-a-split-out-website-back-in"},{"title":"Get an account","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/","href":"/api-reference/accounts/get-an-account"},{"title":"Pin an account's fact","deprecated":null,"version":null,"openapi":"/openapi.json patch /accounts/{account_key}/facts/{kind}/","href":"/api-reference/accounts/pin-an-accounts-fact"},{"title":"Get an account's header","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/header/","href":"/api-reference/accounts/get-an-accounts-header"},{"title":"Read an account's map on LinkedIn","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/linkedin-maps/","href":"/api-reference/accounts/read-an-accounts-map-on-linkedin"},{"title":"Map an account on LinkedIn","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/{account_key}/linkedin-maps/","href":"/api-reference/accounts/map-an-account-on-linkedin"},{"title":"List accounts likely the same company","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/merge-suggestions/","href":"/api-reference/accounts/list-accounts-likely-the-same-company"},{"title":"Get an account's org chart","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/org-chart/","href":"/api-reference/accounts/get-an-accounts-org-chart"},{"title":"List an account's org chart changes","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/org-chart/changes/","href":"/api-reference/accounts/list-an-accounts-org-chart-changes"},{"title":"List an account's drafted reporting lines","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/org-chart/drafted-lines/","href":"/api-reference/accounts/list-an-accounts-drafted-reporting-lines"},{"title":"Confirm an account's drafted reporting lines","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/{account_key}/org-chart/drafted-lines/bulk/approve/","href":"/api-reference/accounts/confirm-an-accounts-drafted-reporting-lines"},{"title":"Reject an account's drafted reporting lines","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/{account_key}/org-chart/drafted-lines/bulk/reject/","href":"/api-reference/accounts/reject-an-accounts-drafted-reporting-lines"},{"title":"Restore an account's rejected drafted lines","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/{account_key}/org-chart/drafted-lines/bulk/restore/","href":"/api-reference/accounts/restore-an-accounts-rejected-drafted-lines"},{"title":"Draft an account's org chart","deprecated":null,"version":null,"openapi":"/openapi.json post /accounts/{account_key}/org-chart/drafts/","href":"/api-reference/accounts/draft-an-accounts-org-chart"},{"title":"Forget a person an account's org chart lost","deprecated":null,"version":null,"openapi":"/openapi.json delete /accounts/{account_key}/org-chart/lost/","href":"/api-reference/accounts/forget-a-person-an-accounts-org-chart-lost"},{"title":"Get an account's overview","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/overview/","href":"/api-reference/accounts/get-an-accounts-overview"},{"title":"Write the people search for finding more people at an account","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/people-search/","href":"/api-reference/accounts/write-the-people-search-for-finding-more-people-at-an-account"},{"title":"List an account's people","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/people/","href":"/api-reference/accounts/list-an-accounts-people"},{"title":"Count an account's people by each People filter","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/people/facets/","href":"/api-reference/accounts/count-an-accounts-people-by-each-people-filter"},{"title":"Count an account's people","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/people/length/","href":"/api-reference/accounts/count-an-accounts-people"},{"title":"Get one person at an account","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/people/{person_id}/","href":"/api-reference/accounts/get-one-person-at-an-account"},{"title":"Update a person on an account's org chart","deprecated":null,"version":null,"openapi":"/openapi.json patch /accounts/{account_key}/people/{person_id}/","href":"/api-reference/accounts/update-a-person-on-an-accounts-org-chart"},{"title":"List who a person's manager pick would loop through","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/people/{person_id}/manager-loops/","href":"/api-reference/accounts/list-who-a-persons-manager-pick-would-loop-through"},{"title":"List the websites under an account","deprecated":null,"version":null,"openapi":"/openapi.json get /accounts/{account_key}/websites/","href":"/api-reference/accounts/list-the-websites-under-an-account"}]},{"group":"affiliate","pages":[{"title":"Enroll in the affiliate program","deprecated":null,"version":null,"openapi":"/openapi.json post /affiliate/enroll/","href":"/api-reference/affiliate/enroll-in-the-affiliate-program"},{"title":"List the affiliate activity feed","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/feed/","href":"/api-reference/affiliate/list-the-affiliate-activity-feed"},{"title":"List the affiliate ledger","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/ledger/","href":"/api-reference/affiliate/list-the-affiliate-ledger"},{"title":"List payouts","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/payouts/","href":"/api-reference/affiliate/list-payouts"},{"title":"Get the affiliate performance figures","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/performance/","href":"/api-reference/affiliate/get-the-affiliate-performance-figures"},{"title":"Get the affiliate program's current terms","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/program/","href":"/api-reference/affiliate/get-the-affiliate-programs-current-terms"},{"title":"List the affiliate referrals","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/referrals/","href":"/api-reference/affiliate/list-the-affiliate-referrals"},{"title":"Update the affiliate settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /affiliate/settings/","href":"/api-reference/affiliate/update-the-affiliate-settings"},{"title":"List the affiliate per-source performance","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/sources/","href":"/api-reference/affiliate/list-the-affiliate-per-source-performance"},{"title":"Get the affiliate headline stats","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/stats/","href":"/api-reference/affiliate/get-the-affiliate-headline-stats"},{"title":"Get the affiliate dashboard summary","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/summary/","href":"/api-reference/affiliate/get-the-affiliate-dashboard-summary"},{"title":"List the affiliate per-day stats","deprecated":null,"version":null,"openapi":"/openapi.json get /affiliate/timeseries/","href":"/api-reference/affiliate/list-the-affiliate-per-day-stats"},{"title":"Start identity verification","deprecated":null,"version":null,"openapi":"/openapi.json post /affiliate/verification-sessions/","href":"/api-reference/affiliate/start-identity-verification"}]},{"group":"agent-learnings","pages":[{"title":"List an agent's learnings","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/","href":"/api-reference/agent-learnings/list-an-agents-learnings"},{"title":"Add a learning","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/","href":"/api-reference/agent-learnings/add-a-learning"},{"title":"Move a shared rule to all sequences","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/bulk/promote/","href":"/api-reference/agent-learnings/move-a-shared-rule-to-all-sequences"},{"title":"Propose a learning from an edit","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/hand-edits/","href":"/api-reference/agent-learnings/propose-a-learning-from-an-edit"},{"title":"Read the rules several sequences share","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/overlap/","href":"/api-reference/agent-learnings/read-the-rules-several-sequences-share"},{"title":"Price a thumbs down's redo","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/quote/","href":"/api-reference/agent-learnings/price-a-thumbs-downs-redo"},{"title":"Start a learning request in the background","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/requests/","href":"/api-reference/agent-learnings/start-a-learning-request-in-the-background"},{"title":"Get a learning request","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/requests/{request_id}/","href":"/api-reference/agent-learnings/get-a-learning-request"},{"title":"Mark a sent message Looks good","deprecated":null,"version":null,"openapi":"/openapi.json put /agent-learnings/sent-messages/{message_id}/looks-good/","href":"/api-reference/agent-learnings/mark-a-sent-message-looks-good"},{"title":"List the thumbs downs on some subjects","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/thumbs-downs/","href":"/api-reference/agent-learnings/list-the-thumbs-downs-on-some-subjects"},{"title":"Give a thumbs down","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/thumbs-downs/","href":"/api-reference/agent-learnings/give-a-thumbs-down"},{"title":"Get a thumbs down","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/thumbs-downs/{event_id}/","href":"/api-reference/agent-learnings/get-a-thumbs-down"},{"title":"Change one change of a feedback session","deprecated":null,"version":null,"openapi":"/openapi.json patch /agent-learnings/thumbs-downs/{event_id}/changes/{change_id}/","href":"/api-reference/agent-learnings/change-one-change-of-a-feedback-session"},{"title":"Save a proposed learning","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/thumbs-downs/{event_id}/commit/","href":"/api-reference/agent-learnings/save-a-proposed-learning"},{"title":"Change a proposed learning","deprecated":null,"version":null,"openapi":"/openapi.json patch /agent-learnings/thumbs-downs/{event_id}/proposal/","href":"/api-reference/agent-learnings/change-a-proposed-learning"},{"title":"Rewrite again for a proposed learning","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/thumbs-downs/{event_id}/regenerate/","href":"/api-reference/agent-learnings/rewrite-again-for-a-proposed-learning"},{"title":"Discard a thumbs down's feedback","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/thumbs-downs/{event_id}/revert/","href":"/api-reference/agent-learnings/discard-a-thumbs-downs-feedback"},{"title":"List learning versions","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-learnings/versions/","href":"/api-reference/agent-learnings/list-learning-versions"},{"title":"Restore a learning version","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/versions/{version_id}/restore/","href":"/api-reference/agent-learnings/restore-a-learning-version"},{"title":"Delete a learning","deprecated":null,"version":null,"openapi":"/openapi.json delete /agent-learnings/{learning_id}/","href":"/api-reference/agent-learnings/delete-a-learning"},{"title":"Rewrite a learning","deprecated":null,"version":null,"openapi":"/openapi.json patch /agent-learnings/{learning_id}/","href":"/api-reference/agent-learnings/rewrite-a-learning"},{"title":"Move a learning","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-learnings/{learning_id}/move/","href":"/api-reference/agent-learnings/move-a-learning"}]},{"group":"outbound-agents","pages":[{"title":"Read whether the agent's own sending is paused","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-sending/","href":"/api-reference/outbound-agents/read-whether-the-agents-own-sending-is-paused"},{"title":"Pause or resume the agent's own sending","deprecated":null,"version":null,"openapi":"/openapi.json patch /agent-sending/","href":"/api-reference/outbound-agents/pause-or-resume-the-agents-own-sending"},{"title":"List the campaign library","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/campaigns/","href":"/api-reference/outbound-agents/list-the-campaign-library"},{"title":"Read what a new outbound agent starts with","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/defaults/","href":"/api-reference/outbound-agents/read-what-a-new-outbound-agent-starts-with"},{"title":"Read today's preview allowance","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/preview-allowance/","href":"/api-reference/outbound-agents/read-todays-preview-allowance"},{"title":"List what each outbound agent model costs","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/prices/","href":"/api-reference/outbound-agents/list-what-each-outbound-agent-model-costs"},{"title":"Read an outbound agent","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/","href":"/api-reference/outbound-agents/read-an-outbound-agent"},{"title":"Change an outbound agent","deprecated":null,"version":null,"openapi":"/openapi.json patch /outbound-agents/{agent_id}/","href":"/api-reference/outbound-agents/change-an-outbound-agent"},{"title":"List the agent's conversations","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/conversations/","href":"/api-reference/outbound-agents/list-the-agents-conversations"},{"title":"Read one contact's conversation with the agent","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/conversations/{subject_key}/","href":"/api-reference/outbound-agents/read-one-contacts-conversation-with-the-agent"},{"title":"Drop one fact from a contact's research","deprecated":null,"version":null,"openapi":"/openapi.json delete /outbound-agents/{agent_id}/conversations/{subject_key}/facts/{index}/","href":"/api-reference/outbound-agents/drop-one-fact-from-a-contacts-research"},{"title":"List what people told the agent","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/feedback/","href":"/api-reference/outbound-agents/list-what-people-told-the-agent"},{"title":"Rate one message the agent wrote","deprecated":null,"version":null,"openapi":"/openapi.json post /outbound-agents/{agent_id}/feedback/","href":"/api-reference/outbound-agents/rate-one-message-the-agent-wrote"},{"title":"Undo your feedback","deprecated":null,"version":null,"openapi":"/openapi.json delete /outbound-agents/{agent_id}/feedback/{feedback_id}/","href":"/api-reference/outbound-agents/undo-your-feedback"},{"title":"Edit your feedback","deprecated":null,"version":null,"openapi":"/openapi.json patch /outbound-agents/{agent_id}/feedback/{feedback_id}/","href":"/api-reference/outbound-agents/edit-your-feedback"},{"title":"Read one message the agent wrote","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/messages/{message_id}/","href":"/api-reference/outbound-agents/read-one-message-the-agent-wrote"},{"title":"Rewrite one message the agent wrote","deprecated":null,"version":null,"openapi":"/openapi.json patch /outbound-agents/{agent_id}/messages/{message_id}/","href":"/api-reference/outbound-agents/rewrite-one-message-the-agent-wrote"},{"title":"Have the agent write one message again","deprecated":null,"version":null,"openapi":"/openapi.json post /outbound-agents/{agent_id}/messages/{message_id}/regenerate/","href":"/api-reference/outbound-agents/have-the-agent-write-one-message-again"},{"title":"List an outbound agent's versions","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/versions/","href":"/api-reference/outbound-agents/list-an-outbound-agents-versions"},{"title":"Compare a writing version","deprecated":null,"version":null,"openapi":"/openapi.json get /outbound-agents/{agent_id}/versions/{version}/changes/","href":"/api-reference/outbound-agents/compare-a-writing-version"},{"title":"Revert an outbound agent to an earlier version","deprecated":null,"version":null,"openapi":"/openapi.json post /outbound-agents/{agent_id}/versions/{version}/revert/","href":"/api-reference/outbound-agents/revert-an-outbound-agent-to-an-earlier-version"}]},{"group":"agent-training","pages":[{"title":"Show the examples a table would give","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-training/sample-rows/preview/","href":"/api-reference/agent-training/show-the-examples-a-table-would-give"},{"title":"Suggest examples to preview","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-training/sample-rows/suggestions/","href":"/api-reference/agent-training/suggest-examples-to-preview"},{"title":"List Previews","deprecated":null,"version":null,"openapi":"/openapi.json get /agent-training/sessions/","href":"/api-reference/agent-training/list-previews"},{"title":"Open a Preview","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-training/sessions/","href":"/api-reference/agent-training/open-a-preview"},{"title":"Discard a Preview","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-training/sessions/{session_id}/abandon/","href":"/api-reference/agent-training/discard-a-preview"},{"title":"Close a Preview","deprecated":null,"version":null,"openapi":"/openapi.json post /agent-training/sessions/{session_id}/complete/","href":"/api-reference/agent-training/close-a-preview"},{"title":"Mark an example Looks good","deprecated":null,"version":null,"openapi":"/openapi.json put /agent-training/sessions/{session_id}/rows/{row_id}/feedback/","href":"/api-reference/agent-training/mark-an-example-looks-good"}]},{"group":"ai_apps","pages":[{"title":"List connected AI apps","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-apps/","href":"/api-reference/ai_apps/list-connected-ai-apps"},{"title":"Read an AI app's request to connect","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-apps/requests/{request_id}/","href":"/api-reference/ai_apps/read-an-ai-apps-request-to-connect"},{"title":"Connect an AI app","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-apps/requests/{request_id}/approve/","href":"/api-reference/ai_apps/connect-an-ai-app"},{"title":"Turn down an AI app","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-apps/requests/{request_id}/reject/","href":"/api-reference/ai_apps/turn-down-an-ai-app"},{"title":"Disconnect an AI app","deprecated":null,"version":null,"openapi":"/openapi.json delete /ai-apps/{ai_app_id}/","href":"/api-reference/ai_apps/disconnect-an-ai-app"}]},{"group":"ai-context","pages":[{"title":"Get the AI context","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-context/","href":"/api-reference/ai-context/get-the-ai-context"},{"title":"Update the AI context","deprecated":null,"version":null,"openapi":"/openapi.json patch /ai-context/","href":"/api-reference/ai-context/update-the-ai-context"},{"title":"List the reference documents","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-context/documents/","href":"/api-reference/ai-context/list-the-reference-documents"},{"title":"Upload a reference document","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-context/documents/","href":"/api-reference/ai-context/upload-a-reference-document"},{"title":"Link reference documents from Google Drive","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-context/documents/bulk/","href":"/api-reference/ai-context/link-reference-documents-from-google-drive"},{"title":"Get a reference document","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-context/documents/{document_id}/","href":"/api-reference/ai-context/get-a-reference-document"},{"title":"Delete a reference document","deprecated":null,"version":null,"openapi":"/openapi.json delete /ai-context/documents/{document_id}/","href":"/api-reference/ai-context/delete-a-reference-document"},{"title":"Update a reference document","deprecated":null,"version":null,"openapi":"/openapi.json patch /ai-context/documents/{document_id}/","href":"/api-reference/ai-context/update-a-reference-document"},{"title":"Download a reference document","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-context/documents/{document_id}/download/","href":"/api-reference/ai-context/download-a-reference-document"},{"title":"Rewrite a reference document's summary","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-context/documents/{document_id}/summary/regenerate/","href":"/api-reference/ai-context/rewrite-a-reference-documents-summary"},{"title":"Refresh a reference document from Google Drive","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-context/documents/{document_id}/sync/","href":"/api-reference/ai-context/refresh-a-reference-document-from-google-drive"},{"title":"List the Q\u0026A","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-context/qa/","href":"/api-reference/ai-context/list-the-q\u0026a"},{"title":"Add an answer to the Q\u0026A","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-context/qa/","href":"/api-reference/ai-context/add-an-answer-to-the-q\u0026a"},{"title":"Delete a Q\u0026A answer","deprecated":null,"version":null,"openapi":"/openapi.json delete /ai-context/qa/{entry_id}/","href":"/api-reference/ai-context/delete-a-q\u0026a-answer"},{"title":"Change a Q\u0026A answer","deprecated":null,"version":null,"openapi":"/openapi.json patch /ai-context/qa/{entry_id}/","href":"/api-reference/ai-context/change-a-q\u0026a-answer"},{"title":"Write the AI context from a company domain","deprecated":null,"version":null,"openapi":"/openapi.json post /ai-context/runs/","href":"/api-reference/ai-context/write-the-ai-context-from-a-company-domain"},{"title":"Get a generation run","deprecated":null,"version":null,"openapi":"/openapi.json get /ai-context/runs/{run_id}/","href":"/api-reference/ai-context/get-a-generation-run"}]},{"group":"apikey","pages":[{"title":"List API keys","deprecated":null,"version":null,"openapi":"/openapi.json get /api-keys/","href":"/api-reference/apikey/list-api-keys"},{"title":"Create an API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api-keys/","href":"/api-reference/apikey/create-an-api-key"},{"title":"Get the number of API keys","deprecated":null,"version":null,"openapi":"/openapi.json get /api-keys/length/","href":"/api-reference/apikey/get-the-number-of-api-keys"},{"title":"List the API key scopes this workspace may create","deprecated":null,"version":null,"openapi":"/openapi.json get /api-keys/scopes/","href":"/api-reference/apikey/list-the-api-key-scopes-this-workspace-may-create"},{"title":"Get an API key","deprecated":null,"version":null,"openapi":"/openapi.json get /api-keys/{api_key_id}/","href":"/api-reference/apikey/get-an-api-key"},{"title":"Delete an API key","deprecated":null,"version":null,"openapi":"/openapi.json delete /api-keys/{api_key_id}/","href":"/api-reference/apikey/delete-an-api-key"},{"title":"Update an API key","deprecated":null,"version":null,"openapi":"/openapi.json patch /api-keys/{api_key_id}/","href":"/api-reference/apikey/update-an-api-key"}]},{"group":"app-listings","pages":[{"title":"Finalize a switch/reconnect onto an existing integration","deprecated":null,"version":null,"openapi":"/openapi.json post /app-listings/connections/{connection_id}/claim/","href":"/api-reference/app-listings/finalize-a-switchreconnect-onto-an-existing-integration"},{"title":"Get a pending connection's captured connect-time config","deprecated":null,"version":null,"openapi":"/openapi.json get /app-listings/connections/{connection_id}/config/","href":"/api-reference/app-listings/get-a-pending-connections-captured-connect-time-config"},{"title":"Start an app listing OAuth install","deprecated":null,"version":null,"openapi":"/openapi.json post /app-listings/{slug}/authorize/","href":"/api-reference/app-listings/start-an-app-listing-oauth-install"},{"title":"Exchange an app listing OAuth callback","deprecated":null,"version":null,"openapi":"/openapi.json post /app-listings/{slug}/callback/","href":"/api-reference/app-listings/exchange-an-app-listing-oauth-callback"},{"title":"Check a workspace resolves before connecting","deprecated":null,"version":null,"openapi":"/openapi.json post /app-listings/{slug}/check/","href":"/api-reference/app-listings/check-a-workspace-resolves-before-connecting"},{"title":"List an app listing's connect-time inputs","deprecated":null,"version":null,"openapi":"/openapi.json get /app-listings/{slug}/connect-inputs/","href":"/api-reference/app-listings/list-an-app-listings-connect-time-inputs"}]},{"group":"workspace-actions","pages":[{"title":"List the AI Assistant's proposed and applied actions","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/actions/","href":"/api-reference/workspace-actions/list-the-ai-assistants-proposed-and-applied-actions"},{"title":"Approve every action one reply proposed","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/actions/bulk/approve/","href":"/api-reference/workspace-actions/approve-every-action-one-reply-proposed"},{"title":"Read one proposed or applied action","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/actions/{proposal_id}/","href":"/api-reference/workspace-actions/read-one-proposed-or-applied-action"},{"title":"Approve a proposed action","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/actions/{proposal_id}/approve/","href":"/api-reference/workspace-actions/approve-a-proposed-action"},{"title":"Reject a proposed action","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/actions/{proposal_id}/reject/","href":"/api-reference/workspace-actions/reject-a-proposed-action"},{"title":"Read what a conversation may apply without asking","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/conversations/{conversation_id}/grants/","href":"/api-reference/workspace-actions/read-what-a-conversation-may-apply-without-asking"},{"title":"Change what a conversation may apply without asking","deprecated":null,"version":null,"openapi":"/openapi.json patch /assistant/conversations/{conversation_id}/grants/","href":"/api-reference/workspace-actions/change-what-a-conversation-may-apply-without-asking"},{"title":"List what the AI Assistant does without asking you","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/my-grants/","href":"/api-reference/workspace-actions/list-what-the-ai-assistant-does-without-asking-you"},{"title":"Take back something you allowed the AI Assistant to do without asking you","deprecated":null,"version":null,"openapi":"/openapi.json delete /assistant/my-grants/{tool}/","href":"/api-reference/workspace-actions/take-back-something-you-allowed-the-ai-assistant-to-do-without-asking-you"},{"title":"Read the AI Assistant's action settings","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/settings/","href":"/api-reference/workspace-actions/read-the-ai-assistants-action-settings"},{"title":"Change the AI Assistant's action settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /assistant/settings/","href":"/api-reference/workspace-actions/change-the-ai-assistants-action-settings"},{"title":"List the actions the AI Assistant can take","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/verbs/","href":"/api-reference/workspace-actions/list-the-actions-the-ai-assistant-can-take"}]},{"group":"assistant","pages":[{"title":"List AI Assistant chat conversations","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/conversations/","href":"/api-reference/assistant/list-ai-assistant-chat-conversations"},{"title":"Start an AI Assistant chat conversation","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/conversations/","href":"/api-reference/assistant/start-an-ai-assistant-chat-conversation"},{"title":"List AI Assistant chat messages","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/conversations/{conversation_id}/messages/","href":"/api-reference/assistant/list-ai-assistant-chat-messages"},{"title":"Ask the AI Assistant","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/conversations/{conversation_id}/messages/","href":"/api-reference/assistant/ask-the-ai-assistant"},{"title":"Ask the AI Assistant, streaming its work","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/conversations/{conversation_id}/messages/stream/","href":"/api-reference/assistant/ask-the-ai-assistant-streaming-its-work"},{"title":"Resume an AI Assistant turn waiting on your approval","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/conversations/{conversation_id}/messages/{sequence}/resume/stream/","href":"/api-reference/assistant/resume-an-ai-assistant-turn-waiting-on-your-approval"},{"title":"Stop an AI Assistant chat turn","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/conversations/{conversation_id}/messages/{sequence}/stop/","href":"/api-reference/assistant/stop-an-ai-assistant-chat-turn"},{"title":"List AI Assistant threads","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/threads/","href":"/api-reference/assistant/list-ai-assistant-threads"},{"title":"Delete an AI Assistant thread","deprecated":null,"version":null,"openapi":"/openapi.json delete /assistant/threads/{thread_id}/","href":"/api-reference/assistant/delete-an-ai-assistant-thread"},{"title":"Rename or pin an AI Assistant thread","deprecated":null,"version":null,"openapi":"/openapi.json patch /assistant/threads/{thread_id}/","href":"/api-reference/assistant/rename-or-pin-an-ai-assistant-thread"},{"title":"Link an AI Assistant thread to the one it continues in","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/threads/{thread_id}/link/","href":"/api-reference/assistant/link-an-ai-assistant-thread-to-the-one-it-continues-in"},{"title":"List what the AI Assistant can do","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/tools/","href":"/api-reference/assistant/list-what-the-ai-assistant-can-do"},{"title":"Add a file to send with an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json post /chat-attachments/","href":"/api-reference/assistant/add-a-file-to-send-with-an-ai-assistant-message"},{"title":"Read a file attached to an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/","href":"/api-reference/assistant/read-a-file-attached-to-an-ai-assistant-message"},{"title":"Remove a file added to an AI Assistant message before it was sent","deprecated":null,"version":null,"openapi":"/openapi.json delete /chat-attachments/{attachment_id}/","href":"/api-reference/assistant/remove-a-file-added-to-an-ai-assistant-message-before-it-was-sent"},{"title":"Read an attached file column's value distribution","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/columns/{source_index}/distribution/","href":"/api-reference/assistant/read-an-attached-file-columns-value-distribution"},{"title":"List an attached file column's raw values","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/columns/{source_index}/values/","href":"/api-reference/assistant/list-an-attached-file-columns-raw-values"},{"title":"List the comments on no data row of a file attached to an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/comments/","href":"/api-reference/assistant/list-the-comments-on-no-data-row-of-a-file-attached-to-an-ai-assistant-message"},{"title":"Build a table from a file attached to an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json post /chat-attachments/{attachment_id}/import/","href":"/api-reference/assistant/build-a-table-from-a-file-attached-to-an-ai-assistant-message"},{"title":"Read pages of a PDF attached to an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/pages/","href":"/api-reference/assistant/read-pages-of-a-pdf-attached-to-an-ai-assistant-message"},{"title":"Read rows of a file attached to an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/rows/","href":"/api-reference/assistant/read-rows-of-a-file-attached-to-an-ai-assistant-message"},{"title":"Count the rows of a file attached to an AI Assistant message","deprecated":null,"version":null,"openapi":"/openapi.json get /chat-attachments/{attachment_id}/rows/length/","href":"/api-reference/assistant/count-the-rows-of-a-file-attached-to-an-ai-assistant-message"}]},{"group":"assistant-prompt","pages":[{"title":"List the saved prompts","deprecated":null,"version":null,"openapi":"/openapi.json get /assistant/prompts/","href":"/api-reference/assistant-prompt/list-the-saved-prompts"},{"title":"Save a prompt","deprecated":null,"version":null,"openapi":"/openapi.json post /assistant/prompts/","href":"/api-reference/assistant-prompt/save-a-prompt"},{"title":"Delete a saved prompt","deprecated":null,"version":null,"openapi":"/openapi.json delete /assistant/prompts/{prompt_id}/","href":"/api-reference/assistant-prompt/delete-a-saved-prompt"},{"title":"Rewrite a saved prompt","deprecated":null,"version":null,"openapi":"/openapi.json patch /assistant/prompts/{prompt_id}/","href":"/api-reference/assistant-prompt/rewrite-a-saved-prompt"}]},{"group":"attribution","pages":[{"title":"Record where a new workspace came from","deprecated":null,"version":null,"openapi":"/openapi.json put /attribution/signup-source/","href":"/api-reference/attribution/record-where-a-new-workspace-came-from"},{"title":"Announce the caller's signup","deprecated":null,"version":null,"openapi":"/openapi.json put /attribution/signup/","href":"/api-reference/attribution/announce-the-callers-signup"}]},{"group":"billing","pages":[{"title":"Start a credit pack purchase","deprecated":null,"version":null,"openapi":"/openapi.json post /billing/checkout-sessions/","href":"/api-reference/billing/start-a-credit-pack-purchase"},{"title":"Get credit pack quote","deprecated":null,"version":null,"openapi":"/openapi.json get /billing/credit-packs/quote/","href":"/api-reference/billing/get-credit-pack-quote"},{"title":"List published credit prices","deprecated":null,"version":null,"openapi":"/openapi.json get /billing/credit-prices/","href":"/api-reference/billing/list-published-credit-prices"},{"title":"Create billing portal session","deprecated":null,"version":null,"openapi":"/openapi.json post /billing/portal-sessions/","href":"/api-reference/billing/create-billing-portal-session"},{"title":"List available products","deprecated":null,"version":null,"openapi":"/openapi.json get /billing/products/","href":"/api-reference/billing/list-available-products"},{"title":"Get subscription information","deprecated":null,"version":null,"openapi":"/openapi.json get /billing/subscription/","href":"/api-reference/billing/get-subscription-information"},{"title":"Switch subscription plan","deprecated":null,"version":null,"openapi":"/openapi.json post /billing/subscription/switch-plan/","href":"/api-reference/billing/switch-subscription-plan"},{"title":"List billing transactions","deprecated":null,"version":null,"openapi":"/openapi.json get /billing/transactions/","href":"/api-reference/billing/list-billing-transactions"}]},{"group":"table-templates","pages":[{"title":"List column templates","deprecated":null,"version":null,"openapi":"/openapi.json get /column-templates/","href":"/api-reference/table-templates/list-column-templates"},{"title":"Capture a multi-column template","deprecated":null,"version":null,"openapi":"/openapi.json post /column-templates/","href":"/api-reference/table-templates/capture-a-multi-column-template"},{"title":"Delete a column template","deprecated":null,"version":null,"openapi":"/openapi.json delete /column-templates/{template_id}/","href":"/api-reference/table-templates/delete-a-column-template"},{"title":"Apply a template to a table","deprecated":null,"version":null,"openapi":"/openapi.json post /column-templates/{template_id}/apply/","href":"/api-reference/table-templates/apply-a-template-to-a-table"}]},{"group":"contact_cooldown","pages":[{"title":"Read the workspace's cooldown rules","deprecated":null,"version":null,"openapi":"/openapi.json get /cooldown/settings/","href":"/api-reference/contact_cooldown/read-the-workspaces-cooldown-rules"},{"title":"Update the workspace's cooldown rules","deprecated":null,"version":null,"openapi":"/openapi.json patch /cooldown/settings/","href":"/api-reference/contact_cooldown/update-the-workspaces-cooldown-rules"}]},{"group":"credits","pages":[{"title":"List credit ledger entries","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/ledger/","href":"/api-reference/credits/list-credit-ledger-entries"},{"title":"Get the credit balance summary","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/summary/","href":"/api-reference/credits/get-the-credit-balance-summary"},{"title":"Get the balance-over-time series","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/balance-timeseries/","href":"/api-reference/credits/get-the-balance-over-time-series"},{"title":"List credit spend attributed to saved agents","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-agent/","href":"/api-reference/credits/list-credit-spend-attributed-to-saved-agents"},{"title":"Count the saved agents that spent credits","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-agent/length/","href":"/api-reference/credits/count-the-saved-agents-that-spent-credits"},{"title":"Get credit spend attributed to providers and accounts","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-provider/","href":"/api-reference/credits/get-credit-spend-attributed-to-providers-and-accounts"},{"title":"List credit spend attributed to tables and columns","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-table/","href":"/api-reference/credits/list-credit-spend-attributed-to-tables-and-columns"},{"title":"Count the tables that spent credits","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-table/length/","href":"/api-reference/credits/count-the-tables-that-spent-credits"},{"title":"Get one table's per-column credit usage","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-table/{table_id}/by-column/","href":"/api-reference/credits/get-one-tables-per-column-credit-usage"},{"title":"List one table's per-run credit usage","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-table/{table_id}/by-run/","href":"/api-reference/credits/list-one-tables-per-run-credit-usage"},{"title":"Count one table's runs that spent credits","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-table/{table_id}/by-run/length/","href":"/api-reference/credits/count-one-tables-runs-that-spent-credits"},{"title":"Get one table's spend series","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/by-table/{table_id}/timeseries/","href":"/api-reference/credits/get-one-tables-spend-series"},{"title":"Export a usage report as CSV","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/export/","href":"/api-reference/credits/export-a-usage-report-as-csv"},{"title":"Get usage history boundaries","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/meta/","href":"/api-reference/credits/get-usage-history-boundaries"},{"title":"Get the credits-spent series","deprecated":null,"version":null,"openapi":"/openapi.json get /credits/usage/spend-timeseries/","href":"/api-reference/credits/get-the-credits-spent-series"}]},{"group":"design-partner","pages":[{"title":"List the workspace's design partner feedback","deprecated":null,"version":null,"openapi":"/openapi.json get /design-partner/feedback/","href":"/api-reference/design-partner/list-the-workspaces-design-partner-feedback"},{"title":"Send design partner feedback","deprecated":null,"version":null,"openapi":"/openapi.json post /design-partner/feedback/","href":"/api-reference/design-partner/send-design-partner-feedback"},{"title":"Send the workspace's shared Slack channel invite","deprecated":null,"version":null,"openapi":"/openapi.json post /design-partner/slack-channel/invite/","href":"/api-reference/design-partner/send-the-workspaces-shared-slack-channel-invite"},{"title":"Is this workspace a design partner?","deprecated":null,"version":null,"openapi":"/openapi.json get /design-partner/status/","href":"/api-reference/design-partner/is-this-workspace-a-design-partner?"}]},{"group":"suppression","pages":[{"title":"List do-not-contact entries","deprecated":null,"version":null,"openapi":"/openapi.json get /do-not-contact/","href":"/api-reference/suppression/list-do-not-contact-entries"},{"title":"Delete do-not-contact entries","deprecated":null,"version":null,"openapi":"/openapi.json delete /do-not-contact/","href":"/api-reference/suppression/delete-do-not-contact-entries"},{"title":"Add do-not-contact entries","deprecated":null,"version":null,"openapi":"/openapi.json post /do-not-contact/bulk/","href":"/api-reference/suppression/add-do-not-contact-entries"},{"title":"Export the do-not-contact list","deprecated":null,"version":null,"openapi":"/openapi.json get /do-not-contact/export/","href":"/api-reference/suppression/export-the-do-not-contact-list"},{"title":"Count do-not-contact entries","deprecated":null,"version":null,"openapi":"/openapi.json get /do-not-contact/length/","href":"/api-reference/suppression/count-do-not-contact-entries"}]},{"group":"google-drive","pages":[{"title":"Get the Google Drive connection","deprecated":null,"version":null,"openapi":"/openapi.json get /google-drive/connection/","href":"/api-reference/google-drive/get-the-google-drive-connection"},{"title":"Disconnect Google Drive","deprecated":null,"version":null,"openapi":"/openapi.json delete /google-drive/connection/","href":"/api-reference/google-drive/disconnect-google-drive"},{"title":"Begin connecting Google Drive","deprecated":null,"version":null,"openapi":"/openapi.json post /google-drive/connection/authorize/","href":"/api-reference/google-drive/begin-connecting-google-drive"},{"title":"Finish connecting Google Drive","deprecated":null,"version":null,"openapi":"/openapi.json post /google-drive/connection/callback/","href":"/api-reference/google-drive/finish-connecting-google-drive"},{"title":"Mint a Google Picker token","deprecated":null,"version":null,"openapi":"/openapi.json get /google-drive/connection/picker-token/","href":"/api-reference/google-drive/mint-a-google-picker-token"}]},{"group":"inbox","pages":[{"title":"Download an attachment","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/attachments/{attachment_id}/download/","href":"/api-reference/inbox/download-an-attachment"},{"title":"Stream the inbox's change events","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/events/","href":"/api-reference/inbox/stream-the-inboxs-change-events"},{"title":"List labels","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/labels/","href":"/api-reference/inbox/list-labels"},{"title":"Create a label","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/labels/","href":"/api-reference/inbox/create-a-label"},{"title":"Delete a label","deprecated":null,"version":null,"openapi":"/openapi.json delete /inbox/labels/{label_id}/","href":"/api-reference/inbox/delete-a-label"},{"title":"Update a label","deprecated":null,"version":null,"openapi":"/openapi.json patch /inbox/labels/{label_id}/","href":"/api-reference/inbox/update-a-label"},{"title":"List saved views","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/saved-views/","href":"/api-reference/inbox/list-saved-views"},{"title":"Save the current filters as a view","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/saved-views/","href":"/api-reference/inbox/save-the-current-filters-as-a-view"},{"title":"Delete a saved view","deprecated":null,"version":null,"openapi":"/openapi.json delete /inbox/saved-views/{view_id}/","href":"/api-reference/inbox/delete-a-saved-view"},{"title":"Rename a saved view or repoint its filters","deprecated":null,"version":null,"openapi":"/openapi.json patch /inbox/saved-views/{view_id}/","href":"/api-reference/inbox/rename-a-saved-view-or-repoint-its-filters"},{"title":"List inbox threads","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/threads/","href":"/api-reference/inbox/list-inbox-threads"},{"title":"Delete many threads","deprecated":null,"version":null,"openapi":"/openapi.json delete /inbox/threads/","href":"/api-reference/inbox/delete-many-threads"},{"title":"Mark many threads read, done or snoozed","deprecated":null,"version":null,"openapi":"/openapi.json patch /inbox/threads/bulk/","href":"/api-reference/inbox/mark-many-threads-read-done-or-snoozed"},{"title":"Put one label on many threads","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/bulk/label/","href":"/api-reference/inbox/put-one-label-on-many-threads"},{"title":"Suppress many threads' contacts at once","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/bulk/suppress/","href":"/api-reference/inbox/suppress-many-threads-contacts-at-once"},{"title":"Count inbox threads","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/threads/length/","href":"/api-reference/inbox/count-inbox-threads"},{"title":"Get one thread","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/threads/{thread_id}/","href":"/api-reference/inbox/get-one-thread"},{"title":"Delete a thread","deprecated":null,"version":null,"openapi":"/openapi.json delete /inbox/threads/{thread_id}/","href":"/api-reference/inbox/delete-a-thread"},{"title":"Mark a thread read, done or snoozed","deprecated":null,"version":null,"openapi":"/openapi.json patch /inbox/threads/{thread_id}/","href":"/api-reference/inbox/mark-a-thread-read-done-or-snoozed"},{"title":"Assign exactly this set of labels to a thread","deprecated":null,"version":null,"openapi":"/openapi.json put /inbox/threads/{thread_id}/labels/","href":"/api-reference/inbox/assign-exactly-this-set-of-labels-to-a-thread"},{"title":"A thread's messages, oldest-first","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/threads/{thread_id}/messages/","href":"/api-reference/inbox/a-threads-messages-oldest-first"},{"title":"Reply in a thread","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/messages/","href":"/api-reference/inbox/reply-in-a-thread"},{"title":"Forward a message to somebody else","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/messages/{message_id}/forward/","href":"/api-reference/inbox/forward-a-message-to-somebody-else"},{"title":"Undo what a reply the AI read as asking to stop did","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/messages/{message_id}/stop-request/revert/","href":"/api-reference/inbox/undo-what-a-reply-the-ai-read-as-asking-to-stop-did"},{"title":"Suppress this contact and stop their sequences","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/suppress/","href":"/api-reference/inbox/suppress-this-contact-and-stop-their-sequences"},{"title":"Resume the follow-ups a reply the AI could not read stopped","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/unread-reply/resume/","href":"/api-reference/inbox/resume-the-follow-ups-a-reply-the-ai-could-not-read-stopped"},{"title":"Have the AI read again a reply it could not read","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/unread-reply/retry/","href":"/api-reference/inbox/have-the-ai-read-again-a-reply-it-could-not-read"}]},{"group":"inbox-ai","pages":[{"title":"List reply drafts","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/drafts/","href":"/api-reference/inbox-ai/list-reply-drafts"},{"title":"Generate a reply draft","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/drafts/","href":"/api-reference/inbox-ai/generate-a-reply-draft"},{"title":"Generate a reply draft, streaming the work","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/drafts/stream/","href":"/api-reference/inbox-ai/generate-a-reply-draft-streaming-the-work"},{"title":"Edit a draft before approving it","deprecated":null,"version":null,"openapi":"/openapi.json patch /inbox/drafts/{draft_id}/","href":"/api-reference/inbox-ai/edit-a-draft-before-approving-it"},{"title":"Approve and send a draft","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/drafts/{draft_id}/approve/","href":"/api-reference/inbox-ai/approve-and-send-a-draft"},{"title":"Rate a draft","deprecated":null,"version":null,"openapi":"/openapi.json put /inbox/drafts/{draft_id}/feedback/","href":"/api-reference/inbox-ai/rate-a-draft"},{"title":"Try again","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/drafts/{draft_id}/regenerate/","href":"/api-reference/inbox-ai/try-again"},{"title":"Reject a draft","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/drafts/{draft_id}/reject/","href":"/api-reference/inbox-ai/reject-a-draft"},{"title":"Whether to show the notice that replies now wait","deprecated":null,"version":null,"openapi":"/openapi.json get /inbox/replies-wait-notice/","href":"/api-reference/inbox-ai/whether-to-show-the-notice-that-replies-now-wait"},{"title":"Close the notice that replies now wait","deprecated":null,"version":null,"openapi":"/openapi.json patch /inbox/replies-wait-notice/","href":"/api-reference/inbox-ai/close-the-notice-that-replies-now-wait"},{"title":"Answer the agent's questions on a reply","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/answers/","href":"/api-reference/inbox-ai/answer-the-agents-questions-on-a-reply"},{"title":"Have the agent write a reply it wrote no draft for","deprecated":null,"version":null,"openapi":"/openapi.json post /inbox/threads/{thread_id}/blocked-reply/retry/","href":"/api-reference/inbox-ai/have-the-agent-write-a-reply-it-wrote-no-draft-for"}]},{"group":"integrations","pages":[{"title":"List all integrations","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/","href":"/api-reference/integrations/list-all-integrations"},{"title":"Bulk delete integrations","deprecated":null,"version":null,"openapi":"/openapi.json delete /integrations/","href":"/api-reference/integrations/bulk-delete-integrations"},{"title":"Bulk trigger health checks","deprecated":null,"version":null,"openapi":"/openapi.json post /integrations/bulk/verify/","href":"/api-reference/integrations/bulk-trigger-health-checks"},{"title":"Get the number of integrations","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/length/","href":"/api-reference/integrations/get-the-number-of-integrations"},{"title":"Suggest an integration name","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/name/suggestions/","href":"/api-reference/integrations/suggest-an-integration-name"},{"title":"Bulk health check progress and summary","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/runs/{run_id}/","href":"/api-reference/integrations/bulk-health-check-progress-and-summary"},{"title":"Get an integration","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/{integration_id}/","href":"/api-reference/integrations/get-an-integration"},{"title":"Delete an integration","deprecated":null,"version":null,"openapi":"/openapi.json delete /integrations/{integration_id}/","href":"/api-reference/integrations/delete-an-integration"},{"title":"List audit logs for an integration","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/{integration_id}/audit-logs/","href":"/api-reference/integrations/list-audit-logs-for-an-integration"},{"title":"List health check history","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/{integration_id}/health-checks/","href":"/api-reference/integrations/list-health-check-history"},{"title":"List all known properties for an integration","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/{integration_id}/properties/","href":"/api-reference/integrations/list-all-known-properties-for-an-integration"},{"title":"List record types for an integration","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/{integration_id}/record-types/","href":"/api-reference/integrations/list-record-types-for-an-integration"},{"title":"Trigger a health check","deprecated":null,"version":null,"openapi":"/openapi.json post /integrations/{integration_id}/verify/","href":"/api-reference/integrations/trigger-a-health-check"}]},{"group":"integration-types","pages":[{"title":"List integration categories","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/categories/","href":"/api-reference/integration-types/list-integration-categories"},{"title":"Count integration categories","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/categories/length/","href":"/api-reference/integration-types/count-integration-categories"},{"title":"List the record-type vocabulary","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/record-types/","href":"/api-reference/integration-types/list-the-record-type-vocabulary"},{"title":"List all available integration types","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/types/","href":"/api-reference/integration-types/list-all-available-integration-types"},{"title":"Get a specific integration type","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/types/{name}/","href":"/api-reference/integration-types/get-a-specific-integration-type"},{"title":"Get setup guide for an integration type","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/types/{name}/guide/","href":"/api-reference/integration-types/get-setup-guide-for-an-integration-type"}]},{"group":"table-integration-lookup","pages":[{"title":"List the fields one record type can be looked up by","deprecated":null,"version":null,"openapi":"/openapi.json get /integrations/{integration_id}/identity-fields/","href":"/api-reference/table-integration-lookup/list-the-fields-one-record-type-can-be-looked-up-by"}]},{"group":"find-leads","pages":[{"title":"List the columns a search would create","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/columns/","href":"/api-reference/find-leads/list-the-columns-a-search-would-create"},{"title":"Read a table of companies a people search can follow","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/company-table/","href":"/api-reference/find-leads/read-a-table-of-companies-a-people-search-can-follow"},{"title":"List the enrichments offered at import","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/enrichment-options/","href":"/api-reference/find-leads/list-the-enrichments-offered-at-import"},{"title":"Count matching leads","deprecated":null,"version":null,"openapi":"/openapi.json post /leads/length/","href":"/api-reference/find-leads/count-matching-leads"},{"title":"Find an address on the map","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/places/search/","href":"/api-reference/find-leads/find-an-address-on-the-map"},{"title":"Preview matching leads","deprecated":null,"version":null,"openapi":"/openapi.json post /leads/preview/","href":"/api-reference/find-leads/preview-matching-leads"},{"title":"List recorded lead searches","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/recent-searches/","href":"/api-reference/find-leads/list-recorded-lead-searches"},{"title":"Remove a search from your recents","deprecated":null,"version":null,"openapi":"/openapi.json delete /leads/recent-searches/{entry_id}/","href":"/api-reference/find-leads/remove-a-search-from-your-recents"},{"title":"Get a search type's row price","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/record-types/{record_type}/","href":"/api-reference/find-leads/get-a-search-types-row-price"},{"title":"List saved lead searches","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/saved-searches/","href":"/api-reference/find-leads/list-saved-lead-searches"},{"title":"Save a lead search","deprecated":null,"version":null,"openapi":"/openapi.json post /leads/saved-searches/","href":"/api-reference/find-leads/save-a-lead-search"},{"title":"Suggest starter lead searches","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/saved-searches/suggestions/","href":"/api-reference/find-leads/suggest-starter-lead-searches"},{"title":"Delete a saved lead search","deprecated":null,"version":null,"openapi":"/openapi.json delete /leads/saved-searches/{saved_search_id}/","href":"/api-reference/find-leads/delete-a-saved-lead-search"},{"title":"Record a saved search being loaded","deprecated":null,"version":null,"openapi":"/openapi.json post /leads/saved-searches/{saved_search_id}/open/","href":"/api-reference/find-leads/record-a-saved-search-being-loaded"},{"title":"List the buying signals a search can look for","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/signal-types/","href":"/api-reference/find-leads/list-the-buying-signals-a-search-can-look-for"},{"title":"List the accelerator batches","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/startup-launches/batches/","href":"/api-reference/find-leads/list-the-accelerator-batches"},{"title":"List the startup launch filters","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/startup-launches/filters/","href":"/api-reference/find-leads/list-the-startup-launch-filters"},{"title":"List the startup launch boards","deprecated":null,"version":null,"openapi":"/openapi.json get /leads/startup-launches/sources/","href":"/api-reference/find-leads/list-the-startup-launch-boards"},{"title":"Suggest a name for a lead search's table","deprecated":null,"version":null,"openapi":"/openapi.json post /leads/table-name/suggestions/","href":"/api-reference/find-leads/suggest-a-name-for-a-lead-searchs-table"},{"title":"Match pasted values against a closed vocabulary","deprecated":null,"version":null,"openapi":"/openapi.json post /leads/vocabulary/suggestions/","href":"/api-reference/find-leads/match-pasted-values-against-a-closed-vocabulary"},{"title":"Get the search behind a table","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/lead-search/","href":"/api-reference/find-leads/get-the-search-behind-a-table"},{"title":"Put a lead search behind a table","deprecated":null,"version":null,"openapi":"/openapi.json put /tables/{table_id}/lead-search/","href":"/api-reference/find-leads/put-a-lead-search-behind-a-table"},{"title":"Remove a table's search","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/lead-search/","href":"/api-reference/find-leads/remove-a-tables-search"},{"title":"Preview replacing a table's rows with its search","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/lead-search/impact/","href":"/api-reference/find-leads/preview-replacing-a-tables-rows-with-its-search"},{"title":"Preview putting a search behind a table","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/lead-search/preview/","href":"/api-reference/find-leads/preview-putting-a-search-behind-a-table"},{"title":"List a table's search runs","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/lead-search/runs/","href":"/api-reference/find-leads/list-a-tables-search-runs"},{"title":"Run a table's search again","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/lead-search/runs/","href":"/api-reference/find-leads/run-a-tables-search-again"},{"title":"Preview a run of a table's search","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/lead-search/runs/preview/","href":"/api-reference/find-leads/preview-a-run-of-a-tables-search"},{"title":"Set a search's run cadence","deprecated":null,"version":null,"openapi":"/openapi.json put /tables/{table_id}/lead-search/schedule/","href":"/api-reference/find-leads/set-a-searchs-run-cadence"},{"title":"Clear a search's run cadence","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/lead-search/schedule/","href":"/api-reference/find-leads/clear-a-searchs-run-cadence"}]},{"group":"linkedin","pages":[{"title":"Claim the next permitted action","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/next/","href":"/api-reference/linkedin/claim-the-next-permitted-action"},{"title":"Report a run of a step that was cut off, and ask what to do with the step","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/{action_id}/attempts/","href":"/api-reference/linkedin/report-a-run-of-a-step-that-was-cut-off-and-ask-what-to-do-with-the-step"},{"title":"Ask to press the control that changes LinkedIn","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/{action_id}/commit/","href":"/api-reference/linkedin/ask-to-press-the-control-that-changes-linkedin"},{"title":"Attach a page snapshot to a step's report","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/{action_id}/diagnostic/","href":"/api-reference/linkedin/attach-a-page-snapshot-to-a-steps-report"},{"title":"Skip a step from the side panel","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/{action_id}/reject/","href":"/api-reference/linkedin/skip-a-step-from-the-side-panel"},{"title":"Hand back a running step without settling it","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/{action_id}/release/","href":"/api-reference/linkedin/hand-back-a-running-step-without-settling-it"},{"title":"Report an action's outcome","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/actions/{action_id}/result/","href":"/api-reference/linkedin/report-an-actions-outcome"},{"title":"Fetch the remote selector and pacing config","deprecated":null,"version":null,"openapi":"/openapi.json get /linkedin/agent/config/","href":"/api-reference/linkedin/fetch-the-remote-selector-and-pacing-config"},{"title":"Disconnect the account from the side panel","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/disconnect/","href":"/api-reference/linkedin/disconnect-the-account-from-the-side-panel"},{"title":"Report liveness and read the authoritative run state","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/heartbeat/","href":"/api-reference/linkedin/report-liveness-and-read-the-authoritative-run-state"},{"title":"List completed steps, for the side panel","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/history/","href":"/api-reference/linkedin/list-completed-steps-for-the-side-panel"},{"title":"Connect a browser with a sender's connection token","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/pair/","href":"/api-reference/linkedin/connect-a-browser-with-a-senders-connection-token"},{"title":"List the queue, for the side panel","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/queue/","href":"/api-reference/linkedin/list-the-queue-for-the-side-panel"},{"title":"Set the sender's approval setting from the extension","deprecated":null,"version":null,"openapi":"/openapi.json post /linkedin/agent/state/","href":"/api-reference/linkedin/set-the-senders-approval-setting-from-the-extension"},{"title":"List a sender's LinkedIn steps","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/linkedin/actions/","href":"/api-reference/linkedin/list-a-senders-linkedin-steps"},{"title":"Try one LinkedIn step","deprecated":null,"version":null,"openapi":"/openapi.json post /sender-profiles/{profile_id}/linkedin/actions/","href":"/api-reference/linkedin/try-one-linkedin-step"},{"title":"Count a sender's LinkedIn steps","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/linkedin/actions/length/","href":"/api-reference/linkedin/count-a-senders-linkedin-steps"},{"title":"Cancel a queued LinkedIn step","deprecated":null,"version":null,"openapi":"/openapi.json post /sender-profiles/{profile_id}/linkedin/actions/{action_id}/cancel/","href":"/api-reference/linkedin/cancel-a-queued-linkedin-step"},{"title":"Read a sender's LinkedIn connection","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/linkedin/connection/","href":"/api-reference/linkedin/read-a-senders-linkedin-connection"},{"title":"Disconnect the sender's LinkedIn account","deprecated":null,"version":null,"openapi":"/openapi.json delete /sender-profiles/{profile_id}/linkedin/connection/","href":"/api-reference/linkedin/disconnect-the-senders-linkedin-account"},{"title":"Replace the sender's connection token","deprecated":null,"version":null,"openapi":"/openapi.json post /sender-profiles/{profile_id}/linkedin/connection/regenerate-token/","href":"/api-reference/linkedin/replace-the-senders-connection-token"},{"title":"Stream a sender's LinkedIn changes","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/linkedin/events/","href":"/api-reference/linkedin/stream-a-senders-linkedin-changes"},{"title":"Update LinkedIn safety settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /sender-profiles/{profile_id}/linkedin/settings/","href":"/api-reference/linkedin/update-linkedin-safety-settings"},{"title":"Read a sender's LinkedIn step totals","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/linkedin/stats/","href":"/api-reference/linkedin/read-a-senders-linkedin-step-totals"},{"title":"Count a sender's LinkedIn steps that tables queued","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/linkedin/table-steps/","href":"/api-reference/linkedin/count-a-senders-linkedin-steps-that-tables-queued"},{"title":"Cancel a table column's queued LinkedIn steps","deprecated":null,"version":null,"openapi":"/openapi.json post /sender-profiles/{profile_id}/linkedin/table-steps/bulk/cancel/","href":"/api-reference/linkedin/cancel-a-table-columns-queued-linkedin-steps"}]},{"group":"senders","pages":[{"title":"List mailboxes","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/","href":"/api-reference/senders/list-mailboxes"},{"title":"Delete many mailboxes","deprecated":null,"version":null,"openapi":"/openapi.json delete /mailboxes/","href":"/api-reference/senders/delete-many-mailboxes"},{"title":"Begin connecting a Google Workspace mailbox","deprecated":null,"version":null,"openapi":"/openapi.json post /mailboxes/authorize/","href":"/api-reference/senders/begin-connecting-a-google-workspace-mailbox"},{"title":"Edit many mailboxes at once","deprecated":null,"version":null,"openapi":"/openapi.json patch /mailboxes/bulk/","href":"/api-reference/senders/edit-many-mailboxes-at-once"},{"title":"Re-check mailbox connections now","deprecated":null,"version":null,"openapi":"/openapi.json post /mailboxes/bulk/verify/","href":"/api-reference/senders/re-check-mailbox-connections-now"},{"title":"Finish connecting a Google Workspace mailbox","deprecated":null,"version":null,"openapi":"/openapi.json post /mailboxes/callback/","href":"/api-reference/senders/finish-connecting-a-google-workspace-mailbox"},{"title":"Get the InboxKit connection state","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/inboxkit/connection/","href":"/api-reference/senders/get-the-inboxkit-connection-state"},{"title":"Connect InboxKit","deprecated":null,"version":null,"openapi":"/openapi.json put /mailboxes/inboxkit/connection/","href":"/api-reference/senders/connect-inboxkit"},{"title":"Disconnect InboxKit","deprecated":null,"version":null,"openapi":"/openapi.json delete /mailboxes/inboxkit/connection/","href":"/api-reference/senders/disconnect-inboxkit"},{"title":"Update InboxKit automation settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /mailboxes/inboxkit/connection/","href":"/api-reference/senders/update-inboxkit-automation-settings"},{"title":"Validate an InboxKit API key and list its workspaces","deprecated":null,"version":null,"openapi":"/openapi.json post /mailboxes/inboxkit/connection/preview/","href":"/api-reference/senders/validate-an-inboxkit-api-key-and-list-its-workspaces"},{"title":"List domain delegation states","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/inboxkit/domains/","href":"/api-reference/senders/list-domain-delegation-states"},{"title":"List InboxKit import runs","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/inboxkit/imports/","href":"/api-reference/senders/list-inboxkit-import-runs"},{"title":"Import selected InboxKit mailboxes","deprecated":null,"version":null,"openapi":"/openapi.json post /mailboxes/inboxkit/imports/","href":"/api-reference/senders/import-selected-inboxkit-mailboxes"},{"title":"Get one InboxKit import run","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/inboxkit/imports/{run_id}/","href":"/api-reference/senders/get-one-inboxkit-import-run"},{"title":"List the org's InboxKit inventory","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/inboxkit/inventory/","href":"/api-reference/senders/list-the-orgs-inboxkit-inventory"},{"title":"Count mailboxes","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/length/","href":"/api-reference/senders/count-mailboxes"},{"title":"Mailbox overview tiles","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/overview/","href":"/api-reference/senders/mailbox-overview-tiles"},{"title":"Get a mailbox","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/{mailbox_id}/","href":"/api-reference/senders/get-a-mailbox"},{"title":"Delete a mailbox","deprecated":null,"version":null,"openapi":"/openapi.json delete /mailboxes/{mailbox_id}/","href":"/api-reference/senders/delete-a-mailbox"},{"title":"Update a mailbox","deprecated":null,"version":null,"openapi":"/openapi.json patch /mailboxes/{mailbox_id}/","href":"/api-reference/senders/update-a-mailbox"},{"title":"A mailbox's recent sends, replies and bounces","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/{mailbox_id}/activity/","href":"/api-reference/senders/a-mailboxs-recent-sends-replies-and-bounces"},{"title":"List a mailbox's bounces","deprecated":null,"version":null,"openapi":"/openapi.json get /mailboxes/{mailbox_id}/bounces/","href":"/api-reference/senders/list-a-mailboxs-bounces"},{"title":"Verify a mailbox's connection still works","deprecated":null,"version":null,"openapi":"/openapi.json post /mailboxes/{mailbox_id}/verify/","href":"/api-reference/senders/verify-a-mailboxs-connection-still-works"},{"title":"List senders","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/","href":"/api-reference/senders/list-senders"},{"title":"Add a sender","deprecated":null,"version":null,"openapi":"/openapi.json post /sender-profiles/","href":"/api-reference/senders/add-a-sender"},{"title":"Delete many senders","deprecated":null,"version":null,"openapi":"/openapi.json delete /sender-profiles/","href":"/api-reference/senders/delete-many-senders"},{"title":"Edit many senders at once","deprecated":null,"version":null,"openapi":"/openapi.json patch /sender-profiles/bulk/","href":"/api-reference/senders/edit-many-senders-at-once"},{"title":"Get a sender","deprecated":null,"version":null,"openapi":"/openapi.json get /sender-profiles/{profile_id}/","href":"/api-reference/senders/get-a-sender"},{"title":"Delete a sender","deprecated":null,"version":null,"openapi":"/openapi.json delete /sender-profiles/{profile_id}/","href":"/api-reference/senders/delete-a-sender"},{"title":"Update a sender","deprecated":null,"version":null,"openapi":"/openapi.json patch /sender-profiles/{profile_id}/","href":"/api-reference/senders/update-a-sender"},{"title":"Set a profile's mailboxes","deprecated":null,"version":null,"openapi":"/openapi.json put /sender-profiles/{profile_id}/mailboxes/","href":"/api-reference/senders/set-a-profiles-mailboxes"}]},{"group":"sequences","pages":[{"title":"List saved email templates","deprecated":null,"version":null,"openapi":"/openapi.json get /message-templates/","href":"/api-reference/sequences/list-saved-email-templates"},{"title":"Save an email template","deprecated":null,"version":null,"openapi":"/openapi.json post /message-templates/","href":"/api-reference/sequences/save-an-email-template"},{"title":"List the built-in email templates","deprecated":null,"version":null,"openapi":"/openapi.json get /message-templates/built-ins/","href":"/api-reference/sequences/list-the-built-in-email-templates"},{"title":"Delete an email template","deprecated":null,"version":null,"openapi":"/openapi.json delete /message-templates/{template_id}/","href":"/api-reference/sequences/delete-an-email-template"},{"title":"Rename or re-scope an email template","deprecated":null,"version":null,"openapi":"/openapi.json patch /message-templates/{template_id}/","href":"/api-reference/sequences/rename-or-re-scope-an-email-template"},{"title":"List reusable sequence templates","deprecated":null,"version":null,"openapi":"/openapi.json get /sequence-templates/","href":"/api-reference/sequences/list-reusable-sequence-templates"},{"title":"Save a detached sequence template","deprecated":null,"version":null,"openapi":"/openapi.json post /sequence-templates/","href":"/api-reference/sequences/save-a-detached-sequence-template"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequence-templates/{template_id}/","href":"/api-reference/sequences/delete-a-template"},{"title":"Create a draft from a template, with fresh audience and senders","deprecated":null,"version":null,"openapi":"/openapi.json post /sequence-templates/{template_id}/use/","href":"/api-reference/sequences/create-a-draft-from-a-template-with-fresh-audience-and-senders"},{"title":"List sequences","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/","href":"/api-reference/sequences/list-sequences"},{"title":"Create a sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/","href":"/api-reference/sequences/create-a-sequence"},{"title":"Sender leaderboard","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/analytics/leaderboard/","href":"/api-reference/sequences/sender-leaderboard"},{"title":"Outreach analytics","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/analytics/summary/","href":"/api-reference/sequences/outreach-analytics"},{"title":"Name the tables a sequence cannot write to","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/audience-refusals/","href":"/api-reference/sequences/name-the-tables-a-sequence-cannot-write-to"},{"title":"Change several sequences at once","deprecated":null,"version":null,"openapi":"/openapi.json patch /sequences/bulk/","href":"/api-reference/sequences/change-several-sequences-at-once"},{"title":"Suggest a column mapping for a table","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/column-mapping/suggestions/","href":"/api-reference/sequences/suggest-a-column-mapping-for-a-table"},{"title":"Suggest email steps from a table's written emails","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/email-steps/suggestions/","href":"/api-reference/sequences/suggest-email-steps-from-a-tables-written-emails"},{"title":"List sequence folders","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/folders/","href":"/api-reference/sequences/list-sequence-folders"},{"title":"Make a sequence folder","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/folders/","href":"/api-reference/sequences/make-a-sequence-folder"},{"title":"Suggest folders for the sequences in no folder","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/folders/suggestions/","href":"/api-reference/sequences/suggest-folders-for-the-sequences-in-no-folder"},{"title":"Delete a sequence folder","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequences/folders/{folder_id}/","href":"/api-reference/sequences/delete-a-sequence-folder"},{"title":"Rename or move a sequence folder","deprecated":null,"version":null,"openapi":"/openapi.json patch /sequences/folders/{folder_id}/","href":"/api-reference/sequences/rename-or-move-a-sequence-folder"},{"title":"Restore a sequence folder from Trash","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/folders/{folder_id}/restore/","href":"/api-reference/sequences/restore-a-sequence-folder-from-trash"},{"title":"Count sequences, with when their stats were computed","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/length/","href":"/api-reference/sequences/count-sequences-with-when-their-stats-were-computed"},{"title":"Check a drafted message for deliverability risks","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/message/check/","href":"/api-reference/sequences/check-a-drafted-message-for-deliverability-risks"},{"title":"Propose spintax rotations for a drafted message","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/spintax/suggestions/","href":"/api-reference/sequences/propose-spintax-rotations-for-a-drafted-message"},{"title":"Get a sequence with its graph","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/","href":"/api-reference/sequences/get-a-sequence-with-its-graph"},{"title":"Move a sequence to Trash","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequences/{sequence_id}/","href":"/api-reference/sequences/move-a-sequence-to-trash"},{"title":"Update a sequence's settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /sequences/{sequence_id}/","href":"/api-reference/sequences/update-a-sequences-settings"},{"title":"Copy another sequence's agent setup","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/copy/","href":"/api-reference/sequences/copy-another-sequences-agent-setup"},{"title":"List saved samples or reviewed messages for a sequence's agent","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/agent/examples/","href":"/api-reference/sequences/list-saved-samples-or-reviewed-messages-for-a-sequences-agent"},{"title":"Preview one contact's agent-written message, streaming the research","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/preview/stream/","href":"/api-reference/sequences/preview-one-contacts-agent-written-message-streaming-the-research"},{"title":"Stop a preview that is being written","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/preview/{preview_id}/stop/","href":"/api-reference/sequences/stop-a-preview-that-is-being-written"},{"title":"List the audience columns the agent writes from","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/agent/source-columns/","href":"/api-reference/sequences/list-the-audience-columns-the-agent-writes-from"},{"title":"List contacts available for the Preview","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/agent/training-contacts/","href":"/api-reference/sequences/list-contacts-available-for-the-preview"},{"title":"Keep threads already written on the AI writing tab","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/training-contacts/bulk/","href":"/api-reference/sequences/keep-threads-already-written-on-the-ai-writing-tab"},{"title":"Name the contact to read after this one","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/agent/training-contacts/next/","href":"/api-reference/sequences/name-the-contact-to-read-after-this-one"},{"title":"List the sequence's Previews","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/agent/training-sessions/","href":"/api-reference/sequences/list-the-sequences-previews"},{"title":"Write complete sequences for up to ten contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/training-sessions/","href":"/api-reference/sequences/write-complete-sequences-for-up-to-ten-contacts"},{"title":"Close the Preview and keep its reviews","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/training-sessions/{session_id}/complete/","href":"/api-reference/sequences/close-the-preview-and-keep-its-reviews"},{"title":"Review a contact's whole thread in the Preview","deprecated":null,"version":null,"openapi":"/openapi.json patch /sequences/{sequence_id}/agent/training-sessions/{session_id}/contacts/{record_id}/","href":"/api-reference/sequences/review-a-contacts-whole-thread-in-the-preview"},{"title":"Write the Preview's failed messages again","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/agent/training-sessions/{session_id}/retry/","href":"/api-reference/sequences/write-the-previews-failed-messages-again"},{"title":"Set the audience: table, view, column mapping","deprecated":null,"version":null,"openapi":"/openapi.json put /sequences/{sequence_id}/audience/","href":"/api-reference/sequences/set-the-audience:-table-view-column-mapping"},{"title":"Remap the audience columns without rebinding the table","deprecated":null,"version":null,"openapi":"/openapi.json patch /sequences/{sequence_id}/audience/","href":"/api-reference/sequences/remap-the-audience-columns-without-rebinding-the-table"},{"title":"Preview a replacement audience before choosing how existing journeys continue","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/audience/impact/","href":"/api-reference/sequences/preview-a-replacement-audience-before-choosing-how-existing-journeys-continue"},{"title":"Preview what the audience resolves to","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/audience/preview/","href":"/api-reference/sequences/preview-what-the-audience-resolves-to"},{"title":"List a sequence's activity","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/audit-logs/","href":"/api-reference/sequences/list-a-sequences-activity"},{"title":"A Browser use run's recording","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/browser-runs/{run_id}/replay/","href":"/api-reference/sequences/a-browser-use-runs-recording"},{"title":"Open a Browser use run's recording","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/browser-runs/{run_id}/replay/open/","href":"/api-reference/sequences/open-a-browser-use-runs-recording"},{"title":"One page of a Browser use run's recording, as a playlist","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/browser-runs/{run_id}/replay/pages/{page_id}/download/","href":"/api-reference/sequences/one-page-of-a-browser-use-runs-recording-as-a-playlist"},{"title":"Show the values a Browser use run kept out of sight","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/browser-runs/{run_id}/reveal/","href":"/api-reference/sequences/show-the-values-a-browser-use-run-kept-out-of-sight"},{"title":"A Browser use trial's recording","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/browser-trials/{trial_id}/replay/","href":"/api-reference/sequences/a-browser-use-trials-recording"},{"title":"Open a Browser use trial's recording","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/browser-trials/{trial_id}/replay/open/","href":"/api-reference/sequences/open-a-browser-use-trials-recording"},{"title":"One page of a Browser use trial's recording, as a playlist","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/browser-trials/{trial_id}/replay/pages/{page_id}/download/","href":"/api-reference/sequences/one-page-of-a-browser-use-trials-recording-as-a-playlist"},{"title":"Show the values a Browser use trial kept out of sight","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/browser-trials/{trial_id}/reveal/","href":"/api-reference/sequences/show-the-values-a-browser-use-trial-kept-out-of-sight"},{"title":"Read sequence spending and reservations","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/budget/","href":"/api-reference/sequences/read-sequence-spending-and-reservations"},{"title":"Get the combined send capacity of the sequence's assigned senders","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/capacity/","href":"/api-reference/sequences/get-the-combined-send-capacity-of-the-sequences-assigned-senders"},{"title":"Apply the reviewed changes atomically","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/changes/apply/","href":"/api-reference/sequences/apply-the-reviewed-changes-atomically"},{"title":"Review proposed live changes","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/changes/preview/","href":"/api-reference/sequences/review-proposed-live-changes"},{"title":"Check a sequence before it launches","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/check/","href":"/api-reference/sequences/check-a-sequence-before-it-launches"},{"title":"List a sequence's contacts","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/contacts/","href":"/api-reference/sequences/list-a-sequences-contacts"},{"title":"Remove many contacts from the sequence","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequences/{sequence_id}/contacts/","href":"/api-reference/sequences/remove-many-contacts-from-the-sequence"},{"title":"Contacts breakdown","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/contacts/breakdown/","href":"/api-reference/sequences/contacts-breakdown"},{"title":"Pause many contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/bulk/pause/","href":"/api-reference/sequences/pause-many-contacts"},{"title":"Resume many contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/bulk/resume/","href":"/api-reference/sequences/resume-many-contacts"},{"title":"Retry many failed contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/bulk/retry/","href":"/api-reference/sequences/retry-many-failed-contacts"},{"title":"Send the next step now to many contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/bulk/send-now/","href":"/api-reference/sequences/send-the-next-step-now-to-many-contacts"},{"title":"Stop many contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/bulk/stop/","href":"/api-reference/sequences/stop-many-contacts"},{"title":"Audience eligibility and actionable reasons","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/contacts/eligibility/","href":"/api-reference/sequences/audience-eligibility-and-actionable-reasons"},{"title":"Count the contacts a filter matches under each tab","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/contacts/length/","href":"/api-reference/sequences/count-the-contacts-a-filter-matches-under-each-tab"},{"title":"One contact in this sequence","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/contacts/{enrolment_id}/","href":"/api-reference/sequences/one-contact-in-this-sequence"},{"title":"Remove one contact from the sequence","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequences/{sequence_id}/contacts/{enrolment_id}/","href":"/api-reference/sequences/remove-one-contact-from-the-sequence"},{"title":"One contact's history in this sequence","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/contacts/{enrolment_id}/history/","href":"/api-reference/sequences/one-contacts-history-in-this-sequence"},{"title":"Move one contact to another sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/{enrolment_id}/move/","href":"/api-reference/sequences/move-one-contact-to-another-sequence"},{"title":"Pause one contact","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/{enrolment_id}/pause/","href":"/api-reference/sequences/pause-one-contact"},{"title":"Resume one paused or stopped contact","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/contacts/{enrolment_id}/resume/","href":"/api-reference/sequences/resume-one-paused-or-stopped-contact"},{"title":"Duplicate a sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/duplicate/","href":"/api-reference/sequences/duplicate-a-sequence"},{"title":"Find a sequence's missing work emails","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/email-searches/","href":"/api-reference/sequences/find-a-sequences-missing-work-emails"},{"title":"Price finding a sequence's missing work emails","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/email-searches/preview/","href":"/api-reference/sequences/price-finding-a-sequences-missing-work-emails"},{"title":"Verify a sequence's emails","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/email-verifications/","href":"/api-reference/sequences/verify-a-sequences-emails"},{"title":"Price verifying a sequence's emails","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/email-verifications/preview/","href":"/api-reference/sequences/price-verifying-a-sequences-emails"},{"title":"Follow a sequence's email verification","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/email-verifications/progress/","href":"/api-reference/sequences/follow-a-sequences-email-verification"},{"title":"Star a sequence","deprecated":null,"version":null,"openapi":"/openapi.json put /sequences/{sequence_id}/favorite/","href":"/api-reference/sequences/star-a-sequence"},{"title":"Unstar a sequence","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequences/{sequence_id}/favorite/","href":"/api-reference/sequences/unstar-a-sequence"},{"title":"Live per-node counts for the builder","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/funnel/","href":"/api-reference/sequences/live-per-node-counts-for-the-builder"},{"title":"Replace the sequence graph","deprecated":null,"version":null,"openapi":"/openapi.json put /sequences/{sequence_id}/graph/","href":"/api-reference/sequences/replace-the-sequence-graph"},{"title":"Why nothing is moving","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/holds/","href":"/api-reference/sequences/why-nothing-is-moving"},{"title":"Launch a sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/launch/","href":"/api-reference/sequences/launch-a-sequence"},{"title":"Per-step message performance","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/message-performance/","href":"/api-reference/sequences/per-step-message-performance"},{"title":"What a sequence's contacts have cost so far","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/observed-costs/","href":"/api-reference/sequences/what-a-sequences-contacts-have-cost-so-far"},{"title":"Record that the caller opened this sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/open/","href":"/api-reference/sequences/record-that-the-caller-opened-this-sequence"},{"title":"Pause a sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/pause/","href":"/api-reference/sequences/pause-a-sequence"},{"title":"Reply numbers","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/reply-stats/","href":"/api-reference/sequences/reply-numbers"},{"title":"Restore a sequence from Trash","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/restore/","href":"/api-reference/sequences/restore-a-sequence-from-trash"},{"title":"Resume a paused sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/resume/","href":"/api-reference/sequences/resume-a-paused-sequence"},{"title":"Get the senders a sequence sends as","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/senders/","href":"/api-reference/sequences/get-the-senders-a-sequence-sends-as"},{"title":"Choose the senders a sequence sends as","deprecated":null,"version":null,"openapi":"/openapi.json put /sequences/{sequence_id}/senders/","href":"/api-reference/sequences/choose-the-senders-a-sequence-sends-as"},{"title":"Follow a sequence's start","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/start-progress/","href":"/api-reference/sequences/follow-a-sequences-start"},{"title":"List a Browser use step's trials","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/steps/{step_id}/browser-trials/","href":"/api-reference/sequences/list-a-browser-use-steps-trials"},{"title":"Try a Browser use step on one contact","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/steps/{step_id}/browser-trials/","href":"/api-reference/sequences/try-a-browser-use-step-on-one-contact"},{"title":"Preview trying a Browser use step on one contact","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/steps/{step_id}/browser-trials/preview/","href":"/api-reference/sequences/preview-trying-a-browser-use-step-on-one-contact"},{"title":"Render a step for one contact","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/steps/{step_id}/preview/","href":"/api-reference/sequences/render-a-step-for-one-contact"},{"title":"Preview one step for one contact with the waiting changes","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/steps/{step_id}/preview/","href":"/api-reference/sequences/preview-one-step-for-one-contact-with-the-waiting-changes"},{"title":"Mark one email the agent wrote for a contact Looks good","deprecated":null,"version":null,"openapi":"/openapi.json put /sequences/{sequence_id}/steps/{step_id}/rows/{record_id}/feedback/","href":"/api-reference/sequences/mark-one-email-the-agent-wrote-for-a-contact-looks-good"},{"title":"Get one contact's hand-edited message for a step","deprecated":null,"version":null,"openapi":"/openapi.json get /sequences/{sequence_id}/steps/{step_id}/rows/{record_id}/override/","href":"/api-reference/sequences/get-one-contacts-hand-edited-message-for-a-step"},{"title":"Pin the exact message one contact receives","deprecated":null,"version":null,"openapi":"/openapi.json put /sequences/{sequence_id}/steps/{step_id}/rows/{record_id}/override/","href":"/api-reference/sequences/pin-the-exact-message-one-contact-receives"},{"title":"Revert one contact to the step's template","deprecated":null,"version":null,"openapi":"/openapi.json delete /sequences/{sequence_id}/steps/{step_id}/rows/{record_id}/override/","href":"/api-reference/sequences/revert-one-contact-to-the-steps-template"},{"title":"Write one contact's samples","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/steps/{step_id}/rows/{record_id}/samples/","href":"/api-reference/sequences/write-one-contacts-samples"},{"title":"Send this step as a real test email","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/steps/{step_id}/test-send/","href":"/api-reference/sequences/send-this-step-as-a-real-test-email"},{"title":"Sync a sequence's enrolments now","deprecated":null,"version":null,"openapi":"/openapi.json post /sequences/{sequence_id}/sync/","href":"/api-reference/sequences/sync-a-sequences-enrolments-now"},{"title":"Add grid rows to a sequence","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/bulk/add-to-sequence/","href":"/api-reference/sequences/add-grid-rows-to-a-sequence"}]},{"group":"notifications","pages":[{"title":"This user's notification switches","deprecated":null,"version":null,"openapi":"/openapi.json get /notifications/preferences/","href":"/api-reference/notifications/this-users-notification-switches"},{"title":"Update this user's notification switches","deprecated":null,"version":null,"openapi":"/openapi.json put /notifications/preferences/","href":"/api-reference/notifications/update-this-users-notification-switches"},{"title":"List notification rules","deprecated":null,"version":null,"openapi":"/openapi.json get /notifications/rules/","href":"/api-reference/notifications/list-notification-rules"},{"title":"Create a notification rule","deprecated":null,"version":null,"openapi":"/openapi.json post /notifications/rules/","href":"/api-reference/notifications/create-a-notification-rule"},{"title":"Delete a notification rule","deprecated":null,"version":null,"openapi":"/openapi.json delete /notifications/rules/{rule_id}/","href":"/api-reference/notifications/delete-a-notification-rule"},{"title":"Channels the bot can post to","deprecated":null,"version":null,"openapi":"/openapi.json get /notifications/slack/channels/","href":"/api-reference/notifications/channels-the-bot-can-post-to"},{"title":"The organization's Slack connection","deprecated":null,"version":null,"openapi":"/openapi.json get /notifications/slack/connection/","href":"/api-reference/notifications/the-organizations-slack-connection"},{"title":"Disconnect Slack","deprecated":null,"version":null,"openapi":"/openapi.json delete /notifications/slack/connection/","href":"/api-reference/notifications/disconnect-slack"},{"title":"Begin connecting a Slack workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /notifications/slack/connection/authorize/","href":"/api-reference/notifications/begin-connecting-a-slack-workspace"},{"title":"Finish connecting a Slack workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /notifications/slack/connection/callback/","href":"/api-reference/notifications/finish-connecting-a-slack-workspace"},{"title":"List the organization's Slack connections","deprecated":null,"version":null,"openapi":"/openapi.json get /notifications/slack/connections/","href":"/api-reference/notifications/list-the-organizations-slack-connections"}]},{"group":"onboarding","pages":[{"title":"Get the Getting started checklist","deprecated":null,"version":null,"openapi":"/openapi.json get /onboarding/","href":"/api-reference/onboarding/get-the-getting-started-checklist"},{"title":"Hide the Getting started checklist","deprecated":null,"version":null,"openapi":"/openapi.json patch /onboarding/","href":"/api-reference/onboarding/hide-the-getting-started-checklist"},{"title":"Bring the Getting started checklist up to date","deprecated":null,"version":null,"openapi":"/openapi.json post /onboarding/sync/","href":"/api-reference/onboarding/bring-the-getting-started-checklist-up-to-date"}]},{"group":"outreach","pages":[{"title":"List the approval queue","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/","href":"/api-reference/outreach/list-the-approval-queue"},{"title":"List what went out as a sender","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/activity/","href":"/api-reference/outreach/list-what-went-out-as-a-sender"},{"title":"Count what went out as a sender","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/activity/length/","href":"/api-reference/outreach/count-what-went-out-as-a-sender"},{"title":"Read one activity row","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/activity/{activity_id}/","href":"/api-reference/outreach/read-one-activity-row"},{"title":"Read the email an activity row sent","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/activity/{activity_id}/email/","href":"/api-reference/outreach/read-the-email-an-activity-row-sent"},{"title":"Approve every ticked task","deprecated":null,"version":null,"openapi":"/openapi.json post /outreach-tasks/bulk/approve/","href":"/api-reference/outreach/approve-every-ticked-task"},{"title":"Reject every ticked task","deprecated":null,"version":null,"openapi":"/openapi.json post /outreach-tasks/bulk/reject/","href":"/api-reference/outreach/reject-every-ticked-task"},{"title":"Resolve the approval mode that applies","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/effective-approval/","href":"/api-reference/outreach/resolve-the-approval-mode-that-applies"},{"title":"Stream the workspace's outreach change events","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/events/","href":"/api-reference/outreach/stream-the-workspaces-outreach-change-events"},{"title":"Count the approval queue","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/length/","href":"/api-reference/outreach/count-the-approval-queue"},{"title":"Count what is waiting on a person","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/summary/","href":"/api-reference/outreach/count-what-is-waiting-on-a-person"},{"title":"Read one task","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/{task_id}/","href":"/api-reference/outreach/read-one-task"},{"title":"Rewrite a pending task's message","deprecated":null,"version":null,"openapi":"/openapi.json patch /outreach-tasks/{task_id}/","href":"/api-reference/outreach/rewrite-a-pending-tasks-message"},{"title":"Approve a task","deprecated":null,"version":null,"openapi":"/openapi.json post /outreach-tasks/{task_id}/approve/","href":"/api-reference/outreach/approve-a-task"},{"title":"Mark a Needs human task done","deprecated":null,"version":null,"openapi":"/openapi.json post /outreach-tasks/{task_id}/complete/","href":"/api-reference/outreach/mark-a-needs-human-task-done"},{"title":"Read an email card's email beyond its words","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/{task_id}/email/","href":"/api-reference/outreach/read-an-email-cards-email-beyond-its-words"},{"title":"Reject a task","deprecated":null,"version":null,"openapi":"/openapi.json post /outreach-tasks/{task_id}/reject/","href":"/api-reference/outreach/reject-a-task"},{"title":"Read the rest of an email card's thread","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/{task_id}/thread/","href":"/api-reference/outreach/read-the-rest-of-an-email-cards-thread"},{"title":"Rewrite a follow-up on a pending email card","deprecated":null,"version":null,"openapi":"/openapi.json patch /outreach-tasks/{task_id}/thread/emails/{step_id}/","href":"/api-reference/outreach/rewrite-a-follow-up-on-a-pending-email-card"},{"title":"List the messages the agent writes later for an email card's contact","deprecated":null,"version":null,"openapi":"/openapi.json get /outreach-tasks/{task_id}/thread/later-steps/","href":"/api-reference/outreach/list-the-messages-the-agent-writes-later-for-an-email-cards-contact"}]},{"group":"referral","pages":[{"title":"List referrals","deprecated":null,"version":null,"openapi":"/openapi.json get /referrals/","href":"/api-reference/referral/list-referrals"},{"title":"Claim a referral code","deprecated":null,"version":null,"openapi":"/openapi.json post /referrals/claim/","href":"/api-reference/referral/claim-a-referral-code"},{"title":"Count referrals","deprecated":null,"version":null,"openapi":"/openapi.json get /referrals/length/","href":"/api-reference/referral/count-referrals"},{"title":"Get the referral program's reward amounts","deprecated":null,"version":null,"openapi":"/openapi.json get /referrals/program/","href":"/api-reference/referral/get-the-referral-programs-reward-amounts"},{"title":"Get the workspace's referral summary","deprecated":null,"version":null,"openapi":"/openapi.json get /referrals/summary/","href":"/api-reference/referral/get-the-workspaces-referral-summary"}]},{"group":"find-subdomains","pages":[{"title":"Start a subdomain search","deprecated":null,"version":null,"openapi":"/openapi.json post /subdomain-searches/","href":"/api-reference/find-subdomains/start-a-subdomain-search"},{"title":"Get a subdomain search","deprecated":null,"version":null,"openapi":"/openapi.json get /subdomain-searches/{search_id}/","href":"/api-reference/find-subdomains/get-a-subdomain-search"},{"title":"Create a table from a subdomain search","deprecated":null,"version":null,"openapi":"/openapi.json post /subdomain-searches/{search_id}/import/","href":"/api-reference/find-subdomains/create-a-table-from-a-subdomain-search"},{"title":"Get a table's subdomain feed","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/subdomain-feed/","href":"/api-reference/find-subdomains/get-a-tables-subdomain-feed"},{"title":"Check a subdomain table for new subdomains now","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/subdomain-feed/sync/","href":"/api-reference/find-subdomains/check-a-subdomain-table-for-new-subdomains-now"}]},{"group":"table-enrichments","pages":[{"title":"List enrichment actions","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/actions/","href":"/api-reference/table-enrichments/list-enrichment-actions"},{"title":"List agent tools","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/agent-tools/","href":"/api-reference/table-enrichments/list-agent-tools"},{"title":"List built-in agent templates","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/builtin-agent-templates/","href":"/api-reference/table-enrichments/list-built-in-agent-templates"},{"title":"Suggest an enrichment column","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/columns/suggestions/","href":"/api-reference/table-enrichments/suggest-an-enrichment-column"},{"title":"List MCP servers","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/mcp-servers/","href":"/api-reference/table-enrichments/list-mcp-servers"},{"title":"Create an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/mcp-servers/","href":"/api-reference/table-enrichments/create-an-mcp-server"},{"title":"Start an MCP OAuth connection","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/mcp-servers/authorize/","href":"/api-reference/table-enrichments/start-an-mcp-oauth-connection"},{"title":"Finish an MCP OAuth connection","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/mcp-servers/callback/","href":"/api-reference/table-enrichments/finish-an-mcp-oauth-connection"},{"title":"List the MCP connect catalog","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/mcp-servers/catalog/","href":"/api-reference/table-enrichments/list-the-mcp-connect-catalog"},{"title":"Delete an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json delete /table-enrichments/mcp-servers/{mcp_server_id}/","href":"/api-reference/table-enrichments/delete-an-mcp-server"},{"title":"Update an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json patch /table-enrichments/mcp-servers/{mcp_server_id}/","href":"/api-reference/table-enrichments/update-an-mcp-server"},{"title":"Verify an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/mcp-servers/{mcp_server_id}/verify/","href":"/api-reference/table-enrichments/verify-an-mcp-server"},{"title":"List enrichment models","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/models/","href":"/api-reference/table-enrichments/list-enrichment-models"},{"title":"List saved agents","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/saved-agents/","href":"/api-reference/table-enrichments/list-saved-agents"},{"title":"Create a saved agent","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/","href":"/api-reference/table-enrichments/create-a-saved-agent"},{"title":"Declare the per-row inputs a prompt needs","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/inputs/suggestions/","href":"/api-reference/table-enrichments/declare-the-per-row-inputs-a-prompt-needs"},{"title":"Derive an output schema from a prompt","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/outputs/suggestions/","href":"/api-reference/table-enrichments/derive-an-output-schema-from-a-prompt"},{"title":"Suggest a revised agent prompt from a natural-language change","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/prompt/suggestions/","href":"/api-reference/table-enrichments/suggest-a-revised-agent-prompt-from-a-natural-language-change"},{"title":"Suggest a revised agent prompt from a natural-language change, streaming the work","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/prompt/suggestions/stream/","href":"/api-reference/table-enrichments/suggest-a-revised-agent-prompt-from-a-natural-language-change-streaming-the-work"},{"title":"Stop an agent prompt revision that is being streamed","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/prompt/suggestions/{edit_id}/stop/","href":"/api-reference/table-enrichments/stop-an-agent-prompt-revision-that-is-being-streamed"},{"title":"Suggest an agent from a task, streaming its work","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/suggestions/stream/","href":"/api-reference/table-enrichments/suggest-an-agent-from-a-task-streaming-its-work"},{"title":"Stop an agent suggestion that is being written","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/suggestions/{generation_id}/stop/","href":"/api-reference/table-enrichments/stop-an-agent-suggestion-that-is-being-written"},{"title":"Get a saved agent","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/saved-agents/{saved_agent_id}/","href":"/api-reference/table-enrichments/get-a-saved-agent"},{"title":"Delete a saved agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /table-enrichments/saved-agents/{saved_agent_id}/","href":"/api-reference/table-enrichments/delete-a-saved-agent"},{"title":"Update a saved agent","deprecated":null,"version":null,"openapi":"/openapi.json patch /table-enrichments/saved-agents/{saved_agent_id}/","href":"/api-reference/table-enrichments/update-a-saved-agent"},{"title":"Star a saved agent","deprecated":null,"version":null,"openapi":"/openapi.json put /table-enrichments/saved-agents/{saved_agent_id}/favorite/","href":"/api-reference/table-enrichments/star-a-saved-agent"},{"title":"Unstar a saved agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /table-enrichments/saved-agents/{saved_agent_id}/favorite/","href":"/api-reference/table-enrichments/unstar-a-saved-agent"},{"title":"List an agent's attached MCP servers","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/saved-agents/{saved_agent_id}/mcp-servers/","href":"/api-reference/table-enrichments/list-an-agents-attached-mcp-servers"},{"title":"Set an agent's attached MCP servers","deprecated":null,"version":null,"openapi":"/openapi.json put /table-enrichments/saved-agents/{saved_agent_id}/mcp-servers/","href":"/api-reference/table-enrichments/set-an-agents-attached-mcp-servers"},{"title":"Record that the caller opened this agent","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/{saved_agent_id}/open/","href":"/api-reference/table-enrichments/record-that-the-caller-opened-this-agent"},{"title":"Remember a saved agent's example rows","deprecated":null,"version":null,"openapi":"/openapi.json put /table-enrichments/saved-agents/{saved_agent_id}/sample-rows/","href":"/api-reference/table-enrichments/remember-a-saved-agents-example-rows"},{"title":"Where a saved agent is used","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/saved-agents/{saved_agent_id}/usage/","href":"/api-reference/table-enrichments/where-a-saved-agent-is-used"},{"title":"List a saved agent's versions","deprecated":null,"version":null,"openapi":"/openapi.json get /table-enrichments/saved-agents/{saved_agent_id}/versions/","href":"/api-reference/table-enrichments/list-a-saved-agents-versions"},{"title":"Revert a saved agent to a version","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/{saved_agent_id}/versions/{version}/revert/","href":"/api-reference/table-enrichments/revert-a-saved-agent-to-a-version"}]},{"group":"table-columns","pages":[{"title":"Add a saved agent to a table","deprecated":null,"version":null,"openapi":"/openapi.json post /table-enrichments/saved-agents/{saved_agent_id}/apply/","href":"/api-reference/table-columns/add-a-saved-agent-to-a-table"},{"title":"List the formula functions","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/formula-functions/","href":"/api-reference/table-columns/list-the-formula-functions"},{"title":"List table columns","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/","href":"/api-reference/table-columns/list-table-columns"},{"title":"Create a table column","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/","href":"/api-reference/table-columns/create-a-table-column"},{"title":"Delete several columns","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/columns/","href":"/api-reference/table-columns/delete-several-columns"},{"title":"Suggest input→column mappings for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/agent-input-mapping/suggestions/","href":"/api-reference/table-columns/suggest-input→column-mappings-for-an-agent"},{"title":"Get what each paid column costs per row","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/credit-rates/","href":"/api-reference/table-columns/get-what-each-paid-column-costs-per-row"},{"title":"List column groups","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/groups/","href":"/api-reference/table-columns/list-column-groups"},{"title":"Group columns","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/groups/","href":"/api-reference/table-columns/group-columns"},{"title":"Ungroup","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/columns/groups/{group_id}/","href":"/api-reference/table-columns/ungroup"},{"title":"Update a column group","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/columns/groups/{group_id}/","href":"/api-reference/table-columns/update-a-column-group"},{"title":"Suggest a name for a new column","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/name/suggestions/","href":"/api-reference/table-columns/suggest-a-name-for-a-new-column"},{"title":"Preview a column definition","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/preview/","href":"/api-reference/table-columns/preview-a-column-definition"},{"title":"Reorder table columns","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/reorder/","href":"/api-reference/table-columns/reorder-table-columns"},{"title":"Generate a formula column from a description","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/suggestions/","href":"/api-reference/table-columns/generate-a-formula-column-from-a-description"},{"title":"Delete a table column","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/columns/{column_id}/","href":"/api-reference/table-columns/delete-a-table-column"},{"title":"Update a table column","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/columns/{column_id}/","href":"/api-reference/table-columns/update-a-table-column"},{"title":"Get a table column's value distribution","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/{column_id}/distribution/","href":"/api-reference/table-columns/get-a-table-columns-value-distribution"},{"title":"List the rows pointing at one row","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/{column_id}/pointing-rows/","href":"/api-reference/table-columns/list-the-rows-pointing-at-one-row"},{"title":"Preview a column type change","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/{column_id}/preview/","href":"/api-reference/table-columns/preview-a-column-type-change"},{"title":"Promote an enrichment output field into its own column","description":"Create a formula column that reads one declared output field out of a multi-field enrichment's payload. The child is typed by the field's declared type, dependency-linked to its parent, free to recompute, and immediately backfilled by its column-added run. With target_column_id, the field's current values instead overwrite an existing manual column. Destructive, and refused without confirm_overwrite.","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/{column_id}/promote/","href":"/api-reference/table-columns/promote-an-enrichment-output-field-into-its-own-column"},{"title":"Keep a linked value's column as a plain column","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/columns/{column_id}/release/","href":"/api-reference/table-columns/keep-a-linked-values-column-as-a-plain-column"},{"title":"List the links of other tables into this one","description":"Every Link to another table column on another table that points into this one, with which of this table's columns it matches on and which values it brings back. What deleting one of this table's columns, or moving the table to Trash, stops updating there. A link on a table in Trash is left out. By the linking table's name, then the link's, a page at a time.","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/link-readers/","href":"/api-reference/table-columns/list-the-links-of-other-tables-into-this-one"},{"title":"List what a link to another table can bring back","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/reference-fields/","href":"/api-reference/table-columns/list-what-a-link-to-another-table-can-bring-back"},{"title":"Preview how a link to another table would match","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/references/preview/","href":"/api-reference/table-columns/preview-how-a-link-to-another-table-would-match"}]},{"group":"table-imports","pages":[{"title":"Upload a CSV or Excel file as a pending import","deprecated":null,"version":null,"openapi":"/openapi.json post /table-imports/","href":"/api-reference/table-imports/upload-a-csv-or-excel-file-as-a-pending-import"},{"title":"Get a CSV import's status","deprecated":null,"version":null,"openapi":"/openapi.json get /table-imports/{import_id}/","href":"/api-reference/table-imports/get-a-csv-imports-status"},{"title":"Re-read a pending upload from a different sheet","deprecated":null,"version":null,"openapi":"/openapi.json patch /table-imports/{import_id}/","href":"/api-reference/table-imports/re-read-a-pending-upload-from-a-different-sheet"},{"title":"Read an import column's value distribution","deprecated":null,"version":null,"openapi":"/openapi.json get /table-imports/{import_id}/columns/{source_index}/distribution/","href":"/api-reference/table-imports/read-an-import-columns-value-distribution"},{"title":"List an import column's raw values","deprecated":null,"version":null,"openapi":"/openapi.json get /table-imports/{import_id}/columns/{source_index}/values/","href":"/api-reference/table-imports/list-an-import-columns-raw-values"},{"title":"Create the table and start loading its rows","deprecated":null,"version":null,"openapi":"/openapi.json post /table-imports/{import_id}/commit/","href":"/api-reference/table-imports/create-the-table-and-start-loading-its-rows"}]},{"group":"table-writeback","pages":[{"title":"Derive what one destination record type can do","deprecated":null,"version":null,"openapi":"/openapi.json get /table-writeback/capabilities/","href":"/api-reference/table-writeback/derive-what-one-destination-record-type-can-do"},{"title":"Dry-run an export against real rows","deprecated":null,"version":null,"openapi":"/openapi.json post /table-writeback/preview/","href":"/api-reference/table-writeback/dry-run-an-export-against-real-rows"},{"title":"Summarise what an export column has pushed","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/columns/{column_id}/push-summary/","href":"/api-reference/table-writeback/summarise-what-an-export-column-has-pushed"}]},{"group":"tables","pages":[{"title":"List tables","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/","href":"/api-reference/tables/list-tables"},{"title":"Create a table","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/","href":"/api-reference/tables/create-a-table"},{"title":"Change several tables at once","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/bulk/","href":"/api-reference/tables/change-several-tables-at-once"},{"title":"List folders","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/folders/","href":"/api-reference/tables/list-folders"},{"title":"Make a folder","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/folders/","href":"/api-reference/tables/make-a-folder"},{"title":"Suggest folders for the tables in no folder","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/folders/suggestions/","href":"/api-reference/tables/suggest-folders-for-the-tables-in-no-folder"},{"title":"Delete a folder","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/folders/{folder_id}/","href":"/api-reference/tables/delete-a-folder"},{"title":"Rename, move or re-own a folder","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/folders/{folder_id}/","href":"/api-reference/tables/rename-move-or-re-own-a-folder"},{"title":"Restore a folder from Trash","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/folders/{folder_id}/restore/","href":"/api-reference/tables/restore-a-folder-from-trash"},{"title":"Get the number of tables","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/length/","href":"/api-reference/tables/get-the-number-of-tables"},{"title":"List who owns tables","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/owners/","href":"/api-reference/tables/list-who-owns-tables"},{"title":"Get table details","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/","href":"/api-reference/tables/get-table-details"},{"title":"Delete a table","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/","href":"/api-reference/tables/delete-a-table"},{"title":"Update a table","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/","href":"/api-reference/tables/update-a-table"},{"title":"Suggest a description for a table","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/description/suggestions/","href":"/api-reference/tables/suggest-a-description-for-a-table"},{"title":"Duplicate a table","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/duplicate/","href":"/api-reference/tables/duplicate-a-table"},{"title":"Restore a trashed table","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/restore/","href":"/api-reference/tables/restore-a-trashed-table"},{"title":"Get table stats","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/stats/","href":"/api-reference/tables/get-table-stats"},{"title":"Get table change status","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/status/","href":"/api-reference/tables/get-table-change-status"},{"title":"Read a table published as a template","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/template/","href":"/api-reference/tables/read-a-table-published-as-a-template"}]},{"group":"table-column-color-labels","pages":[{"title":"Get column colour names","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/color-labels/","href":"/api-reference/table-column-color-labels/get-column-colour-names"},{"title":"Rename column colours","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/color-labels/","href":"/api-reference/table-column-color-labels/rename-column-colours"}]},{"group":"table-sources","pages":[{"title":"Sample records before importing them","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/preview/","href":"/api-reference/table-sources/sample-records-before-importing-them"},{"title":"Get a table's import source","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/source/","href":"/api-reference/table-sources/get-a-tables-import-source"},{"title":"Detach a table's import source","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/source/","href":"/api-reference/table-sources/detach-a-tables-import-source"},{"title":"Update a table's import source","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/source/","href":"/api-reference/table-sources/update-a-tables-import-source"},{"title":"List the fields a table's imported rows could be matched on","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/source/identity-options/","href":"/api-reference/table-sources/list-the-fields-a-tables-imported-rows-could-be-matched-on"},{"title":"Give one field of the imported record its own column","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/source/promote/","href":"/api-reference/table-sources/give-one-field-of-the-imported-record-its-own-column"},{"title":"List a table's recent imports","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/source/runs/","href":"/api-reference/table-sources/list-a-tables-recent-imports"},{"title":"Refresh a table from its source now","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/source/runs/","href":"/api-reference/table-sources/refresh-a-table-from-its-source-now"},{"title":"Get an import run's status","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/source/runs/{run_id}/","href":"/api-reference/table-sources/get-an-import-runs-status"},{"title":"List the records an import run skipped","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/source/runs/{run_id}/skips/","href":"/api-reference/table-sources/list-the-records-an-import-run-skipped"}]},{"group":"table-rows","pages":[{"title":"Rate many cells at once","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/cell-feedback/bulk/","href":"/api-reference/table-rows/rate-many-cells-at-once"},{"title":"Create table rows","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/","href":"/api-reference/table-rows/create-table-rows"},{"title":"Set many table cell values","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/rows/bulk/","href":"/api-reference/table-rows/set-many-table-cell-values"},{"title":"Bulk delete table rows","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/bulk/delete/","href":"/api-reference/table-rows/bulk-delete-table-rows"},{"title":"Query a listing's row IDs","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/ids/","href":"/api-reference/table-rows/query-a-listings-row-ids"},{"title":"Count the rows a filter selects","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/length/","href":"/api-reference/table-rows/count-the-rows-a-filter-selects"},{"title":"Query table rows","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/query/","href":"/api-reference/table-rows/query-table-rows"},{"title":"Search a table's cells","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/search/","href":"/api-reference/table-rows/search-a-tables-cells"},{"title":"Count a search's matches","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/search/length/","href":"/api-reference/table-rows/count-a-searchs-matches"},{"title":"Set a table cell value","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/rows/{record_id}/","href":"/api-reference/table-rows/set-a-table-cell-value"},{"title":"Get your feedback on a cell","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/rows/{record_id}/cells/{column_id}/feedback/","href":"/api-reference/table-rows/get-your-feedback-on-a-cell"},{"title":"Rate a cell's value","deprecated":null,"version":null,"openapi":"/openapi.json put /tables/{table_id}/rows/{record_id}/cells/{column_id}/feedback/","href":"/api-reference/table-rows/rate-a-cells-value"},{"title":"Withdraw your feedback on a cell","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/rows/{record_id}/cells/{column_id}/feedback/","href":"/api-reference/table-rows/withdraw-your-feedback-on-a-cell"},{"title":"Get a cell's enrichment run detail","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/rows/{record_id}/cells/{column_id}/run-detail/","href":"/api-reference/table-rows/get-a-cells-enrichment-run-detail"}]},{"group":"table-ui-prefs","pages":[{"title":"Update a column's display preferences","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/columns/{column_id}/ui-prefs/","href":"/api-reference/table-ui-prefs/update-a-columns-display-preferences"}]},{"group":"table-enrichment-audit-logs","pages":[{"title":"List a table's enrichment audit trail","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/enrichment-audit-logs/","href":"/api-reference/table-enrichment-audit-logs/list-a-tables-enrichment-audit-trail"}]},{"group":"table-events","pages":[{"title":"Stream a table's change events","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/events/","href":"/api-reference/table-events/stream-a-tables-change-events"}]},{"group":"table-user-prefs","pages":[{"title":"Star a table","deprecated":null,"version":null,"openapi":"/openapi.json put /tables/{table_id}/favorite/","href":"/api-reference/table-user-prefs/star-a-table"},{"title":"Unstar a table","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/favorite/","href":"/api-reference/table-user-prefs/unstar-a-table"},{"title":"Read the view the caller last left this table on","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/last-view/","href":"/api-reference/table-user-prefs/read-the-view-the-caller-last-left-this-table-on"},{"title":"Remember the view the caller is leaving this table on","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/last-view/","href":"/api-reference/table-user-prefs/remember-the-view-the-caller-is-leaving-this-table-on"},{"title":"Record that the caller opened this table","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/open/","href":"/api-reference/table-user-prefs/record-that-the-caller-opened-this-table"}]},{"group":"table-export","pages":[{"title":"Export table rows as a CSV or Excel file","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/rows/export/","href":"/api-reference/table-export/export-table-rows-as-a-csv-or-excel-file"}]},{"group":"table-runs","pages":[{"title":"List table runs","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/runs/","href":"/api-reference/table-runs/list-table-runs"},{"title":"Start a table run","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/runs/","href":"/api-reference/table-runs/start-a-table-run"},{"title":"Stop all table runs","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/runs/bulk/cancel/","href":"/api-reference/table-runs/stop-all-table-runs"},{"title":"Preview a table run","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/runs/preview/","href":"/api-reference/table-runs/preview-a-table-run"},{"title":"Cancel a table run","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/runs/{run_id}/cancel/","href":"/api-reference/table-runs/cancel-a-table-run"}]},{"group":"table-schedules","pages":[{"title":"Get a table's refresh cadence","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/schedule/","href":"/api-reference/table-schedules/get-a-tables-refresh-cadence"},{"title":"Set a table's refresh cadence","deprecated":null,"version":null,"openapi":"/openapi.json put /tables/{table_id}/schedule/","href":"/api-reference/table-schedules/set-a-tables-refresh-cadence"},{"title":"Stop a table refreshing on a cadence","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/schedule/","href":"/api-reference/table-schedules/stop-a-table-refreshing-on-a-cadence"},{"title":"Change a table's refresh cadence","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/schedule/","href":"/api-reference/table-schedules/change-a-tables-refresh-cadence"}]},{"group":"table-views","pages":[{"title":"List table views","deprecated":null,"version":null,"openapi":"/openapi.json get /tables/{table_id}/views/","href":"/api-reference/table-views/list-table-views"},{"title":"Create a table view","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/views/","href":"/api-reference/table-views/create-a-table-view"},{"title":"Delete a table view","deprecated":null,"version":null,"openapi":"/openapi.json delete /tables/{table_id}/views/{view_id}/","href":"/api-reference/table-views/delete-a-table-view"},{"title":"Update a table view","deprecated":null,"version":null,"openapi":"/openapi.json patch /tables/{table_id}/views/{view_id}/","href":"/api-reference/table-views/update-a-table-view"},{"title":"Count what a new filter does to the sequences that follow a view","deprecated":null,"version":null,"openapi":"/openapi.json post /tables/{table_id}/views/{view_id}/impact/","href":"/api-reference/table-views/count-what-a-new-filter-does-to-the-sequences-that-follow-a-view"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Keep a linked value's column as a plain column - Oneprofile","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","Page-Dr40SSJq.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","clsx-DK3K4Z1S.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DE3EVdvd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fN9H9n9g.js"]}