The snippets, ordered obscure → unmistakable

  1. Snippet 1(Generic helper)
  2. Snippet 2(Tapable hooks)
  3. Snippet 3(module factory dispatch)
  4. Snippet 4(Output chunk template)
  5. Snippet 5(Stats output)
  6. Snippet 6(webpack/lib/index.js)

Why this project gives itself away

The give-away. Snippet 1 is generic path mangling. Snippet 2 reveals tapable — webpack's plugin hook library, and the beforeRun/emit/done lifecycle is the famous Compiler hooks. Snippet 3 names NormalModuleFactory and the resolver hooks. Snippet 4 is a runtime chunk-loading template with __webpack_require__.f.j (jsonp chunk loader) — pure webpack internals. Snippet 5 is Stats output with compilation.hash, compilation.chunks. Snippet 6 is webpack/lib/index.js with the famous "A bundler for JavaScript and friends" 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.