The snippets, ordered obscure → unmistakable

  1. Snippet 1(Generic helper)
  2. Snippet 2(API client)
  3. Snippet 3(Engine daemon)
  4. Snippet 4(registry / image)
  5. Snippet 5(Dockerfile parser)
  6. Snippet 6(dockerd entrypoint)

Why this project gives itself away

The give-away. Snippets 1 and 2 are generic Go HTTP-client style. Snippet 3 names the Daemon struct and LogContainerEvent. Snippet 4's registry-1.docker.io / index.docker.io constants give it away — the default registry hostnames are uniquely Docker's. Snippet 5 is the Dockerfile dispatch table (FROM/RUN/CMD/COPY/ENV…) — anyone who's written a Dockerfile recognises the instruction set. Snippet 6 is dockerd's newDaemonCommand() entry point.

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.