The snippets, ordered obscure → unmistakable

  1. Snippet 1(Math helper)
  2. Snippet 2(Vector3 fragment)
  3. Snippet 3(Material setup)
  4. Snippet 4(Renderer / loop)
  5. Snippet 5(WebGLProgram fragment)
  6. Snippet 6(src/constants.js)

Why this project gives itself away

The give-away. Snippets 1 and 2 are vector math you'd find in any 3D library. Snippet 3 names BoxGeometry, MeshStandardMaterial, Mesh — three.js's exact class names. Snippet 4 is the WebGL setup with ACESFilmicToneMapping + SRGBColorSpace — the colour-management constants are three.js-specific. Snippet 5 names WebGLProgram with parameters.shaderName — three.js's shader-cache key system. Snippet 6 names the REVISION constant (three.js identifies its version as a revision number) + the public side/blending enum values.

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.