fletchfederation
Alteryx migration

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
1 · Inventory

Content-addressed

Every file is hashed before anything parses it. Duplicate macros collapse to one asset with two paths; a re-import changes nothing.

2 · Convert

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.

3 · Run

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.

4 · Certify

Row for row

Outputs are compared against expectations whose provenance is stated: produced by Alteryx, or authored. Divergences are ledgered.

Measured on the engine

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
probes · datetime
Certification

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.

rows match

Certified

Rows match the expected outputs. The verdict names where the expectations came from: alteryx or authored.

ran, compared, differed

Divergent

The difference is a numbered entry with evidence from both engines, so it can be fixed or accepted, never ignored.

could not run yet

Blocked

The blocker is named: a missing reader, a macro binding, an unmapped tool. Blockers are ranked by how many workflows each one unblocks.

Tool coverage

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.

WaveToolsKind
Wave 1 · 36 toolsInput 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, Browse30 mapped · 3 sequence · 2 by mode · 1 elsewhere
Wave 2 · 10 entriesMulti-Row Formula, Multi-Field Formula, Dynamic Rename, Dynamic Select, Tile, RegEx, Fuzzy Match, Generate Rows, standard, batch and iterative macros, the In-DB tool familymapped, with review where a sequence is emitted
Wave 3 · 2 toolsJSON Parse, JSON Buildmapped

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.

Estate assessment

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.

Safety of the input

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.