The snippets, ordered obscure → unmistakable
- Snippet 1(ngx_string helper)
- Snippet 2(ngx_array_t)
- Snippet 3(module struct)
- Snippet 4(Event handler)
- Snippet 5(config / log)
- Snippet 6(core/nginx.h)
Why this project gives itself away
The give-away. Every internal symbol is prefixed ngx_ — snippet 1 gives you 80% of the answer just from the prefix. Snippet 2's ngx_array_t + ngx_pool_t slab allocator is nginx's hand-rolled memory model. Snippet 3's ngx_command_t directive table with NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_BLOCK flags is unique to nginx config processing. Snippet 4 is the async HTTP request handler. Snippet 5/6 reveal NGINX_VER, NGINX_VERSION, nginx/%s — the canonical Server header banner.
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.