Convert the estate. Prove each workflow. Keep the evidence.
The importer reads a whole folder tree, not one file at a time: workflows, macros, analytic apps, packaged workflows, the .yxdb files and spreadsheets they reference. It emits Fletch IR, runs it, compares it, and says exactly how far it got and why.
Tool by tool, operator by operator
- AlteryxFilter→core.filter
- AlteryxFormula→core.formula
- AlteryxJoin→core.join · L / J / R
- AlteryxSummarize→core.summarize
- AlteryxSelect→core.select
- AlteryxSort→core.sort
- AlteryxUnion→core.union
- AlteryxUnique→core.unique
- AlteryxSample→core.sample
- AlteryxCrossTab→core.crosstab
- AlteryxTranspose→core.transpose
- AlteryxText To Columns→core.text_to_columns
- AlteryxDateTime→core.datetime
- AlteryxRecordID→core.record_id
- AlteryxFilter→core.filter
- AlteryxFormula→core.formula
- AlteryxJoin→core.join · L / J / R
- AlteryxSummarize→core.summarize
- AlteryxSelect→core.select
- AlteryxSort→core.sort
- AlteryxUnion→core.union
- AlteryxUnique→core.unique
- AlteryxSample→core.sample
- AlteryxCrossTab→core.crosstab
- AlteryxTranspose→core.transpose
- AlteryxText To Columns→core.text_to_columns
- AlteryxDateTime→core.datetime
- AlteryxRecordID→core.record_id
- AlteryxMulti-Row Formula→core.window_formula · scan_formula
- AlteryxMulti-Field Formula→core.broadcast_formula
- AlteryxDynamic Rename→core.rename
- AlteryxDynamic Select→core.select_where
- AlteryxTile→core.tile
- AlteryxRegEx→core.regex
- AlteryxFuzzy Match→core.similarity_join
- AlteryxGenerate Rows→core.generate_rows
- AlteryxFind Replace→core.find_replace
- AlteryxData Cleansing→core.cleanse
- AlteryxRunning Total→core.running_total
- AlteryxJSON Parse→core.json_parse
- AlteryxXML Parse→core.xml_parse
- AlteryxBrowse→sink.browse
- AlteryxMulti-Row Formula→core.window_formula · scan_formula
- AlteryxMulti-Field Formula→core.broadcast_formula
- AlteryxDynamic Rename→core.rename
- AlteryxDynamic Select→core.select_where
- AlteryxTile→core.tile
- AlteryxRegEx→core.regex
- AlteryxFuzzy Match→core.similarity_join
- AlteryxGenerate Rows→core.generate_rows
- AlteryxFind Replace→core.find_replace
- AlteryxData Cleansing→core.cleanse
- AlteryxRunning Total→core.running_total
- AlteryxJSON Parse→core.json_parse
- AlteryxXML Parse→core.xml_parse
- AlteryxBrowse→sink.browse
Content-addressed
Every file is hashed before anything parses it. Duplicate macros collapse to one asset with two paths; a re-import changes nothing.
Tool by tool
Each Alteryx tool maps to one operator, a sequence of operators, or a mode-dependent choice. Unmapped tools are named, with the reason.
On the Fletch engine
Converted workflows run as sandbox plans with the same runtime the canvas uses. Inputs are the estate's own data files.
Row for row
Outputs are compared against expectations whose provenance is stated: produced by Alteryx, or authored. Divergences are ledgered.
Every rule was established by running Alteryx, not by reading about it.
Fletch's house standard is a committed probe: a small workflow run on the Alteryx engine, its output captured, and the behaviour recorded, including the predictions that turned out wrong. Three rounding rules, the NULL result of a math function outside its domain, the exact plugin string of Summarize: each is a probe in the repository, not a sentence in a manual.
- A claim that Fletch differs from Alteryx must cite evidence for both sides, measured separately
- A zero result needs a positive control before it is reported as an absence
- Divergences get a number and a ledger entry, never a shrug
Three verdicts. No fourth.
A converted workflow is certified when every case's rows match, divergent when they do not and the difference is recorded, or blocked when something stands in the way, with the blocker named. A workflow whose cases were authored rather than captured is recorded as certified against authored expectations, never as certified alone.
Certified
Rows match the expected outputs. The verdict names where the expectations came from: alteryx or authored.
Divergent
The difference is a numbered entry with evidence from both engines, so it can be fixed or accepted, never ignored.
Blocked
The blocker is named: a missing reader, a macro binding, an unmapped tool. Blockers are ranked by how many workflows each one unblocks.
46 tools mapped, plus macros and the In-DB family.
Mappings come in three kinds. Mapped is one tool to one operator. Sequence emits several operators so no output is dropped, the way Filter has True and False, and Join has Left, Joined and Right. By mode picks the operator from the tool's configuration. Everything else is listed as not yet mapped, with the reason.
| Wave | Tools | Kind |
|---|---|---|
| Wave 1 · 36 tools | Input Data, Output Data, Select, Filter, Formula, Join, Join Multiple, Union, Sort, Summarize, Unique, Sample, Append Fields, Text Input, Message, Rank, Running Total, XML Parse, Blob Convert, Field Info, Make Group, Make Columns, Arrange, Detour, Detour End, Block Until Done, Throttle, Pearson Correlation, Text To Columns, DateTime, RecordID, Transpose, CrossTab, Find Replace, Data Cleansing, Browse | 30 mapped · 3 sequence · 2 by mode · 1 elsewhere |
| Wave 2 · 10 entries | Multi-Row Formula, Multi-Field Formula, Dynamic Rename, Dynamic Select, Tile, RegEx, Fuzzy Match, Generate Rows, standard, batch and iterative macros, the In-DB tool family | mapped, with review where a sequence is emitted |
| Wave 3 · 2 tools | JSON Parse, JSON Build | mapped |
What is deliberately not on this list. Tools whose behaviour has not yet been measured on the engine are not claimed. Spatial, predictive and reporting families are outside the current waves. Ask for the current census; it carries a denominator.
What you get back from a folder of workflows.
A census of every tool instance in the estate, classified; the share that converts, the share that executes, and the share that certifies, each with its denominator; and a list of blockers ordered by how many workflows each one unblocks. No estimate is given without the number it was measured against.
Inventory
Every workflow, macro, app and data file, hashed and de-duplicated. Missing macros and truncated files are named, not skipped.
Classification
Tool instances by family and by mapping kind, so the shape of the estate is visible before anything is converted.
Conversion tiers
Classified, converting and executable, each a count over the same base. A tier figure without its denominator is not a measurement.
Blocker census
What stands between the estate and certification, ranked by instances unblocked. Typically a handful of items carry most of the weight.
A packaged workflow is data, never code.
A .yxzp is an archive from somewhere else. The importer unzips it under caps, refuses any path that escapes its folder, and executes nothing it finds inside. Workflows that embed credentials are read for structure; the secrets are not carried into Fletch.
Bounded expansion
Caps on entry count, file size and total bytes. An archive that exceeds them is refused with the cap it hit.
No traversal
Paths are normalised and checked before a byte is written. A ../ is a refusal, not a surprise.
Idempotent
Content addressing means the same estate imported twice is the same estate, with nothing duplicated and nothing re-run.
Send a folder. Get a census with denominators.
An assessment runs on your workflows and your data files, and returns a report you can check line by line.