@polycode-projects/the-mechanical-code-talker 2.7.2 → 2.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -2,9 +2,9 @@
2
2
  "version": 1,
3
3
  "generated": "by scripts/build-worlds-pack.mjs from corpus/worlds/src/",
4
4
  "counts": {
5
- "worlds": 1,
6
- "facts": 51,
7
- "rules": 12
5
+ "worlds": 2,
6
+ "facts": 527,
7
+ "rules": 14
8
8
  },
9
9
  "budgets": {
10
10
  "sourceBytesPerWorld": 131072,
@@ -16,18 +16,28 @@
16
16
  "file": "src/ashcombe-hall.jsonl",
17
17
  "bytes": 7481,
18
18
  "sha256": "776634e8f7db704f2895ad1557cdcb79c28e14fe8fd4202ef1d0db9b4358ca91"
19
+ },
20
+ {
21
+ "file": "src/spider-fly.jsonl",
22
+ "bytes": 51706,
23
+ "sha256": "b641936dec8fb3526dcab766268c25942c0e82ff9025bb853dad5f971bf8c029"
19
24
  }
20
25
  ],
21
26
  "files": [
22
27
  {
23
28
  "file": "index.json.gz",
24
- "bytes": 46,
25
- "sha256": "5c380eaf9cc68c0420edd5a8df9803208070cceb3e717c4e87288d612f6a51a0"
29
+ "bytes": 63,
30
+ "sha256": "507cce433933fcd95c19e6616985006d247f8cb448b3b8a6c9136c9c859e0c08"
26
31
  },
27
32
  {
28
33
  "file": "shards/ashcombe-hall.jsonl.gz",
29
34
  "bytes": 864,
30
35
  "sha256": "468ba9ae859fc63094f5030648f07885e1e0785fb4e18e309cc4e6729c878ebf"
36
+ },
37
+ {
38
+ "file": "shards/spider-fly.jsonl.gz",
39
+ "bytes": 2829,
40
+ "sha256": "dd9f1ac66b26da2cea350fdeab17e1fe0f27d583823356e3bc189c131e3adb86"
31
41
  }
32
42
  ]
33
43
  }
@@ -0,0 +1,479 @@
1
+ {"world":"spider-fly","kind":"meta","opening":"a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move — watch, or address one by name in chat."}
2
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"rdf:type","object":"cell"}
3
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"mgx:has-exit-south","object":"cell-1-2"}
4
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"mgx:has-exit-east","object":"cell-2-1"}
5
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-1","predicate":"mgx:in-web","object":"true"}
6
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"rdf:type","object":"cell"}
7
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:has-exit-south","object":"cell-2-2"}
8
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:has-exit-east","object":"cell-3-1"}
9
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:has-exit-west","object":"cell-1-1"}
10
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-1","predicate":"mgx:in-web","object":"true"}
11
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"rdf:type","object":"cell"}
12
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:has-exit-south","object":"cell-3-2"}
13
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:has-exit-east","object":"cell-4-1"}
14
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:has-exit-west","object":"cell-2-1"}
15
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-1","predicate":"mgx:in-web","object":"true"}
16
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"rdf:type","object":"cell"}
17
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"mgx:has-exit-south","object":"cell-4-2"}
18
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"mgx:has-exit-east","object":"cell-5-1"}
19
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-1","predicate":"mgx:has-exit-west","object":"cell-3-1"}
20
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"rdf:type","object":"cell"}
21
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"mgx:has-exit-south","object":"cell-5-2"}
22
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"mgx:has-exit-east","object":"cell-6-1"}
23
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-1","predicate":"mgx:has-exit-west","object":"cell-4-1"}
24
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"rdf:type","object":"cell"}
25
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"mgx:has-exit-south","object":"cell-6-2"}
26
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"mgx:has-exit-east","object":"cell-7-1"}
27
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-1","predicate":"mgx:has-exit-west","object":"cell-5-1"}
28
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"rdf:type","object":"cell"}
29
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"mgx:has-exit-south","object":"cell-7-2"}
30
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"mgx:has-exit-east","object":"cell-8-1"}
31
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-1","predicate":"mgx:has-exit-west","object":"cell-6-1"}
32
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"rdf:type","object":"cell"}
33
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"mgx:has-exit-south","object":"cell-8-2"}
34
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"mgx:has-exit-east","object":"cell-9-1"}
35
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-1","predicate":"mgx:has-exit-west","object":"cell-7-1"}
36
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"rdf:type","object":"cell"}
37
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"mgx:has-exit-south","object":"cell-9-2"}
38
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"mgx:has-exit-east","object":"cell-10-1"}
39
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-1","predicate":"mgx:has-exit-west","object":"cell-8-1"}
40
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-1","predicate":"rdf:type","object":"cell"}
41
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-1","predicate":"mgx:has-exit-south","object":"cell-10-2"}
42
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-1","predicate":"mgx:has-exit-west","object":"cell-9-1"}
43
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"rdf:type","object":"cell"}
44
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:has-exit-north","object":"cell-1-1"}
45
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:has-exit-south","object":"cell-1-3"}
46
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:has-exit-east","object":"cell-2-2"}
47
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-2","predicate":"mgx:in-web","object":"true"}
48
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"rdf:type","object":"cell"}
49
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-north","object":"cell-2-1"}
50
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-south","object":"cell-2-3"}
51
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-east","object":"cell-3-2"}
52
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:has-exit-west","object":"cell-1-2"}
53
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-2","predicate":"mgx:in-web","object":"true"}
54
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"rdf:type","object":"cell"}
55
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-north","object":"cell-3-1"}
56
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-south","object":"cell-3-3"}
57
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-east","object":"cell-4-2"}
58
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:has-exit-west","object":"cell-2-2"}
59
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-2","predicate":"mgx:in-web","object":"true"}
60
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"rdf:type","object":"cell"}
61
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-north","object":"cell-4-1"}
62
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-south","object":"cell-4-3"}
63
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-east","object":"cell-5-2"}
64
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-2","predicate":"mgx:has-exit-west","object":"cell-3-2"}
65
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"rdf:type","object":"cell"}
66
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-north","object":"cell-5-1"}
67
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-south","object":"cell-5-3"}
68
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-east","object":"cell-6-2"}
69
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-2","predicate":"mgx:has-exit-west","object":"cell-4-2"}
70
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"rdf:type","object":"cell"}
71
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-north","object":"cell-6-1"}
72
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-south","object":"cell-6-3"}
73
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-east","object":"cell-7-2"}
74
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-2","predicate":"mgx:has-exit-west","object":"cell-5-2"}
75
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"rdf:type","object":"cell"}
76
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-north","object":"cell-7-1"}
77
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-south","object":"cell-7-3"}
78
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-east","object":"cell-8-2"}
79
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-2","predicate":"mgx:has-exit-west","object":"cell-6-2"}
80
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"rdf:type","object":"cell"}
81
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-north","object":"cell-8-1"}
82
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-south","object":"cell-8-3"}
83
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-east","object":"cell-9-2"}
84
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-2","predicate":"mgx:has-exit-west","object":"cell-7-2"}
85
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"rdf:type","object":"cell"}
86
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-north","object":"cell-9-1"}
87
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-south","object":"cell-9-3"}
88
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-east","object":"cell-10-2"}
89
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-2","predicate":"mgx:has-exit-west","object":"cell-8-2"}
90
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"rdf:type","object":"cell"}
91
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"mgx:has-exit-north","object":"cell-10-1"}
92
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"mgx:has-exit-south","object":"cell-10-3"}
93
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-2","predicate":"mgx:has-exit-west","object":"cell-9-2"}
94
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"rdf:type","object":"cell"}
95
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:has-exit-north","object":"cell-1-2"}
96
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:has-exit-south","object":"cell-1-4"}
97
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:has-exit-east","object":"cell-2-3"}
98
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-3","predicate":"mgx:in-web","object":"true"}
99
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"rdf:type","object":"cell"}
100
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-north","object":"cell-2-2"}
101
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-south","object":"cell-2-4"}
102
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-east","object":"cell-3-3"}
103
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:has-exit-west","object":"cell-1-3"}
104
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-3","predicate":"mgx:in-web","object":"true"}
105
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"rdf:type","object":"cell"}
106
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-north","object":"cell-3-2"}
107
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-south","object":"cell-3-4"}
108
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-east","object":"cell-4-3"}
109
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:has-exit-west","object":"cell-2-3"}
110
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-3","predicate":"mgx:in-web","object":"true"}
111
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"rdf:type","object":"cell"}
112
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-north","object":"cell-4-2"}
113
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-south","object":"cell-4-4"}
114
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-east","object":"cell-5-3"}
115
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-3","predicate":"mgx:has-exit-west","object":"cell-3-3"}
116
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"rdf:type","object":"cell"}
117
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-north","object":"cell-5-2"}
118
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-south","object":"cell-5-4"}
119
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-east","object":"cell-6-3"}
120
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-3","predicate":"mgx:has-exit-west","object":"cell-4-3"}
121
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"rdf:type","object":"cell"}
122
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-north","object":"cell-6-2"}
123
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-south","object":"cell-6-4"}
124
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-east","object":"cell-7-3"}
125
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-3","predicate":"mgx:has-exit-west","object":"cell-5-3"}
126
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"rdf:type","object":"cell"}
127
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-north","object":"cell-7-2"}
128
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-south","object":"cell-7-4"}
129
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-east","object":"cell-8-3"}
130
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-3","predicate":"mgx:has-exit-west","object":"cell-6-3"}
131
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"rdf:type","object":"cell"}
132
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-north","object":"cell-8-2"}
133
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-south","object":"cell-8-4"}
134
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-east","object":"cell-9-3"}
135
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-3","predicate":"mgx:has-exit-west","object":"cell-7-3"}
136
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"rdf:type","object":"cell"}
137
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-north","object":"cell-9-2"}
138
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-south","object":"cell-9-4"}
139
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-east","object":"cell-10-3"}
140
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-3","predicate":"mgx:has-exit-west","object":"cell-8-3"}
141
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"rdf:type","object":"cell"}
142
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"mgx:has-exit-north","object":"cell-10-2"}
143
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"mgx:has-exit-south","object":"cell-10-4"}
144
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-3","predicate":"mgx:has-exit-west","object":"cell-9-3"}
145
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"rdf:type","object":"cell"}
146
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"mgx:has-exit-north","object":"cell-1-3"}
147
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"mgx:has-exit-south","object":"cell-1-5"}
148
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-4","predicate":"mgx:has-exit-east","object":"cell-2-4"}
149
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"rdf:type","object":"cell"}
150
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-north","object":"cell-2-3"}
151
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-south","object":"cell-2-5"}
152
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-east","object":"cell-3-4"}
153
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-4","predicate":"mgx:has-exit-west","object":"cell-1-4"}
154
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"rdf:type","object":"cell"}
155
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-north","object":"cell-3-3"}
156
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-south","object":"cell-3-5"}
157
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-east","object":"cell-4-4"}
158
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-4","predicate":"mgx:has-exit-west","object":"cell-2-4"}
159
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"rdf:type","object":"cell"}
160
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-north","object":"cell-4-3"}
161
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-south","object":"cell-4-5"}
162
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-east","object":"cell-5-4"}
163
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-4","predicate":"mgx:has-exit-west","object":"cell-3-4"}
164
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"rdf:type","object":"cell"}
165
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-north","object":"cell-5-3"}
166
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-south","object":"cell-5-5"}
167
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-east","object":"cell-6-4"}
168
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-4","predicate":"mgx:has-exit-west","object":"cell-4-4"}
169
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"rdf:type","object":"cell"}
170
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-north","object":"cell-6-3"}
171
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-south","object":"cell-6-5"}
172
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-east","object":"cell-7-4"}
173
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-4","predicate":"mgx:has-exit-west","object":"cell-5-4"}
174
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"rdf:type","object":"cell"}
175
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-north","object":"cell-7-3"}
176
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-south","object":"cell-7-5"}
177
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-east","object":"cell-8-4"}
178
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-4","predicate":"mgx:has-exit-west","object":"cell-6-4"}
179
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"rdf:type","object":"cell"}
180
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-north","object":"cell-8-3"}
181
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-south","object":"cell-8-5"}
182
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-east","object":"cell-9-4"}
183
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-4","predicate":"mgx:has-exit-west","object":"cell-7-4"}
184
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"rdf:type","object":"cell"}
185
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-north","object":"cell-9-3"}
186
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-south","object":"cell-9-5"}
187
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-east","object":"cell-10-4"}
188
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-4","predicate":"mgx:has-exit-west","object":"cell-8-4"}
189
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"rdf:type","object":"cell"}
190
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"mgx:has-exit-north","object":"cell-10-3"}
191
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"mgx:has-exit-south","object":"cell-10-5"}
192
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-4","predicate":"mgx:has-exit-west","object":"cell-9-4"}
193
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"rdf:type","object":"cell"}
194
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"mgx:has-exit-north","object":"cell-1-4"}
195
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"mgx:has-exit-south","object":"cell-1-6"}
196
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-5","predicate":"mgx:has-exit-east","object":"cell-2-5"}
197
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"rdf:type","object":"cell"}
198
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-north","object":"cell-2-4"}
199
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-south","object":"cell-2-6"}
200
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-east","object":"cell-3-5"}
201
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-5","predicate":"mgx:has-exit-west","object":"cell-1-5"}
202
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"rdf:type","object":"cell"}
203
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-north","object":"cell-3-4"}
204
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-south","object":"cell-3-6"}
205
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-east","object":"cell-4-5"}
206
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-5","predicate":"mgx:has-exit-west","object":"cell-2-5"}
207
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"rdf:type","object":"cell"}
208
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-north","object":"cell-4-4"}
209
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-south","object":"cell-4-6"}
210
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-east","object":"cell-5-5"}
211
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-5","predicate":"mgx:has-exit-west","object":"cell-3-5"}
212
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"rdf:type","object":"cell"}
213
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-north","object":"cell-5-4"}
214
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-south","object":"cell-5-6"}
215
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-east","object":"cell-6-5"}
216
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-5","predicate":"mgx:has-exit-west","object":"cell-4-5"}
217
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"rdf:type","object":"cell"}
218
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-north","object":"cell-6-4"}
219
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-south","object":"cell-6-6"}
220
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-east","object":"cell-7-5"}
221
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-5","predicate":"mgx:has-exit-west","object":"cell-5-5"}
222
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"rdf:type","object":"cell"}
223
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-north","object":"cell-7-4"}
224
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-south","object":"cell-7-6"}
225
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-east","object":"cell-8-5"}
226
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-5","predicate":"mgx:has-exit-west","object":"cell-6-5"}
227
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"rdf:type","object":"cell"}
228
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-north","object":"cell-8-4"}
229
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-south","object":"cell-8-6"}
230
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-east","object":"cell-9-5"}
231
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-5","predicate":"mgx:has-exit-west","object":"cell-7-5"}
232
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"rdf:type","object":"cell"}
233
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-north","object":"cell-9-4"}
234
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-south","object":"cell-9-6"}
235
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-east","object":"cell-10-5"}
236
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-5","predicate":"mgx:has-exit-west","object":"cell-8-5"}
237
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"rdf:type","object":"cell"}
238
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"mgx:has-exit-north","object":"cell-10-4"}
239
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"mgx:has-exit-south","object":"cell-10-6"}
240
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-5","predicate":"mgx:has-exit-west","object":"cell-9-5"}
241
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"rdf:type","object":"cell"}
242
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"mgx:has-exit-north","object":"cell-1-5"}
243
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"mgx:has-exit-south","object":"cell-1-7"}
244
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-6","predicate":"mgx:has-exit-east","object":"cell-2-6"}
245
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"rdf:type","object":"cell"}
246
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-north","object":"cell-2-5"}
247
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-south","object":"cell-2-7"}
248
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-east","object":"cell-3-6"}
249
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-6","predicate":"mgx:has-exit-west","object":"cell-1-6"}
250
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"rdf:type","object":"cell"}
251
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-north","object":"cell-3-5"}
252
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-south","object":"cell-3-7"}
253
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-east","object":"cell-4-6"}
254
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-6","predicate":"mgx:has-exit-west","object":"cell-2-6"}
255
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"rdf:type","object":"cell"}
256
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-north","object":"cell-4-5"}
257
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-south","object":"cell-4-7"}
258
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-east","object":"cell-5-6"}
259
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-6","predicate":"mgx:has-exit-west","object":"cell-3-6"}
260
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"rdf:type","object":"cell"}
261
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-north","object":"cell-5-5"}
262
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-south","object":"cell-5-7"}
263
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-east","object":"cell-6-6"}
264
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-6","predicate":"mgx:has-exit-west","object":"cell-4-6"}
265
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"rdf:type","object":"cell"}
266
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-north","object":"cell-6-5"}
267
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-south","object":"cell-6-7"}
268
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-east","object":"cell-7-6"}
269
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-6","predicate":"mgx:has-exit-west","object":"cell-5-6"}
270
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"rdf:type","object":"cell"}
271
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-north","object":"cell-7-5"}
272
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-south","object":"cell-7-7"}
273
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-east","object":"cell-8-6"}
274
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-6","predicate":"mgx:has-exit-west","object":"cell-6-6"}
275
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"rdf:type","object":"cell"}
276
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-north","object":"cell-8-5"}
277
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-south","object":"cell-8-7"}
278
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-east","object":"cell-9-6"}
279
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-6","predicate":"mgx:has-exit-west","object":"cell-7-6"}
280
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"rdf:type","object":"cell"}
281
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-north","object":"cell-9-5"}
282
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-south","object":"cell-9-7"}
283
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-east","object":"cell-10-6"}
284
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-6","predicate":"mgx:has-exit-west","object":"cell-8-6"}
285
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"rdf:type","object":"cell"}
286
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"mgx:has-exit-north","object":"cell-10-5"}
287
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"mgx:has-exit-south","object":"cell-10-7"}
288
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-6","predicate":"mgx:has-exit-west","object":"cell-9-6"}
289
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"rdf:type","object":"cell"}
290
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"mgx:has-exit-north","object":"cell-1-6"}
291
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"mgx:has-exit-south","object":"cell-1-8"}
292
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-7","predicate":"mgx:has-exit-east","object":"cell-2-7"}
293
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"rdf:type","object":"cell"}
294
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-north","object":"cell-2-6"}
295
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-south","object":"cell-2-8"}
296
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-east","object":"cell-3-7"}
297
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-7","predicate":"mgx:has-exit-west","object":"cell-1-7"}
298
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"rdf:type","object":"cell"}
299
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-north","object":"cell-3-6"}
300
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-south","object":"cell-3-8"}
301
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-east","object":"cell-4-7"}
302
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-7","predicate":"mgx:has-exit-west","object":"cell-2-7"}
303
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"rdf:type","object":"cell"}
304
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-north","object":"cell-4-6"}
305
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-south","object":"cell-4-8"}
306
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-east","object":"cell-5-7"}
307
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-7","predicate":"mgx:has-exit-west","object":"cell-3-7"}
308
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"rdf:type","object":"cell"}
309
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-north","object":"cell-5-6"}
310
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-south","object":"cell-5-8"}
311
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-east","object":"cell-6-7"}
312
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-7","predicate":"mgx:has-exit-west","object":"cell-4-7"}
313
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"rdf:type","object":"cell"}
314
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-north","object":"cell-6-6"}
315
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-south","object":"cell-6-8"}
316
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-east","object":"cell-7-7"}
317
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-7","predicate":"mgx:has-exit-west","object":"cell-5-7"}
318
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"rdf:type","object":"cell"}
319
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-north","object":"cell-7-6"}
320
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-south","object":"cell-7-8"}
321
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-east","object":"cell-8-7"}
322
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-7","predicate":"mgx:has-exit-west","object":"cell-6-7"}
323
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"rdf:type","object":"cell"}
324
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-north","object":"cell-8-6"}
325
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-south","object":"cell-8-8"}
326
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-east","object":"cell-9-7"}
327
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-7","predicate":"mgx:has-exit-west","object":"cell-7-7"}
328
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"rdf:type","object":"cell"}
329
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-north","object":"cell-9-6"}
330
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-south","object":"cell-9-8"}
331
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-east","object":"cell-10-7"}
332
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-7","predicate":"mgx:has-exit-west","object":"cell-8-7"}
333
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"rdf:type","object":"cell"}
334
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"mgx:has-exit-north","object":"cell-10-6"}
335
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"mgx:has-exit-south","object":"cell-10-8"}
336
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-7","predicate":"mgx:has-exit-west","object":"cell-9-7"}
337
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"rdf:type","object":"cell"}
338
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"mgx:has-exit-north","object":"cell-1-7"}
339
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"mgx:has-exit-south","object":"cell-1-9"}
340
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-8","predicate":"mgx:has-exit-east","object":"cell-2-8"}
341
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"rdf:type","object":"cell"}
342
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-north","object":"cell-2-7"}
343
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-south","object":"cell-2-9"}
344
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-east","object":"cell-3-8"}
345
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-8","predicate":"mgx:has-exit-west","object":"cell-1-8"}
346
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"rdf:type","object":"cell"}
347
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-north","object":"cell-3-7"}
348
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-south","object":"cell-3-9"}
349
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-east","object":"cell-4-8"}
350
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-8","predicate":"mgx:has-exit-west","object":"cell-2-8"}
351
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"rdf:type","object":"cell"}
352
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-north","object":"cell-4-7"}
353
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-south","object":"cell-4-9"}
354
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-east","object":"cell-5-8"}
355
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-8","predicate":"mgx:has-exit-west","object":"cell-3-8"}
356
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"rdf:type","object":"cell"}
357
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-north","object":"cell-5-7"}
358
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-south","object":"cell-5-9"}
359
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-east","object":"cell-6-8"}
360
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-8","predicate":"mgx:has-exit-west","object":"cell-4-8"}
361
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"rdf:type","object":"cell"}
362
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-north","object":"cell-6-7"}
363
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-south","object":"cell-6-9"}
364
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-east","object":"cell-7-8"}
365
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-8","predicate":"mgx:has-exit-west","object":"cell-5-8"}
366
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"rdf:type","object":"cell"}
367
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-north","object":"cell-7-7"}
368
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-south","object":"cell-7-9"}
369
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-east","object":"cell-8-8"}
370
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-8","predicate":"mgx:has-exit-west","object":"cell-6-8"}
371
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"rdf:type","object":"cell"}
372
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-north","object":"cell-8-7"}
373
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-south","object":"cell-8-9"}
374
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-east","object":"cell-9-8"}
375
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-8","predicate":"mgx:has-exit-west","object":"cell-7-8"}
376
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"rdf:type","object":"cell"}
377
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-north","object":"cell-9-7"}
378
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-south","object":"cell-9-9"}
379
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-east","object":"cell-10-8"}
380
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-8","predicate":"mgx:has-exit-west","object":"cell-8-8"}
381
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"rdf:type","object":"cell"}
382
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"mgx:has-exit-north","object":"cell-10-7"}
383
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"mgx:has-exit-south","object":"cell-10-9"}
384
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-8","predicate":"mgx:has-exit-west","object":"cell-9-8"}
385
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"rdf:type","object":"cell"}
386
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"mgx:has-exit-north","object":"cell-1-8"}
387
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"mgx:has-exit-south","object":"cell-1-10"}
388
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-9","predicate":"mgx:has-exit-east","object":"cell-2-9"}
389
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"rdf:type","object":"cell"}
390
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-north","object":"cell-2-8"}
391
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-south","object":"cell-2-10"}
392
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-east","object":"cell-3-9"}
393
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-9","predicate":"mgx:has-exit-west","object":"cell-1-9"}
394
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"rdf:type","object":"cell"}
395
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-north","object":"cell-3-8"}
396
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-south","object":"cell-3-10"}
397
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-east","object":"cell-4-9"}
398
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-9","predicate":"mgx:has-exit-west","object":"cell-2-9"}
399
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"rdf:type","object":"cell"}
400
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-north","object":"cell-4-8"}
401
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-south","object":"cell-4-10"}
402
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-east","object":"cell-5-9"}
403
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-9","predicate":"mgx:has-exit-west","object":"cell-3-9"}
404
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"rdf:type","object":"cell"}
405
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-north","object":"cell-5-8"}
406
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-south","object":"cell-5-10"}
407
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-east","object":"cell-6-9"}
408
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-9","predicate":"mgx:has-exit-west","object":"cell-4-9"}
409
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"rdf:type","object":"cell"}
410
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-north","object":"cell-6-8"}
411
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-south","object":"cell-6-10"}
412
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-east","object":"cell-7-9"}
413
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-9","predicate":"mgx:has-exit-west","object":"cell-5-9"}
414
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"rdf:type","object":"cell"}
415
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-north","object":"cell-7-8"}
416
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-south","object":"cell-7-10"}
417
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-east","object":"cell-8-9"}
418
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-9","predicate":"mgx:has-exit-west","object":"cell-6-9"}
419
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"rdf:type","object":"cell"}
420
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-north","object":"cell-8-8"}
421
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-south","object":"cell-8-10"}
422
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-east","object":"cell-9-9"}
423
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-9","predicate":"mgx:has-exit-west","object":"cell-7-9"}
424
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"rdf:type","object":"cell"}
425
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-north","object":"cell-9-8"}
426
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-south","object":"cell-9-10"}
427
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-east","object":"cell-10-9"}
428
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-9","predicate":"mgx:has-exit-west","object":"cell-8-9"}
429
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"rdf:type","object":"cell"}
430
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"mgx:has-exit-north","object":"cell-10-8"}
431
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"mgx:has-exit-south","object":"cell-10-10"}
432
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-9","predicate":"mgx:has-exit-west","object":"cell-9-9"}
433
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-10","predicate":"rdf:type","object":"cell"}
434
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-10","predicate":"mgx:has-exit-north","object":"cell-1-9"}
435
+ {"world":"spider-fly","kind":"fact","subject":"cell-1-10","predicate":"mgx:has-exit-east","object":"cell-2-10"}
436
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"rdf:type","object":"cell"}
437
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"mgx:has-exit-north","object":"cell-2-9"}
438
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"mgx:has-exit-east","object":"cell-3-10"}
439
+ {"world":"spider-fly","kind":"fact","subject":"cell-2-10","predicate":"mgx:has-exit-west","object":"cell-1-10"}
440
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"rdf:type","object":"cell"}
441
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"mgx:has-exit-north","object":"cell-3-9"}
442
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"mgx:has-exit-east","object":"cell-4-10"}
443
+ {"world":"spider-fly","kind":"fact","subject":"cell-3-10","predicate":"mgx:has-exit-west","object":"cell-2-10"}
444
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"rdf:type","object":"cell"}
445
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"mgx:has-exit-north","object":"cell-4-9"}
446
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"mgx:has-exit-east","object":"cell-5-10"}
447
+ {"world":"spider-fly","kind":"fact","subject":"cell-4-10","predicate":"mgx:has-exit-west","object":"cell-3-10"}
448
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"rdf:type","object":"cell"}
449
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"mgx:has-exit-north","object":"cell-5-9"}
450
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"mgx:has-exit-east","object":"cell-6-10"}
451
+ {"world":"spider-fly","kind":"fact","subject":"cell-5-10","predicate":"mgx:has-exit-west","object":"cell-4-10"}
452
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"rdf:type","object":"cell"}
453
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"mgx:has-exit-north","object":"cell-6-9"}
454
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"mgx:has-exit-east","object":"cell-7-10"}
455
+ {"world":"spider-fly","kind":"fact","subject":"cell-6-10","predicate":"mgx:has-exit-west","object":"cell-5-10"}
456
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"rdf:type","object":"cell"}
457
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"mgx:has-exit-north","object":"cell-7-9"}
458
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"mgx:has-exit-east","object":"cell-8-10"}
459
+ {"world":"spider-fly","kind":"fact","subject":"cell-7-10","predicate":"mgx:has-exit-west","object":"cell-6-10"}
460
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"rdf:type","object":"cell"}
461
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"mgx:has-exit-north","object":"cell-8-9"}
462
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"mgx:has-exit-east","object":"cell-9-10"}
463
+ {"world":"spider-fly","kind":"fact","subject":"cell-8-10","predicate":"mgx:has-exit-west","object":"cell-7-10"}
464
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"rdf:type","object":"cell"}
465
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"mgx:has-exit-north","object":"cell-9-9"}
466
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"mgx:has-exit-east","object":"cell-10-10"}
467
+ {"world":"spider-fly","kind":"fact","subject":"cell-9-10","predicate":"mgx:has-exit-west","object":"cell-8-10"}
468
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-10","predicate":"rdf:type","object":"cell"}
469
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-10","predicate":"mgx:has-exit-north","object":"cell-10-9"}
470
+ {"world":"spider-fly","kind":"fact","subject":"cell-10-10","predicate":"mgx:has-exit-west","object":"cell-9-10"}
471
+ {"world":"spider-fly","kind":"fact","subject":"poodle","predicate":"rdfs:subClassOf","object":"dog"}
472
+ {"world":"spider-fly","kind":"fact","subject":"sheepdog","predicate":"rdfs:subClassOf","object":"dog"}
473
+ {"world":"spider-fly","kind":"fact","subject":"dog","predicate":"rdfs:subClassOf","object":"animal"}
474
+ {"world":"spider-fly","kind":"fact","subject":"spider","predicate":"rdfs:subClassOf","object":"arachnid"}
475
+ {"world":"spider-fly","kind":"fact","subject":"arachnid","predicate":"rdfs:subClassOf","object":"animal"}
476
+ {"world":"spider-fly","kind":"fact","subject":"fly","predicate":"rdfs:subClassOf","object":"insect"}
477
+ {"world":"spider-fly","kind":"fact","subject":"insect","predicate":"rdfs:subClassOf","object":"animal"}
478
+ {"world":"spider-fly","kind":"rule","name":"go","ruleKind":"action-signature","slots":{"subjectClass":"spider","targetClass":"cell"}}
479
+ {"world":"spider-fly","kind":"rule","name":"go","ruleKind":"action-effect","slots":{"predicate":"currently-in","subjectRole":"subject","objectRole":"target"}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polycode-projects/the-mechanical-code-talker",
3
- "version": "2.7.2",
3
+ "version": "2.7.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "The Mechanical Code Talker (tmct) — a tolerant, offline, $0 chat surface that guides you toward precision queries about a software repository. ELIZA/PARRY-style but domain-obsessed with code. No model calls; no codebase index of its own.",
@@ -30,6 +30,7 @@ import {
30
30
  loadLexicon, lookupNoun, lookupVerb, lookupAdjective, lookupProperName,
31
31
  predicateOf, numberOf, classify,
32
32
  } from "./lexicon.mjs";
33
+ import { fuzzyMatchInSet } from "../interpret/fuzzy.mjs";
33
34
 
34
35
  // "a"/"an" are the only ACE determiners that are grammatically SINGULAR-ONLY —
35
36
  // "the" and a bare/no determiner are number-neutral (see resolveNP's
@@ -472,10 +473,65 @@ export function parseAce(sentence, lexicon = loadLexicon()) {
472
473
  // other pattern: a structural fit over an undeclared word rides out as
473
474
  // `residue` so the caller can name it; a declared word in an unusable shape
474
475
  // is a hard null.
476
+ //
477
+ // The leading verb token(s) resolve through three tiers, each a ZERO
478
+ // behaviour change over the one before it for anything that already worked:
479
+ // an exact IMPERATIVE_VERBS match; failing that, VERB_SYNONYMS (a PHRASING a
480
+ // player already means literally — "pick up"/"grab" for "take"), greedy on a
481
+ // 2-token prefix before falling back to 1 token; failing that, a bounded
482
+ // fuzzy TYPO repair (distance <= 1, via the existing interpret/fuzzy.mjs
483
+ // matcher) against the same verb vocabulary. Only the fuzzy tier is a
484
+ // correction of an ERROR rather than a recognised alternate wording, so only
485
+ // it is reported back on the command (`corrected`) for the caller to name in
486
+ // its response — a synonym executes silently, a typo fix does not.
475
487
 
476
- const IMPERATIVE_VERBS = new Set(["go", "take", "drop", "open", "unlock", "close", "give", "look"]);
488
+ const IMPERATIVE_VERBS = new Set(["go", "take", "drop", "open", "unlock", "close", "give", "look", "talk", "examine"]);
477
489
  const IMPERATIVE_DIRECTIONS = new Set(["north", "south", "east", "west", "up", "down"]);
478
490
 
491
+ const VERB_SYNONYMS = new Map([
492
+ ["pick up", "take"], ["pick", "take"], ["grab", "take"],
493
+ ["put down", "drop"], ["set down", "drop"], ["leave", "drop"],
494
+ ["talk to", "talk"], ["speak to", "talk"], ["speak with", "talk"], ["talk", "talk"], ["speak", "talk"],
495
+ ["look at", "examine"], ["examine", "examine"], ["inspect", "examine"],
496
+ ["shut", "close"],
497
+ ]);
498
+
499
+ const VERB_FUZZY_CANDIDATES = [...new Set([...IMPERATIVE_VERBS, ...VERB_SYNONYMS.values()])];
500
+ const IMPERATIVE_FUZZY_BOUND = 1; // this project's existing distance-1 tolerance elsewhere (interpret/fuzzy.mjs)
501
+
502
+ // A small, hand-checked exemption (same idiom as this file's own
503
+ // NEVER_CANONICALIZE): common English words one edit from a closed verb, that
504
+ // mean something else entirely and would otherwise get silently reinterpreted
505
+ // and EXECUTED as that verb ("wake"/"make" -> "take" would actually take an
506
+ // object; "walk" -> "talk" is the same shape and breaks a real command).
507
+ // Checked against this repo's own WordNet corpus, not guessed.
508
+ const NEVER_FUZZY_VERB = new Set(["walk", "wake", "make"]);
509
+
510
+ /** Resolve the leading verb token(s) to a canonical, recognised verb: the
511
+ * 2-token VERB_SYNONYMS prefix FIRST (so "talk to"/"look at" resolve as
512
+ * themselves rather than as the bare exact verbs "talk"/"look" they'd
513
+ * otherwise short-circuit on, leaving their "to"/"at" stranded in the object
514
+ * phrase), then an exact IMPERATIVE_VERBS match, then the 1-token
515
+ * VERB_SYNONYMS form, then a bounded fuzzy typo repair against the same
516
+ * vocabulary. `consumed` is how many leading tokens the match ate (1, or 2
517
+ * for a two-word synonym phrase); `corrected` is non-null only for the
518
+ * fuzzy tier. Null when nothing at all recognises the leading token(s). */
519
+ function resolveImperativeVerb(toks) {
520
+ const first = toks[0].toLowerCase();
521
+ if (toks.length > 1) {
522
+ const twoWord = `${first} ${toks[1].toLowerCase()}`;
523
+ const twoHit = VERB_SYNONYMS.get(twoWord);
524
+ if (twoHit) return { verb: twoHit, consumed: 2, corrected: null };
525
+ }
526
+ if (IMPERATIVE_VERBS.has(first)) return { verb: first, consumed: 1, corrected: null };
527
+ const oneHit = VERB_SYNONYMS.get(first);
528
+ if (oneHit) return { verb: oneHit, consumed: 1, corrected: null };
529
+ if (NEVER_FUZZY_VERB.has(first)) return null;
530
+ const fuzzyHit = fuzzyMatchInSet(first, VERB_FUZZY_CANDIDATES, IMPERATIVE_FUZZY_BOUND);
531
+ if (fuzzyHit) return { verb: fuzzyHit, consumed: 1, corrected: { from: first, to: fuzzyHit } };
532
+ return null;
533
+ }
534
+
479
535
  /** Resolve one imperative object phrase to its bare lexicon term. */
480
536
  function imperativeNP(lexicon, tokens) {
481
537
  const np = resolveNP(lexicon, tokens);
@@ -484,28 +540,53 @@ function imperativeNP(lexicon, tokens) {
484
540
  }
485
541
 
486
542
  /**
487
- * Parse one imperative command against the closed verb set. Returns
488
- * `{ pattern: "imperative", verb, residue, object?, indirectObject?,
489
- * instrument?, direction? }`, a residue-carrying miss for a structural fit
490
- * over undeclared words (`residue` non-empty, no slots), or null when the
491
- * sentence is not an imperative of this fragment at all.
543
+ * Parse one imperative command against the closed verb set (plus its
544
+ * tolerated synonyms and typo repairs). Returns `{ pattern: "imperative",
545
+ * verb, residue, corrected?, object?, indirectObject?, instrument?,
546
+ * direction? }`, a residue-carrying miss for a structural fit over
547
+ * undeclared words (`residue` non-empty, no slots), or null when the
548
+ * sentence is not an imperative of this fragment at all. `corrected`, when
549
+ * present, is the list of `{ from, to }` typo repairs the fuzzy tier made —
550
+ * the caller's cue to say what it read the line as, so a genuine miss is
551
+ * never confused with a silent auto-correct.
492
552
  */
493
553
  export function parseImperative(sentence, lexicon = loadLexicon()) {
494
554
  const toks = tokenize(sentence);
495
555
  if (!toks.length) return null;
496
- const verb = toks[0].toLowerCase();
497
- if (!IMPERATIVE_VERBS.has(verb)) return null;
498
- const rest = toks.slice(1);
556
+ const resolved = resolveImperativeVerb(toks);
557
+ if (!resolved) return null;
558
+ const verb = resolved.verb;
559
+ const rest = toks.slice(resolved.consumed);
499
560
  const lower = rest.map((t) => t.toLowerCase());
500
- const command = (fields) => ({ pattern: "imperative", verb, residue: [], ...fields });
501
- const miss = (unknown) => (unknown.length ? { pattern: "imperative", verb, residue: unknown } : null);
561
+ const corrected = resolved.corrected ? [resolved.corrected] : [];
562
+ const command = (fields) => ({
563
+ pattern: "imperative", verb, residue: [],
564
+ ...(corrected.length ? { corrected } : {}),
565
+ ...fields,
566
+ });
567
+ const miss = (unknown) => (unknown.length
568
+ ? { pattern: "imperative", verb, residue: unknown, ...(corrected.length ? { corrected } : {}) }
569
+ : null);
502
570
 
503
571
  if (verb === "look") {
504
572
  if (!rest.length || (rest.length === 1 && lower[0] === "around")) return command({});
505
573
  return null;
506
574
  }
575
+ if (verb === "examine" || verb === "talk") {
576
+ if (!rest.length) return null;
577
+ const object = imperativeNP(lexicon, rest);
578
+ if (object.term == null) return miss(object.unknown);
579
+ return command({ object: object.term });
580
+ }
507
581
  if (verb === "go") {
508
- if (rest.length === 1 && IMPERATIVE_DIRECTIONS.has(lower[0])) return command({ direction: lower[0] });
582
+ if (rest.length === 1) {
583
+ if (IMPERATIVE_DIRECTIONS.has(lower[0])) return command({ direction: lower[0] });
584
+ const fuzzyDir = fuzzyMatchInSet(lower[0], [...IMPERATIVE_DIRECTIONS], IMPERATIVE_FUZZY_BOUND);
585
+ if (fuzzyDir) {
586
+ corrected.push({ from: lower[0], to: fuzzyDir });
587
+ return command({ direction: fuzzyDir });
588
+ }
589
+ }
509
590
  return null;
510
591
  }
511
592
  if (verb === "give") {
@@ -0,0 +1,140 @@
1
+ // spider-fly-world.mjs — the one pure definition of the spider/fly 10x10
2
+ // grid: cell naming, Chebyshev geometry, the fixed web block, the seed
3
+ // taxonomy, and the static fact/rule/meta rows the shipped world carries.
4
+ // Pure, no imports (PLAN_SPIDER_FLY.md §3/§4/§7) — both
5
+ // scripts/gen-spider-fly-world.mjs (writes corpus/worlds/src/spider-fly.jsonl)
6
+ // and src/services/spider-fly.mjs (the runtime) read the SAME grid/web
7
+ // constants from here, so the shipped world and the engine that plays it can
8
+ // never drift apart.
9
+
10
+ export const WORLD_NAME = "spider-fly";
11
+ export const GRID_SIZE = 10;
12
+
13
+ // The spider's home cell, and the web's Chebyshev radius around it (radius 1
14
+ // = a 3x3 block, PLAN_SPIDER_FLY.md §3). Corner-ish on purpose (§4): a spider
15
+ // that starts here sees close to half the board just from edge-clipping.
16
+ export const WEB_HOME = Object.freeze({ x: 2, y: 2 });
17
+ export const WEB_RADIUS = 1;
18
+
19
+ export const cellId = (x, y) => `cell-${x}-${y}`;
20
+
21
+ const CELL_ID_RE = /^cell-(\d+)-(\d+)$/;
22
+
23
+ /** {x,y} from a "cell-<x>-<y>" id, or null when the string isn't one. */
24
+ export function parseCellId(id) {
25
+ const m = CELL_ID_RE.exec(String(id ?? ""));
26
+ return m ? { x: Number(m[1]), y: Number(m[2]) } : null;
27
+ }
28
+
29
+ export const chebyshevDistance = (ax, ay, bx, by) => Math.max(Math.abs(ax - bx), Math.abs(ay - by));
30
+
31
+ export const inBounds = (x, y) => x >= 1 && x <= GRID_SIZE && y >= 1 && y <= GRID_SIZE;
32
+
33
+ /** Every cell within Chebyshev `radius` of (cx, cy), clipped to the board, in
34
+ * raster order — the one visibility primitive PLAN_SPIDER_FLY.md §4 names
35
+ * ("visibleCells(cx, cy, radius=4)"), shared by both agents' belief and this
36
+ * module's own web-block derivation below. */
37
+ export function visibleCells(cx, cy, radius) {
38
+ const out = [];
39
+ for (let y = Math.max(1, cy - radius); y <= Math.min(GRID_SIZE, cy + radius); y += 1) {
40
+ for (let x = Math.max(1, cx - radius); x <= Math.min(GRID_SIZE, cx + radius); x += 1) {
41
+ out.push(cellId(x, y));
42
+ }
43
+ }
44
+ return out;
45
+ }
46
+
47
+ export const isInWebBlock = (x, y) => chebyshevDistance(x, y, WEB_HOME.x, WEB_HOME.y) <= WEB_RADIUS;
48
+
49
+ /** Every board-edge (perimeter) cell, raster order — where a spawned fly
50
+ * arrives (PLAN_SPIDER_FLY.md §10). */
51
+ export function perimeterCells() {
52
+ const out = [];
53
+ for (let y = 1; y <= GRID_SIZE; y += 1) {
54
+ for (let x = 1; x <= GRID_SIZE; x += 1) {
55
+ if (x === 1 || x === GRID_SIZE || y === 1 || y === GRID_SIZE) out.push(cellId(x, y));
56
+ }
57
+ }
58
+ return out;
59
+ }
60
+
61
+ // direction -> (dx, dy). Plain labels reused verbatim from Ashcombe's
62
+ // mgx:has-exit-<direction> predicate (src/services/adventure.mjs) — north
63
+ // decreases y, south increases y, east increases x, west decreases x. Key
64
+ // order is the canonical direction order every consumer iterates in, for
65
+ // deterministic search tie-breaking.
66
+ export const DIRECTION_DELTA = Object.freeze({
67
+ north: Object.freeze({ dx: 0, dy: -1 }),
68
+ south: Object.freeze({ dx: 0, dy: 1 }),
69
+ east: Object.freeze({ dx: 1, dy: 0 }),
70
+ west: Object.freeze({ dx: -1, dy: 0 }),
71
+ });
72
+
73
+ /** The world's seed taxonomy (PLAN_SPIDER_FLY.md §7): enough for the
74
+ * ontology-to-sprite worked example (a poodle sprite, a sheepdog falling
75
+ * back to the generic dog sprite) to run on the default persona, no
76
+ * --persona-size large flag required. [subject, superclass] pairs, written
77
+ * as rdfs:subClassOf facts. */
78
+ export const SEED_TAXONOMY = Object.freeze([
79
+ Object.freeze(["poodle", "dog"]),
80
+ Object.freeze(["sheepdog", "dog"]),
81
+ Object.freeze(["dog", "animal"]),
82
+ Object.freeze(["spider", "arachnid"]),
83
+ Object.freeze(["arachnid", "animal"]),
84
+ Object.freeze(["fly", "insect"]),
85
+ Object.freeze(["insect", "animal"]),
86
+ ]);
87
+
88
+ export const WORLD_OPENING =
89
+ "a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move — watch, or address one by name in chat.";
90
+
91
+ /** Every fact row the shipped world source carries: cell typing, grid
92
+ * adjacency (mgx:has-exit-<direction>), the web block (mgx:in-web) and the
93
+ * seed taxonomy — plain { world, kind:"fact", subject, predicate, object }
94
+ * objects, the exact shape src/domain/worlds-pack.mjs's isWorldFactRow
95
+ * reads. Deliberately NOT spider-1/fly-1: the board is reusable static
96
+ * content, minted game entities are a fresh session's own state
97
+ * (src/services/spider-fly.mjs's startSpiderFlyGame). */
98
+ export function* worldFactRows() {
99
+ for (let y = 1; y <= GRID_SIZE; y += 1) {
100
+ for (let x = 1; x <= GRID_SIZE; x += 1) {
101
+ const id = cellId(x, y);
102
+ yield { world: WORLD_NAME, kind: "fact", subject: id, predicate: "rdf:type", object: "cell" };
103
+ for (const [direction, { dx, dy }] of Object.entries(DIRECTION_DELTA)) {
104
+ const nx = x + dx;
105
+ const ny = y + dy;
106
+ if (inBounds(nx, ny)) {
107
+ yield { world: WORLD_NAME, kind: "fact", subject: id, predicate: `mgx:has-exit-${direction}`, object: cellId(nx, ny) };
108
+ }
109
+ }
110
+ if (isInWebBlock(x, y)) {
111
+ yield { world: WORLD_NAME, kind: "fact", subject: id, predicate: "mgx:in-web", object: "true" };
112
+ }
113
+ }
114
+ }
115
+ for (const [subject, superclass] of SEED_TAXONOMY) {
116
+ yield { world: WORLD_NAME, kind: "fact", subject, predicate: "rdfs:subClassOf", object: superclass };
117
+ }
118
+ }
119
+
120
+ /** The world's one meta row (its opening line). */
121
+ export function worldMetaRow() {
122
+ return { world: WORLD_NAME, kind: "meta", opening: WORLD_OPENING };
123
+ }
124
+
125
+ /** A minimal, inert rule-row family, so scripts/build-worlds-pack.mjs's
126
+ * shared validator ("every world needs at least one rule row") passes.
127
+ * src/services/spider-fly.mjs never reads these back: grid movement is
128
+ * hand-written pathfinding over findActionPath/findReachableSet
129
+ * (PLAN_SPIDER_FLY.md §5), not the taught action-Rule DSL, so this rides in
130
+ * the shard unused, same as an unrelated fact would. */
131
+ export function* worldRuleRows() {
132
+ yield {
133
+ world: WORLD_NAME, kind: "rule", name: "go", ruleKind: "action-signature",
134
+ slots: { subjectClass: "spider", targetClass: "cell" },
135
+ };
136
+ yield {
137
+ world: WORLD_NAME, kind: "rule", name: "go", ruleKind: "action-effect",
138
+ slots: { predicate: "currently-in", subjectRole: "subject", objectRole: "target" },
139
+ };
140
+ }
@@ -183,7 +183,7 @@ export function foldWorldState(factRows) {
183
183
  // path; nothing is ever mutated in place.
184
184
 
185
185
  const INVENTORY_RE =
186
- /^(?:inventory|inv|what\s+am\s+i\s+carrying|what\s+do\s+i\s+have|what(?:'s|\s+is)\s+in\s+my\s+(?:bag|pockets?|hands?))[?.!\s]*$/i;
186
+ /^(?:inventory|inv|what\s+am\s+i\s+carrying|what\s+do\s+i\s+have|what\s+do\s+i\s+carry|what(?:'s|\s+is)\s+in\s+my\s+(?:bag|pockets?|hands?))[?.!\s]*$/i;
187
187
 
188
188
  const factObjects = (rows, subject, predicate) =>
189
189
  (rows || []).filter((r) => r.subject === subject && r.predicate === predicate).map((r) => r.object);
@@ -211,6 +211,48 @@ const carriedByPlayer = (state, thing) => {
211
211
  return !!place && place.predicate === "mgx:located-in" && place.object === "player";
212
212
  };
213
213
 
214
+ /** The room's real affordances — every exit, and every visible object's
215
+ * applicable verb — read from the EXACT SAME data take/open/talk/examine
216
+ * already check (visibleRoomOf, isContainer, isTyped, the placement
217
+ * predicate), so this list can never promise an action one of those verbs
218
+ * would then refuse. A locked container offers "unlock", never "open" (that
219
+ * would only decline); an already-open one offers neither, since there is
220
+ * nothing left for either verb to do. Pure. */
221
+ export function roomAffordances(rows, state, here) {
222
+ const actions = [];
223
+ for (const direction of state.exits.get(here)?.keys() ?? []) {
224
+ actions.push(`go ${direction}`);
225
+ }
226
+ for (const subject of [...state.placements.keys()].sort()) {
227
+ if (subject === "player") continue;
228
+ if (visibleRoomOf(subject, { rows, state }) !== here) continue;
229
+ const place = state.placements.get(subject);
230
+ const container = isContainer(rows, subject);
231
+ if (container && place.predicate === "mgx:stands-locked-in") {
232
+ actions.push(`unlock ${subject}`);
233
+ continue;
234
+ }
235
+ if (container && place.predicate === "mgx:fixed-in") {
236
+ if (!state.openness.get(subject)?.open) actions.push(`open ${subject}`);
237
+ continue;
238
+ }
239
+ if (!container && place.predicate === "mgx:fixed-in") {
240
+ actions.push(`examine ${subject}`);
241
+ continue;
242
+ }
243
+ if (isTyped(rows, subject, "person")) {
244
+ actions.push(`talk to ${subject}`);
245
+ continue;
246
+ }
247
+ if (place.predicate === "mgx:located-in") {
248
+ actions.push(`take ${subject}`);
249
+ }
250
+ }
251
+ return actions;
252
+ }
253
+
254
+ const affordanceSuffix = (actions) => (actions.length ? ` You can: ${actions.join(", ")}.` : "");
255
+
214
256
  /** The effect predicate a family writes (its action-effect row's slot, with
215
257
  * the mgx: prefix rule readers re-attach). Null when the family carries no
216
258
  * effect row — the open/unlock/close families, whose datatype state writes
@@ -291,6 +333,20 @@ const VIEW_EXCLUDED_PREDICATES = new Set([
291
333
  const sentenceCase = (term) => String(term).charAt(0).toUpperCase() + String(term).slice(1);
292
334
  const typePhrase = (object) => (/^[aeiou]/.test(object) ? "is an" : "is a");
293
335
 
336
+ // The default human persona's always-active background corpus
337
+ // (corpus/tier2/human.jsonl) deliberately overlaps Ashcombe's own room and
338
+ // object names ("garden has a flower"), so the digest's broad search surfaces
339
+ // these alongside the world's own facts. They stay in the prose (they're
340
+ // real, sourced facts) but must read as prose, not as an untranslated triple
341
+ // ("Garden mgx:hasA flower") that looks exactly like a bug report — the same
342
+ // curated wording chat.mjs's own FACT_PREDICATE_PHRASES already uses for
343
+ // these three ConceptNet-sourced predicates.
344
+ const BACKGROUND_FACT_PHRASES = {
345
+ "mgx:hasA": "has",
346
+ "mgx:usedFor": "is used for",
347
+ "mgx:atLocation": "is found in",
348
+ };
349
+
294
350
  /** The digest's fact view: current placements (folded), exits, typing and
295
351
  * every other surviving fact, with phrase predicates and sentence-cased
296
352
  * subjects so the pipeline's sentence splitter sees real sentences. Pure. */
@@ -329,6 +385,7 @@ export function worldDigestRows(rows, state) {
329
385
  if (exit) { push(row.subject, `has an exit ${exit[1]} to the`, row.object); continue; }
330
386
  if (row.predicate === "rdf:type") { push(row.subject, typePhrase(row.object), row.object); continue; }
331
387
  if (row.predicate === "mgx:works-in") { push(row.subject, "works in the", row.object); continue; }
388
+ if (BACKGROUND_FACT_PHRASES[row.predicate]) { push(row.subject, BACKGROUND_FACT_PHRASES[row.predicate], row.object); continue; }
332
389
  push(row.subject, row.predicate, row.object);
333
390
  }
334
391
  return out;
@@ -365,6 +422,24 @@ const answer = (text, note, { goal, miss = false } = {}) => ({
365
422
  text, note, lane: "game-answer", miss, ...(goal ? { goal } : {}),
366
423
  });
367
424
 
425
+ /** A container's open/locked status, stated plainly, and (only once already
426
+ * open) its visible contents — the one thing examine/talk's reused
427
+ * worldDigest call never states on its own, since mgx:is-open is a
428
+ * VIEW_EXCLUDED_PREDICATE. Never reads mgx:hidden-in facts: an unopened
429
+ * container's hidden contents stay exactly as hidden as `open` leaves them. */
430
+ function containerStatusPhrase(object, { state }) {
431
+ const place = state.placements.get(object);
432
+ if (place?.predicate === "mgx:stands-locked-in") return `the ${object} is locked.`;
433
+ if (!state.openness.get(object)?.open) return `the ${object} is closed.`;
434
+ const contents = [...state.placements]
435
+ .filter(([, p]) => p.predicate === "mgx:located-in" && p.object === object)
436
+ .map(([thing]) => thing)
437
+ .sort();
438
+ return contents.length
439
+ ? `the ${object} is open — inside: the ${contents.join(", the ")}.`
440
+ : `the ${object} is open. It's empty.`;
441
+ }
442
+
368
443
  async function runWorldCommand(cmd, { world, memoryDir, env, graph, cache }) {
369
444
  const memory = await loadMemory(memoryDir);
370
445
  const rows = readFactRows(memory);
@@ -389,13 +464,35 @@ async function runWorldCommand(cmd, { world, memoryDir, env, graph, cache }) {
389
464
 
390
465
  if (cmd.verb === "look") {
391
466
  const digest = await worldDigest(here, { memoryDir, memory, rows, state, graph });
467
+ const actions = roomAffordances(rows, state, here);
392
468
  return answer(
393
- digest ?? `you are in the ${here}. Nothing more about it is written down yet.`,
394
- noteFor(`look — an extractive completions digest over the current world facts mentioning "${here}"`),
469
+ `${digest ?? `you are in the ${here}. Nothing more about it is written down yet.`}${affordanceSuffix(actions)}`,
470
+ noteFor(`look — an extractive completions digest over the current world facts mentioning "${here}"; appended the room's roomAffordances action list`),
395
471
  { goal: `look around the ${here}` },
396
472
  );
397
473
  }
398
474
 
475
+ if (cmd.verb === "examine" || cmd.verb === "talk") {
476
+ const object = cmd.object;
477
+ if (visibleRoomOf(object, { rows, state }) !== here) {
478
+ return answer(
479
+ `I don't see a ${object} here.`,
480
+ noteFor(`${cmd.verb} — ${object} isn't visible in the ${here}; declined, hidden things stay hidden`),
481
+ { miss: true },
482
+ );
483
+ }
484
+ const person = isTyped(rows, object, "person");
485
+ const digest = await worldDigest(object, { memoryDir, memory, rows, state, graph });
486
+ const body = digest ?? `nothing more about the ${object} is written down yet.`;
487
+ const containerNote = !person && isContainer(rows, object) ? ` ${containerStatusPhrase(object, { state })}` : "";
488
+ const text = person ? `the ${object} doesn't have much to say, but you know: ${body}` : `${body}${containerNote}`;
489
+ return answer(
490
+ text,
491
+ noteFor(`${cmd.verb} — an extractive completions digest over the current world facts mentioning "${object}"`),
492
+ { goal: cmd.verb === "talk" ? `talk to the ${object}` : `take a closer look at the ${object}` },
493
+ );
494
+ }
495
+
399
496
  const families = actionFamilies(readRuleRows(memory));
400
497
  const family = families.get(cmd.verb);
401
498
  if (!family) {
@@ -415,7 +512,20 @@ async function runWorldCommand(cmd, { world, memoryDir, env, graph, cache }) {
415
512
  const npcPass = runNpcPass({ rows, state, k, families, playerRoomAfter });
416
513
  await writeWorldTurn(memoryDir, world, k, [...facts, ...npcPass.writes], cache);
417
514
  const text2 = npcPass.lines.length ? `${text} ${npcPass.lines.join(" ")}` : text;
418
- return answer(text2, noteFor(`${detail}; turn ${k} snapshots written through appendFacts${npcPass.writes.length ? `; NPC pass fired ${npcPass.writes.length} scheduled move(s)` : ""}`), { goal });
515
+ // Auto-relook: every state-changing command ends in the same shape a
516
+ // manual "look" produces, read from the FRESH post-write state, so the
517
+ // player is never left to retype "look" to see what just changed.
518
+ const freshMemory = await loadMemory(memoryDir);
519
+ const freshRows = readFactRows(freshMemory);
520
+ const freshState = foldWorldState(freshRows);
521
+ const relookDigest = await worldDigest(playerRoomAfter, { memoryDir, memory: freshMemory, rows: freshRows, state: freshState, graph });
522
+ const actions = roomAffordances(freshRows, freshState, playerRoomAfter);
523
+ const relook = `you are in the ${playerRoomAfter}. ${relookDigest ?? "Nothing more about it is written down yet."}${affordanceSuffix(actions)}`;
524
+ return answer(
525
+ `${text2} ${relook}`,
526
+ noteFor(`${detail}; turn ${k} snapshots written through appendFacts${npcPass.writes.length ? `; NPC pass fired ${npcPass.writes.length} scheduled move(s)` : ""}; auto-relook appended for the ${playerRoomAfter}`),
527
+ { goal },
528
+ );
419
529
  };
420
530
  const object = cmd.object;
421
531
  const place = object ? state.placements.get(object) ?? null : null;
@@ -649,6 +759,21 @@ async function inventoryAnswer({ memoryDir, graph }) {
649
759
  );
650
760
  }
651
761
 
762
+ /** Reconstruct the corrected command's surface form ("go east", "take
763
+ * lamp") for the "(reading that as ...)" note — from the parsed command's
764
+ * own resolved fields, not the raw input, so it always names what actually
765
+ * ran. */
766
+ function renderedImperativeCommand(cmd) {
767
+ const parts = [cmd.verb];
768
+ if (cmd.direction) parts.push(cmd.direction);
769
+ else if (cmd.object) {
770
+ parts.push(cmd.object);
771
+ if (cmd.indirectObject) parts.push("to", cmd.indirectObject);
772
+ if (cmd.instrument) parts.push("with", cmd.instrument);
773
+ }
774
+ return parts.join(" ");
775
+ }
776
+
652
777
  // ---- the lane ----------------------------------------------------------------
653
778
 
654
779
  /**
@@ -711,7 +836,19 @@ export async function adventureTurn(line, { planHolder, memoryDir, sessionId = "
711
836
  }
712
837
  if (INVENTORY_RE.test(line)) return inventoryAnswer({ memoryDir, graph });
713
838
  const cmd = parseImperative(line, lexicon ?? undefined);
714
- if (cmd) return runWorldCommand(cmd, { world: adventure.world, memoryDir, env, graph, cache });
839
+ if (cmd) {
840
+ const result = await runWorldCommand(cmd, { world: adventure.world, memoryDir, env, graph, cache });
841
+ if (!cmd.corrected?.length) return result;
842
+ // A fuzzy-repaired verb or direction still executes normally, but the
843
+ // response says what it read the line as, so a genuine miss is never
844
+ // confused with a silent auto-correct (the same discipline VERB_SYNONYMS
845
+ // doesn't need, since a recognised synonym is a wording, not a typo).
846
+ return {
847
+ ...result,
848
+ text: `(reading that as "${renderedImperativeCommand(cmd)}") ${result.text}`,
849
+ note: `${result.note}; corrected ${cmd.corrected.map((c) => `"${c.from}" -> "${c.to}"`).join(", ")} before executing`,
850
+ };
851
+ }
715
852
  const whereAside = await worldWhereAnswer(line, { memoryDir });
716
853
  if (whereAside) return whereAside;
717
854
  return null; // a mid-game aside — the ordinary lanes answer, world untouched
@@ -21619,10 +21619,11 @@ ${codeblock}`, options);
21619
21619
  });
21620
21620
 
21621
21621
  // src/domain/grammar/ace.mjs
21622
- var PATTERN_SUB_CLASS_OF, PATTERN_TYPE_ASSERTION, PATTERN_RELATION, PATTERN_SOME_VALUES_FROM, PATTERN_CARDINALITY, PATTERN_DISJOINT_WITH, PATTERN_POSSESSIVE, PATTERN_ADJECTIVE, PATTERN_CAPABILITY, PATTERNS;
21622
+ var PATTERN_SUB_CLASS_OF, PATTERN_TYPE_ASSERTION, PATTERN_RELATION, PATTERN_SOME_VALUES_FROM, PATTERN_CARDINALITY, PATTERN_DISJOINT_WITH, PATTERN_POSSESSIVE, PATTERN_ADJECTIVE, PATTERN_CAPABILITY, PATTERNS, IMPERATIVE_VERBS, VERB_SYNONYMS, VERB_FUZZY_CANDIDATES;
21623
21623
  var init_ace2 = __esm({
21624
21624
  "src/domain/grammar/ace.mjs"() {
21625
21625
  init_lexicon();
21626
+ init_fuzzy();
21626
21627
  PATTERN_SUB_CLASS_OF = "subClassOf";
21627
21628
  PATTERN_TYPE_ASSERTION = "typeAssertion";
21628
21629
  PATTERN_RELATION = "relation";
@@ -21643,6 +21644,25 @@ ${codeblock}`, options);
21643
21644
  PATTERN_ADJECTIVE,
21644
21645
  PATTERN_CAPABILITY
21645
21646
  ]);
21647
+ IMPERATIVE_VERBS = /* @__PURE__ */ new Set(["go", "take", "drop", "open", "unlock", "close", "give", "look", "talk", "examine"]);
21648
+ VERB_SYNONYMS = /* @__PURE__ */ new Map([
21649
+ ["pick up", "take"],
21650
+ ["pick", "take"],
21651
+ ["grab", "take"],
21652
+ ["put down", "drop"],
21653
+ ["set down", "drop"],
21654
+ ["leave", "drop"],
21655
+ ["talk to", "talk"],
21656
+ ["speak to", "talk"],
21657
+ ["speak with", "talk"],
21658
+ ["talk", "talk"],
21659
+ ["speak", "talk"],
21660
+ ["look at", "examine"],
21661
+ ["examine", "examine"],
21662
+ ["inspect", "examine"],
21663
+ ["shut", "close"]
21664
+ ]);
21665
+ VERB_FUZZY_CANDIDATES = [.../* @__PURE__ */ new Set([...IMPERATIVE_VERBS, ...VERB_SYNONYMS.values()])];
21646
21666
  }
21647
21667
  });
21648
21668