clone

a browser grid puzzle game where you push words around to rewrite the rules of each level

Document rule precedence and parser scalability

Dami committed 18854fd
commit
18854fdcfb6aaa4e7c7d3f060e80120ea6e29512
parent
6f8cc4b30da0ebf6ea2cb49540e3dfad1d6fffa1
author
Dami <dami.etoile@gmail.com>
2 files changed, +29 -0
Mdocs/architecture-review.md6++++++
Mdocs/modding.md23+++++++++++++++++++++++
M docs/architecture-review.md +6 -0
@@ -87,6 +87,12 @@ Remaining work is specific rather than a reason to keep expanding this refactor:
8787 8888 The worlds team's inbox supplied concrete next gates. **W8 was independently reproduced and fixed** in `c3537ca`: SINK could remove the `STOP` word while settled rules still reported `ROCK IS STOP`, blocking the next move. The rule refresh change now reparses after contact removals and passed the exact reproduction, reset/Undo/restore fixtures, all seven Tidewater solver paths, and browser regression flows. Tidewater remains with the world team for an independent recheck before bundling. W11 unknown-predicate validation is next in the agreed content order, followed by W6 precedence and AND parsing and W3 solver throughput. Those require separate specs and differential fixtures. The `createGame()` API and snapshot shape remain compatible so the changes can land one at a time.8989 90+### W6 scalability follow-up91+92+W11 proof-local diagnostics and feature validation are implemented locally, with Gift and Workshop presentation awaiting designer review before the next public revision. W6 now has a strict OpenSpec contract for stacked-cell reading and contact/transform precedence. The parser enumerates every valid one-token-per-cell sentence path in spatial order. It has explicit path and span budgets and an indexed maximal-span pass; an over-budget board fails with a typed error instead of silently dropping rules. The CommonJS loader rejects an over-budget initial board with a structured proof error. During play, rule parsing is part of the turn transaction: an over-budget arrangement rejects the move and restores board, history, move count, indexes, and automata phase. Restore also preserves the prior settled game when a supplied snapshot exceeds the budget.93+94+This closes a new combinatorial risk introduced by stacked alternatives. It does not replace W3's solver state codec: the current breadth-first solver still stores full snapshots and hit the 300,000-state check limit on two Crossword drafts after W6. The worlds team is rechecking those proofs and the Word Lab lesson whose old STOP puzzle now has a direct PUSH route.95+9096 ## Review boundary9197 9298 The concurrent designer controls `docs/design.md` and `docs/design.html`; the world team controls `docs/worlds/`, `mods/worlds/`, and its OpenSpec change. This review does not rewrite those files. Design or level-authoring consequences should be sent through the existing inbox files. The current architecture work retains the public nzip URL and existing mod format.
M docs/modding.md +23 -0
@@ -135,6 +135,29 @@ Automata properties are declared per proof. The same token cannot also be an
135135 object noun in that proof. A custom property declared only in another proof136136 has no behavior here, and its word tile receives a note.137137 138+## Rule precedence and stacked words139+140+These rules make a proof deterministic when several properties, transforms, or141+word tiles meet in one turn. Authors can use them when checking a level by142+hand, and solvers should use the same order.143+144+| Situation | Resolution |145+| --- | --- |146+| One entity has both `PUSH` and `STOP` | `PUSH` takes precedence for that entity. |147+| A cell contains `DEFEAT` and `WIN` contact | Resolve `DEFEAT` first, including a singleton `YOU` entity that also has `DEFEAT`; it is removed before it can win. |148+| A noun has both `X IS X` and `X IS Y` | The identity transform suppresses the other transform for `X`. |149+| Several spatial noun transforms compete | Select the first valid transform by source position, scanning top-to-bottom and then left-to-right. At one source cell, horizontal reads before vertical. |150+| A turn could apply multiple noun transforms to one object | Apply at most one noun-transform link to that object in that turn. |151+| A sentence path crosses a stacked word cell | Select one word from that cell for the path, while retaining every valid alternative sentence. A sentence may begin from a stacked cell. |152+153+The last rule applies independently to each sentence path. Stacking therefore154+does not silently discard a valid reading, but a single path cannot consume two155+words from the same cell.156+157+The engine rejects a proof whose initial stacks exceed its rule-reading158+complexity budget. If movement creates such a stack later, that turn is blocked159+without changing the board or advancing automata.160+138161 ## Bundled teaching packs139162 140163 The repository includes two authored packs in addition to the three core