feat: module 07 rule resolution

Adds IS NOT to the Part II parser and a resolution pass (negation, then
identity lock) that turns parsed rules into the rules in force; harness
gains activeRules() and hasProperty(). A leading NOT now breaks the
sentence instead of being ignored (carried from M6 review). Nouns say
which objects they name ("selects"), so the ALL Expansion Drop is one
line of data. Corrects lesson 06's NOT wording; harness.md M7 details.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas WintherandClaude Opus 5.5 committed 2026-10-29 03:47:48 +01:00
1 parent 68fe9834c3
commit d993457772
58 files changed
+6091 -2

No files matched your search

+1 -1
View File
@@ -179,7 +179,7 @@ subjects = NOUN { AND NOUN }
complements = (NOUN | PROPERTY) { AND (NOUN | PROPERTY) }
```
read left to right in a row and top to bottom in a column. `NOT` is a known operator but not part of the grammar yet (Module 7): a `NOT` breaks a sentence, as an unknown word does.
read left to right in a row and top to bottom in a column. `NOT` is a known operator but not part of the grammar yet (Module 7). Where a sentence needs a noun or a property, a `NOT` stops it, as an unknown word does: `BABA IS NOT YOU` spells nothing, and in `BABA IS YOU AND NOT WIN` the run of complements ends at the `NOT`. In front of a subject, though, nothing looks at it: `NOT BABA IS YOU` reads as `BABA IS YOU`, which is wrong. Module 7 makes the parser refuse that sentence.
<details><summary>Hint 1 — nudge</summary>