1# Crossword (world bible)23- **Pack:** `mods/worlds/crossword.cjs` (pack id `crossword`, version 1.0.0)4- **World identity** (`manifest.world`, accepted by `loadMod` today but not5 validated): glyph `✏️`, tagline "Every word can be read across and down.",6 accent `win`.7- **Custom tiles:** none. No `palette`, and the only nouns are `MIAU`, `ROCK`,8 `FLAG`, and `WALL`, which all have default glyphs in `src/main.js`.9- **Custom rules:** none. Only `IS`, `AND`, `YOU`, `PUSH`, `STOP`, `WIN`, and10 `DEFEAT` appear.1112## Theme1314A crossword, or a printer's type case. The board is a grid of words, and a15word tile belongs to every line that passes through it: one `IS` can be read16across and down, a noun can close one sentence and open the next, and two17letters can share one square. Walls, where they appear, are the crossword's18black squares.1920## Mechanic2122Pure grammar. There is nothing to learn in this world except how the parser23reads the board:24251. **Crossing.** A tile is read on both axes. One `IS` can serve a horizontal26 and a vertical sentence at once.272. **AND on both sides.** A subject chain (`ROCK AND MIAU IS YOU`) and a28 predicate chain (`ROCK IS DEFEAT AND PUSH`).293. **Pinned sentences.** A sentence flush against a board edge in the top or30 bottom row can't be broken, but you can add words in front of it or after31 it. This is the world's way of saying "you can't remove this, so extend it".324. **Stacks.** Two words in one cell travel together forever. The puzzle is to33 find a sentence where both halves are welcome.345. **Nouns as answers.** A noun after `IS` transforms things, and the change35 is permanent. That lets a single `IS` be spent twice.3637## Levels3839Verified on the W6 engine (Baba-style precedence, design decision D23) with40the committed CLI: `node tools/solve.mjs mods/worlds/crossword.cjs` (default412M budget; `spend-it-twice` declares `solverBudget: 4000000` for margin). All427 levels are SOLVED, the run exits 0 (about 6 minutes), and there are no43BYPASS, HANDS-OFF, TRIVIAL, WON-AT-START, SKIPPABLE, or LIMIT flags. No level44sets `allowBypass`.4546`mustForm` is declared only where `--level <id> --forbid '<rule>'` returned47UNSOLVED (an exhaustive proof), never LIMIT.4849| # | id | Title | Category | Teaches | Steps | Flags | mustForm (proof) | Intended insight |50| --- | --- | --- | --- | --- | --- | --- | --- | --- |51| 1 | `across-and-down` | Across and down | required | crossing (one `IS`, two sentences) | 16 | none | none: `FLAG IS WIN` is avoidable (see note) | `FLAG` sits over the `IS` of `MIAU IS YOU`. Slide `WIN` in under that `IS` **from the side** to read `FLAG IS WIN` down. Pushing it up from below lifts the `IS` out of your own sentence. |52| 2 | `company` | Company | required | `AND` on the subject side, something else is `YOU` | 20 | none | `ROCK IS YOU` (UNSOLVED, 36,800 states) | `MIAU IS YOU` is pinned at the top right and the cat is penned. Push `ROCK` and `AND` up into the open cells in front: `ROCK AND MIAU IS YOU`. `ROCK MIAU IS YOU` without `AND` does nothing. |53| 3 | `shove-the-danger` | Shove the danger | required | `AND` on the predicate side | 23 | none | `ROCK IS PUSH` (UNSOLVED, 121,760) | A column of rocks is `DEFEAT`, and the sentence is pinned in the corner. You can't remove `DEFEAT`, so append `AND PUSH` and shove a rock out of the column. |54| 4 | `carry-the-pair` | Carry the pair | required | stacked words, DEFEAT on its own carrier | 24 | none | `ROCK IS DEFEAT` (UNSOLVED, 527,180) | The stacked `YOU+DEFEAT` can't be split, and a YOU that is also DEFEAT destroys itself. On MIAU the pair is suicide. Build `ROCK / IS / YOU+DEFEAT` down from the pinned `ROCK IS STOP`: every rock in the ring around the flag destroys itself, and you walk in. |55| 5 | `pass-it-on` | Pass it on | required | noun as predicate, transformation | 24 | none | `ROCK IS FLAG` (UNSOLVED, 335,688) | The flag is sealed behind walls. Insert `ROCK IS` in front of the pinned `FLAG IS WIN` to read `ROCK IS FLAG IS WIN`. The one `FLAG` word is the answer to the first clue and the start of the second, and the rock next to you becomes a winning flag. |56| 6 | `down-to-miau` | Down to MIAU | optional | a noun at a crossing (predicate down, subject across) | 19 | none | `ROCK IS MIAU` (UNSOLVED, 202,232) | Build `ROCK / IS / MIAU` down onto the pinned `MIAU IS YOU`. The rock in the sealed room becomes a second cat. A black square (wall) above `YOU` blocks the shorter `ROCK IS YOU` down. |57| 7 | `spend-it-twice` | Spend it twice | challenge | sequencing, permanence of transformation | 35 | none | `WALL IS ROCK` (UNSOLVED, 1,905,020) | There's one free `IS`, and `WIN` and the flag are walled in. Build `WALL IS ROCK` down from the pinned `WALL`: every wall turns into a passable rock and stays one. Then take the **same** `IS` for a win rule. The solver found `ROCK IS WIN` across, which also turns the flag into a rock on the way. `FLAG IS WIN` down from the pinned `FLAG` works too. `WALL IS FLAG` is impossible because the only `FLAG` word is pinned as a subject. |5859**Why level 1 has no `mustForm`.** `--forbid 'FLAG IS WIN'` solves in 2660steps: push `IS` down so `FLAG IS YOU` reads down (the cat stops being YOU,61and the flag becomes the player), then build `MIAU IS WIN` across and walk the62flag onto the cat. That's still a crossing route, so it teaches the same63lesson, and I left it in.6465**Rework for W6 (2026-09-23).**66- `carry-the-pair` originally had `FLAG IS WIN+DEFEAT` and a self-win on MIAU.67 Under W6, a YOU that is also DEFEAT is destroyed, so the old route kills the68 cat. The stack is now `YOU+DEFEAT`, and the lesson is its opposite: DEFEAT69 kills its own carrier, so give the pair to the thing you want gone.70- `shove-the-danger` originally had a loose `STOP` decoy. The level itself71 still worked under W6 (PUSH beats STOP just makes `AND PUSH AND STOP` a72 second answer). But three loose words made `--forbid 'ROCK IS PUSH'` hit73 LIMIT at 2M, and still needed about 5M to prove. I removed the decoy and74 narrowed the board to 7 by 7, so the proof takes 121,760 states.75- `pass-it-on` was narrowed from 10 by 7 to 8 by 7 with the same layout logic,76 so its `mustForm` proof fits the default budget (it took 9.5M before).7778Solver routes, for replay:7980```81across-and-down URRRRRULLLDDRRRR82company DLUURULDLUDDLUUDDDRR83shove-the-danger ULURRDDRUULURDRURLDDRUR84carry-the-pair DRRUULLURRRDRULURRLDRDDR85pass-it-on DDLUUULUURLDDRULURRDDDDR86down-to-miau ULLDDLURULULDDDDDDR87spend-it-twice UUURRRLDDRUULURRLDRDDDRDRUUUULDLUDD88```8990## Design notes9192- **Pinning is the level-design tool of this world.** Without custom rules,93 the only way to make a sentence unbreakable is geometry. Three words in the94 top or bottom row that touch a side edge can't be pushed in any direction.95 The top row can be pushed *toward* only from below, and never away from the96 edge. Every "given" sentence in this world is pinned like that. The97 catch is that players can't see it (friction F-XW2).98- **Pinning traps words too.** A word pushed into column 0, the last column,99 the top row, or the bottom row can only move along that edge from then on.100 An `IS` stuck under a pinned word in an edge column can never be taken out.101 I moved the challenge's `FLAG WALL IS STOP` row away from the corner for102 this reason. Otherwise the `IS` under `WALL` would have been unrecoverable103 and the "spend it twice" route would have been impossible.104- **Self-win is the default shortcut in a pure-grammar world.** Any loose105 `WIN` near a `YOU` noun's word collapses the level to `X IS YOU` plus `X IS106 WIN`. Levels 2 to 7 keep `MIAU` pinned so it can't take a loose predicate.107- **Standing on the goal, then writing the rule.** In the first draft of108 `carry-the-pair` (a `WIN+STOP` stack), the solver broke the flag's sentence,109 walked onto the flag, and rebuilt `FLAG IS WIN+STOP` underneath the cat.110 STOP doesn't eject an occupant, so that won. The W6 rework replaced the111 whole stack, so the current level no longer has this route.112- **The solver shows only the shortest route.** In `down-to-miau`, the first113 draft was won by the unintended `ROCK IS YOU` down onto the shared `YOU`. I114 only saw that by replaying the path. A wall (black square) now blocks that115 column (friction F-XW10).116- **Softlocks.** Every level can be softlocked with `YOU` still present by117 pushing a needed word into an edge row or column. That's ordinary Sokoban,118 and undo recovers from it. The no-`YOU` states reachable in this world are:119 breaking `MIAU IS YOU` (only in `across-and-down`, where it isn't pinned),120 walking into a DEFEAT rock (`shove-the-danger`), and, in `carry-the-pair`,121 giving `YOU+DEFEAT` to MIAU or walking into a rock after only `ROCK IS122 DEFEAT` forms. No level requires entering a no-`YOU` state. The engine rejects every move with no `YOU`, so undo or123 restart is the only way out, and the stage's `NOTHING IS YOU` overlay124 signals that.125- **Spacing.** Given sentences sit in edge rows with at least one blank row126 between them and the play area wherever the board allows. `company` puts127 `FLAG IS WIN` and `WALL IS STOP` on the same bottom row, six cells apart,128 and `shove-the-danger` and `pass-it-on` put two given sentences side by129 side on the bottom row after being narrowed.130131## Parser and rule behaviour found while building132133All repros use the text-grid notation from the pack (`m r f w` are things,134uppercase are words, `A+B` is a stack). They were first run on135`src/engine.js` as of 2026-09-23 and **re-checked on the W6 engine** (D23).136Items marked *resolved by W6* no longer hold, but are kept because they137explain the older friction entries.1381391. **Crossing works as expected.** A horizontal and a vertical sentence can140 share one `IS`, and each produces its own span (`state.sentences` has one141 `h` and one `v`). Repro: `. FLAG . / MIAU IS YOU / . WIN .` gives `FLAG IS142 WIN; MIAU IS YOU`.1432. **A noun does double duty in one line.** `MIAU IS ROCK IS WIN` gives `MIAU144 IS ROCK` and `ROCK IS WIN`, because scanning restarts at every noun. This145 is what `pass-it-on` is built on.1463. *Resolved by W6.* **`AND` was greedy and never backtracked.** Before W6,147 `ROCK AND+IS FLAG` gave no rule. Under W6, a stacked cell contributes one148 word per sentence path and every valid alternative is enumerated, so it149 now gives `ROCK IS FLAG`. `MIAU AND+ROCK IS YOU` still gives only `ROCK IS150 YOU`, now by design (the stacked `ROCK` starts its own sentence, and151 `MIAU AND IS` isn't valid).1524. **Stacks can't form or split during play.** Words are always `PUSH`, so a153 word can never be moved into a cell that holds another word, and a stack154 always moves as one piece. Every stack is placed by the author and stays155 for the whole level. `carry-the-pair` relies on this. The only exception156 is `SINK`, which destroys every word in the cell.1575. **A stack still yields two same-length spans (unchanged by W6).** `FLAG IS158 WIN+DEFEAT` gives spans `FLAG IS WIN` and `FLAG IS DEFEAT` on the same159 axis. Neither contains the other, so the renderer draws two bars over the160 same cells (F-XW3).1616. **Words in front of or after a sentence are ignored.** `YOU MIAU IS WIN`162 parses as `MIAU IS WIN`, and `MIAU IS YOU ROCK` as `MIAU IS YOU`. This is163 expected, but it means a level can be **won at start** by an unnoticed164 adjacency.1657. *Resolved by W6.* **`X IS X` didn't protect.** Under W6, `ROCK IS ROCK`166 blocks `ROCK IS FLAG` (checked: the rock stays a rock).1678. *Resolved by W6.* **Conflicting transformations followed object order.**168 Under W6, spatial reading order decides: with `ROCK IS FLAG` in the row169 above `ROCK IS WALL`, the rock becomes a FLAG, and swapping the rows gives170 a WALL. That's now visible on the board.1719. **Transformation chains still advance one link per turn (unchanged by172 W6).** With `ROCK IS FLAG` and `FLAG IS WALL`, a rock is a FLAG after reset173 and becomes a WALL on the next accepted move. The level loads in an174 intermediate state (F-XW6 b).17510. **A transformation predicate in an `AND` chain can remove your own `YOU`176 (unchanged).** `MIAU IS YOU AND ROCK` turns the cat into a rock at reset,177 which leaves nothing as `YOU`, even though the board reads `MIAU IS YOU`.17811. *Resolved by W6.* **`STOP` beat `PUSH`.** Under W6, `ROCK IS STOP AND179 PUSH` is pushable. The old `shove-the-danger` decoy relied on the old180 order and has been removed.18112. *Resolved by W6, and now a lesson.* **`DEFEAT` didn't affect its own182 carrier.** Under W6, `ROCK IS YOU+DEFEAT` destroys every rock at once,183 even a lone rock, and `MIAU IS YOU AND WIN+DEFEAT` is destroyed, not won184 (defeat resolves before win). The new `carry-the-pair` is built on185 self-destruction.18613. **`SINK` destroys words for good (unchanged).** Pushing a word into a187 cell with a `SINK` thing removes the word and the thing.18814. **Moving onto a thing on the same turn that makes it `WIN` wins189 (unchanged by W6).** Repro: `MIAU IS YOU / FLAG IS . / . . f+WIN+STOP /190 . . m`, step up. The cat pushes the `WIN+STOP` stack off the flag into191 `FLAG IS _` and enters the flag cell on the same move. STOP is checked192 before the move, and WIN after it, so the move wins.193194## Friction filed195196F-XW1 to F-XW13 (first pass) and F-XW14 to F-XW16 (the W6 rework) in197[friction.md](friction.md). The most severe are F-XW2198(pinned sentences are invisible), F-XW3 (stacks are hard to read), and F-XW8199(solver capacity limits how big a challenge level can be).