The snippets, ordered obscure → unmistakable
- Snippet 1(Generic helper)
- Snippet 2(AST visitor)
- Snippet 3(Plugin shape)
- Snippet 4(Babel types)
- Snippet 5(Preset env entry)
- Snippet 6(@babel/core entry)
Why this project gives itself away
The give-away. Snippet 1 is generic. Snippet 2's traverse(ast, { ArrowFunctionExpression(path) {} }) visitor pattern is the Babel AST traversal API, mirroring ESTree node names. Snippet 3 is the plugin shape — function ({ types: t }) { return { visitor: ... } } is Babel-only. Snippet 4 names EXPRESSION_TYPES + VISITOR_KEYS_KEYS. Snippet 5 is @babel/preset-env with targets/corejs/shippedProposals. Snippet 6 is the Sebastian McKenzie copyright + the "next-generation JavaScript, today" tagline.
How a Framed puzzle is built
Every Framed project ships exactly six snippets, hand-ordered from deeply obscure to unmistakable. The first snippet must be plausible for a dozen codebases — a generic loop, a small utility, a comment that could appear anywhere. The last snippet carries a project-specific tell: a function name, a code-comment idiom, a file header, a build invocation. Between them sit four snippets that gradually narrow the field. Reading them in order is half the puzzle: a returning Framed player learns to triangulate on indentation conventions, comment voice, naming, and the small-but-distinctive choices that betray a project's era and community.