fix: Module 11 review round 1 (ON ALL: quote the Conditions page, label the course's meaning)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas WintherandClaude Opus 5.5 committed 2026-11-11 13:04:54 +01:00
1 parent 34c655c1a4
commit c8fff05ccb
4 files changed
+8 -6

No files matched your search

+4 -3
View File
@@ -62,7 +62,7 @@ Write your answers down before you open the discussion, for example in `notes/11
6. Two rules: `BABA ON KEY IS WIN` and `BABA ON ROCK IS WIN`. A stack is a choice of words, as it has been since Module 6, so each noun in the stack makes its own sentence. It is not `BABA ON KEY AND ROCK IS WIN`, which would need both.
7. Yes, both: each is on the other. `ALL` names the rock itself too, but `ON` asks about *another* object. The third rock isn't WIN: `ALL` doesn't name text.
7. In the course, yes, both: each is on the other. `ALL` names the rock itself too, but `ON` asks about *another* object. The third rock isn't WIN: `ALL` doesn't name text. The course reads `ON ALL` as "any other object that isn't text". That is the course's choice: the real game asks for more (see "How the real game differs" under Build).
8. It survives, if conditions are checked when they are used. In an engine that decided `BABA ON KEY` during the parse after movement, Baba would stay MELT until the next parse, and HOT/MELT would destroy it. The difference is visible only because something changed the board between the parse and the use, and in Module 9's turn the hazards are such a thing.
@@ -249,7 +249,7 @@ Decisions in the reference that the tests don't force:
- **A condition word without a check is an error.** `Level` refuses to start if a word with role `condition` has no check in content (TypeScript throws, Rust panics). Otherwise a forgotten check would quietly make every rule with that word apply never, or always.
- **Only other objects count.** `ROCK ON ROCK IS WIN` needs a second rock. The ON page says "overlapping another object"; the course reads that as excluding the object itself, and applies the same reading to `ALL`.
- **A different object for each noun, found by search.** `ON ALL AND KEY` on a tile with a key and a rock holds: the rock stands for `ALL` and the key for `KEY`, even if the key is checked first. The game claims objects in order and the wiki says that can fail (see the box below). The course tries every assignment, so the answer never depends on object order.
- **A different object for each noun, found by search.** With the course's meaning of `ON ALL` (any other object that isn't text; the game's differs, see the box below), `ON ALL AND KEY` on a tile with a key and a rock holds: the rock stands for `ALL` and the key for `KEY`, even if the key is checked first. The game claims objects in order and the wiki says that can fail (see the box below). The course tries every assignment, so the answer never depends on object order.
- **Same conditions means the same nouns in any order.** `BABA ON KEY AND ROCK IS NOT YOU` cancels `BABA ON ROCK AND KEY IS YOU`. They are true of exactly the same objects. `rules()` still prints each as written.
- **`ON` stacked on `AND` reads both ways.** `FLAG [ON AND] KEY IS PUSH` is `FLAG ON KEY IS PUSH`, and also `FLAG IS PUSH` and `KEY IS PUSH`. That is Module 6's rule for stacks: every reading the grammar allows. No source covers this board.
- **A condition crosses no seam.** In SpellGrid, `DEATHRATTLE ON KEY IS DOUBLE` gives no aura. A condition is about one object on the grid, and a trigger word names no object. Module 10's `ruleAuras` / `rule_auras` skips rules with conditions.
@@ -259,7 +259,8 @@ Decisions in the reference that the tests don't force:
> - **`NOT` before a condition.** "Conditions can be negated by prefixing with NOT" ([Conditions](https://babaiswiki.fandom.com/wiki/Category:Conditions)), and `NOT` before a condition's noun names everything else ([NOT](https://babaiswiki.fandom.com/wiki/NOT): "FLAG ON NOT BABA IS WIN makes flag WIN when it is ON something other than baba"). The course reads neither: `BABA NOT ON KEY IS WIN` and `BABA ON NOT KEY IS WIN` spell nothing, as `NOT BABA IS YOU` spells nothing in Module 7.
> - **Several conditions.** The game joins conditions with `AND` (`BABA ON KEKE AND NEAR ME IS WIN`) and has prefix conditions such as `LONELY` and `POWERED`, "parsed as condition noun verb thing" ([Conditions](https://babaiswiki.fandom.com/wiki/Category:Conditions)). The course has one infix condition per sentence. A rule carries a list of conditions, so more would fit, but the parser reads one.
> - **Chained conditions.** `A ON B ON C IS WIN`: "This will parse as noun2 condition2 noun3 verb thing" (same page). The course does the same, by accident of its grammar: the run of subjects before the second `ON` stops at the first one.
> - **Matching nouns to objects.** For `NOT` among a condition's nouns, "the game first claims objects for all non-NOT cases, then claims objects for the NOT cases in order", and the page says this can wrongly fail (same page). The course has no `NOT` there and searches every assignment. What the game does for `ON ALL AND KEY` is not stated by any page read; the course's answer is its own.
> - **Matching nouns to objects.** For `NOT` among a condition's nouns, "the game first claims objects for all non-NOT cases, then claims objects for the NOT cases in order", and the page says this can wrongly fail (same page). The course has no `NOT` there and searches every assignment.
> - **`ALL` after a condition.** In the game, "ALL in the noun2 part requires one of every object in ALL", and `BABA ON ALL AND ALL AND FLAG IS WIN` needs Baba on two of everything in ALL, "not counting itself", plus a flag ([Conditions](https://babaiswiki.fandom.com/wiki/Category:Conditions)). The course's `ON ALL` means any one other object that isn't text, the way `ALL` names objects as a subject. That simpler meaning is the course's choice, and `test_11_on_group_noun` pins it.
> - **`LEVEL ON ROCK`**, and the level icon's position ([ON](https://babaiswiki.fandom.com/wiki/ON)). The course has no `LEVEL`.
> - **When a condition is checked.** The game checks conditions "usually right before it uses it" ([Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations)). The course always checks at use. The page doesn't list the exceptions.
> - **The hazard board is inferred.** Baba surviving after SINK removes the key follows from "Conditions process ... right before it uses it" and "Deletion occurs after each step that removes objects". No source shows this board.
+1 -1
View File
@@ -6,7 +6,7 @@ The level format, `place`, `rules()`, `activeRules()`, `hasProperty`, `posOf`, `
- **Grammar.** `subjects [CONDITION noun {AND noun}] IS complements`. A condition word stands between the subjects and `IS`, followed by one or more nouns joined by `AND`. The condition belongs to every subject of the sentence. Stacked text still yields every possible rule: a tile holding two nouns after `ON` gives two rules, one with each noun.
- **Rule text.** `rules()` and `activeRules()` write a condition between the subject and `IS`, its nouns in the order they are written: `"KEY ON ROCK IS WIN"`, `"KEY ON ROCK AND FLAG IS WIN"`, `"BABA ON KEY IS NOT YOU"`.
- **Meaning.** A rule with a condition applies to an object only while the condition holds for *that object*. `X ON Y IS P`: the X has P while another object that `Y` names shares its tile. With `ON Y AND Z`, the X needs another object for each listed noun, a different one for each: `ON ROCK AND ROCK` needs two rocks. Float levels don't matter to `ON`. A group noun names what it names as a subject: `ON ALL` is satisfied by any other object that is not text.
- **Meaning.** A rule with a condition applies to an object only while the condition holds for *that object*. `X ON Y IS P`: the X has P while another object that `Y` names shares its tile. With `ON Y AND Z`, the X needs another object for each listed noun, a different one for each: `ON ROCK AND ROCK` needs two rocks. Float levels don't matter to `ON`. A group noun names what it names as a subject: `ON ALL` is satisfied by any other object that is not text. This is the course's choice: in the game, "ALL in the noun2 part requires one of every object in ALL" ([Conditions](https://babaiswiki.fandom.com/wiki/Category:Conditions)).
- **When.** A condition is checked every time a rule is about to be used, against the board as it is then: by `hasProperty`, and so by movement, by each hazard and by the win check, and by conversion. It is not decided when the rules are parsed.
- **Resolution.** A negation cancels a rule in `activeRules()` only if both have the same conditions (`BABA ON KEY IS NOT YOU` cancels `BABA ON KEY IS YOU`). A negation with different conditions doesn't cancel anything there; it is settled for each object when that object is asked about, among the rules whose conditions hold for it. The identity lock (`X IS X`) pairs the same way.
+1 -1
View File
@@ -142,7 +142,7 @@ pub enum Dir {
From M9, `step(dir)` plays one whole turn, in the course's simplified order: movement (M8's, without its reparse), parse, conversion, parse, hazards, win, and a last parse so that `rules()` matches the board. Conversion: every object named by an active `X IS Y` (`Y` a noun naming its own things) becomes a `Y` in place, keeping its id, unless an active `… IS NOT Y` also names the object (negation is settled per object, as in `hasProperty`); with several `Y`s it becomes the first and each other `Y` is a new object on its tile; `X IS X` blocks it; an object named by `X IS NOT X` is deleted (its other `Y`s still appear, as new objects). All conversions are decided from the board as movement left it. Hazards run in content's order (the reference: `SINK`, `HOT`/`MELT`, `DEFEAT`); each sees only the objects that share a tile on the same float level (both `FLOAT` or both not), and destroys everything it finds at once before the next runs. Hazards and the win check use the rules from the parse after conversion. `won()` becomes `true` when the win check finds a `YOU` object that is `WIN`, or shares its tile with a same-float `WIN` object, and stays `true`. `lost()` is `true` whenever no object is `YOU`. `move(dir)` keeps its M8 meaning. `undo()` puts the level back as it was before the last `step` or `move` and returns `true`; repeated calls walk further back; with nothing to undo it returns `false` and changes nothing. Afterwards every `posOf`, `kindsAt`, `stackAt`, `rules()`, `activeRules()` and `won()` is as it was, and the next new object gets the id it would have got then: a snapshot holds every object's id, kind and position in age order, the id counter and `won` (the rules are recompiled, not saved). `place` clears the history.
From M11, `ON` with nouns `N1 … Nk` holds for an object when the other objects on its tile can supply a different object for each `Ni` that `Ni` names (`ON ROCK AND ROCK` needs two rocks; `ON ALL` is satisfied by any other object that isn't text); float levels don't matter. Two rules have the same conditions when they have the same condition words, each with the same nouns in any order. Stacked text yields every reading: a stack of nouns after `ON` gives one rule per noun, and `ON` stacked on `AND` is read both ways. In SpellGrid, a rule with a condition gives no aura (seam 1).
From M11, `ON` with nouns `N1 … Nk` holds for an object when the other objects on its tile can supply a different object for each `Ni` that `Ni` names (`ON ROCK AND ROCK` needs two rocks; `ON ALL` is satisfied by any other object that isn't text, the course's choice: the game needs one of every object in ALL); float levels don't matter. Two rules have the same conditions when they have the same condition words, each with the same nouns in any order. Stacked text yields every reading: a stack of nouns after `ON` gives one rule per noun, and `ON` stacked on `AND` is read both ways. In SpellGrid, a rule with a condition gives no aura (seam 1).
## Part III (`SpellGrid`)
+2 -1
View File
@@ -127,11 +127,12 @@ Loaded with curl through the MediaWiki API, as in §5: `https://babaiswiki.fando
|---|---|---|
| [ON](https://babaiswiki.fandom.com/wiki/ON) | 17403 (2025-10-05) | "ON is an infix condition that makes a rule apply when object is overlapping another object." / "FLAG ON BABA IS WIN makes flag WIN only when it's on a baba." / "FLAG ON BABA AND BABA IS WIN makes flag WIN only when it's on two babas." / "FLAG NOT ON BABA IS WIN makes flag WIN only when it's not on a baba." / "ON ignores FLOAT levels: FLAG ON BABA IS WIN makes flag WIN when it's on a baba even if BABA IS FLOAT and FLAG IS NOT FLOAT or vice versa." / "Objects are parsed in order of object priority; earlier on the list goes first." |
| [NEAR](https://babaiswiki.fandom.com/wiki/NEAR) | 18131 (2026-04-11) | "NEAR is an infix condition that makes a rule apply when an object is on a target or in one of the eight spaces around it" / "PILLAR NEAR FLAG IS PINK makes Pillar turn PINK if a Flag is ON the Pillar, directly adjacent, or diagonally adjacent." / "FLAG NEAR BABA AND KEKE IS WIN makes flag WIN if NEAR both a baba and a keke." / "NEAR can be stacked: ROCK NEAR GRASS AND GRASS IS WIN requires at least 2 grass NEAR the Rock for it to be WIN." / "PILLAR NOT NEAR FLAG IS GREEN makes Pillar turn GREEN if there is no Flag ON the Pillar, directly adjacent, or diagonally adjacent." The page says nothing about FLOAT. |
| [Conditions](https://babaiswiki.fandom.com/wiki/Category:Conditions) (redirects to Category:Conditions) | 18040 (2026-02-02) | "Conditions are operators that allow only some of a particular object to be impacted by a rule." / "They are parsed as noun1 condition noun2 verb thing, where noun1 verb thing only if the condition is true." / "Conditions can be negated by prefixing with NOT." / "AND in the noun1 part works like normal. For example, BABA AND KEKE ON SKULL IS DEFEAT expands into BABA ON SKULL IS DEFEAT and KEKE ON SKULL IS DEFEAT" / "AND in the noun2 part requires at least as many objects as are mentioned." / "BABA ON KEKE AND KEKE IS WIN makes a Baba WIN if it is ON two (stacked) Kekes." / "Multiple conditions can share objects between the conditions." / "It is not possible to write something like noun1 condition1 noun2 condition2 noun3 verb thing. This will parse as noun2 condition2 noun3 verb thing." / On matching AND-ed nouns with NOT: "it doesn't backtract to try matching" (sic) and "the game first claims objects for all non-NOT cases, then claims objects for the NOT cases in order with the first object that matches." Prefix conditions (LONELY, IDLE, POWERED, ...) are "parsed as condition noun verb thing". |
| [Conditions](https://babaiswiki.fandom.com/wiki/Category:Conditions) (redirects to Category:Conditions) | 18040 (2026-02-02) | "Conditions are operators that allow only some of a particular object to be impacted by a rule." / "They are parsed as noun1 condition noun2 verb thing, where noun1 verb thing only if the condition is true." / "Conditions can be negated by prefixing with NOT." / "AND in the noun1 part works like normal. For example, BABA AND KEKE ON SKULL IS DEFEAT expands into BABA ON SKULL IS DEFEAT and KEKE ON SKULL IS DEFEAT" / "AND in the noun2 part requires at least as many objects as are mentioned." / "BABA ON KEKE AND KEKE IS WIN makes a Baba WIN if it is ON two (stacked) Kekes." / "Multiple conditions can share objects between the conditions." / "It is not possible to write something like noun1 condition1 noun2 condition2 noun3 verb thing. This will parse as noun2 condition2 noun3 verb thing." / On matching AND-ed nouns with NOT: "it doesn't backtract to try matching" (sic) and "the game first claims objects for all non-NOT cases, then claims objects for the NOT cases in order with the first object that matches." Prefix conditions (LONELY, IDLE, POWERED, ...) are "parsed as condition noun verb thing". / "ALL in the noun2 part requires one of every object in ALL, versus NOT TEXT or NOT EMPTY which requires any one object that is in ALL." / "BABA ON ALL AND ALL AND FLAG IS WIN requires that baba be ON two of everything in ALL (not counting itself) plus an extra flag." (re-checked 2026-11-11, fix round 1, same revision) |
| [NOT](https://babaiswiki.fandom.com/wiki/NOT) (re-fetched) | 18314 | "When added after a verb it makes the corresponding rule not apply, overriding other instances of the rule it disables." / "ROCK ON BABA IS NOT PUSH makes ROCK that is on BABA not PUSHable." / "When added before a condition, it reverses the condition." / "FLAG ON NOT BABA IS WIN makes flag WIN when it is ON something other than baba" |
| [Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations) (re-fetched) | 17942 (2026-01-03) | Same text as §3 for the quotes recorded there. On conditions: "Conditions process when the game checks for what objects have a rule, which is usually right before it uses it." / "it completely finishes moving for a particular move stage before checking which units are in the next, so conditions (e.g. IT ON BABA IS YOU AND MOVE) reparse in between." / Under "Other considerations": "conditions on these rules are rechecked at the time of destruction, even if multiple destructions occur in the same turn." (about HAS). |
- **What the pages do not say.** None of them says in so many words how a conditional `NOT` rule meets an unconditional one (`BABA IS YOU` with `BABA ON KEY IS NOT YOU`). The NOT page says a negation overrides "other instances of the rule it disables", and its example "ROCK ON BABA IS NOT PUSH makes ROCK that is on BABA not PUSHable" names only the rocks on a Baba. Module 11 reads the two together: the negation wins for each object its condition holds for, and only for those. That reading is the course's.
- **`ALL` after a condition (stated, not followed by the course).** The Conditions page says `ON ALL` needs one of every object in ALL (not counting the object itself), where `NOT TEXT` would need any one. Module 11 gives `ON ALL` the simpler meaning "any other object that isn't text", as `ALL` names objects when it is a subject. That meaning is the course's choice, labelled in the lesson and scenarios.
- **Whether an object can satisfy its own condition.** ON says "overlapping another object"; NEAR says "on a target or in one of the eight spaces around it". Neither says whether `ROCK ON ROCK` can be satisfied by the rock itself. The course counts only other objects.
- **Course use (Module 11):** ON ignores float levels (stated). AND in the condition needs one distinct object per listed noun (stated: "at least as many objects as are mentioned"). The course's grammar has one condition per sentence, no `NOT` before a condition, and no prefix conditions; NEAR is the Expansion Drop.