The first four wings of fable — puzz, knack, flux, gyre — each generate puzzles. But within a wing, every roll is the same game with the furniture rearranged: knack is always knack. They feel like four games, not infinite games. morph asks the next question: what does a generator of puzzle generators look like?
The insight is that a game is a point in a space of grammars, and the axes are orthogonal:
A roll is a genome. Instantiating it with an instance seed lays out a concrete level. The product of these axes — six topologies × four goals × layered rules × eight motifs — is large, and because the axes are independent you get combinations no one designed: Lights-Out on a Klein bottle, Sokoban across a torus seam, a slick collect-a-thon on a Möbius strip.
What lets the grammar vary without limit is that the thing underneath doesn't. Every genome in this wing compiles to a discrete state graph, and a single breadth-first search certifies any of them solvable, finds the optimal length, and grades it. The games are generated; the oracle is fixed. That's the whole trick — and it's why morph can reject a genome as a dud (no good instance exists) and grade a genome's richness before you ever play it.
New game rolls a new genome — a different planet. New puzzle keeps the genome and rolls a new
instance — the same game, a fresh level. Naming both is the point: morph is inexhaustible at the genome
level, not just the level level. /morph/?n=<game>&p=<puzzle> is a permalink to
exactly one level of exactly one game.
This wing's oracle is BFS over a discrete state graph, so it covers every game that is discrete, deterministic, and turn-based. Other oracle families already exist next door — constraint-uniqueness (puzz), action-space sweep (flux/gyre) — and the genome's outer axis is really which family. Number games, node graphs, painting/symmetry, word-embedding games: each is a new substrate or a new oracle family bolted under the same meta-generator. The ladder keeps going up.