Executor-Tyrant-Framework commited on
Commit
5fa3f26
Β·
verified Β·
1 Parent(s): ffd85b6

Sync from GitHub: 2d1f218e331d6687f61ad13796b3478380b66891

Browse files
Files changed (3) hide show
  1. app.py +5 -5
  2. nuwave/benchmark_loader.py +154 -81
  3. nuwave/benchmark_pool.yaml +913 -0
app.py CHANGED
@@ -117,7 +117,7 @@ logger.info("Both clients ready. chat=%s | extractor=%s",
117
  from nuwave.organism import NuWaveOrganism
118
  from nuwave.kiss import KISSFilter, KISSConfig
119
  from nuwave.pith import PithPipeline, PithConfig
120
- from nuwave.benchmark_loader import sample_pairs as _sample_benchmark_pairs
121
  from nuwave.benchmark_loader import describe_sample as _describe_benchmark_sample
122
  from nuwave.benchmark_loader import load_pool as _load_benchmark_pool
123
  from nuwave.splat_engine import decompose_layer, SplatConfig, GaussianSplats
@@ -1230,16 +1230,16 @@ def on_interleaved_benchmark(
1230
  # substrate nodes from non-sampled categories to be force-mapped to
1231
  # whatever centroid was closest, garbling the diagnostic metrics.
1232
  _full_benchmark_pool = _load_benchmark_pool()
1233
- _pool_interleaved, _pool_same_cat_pairs, _pool_meta = _sample_benchmark_pairs(
1234
  pool=_full_benchmark_pool,
1235
- n_pairs=8,
1236
  )
1237
  INTERLEAVED_QUESTIONS = _pool_interleaved
1238
  _INTERLEAVED_SAME_CAT_PAIRS = _pool_same_cat_pairs
1239
  _pool_summary = _describe_benchmark_sample(_pool_meta)
1240
  logger.info(
1241
- "Phase A pool sampled: %d pairs / %d turns | cats=%s | threads=%s",
1242
- _pool_summary["n_pairs"],
1243
  _pool_summary["n_turns"],
1244
  _pool_summary["categories_sampled"],
1245
  _pool_summary["threads_sampled"],
 
117
  from nuwave.organism import NuWaveOrganism
118
  from nuwave.kiss import KISSFilter, KISSConfig
119
  from nuwave.pith import PithPipeline, PithConfig
120
+ from nuwave.benchmark_loader import sample_chains as _sample_benchmark_chains
121
  from nuwave.benchmark_loader import describe_sample as _describe_benchmark_sample
122
  from nuwave.benchmark_loader import load_pool as _load_benchmark_pool
123
  from nuwave.splat_engine import decompose_layer, SplatConfig, GaussianSplats
 
1230
  # substrate nodes from non-sampled categories to be force-mapped to
1231
  # whatever centroid was closest, garbling the diagnostic metrics.
1232
  _full_benchmark_pool = _load_benchmark_pool()
1233
+ _pool_interleaved, _pool_same_cat_pairs, _pool_meta = _sample_benchmark_chains(
1234
  pool=_full_benchmark_pool,
1235
+ n_chains=8,
1236
  )
1237
  INTERLEAVED_QUESTIONS = _pool_interleaved
1238
  _INTERLEAVED_SAME_CAT_PAIRS = _pool_same_cat_pairs
1239
  _pool_summary = _describe_benchmark_sample(_pool_meta)
1240
  logger.info(
1241
+ "Phase B pool sampled: %d chains / %d turns | cats=%s | threads=%s",
1242
+ _pool_summary["n_chains"],
1243
  _pool_summary["n_turns"],
1244
  _pool_summary["categories_sampled"],
1245
  _pool_summary["threads_sampled"],
nuwave/benchmark_loader.py CHANGED
@@ -1,31 +1,40 @@
1
  """
2
- benchmark_loader.py β€” Load and sample from the Phase A benchmark prompt pool.
3
 
4
- The pool (benchmark_pool.yaml) contains 40 Q1/Q2 pairs across 10 categories
5
- with 8 conceptual threads woven through. This loader:
 
 
 
 
6
 
7
  1. Loads the pool YAML
8
- 2. Pairs Q2s with their parent Q1s by `parent` field
9
- 3. Samples N pairs per run with stratification discipline:
10
- - At most 2 pairs per category (prevents category dominance)
 
 
 
11
  - At least 3 threads with 2+ representatives (cross-category co-firing)
12
- - Multi-complexity coverage (rejected if all same complexity)
13
- 4. Returns interleaved Q1/Q2 turn sequence in the same shape the benchmark's
14
- existing code expects:
15
- turns 0..N-1: Q1s (one per sampled pair)
16
- turns N..2N-1: Q2s (matching, in same order)
17
- same-cat pairs: [(i, i+N) for i in range(N)]
 
 
 
 
18
 
19
  # ---- Changelog ----
20
- # [2026-05-10] Claude Opus 4.7 β€” Phase A loader
21
- # What: Wraps benchmark_pool.yaml with rejection-sampling stratification
22
- # Why: Replaces hardcoded 4-category 8-prompt INTERLEAVED_QUESTIONS with
23
- # diversified 10-category 80-prompt pool. Per-run variance in which
24
- # pairs get sampled is itself substrate diversification β€” the substrate
25
- # sees different content / different concept threads dominating each
26
- # run, which the canonical co-firing-discovery and predictive-coding
27
- # mechanisms need to fire (Run 42 sidecar inspection diagnosis).
28
- # How: Pure-stdlib + pyyaml. No coupling to app.py or substrate code.
29
  # -------------------
30
  """
31
 
@@ -49,36 +58,45 @@ def load_pool(path: Optional[str] = None) -> Dict[str, Any]:
49
  """Load the benchmark pool YAML.
50
 
51
  Returns a dict with keys:
52
- threads: list of thread names (e.g. "energy", "memory", ...)
53
- complexity_levels: list of complexity tags (casual..pop_culture)
54
- q1_layer: list of 40 Q1 dicts (id, category, thread, complexity, text)
55
- q2_layer: list of 40 Q2 dicts (id, parent, category, thread, complexity, text)
 
 
 
 
 
56
  """
57
  p = path or _DEFAULT_POOL_PATH
58
  with open(p) as f:
59
  return yaml.safe_load(f)
60
 
61
 
62
- def _build_pairs(
63
  pool: Dict[str, Any],
64
- ) -> List[Tuple[Dict[str, Any], Dict[str, Any]]]:
65
- """Build (q1, q2) tuples from the pool.
66
 
67
- Each Q2's `parent` field references its Q1's `id`. Pairs without a
68
- matching Q2 are skipped (Phase A discipline guarantees full pairing,
69
- but this stays defensive).
70
  """
71
  q2_by_parent = {q["parent"]: q for q in pool.get("q2_layer", [])}
72
- pairs: List[Tuple[Dict[str, Any], Dict[str, Any]]] = []
 
 
 
73
  for q1 in pool.get("q1_layer", []):
74
  q2 = q2_by_parent.get(q1["id"])
75
- if q2 is not None:
76
- pairs.append((q1, q2))
77
- return pairs
 
78
 
79
 
80
  def _validate_sample(
81
- sample: List[Tuple[Dict[str, Any], Dict[str, Any]]],
82
  max_per_category: int = 2,
83
  min_threads_with_dups: int = 3,
84
  min_distinct_complexity_levels: int = 3,
@@ -86,40 +104,43 @@ def _validate_sample(
86
  """Stratification discipline check.
87
 
88
  Returns True if the sample respects:
89
- - max `max_per_category` pairs per category (default 2)
90
- - at least `min_threads_with_dups` threads with 2+ instances (default 3)
91
- - at least `min_distinct_complexity_levels` distinct complexity tags
92
- across the sample's q1+q2 levels (default 3)
93
-
94
- Counted across Q1+Q2 pairs (each pair contributes its q1 thread, which
95
- Q2 inherits β€” but Q2 has its own complexity, so complexity check pulls
96
- from both layers).
97
  """
98
  if not sample:
99
  return False
100
 
101
- cats = Counter(q1["category"] for q1, _q2 in sample)
102
  if any(count > max_per_category for count in cats.values()):
103
  return False
104
 
105
- threads = Counter(q1["thread"] for q1, _q2 in sample)
106
- threads_with_dups = sum(1 for count in threads.values() if count >= 2)
 
 
107
  if threads_with_dups < min_threads_with_dups:
108
  return False
109
 
110
  complexities: set = set()
111
- for q1, q2 in sample:
112
  complexities.add(q1["complexity"])
113
  complexities.add(q2["complexity"])
 
114
  if len(complexities) < min_distinct_complexity_levels:
115
  return False
116
 
117
  return True
118
 
119
 
120
- def sample_pairs(
121
  pool: Optional[Dict[str, Any]] = None,
122
- n_pairs: int = 8,
123
  seed: Optional[int] = None,
124
  max_attempts: int = 200,
125
  ) -> Tuple[
@@ -127,70 +148,117 @@ def sample_pairs(
127
  List[Tuple[int, int]],
128
  List[Dict[str, Any]],
129
  ]:
130
- """Sample `n_pairs` pairs with stratification discipline.
131
 
132
  Args:
133
  pool: Pre-loaded pool dict. If None, loads from default path.
134
- n_pairs: Number of Q1/Q2 pairs to sample. Each pair contributes
135
- 2 turns (one Q1, one Q2), so total turns = 2 * n_pairs.
 
136
  seed: RNG seed for reproducibility. None = nondeterministic.
137
- max_attempts: Rejection-sampling retry budget. After this many
138
- attempts without a valid sample, falls back to last
139
- candidate (rare on a 40-pair pool).
140
 
141
  Returns:
142
  interleaved_questions: list of (category, prompt_text) tuples,
143
- 2*n_pairs entries. First n_pairs are Q1s,
144
- last n_pairs are matching Q2s.
 
 
145
  same_cat_pairs: list of (q1_turn_idx, q2_turn_idx) tuples,
146
- n_pairs entries. Always [(i, i+n_pairs)].
147
- sample_meta: list of n_pairs dicts with q1_id, q2_id,
148
- category, thread, q1_complexity,
149
- q2_complexity (for logging/JSON output).
 
 
 
 
 
 
 
 
 
 
 
150
  """
151
  if pool is None:
152
  pool = load_pool()
153
 
154
- pairs = _build_pairs(pool)
155
- if len(pairs) < n_pairs:
156
  raise ValueError(
157
- f"Pool has {len(pairs)} pairs, cannot sample {n_pairs}"
158
  )
159
 
 
160
  rng = random.Random(seed)
161
 
162
- selected: Optional[List[Tuple[Dict[str, Any], Dict[str, Any]]]] = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  for _attempt in range(max_attempts):
164
- candidate = rng.sample(pairs, n_pairs)
 
 
 
 
165
  if _validate_sample(candidate):
166
  selected = candidate
167
  break
168
 
169
  if selected is None:
170
- # Fallback β€” pool size + n_pairs combo can't satisfy constraints.
171
- # Take the most recent candidate; partial constraint satisfaction is
172
- # better than aborting the run.
173
- selected = rng.sample(pairs, n_pairs)
 
 
 
174
 
175
  interleaved: List[Tuple[str, str]] = []
176
- for q1, _q2 in selected:
177
  interleaved.append((q1["category"], q1["text"]))
178
- for _q1, q2 in selected:
179
  interleaved.append((q2["category"], q2["text"]))
 
 
180
 
181
  same_cat_pairs: List[Tuple[int, int]] = [
182
- (i, i + n_pairs) for i in range(n_pairs)
183
  ]
184
 
185
  sample_meta: List[Dict[str, Any]] = []
186
- for q1, q2 in selected:
187
  sample_meta.append({
188
  "q1_id": q1["id"],
189
  "q2_id": q2["id"],
 
190
  "category": q1["category"],
191
  "thread": q1["thread"],
192
  "q1_complexity": q1["complexity"],
193
  "q2_complexity": q2["complexity"],
 
194
  })
195
 
196
  return interleaved, same_cat_pairs, sample_meta
@@ -202,21 +270,26 @@ def describe_sample(
202
  """Produce a small structured summary of a sample for logging.
203
 
204
  Used by the benchmark to surface in JSON output what was actually
205
- sampled this run β€” useful for debugging variance and confirming the
206
- stratification discipline produced the expected distribution.
 
 
207
  """
208
  cats = Counter(m["category"] for m in sample_meta)
209
  threads = Counter(m["thread"] for m in sample_meta)
210
- complexities = Counter()
211
  for m in sample_meta:
212
  complexities[m["q1_complexity"]] += 1
213
  complexities[m["q2_complexity"]] += 1
 
214
 
215
  return {
216
- "n_pairs": len(sample_meta),
217
- "n_turns": 2 * len(sample_meta),
218
  "categories_sampled": dict(cats),
219
  "threads_sampled": dict(threads),
220
  "complexity_distribution": dict(complexities),
221
- "pair_ids": [(m["q1_id"], m["q2_id"]) for m in sample_meta],
 
 
222
  }
 
1
  """
2
+ benchmark_loader.py β€” Load and sample from the Phase B benchmark prompt pool.
3
 
4
+ The pool (benchmark_pool.yaml) contains 17 categories Γ— 4 chains Γ— 3 layers
5
+ = 204 prompts, with 8 conceptual threads woven through in a near-uniform
6
+ bipartite (each thread spans 7-10 categories). Subversion is in
7
+ priority_categories so it's force-included in every per-run sample.
8
+
9
+ This loader:
10
 
11
  1. Loads the pool YAML
12
+ 2. Builds (Q1, Q2, Q3) chain triples β€” each Q2 and Q3 references the
13
+ same parent Q1 by `parent` field (Q3 is a sibling to Q2 under Q1,
14
+ not a Q1β†’Q2β†’Q3 lineage)
15
+ 3. Samples N chains per run with stratification discipline:
16
+ - Force-include 1 chain from each priority category (subversion)
17
+ - At most 2 chains per category (prevents category dominance)
18
  - At least 3 threads with 2+ representatives (cross-category co-firing)
19
+ - Multi-complexity coverage across all 3 layers
20
+ 4. Returns interleaved Q1/Q2/Q3 turn sequence:
21
+ turns 0..N-1: Q1s (one per sampled chain, in chain order)
22
+ turns N..2N-1: matching Q2s (same chain order)
23
+ turns 2N..3N-1: matching Q3s (same chain order)
24
+ 5. Returns same-cat pair indices for the heatmap math. Phase A semantics
25
+ preserved: pairs are Q1↔Q2 only `[(i, i+N) for i in range(N)]`.
26
+ Q3 turns contribute to substrate but aren't part of the strict same-
27
+ cat-reselect calculation. Future work (Option B) can add Q1↔Q3 and
28
+ Q2↔Q3 pairings.
29
 
30
  # ---- Changelog ----
31
+ # [2026-05-10] Claude Opus 4.7 β€” Phase A loader (Q1/Q2 pairs, 10 cats)
32
+ # [2026-05-11] Claude Opus 4.7 β€” Phase B loader (Q1/Q2/Q3 chains, 17 cats,
33
+ # priority_categories). Function renamed sample_pairs β†’
34
+ # sample_chains. Returns 24-turn interleave (3 layers Γ— 8
35
+ # chains). Subversion is forced in every sample to give
36
+ # substrate consistent expectation-subverting content
37
+ # exposure for the surprise-axis hypothesis test.
 
 
38
  # -------------------
39
  """
40
 
 
58
  """Load the benchmark pool YAML.
59
 
60
  Returns a dict with keys:
61
+ threads: list of thread names (8 entries)
62
+ complexity_levels: list of complexity tags (6 entries)
63
+ priority_categories: list of categories that must appear in every
64
+ per-run sample (typically just ["subversion"])
65
+ q1_layer: list of 68 Q1 dicts (id, category, thread,
66
+ complexity, text)
67
+ q2_layer: list of 68 Q2 dicts (adds: parent β†’ Q1 id)
68
+ q3_layer: list of 68 Q3 dicts (parent β†’ Q1 id; Q3 is
69
+ sibling to Q2 under Q1)
70
  """
71
  p = path or _DEFAULT_POOL_PATH
72
  with open(p) as f:
73
  return yaml.safe_load(f)
74
 
75
 
76
+ def _build_chains(
77
  pool: Dict[str, Any],
78
+ ) -> List[Tuple[Dict[str, Any], Dict[str, Any], Dict[str, Any]]]:
79
+ """Build (Q1, Q2, Q3) chain triples from the pool.
80
 
81
+ Each Q2's and Q3's `parent` field references its Q1's `id`. Chains
82
+ without a complete (Q1, Q2, Q3) triple are skipped; Phase B
83
+ discipline guarantees full triples but defensive code stays.
84
  """
85
  q2_by_parent = {q["parent"]: q for q in pool.get("q2_layer", [])}
86
+ q3_by_parent = {q["parent"]: q for q in pool.get("q3_layer", [])}
87
+ chains: List[
88
+ Tuple[Dict[str, Any], Dict[str, Any], Dict[str, Any]]
89
+ ] = []
90
  for q1 in pool.get("q1_layer", []):
91
  q2 = q2_by_parent.get(q1["id"])
92
+ q3 = q3_by_parent.get(q1["id"])
93
+ if q2 is not None and q3 is not None:
94
+ chains.append((q1, q2, q3))
95
+ return chains
96
 
97
 
98
  def _validate_sample(
99
+ sample: List[Tuple[Dict[str, Any], Dict[str, Any], Dict[str, Any]]],
100
  max_per_category: int = 2,
101
  min_threads_with_dups: int = 3,
102
  min_distinct_complexity_levels: int = 3,
 
104
  """Stratification discipline check.
105
 
106
  Returns True if the sample respects:
107
+ - max `max_per_category` chains per category (default 2)
108
+ - at least `min_threads_with_dups` threads with 2+ instances (3)
109
+ - at least `min_distinct_complexity_levels` distinct complexity
110
+ tags across the sample's combined Q1+Q2+Q3 levels (3)
111
+
112
+ Counted across (Q1, Q2, Q3) chain triples. Each chain contributes
113
+ its (single) thread once and contributes 3 complexity tags (one per
114
+ layer).
115
  """
116
  if not sample:
117
  return False
118
 
119
+ cats = Counter(q1["category"] for q1, _q2, _q3 in sample)
120
  if any(count > max_per_category for count in cats.values()):
121
  return False
122
 
123
+ threads = Counter(q1["thread"] for q1, _q2, _q3 in sample)
124
+ threads_with_dups = sum(
125
+ 1 for count in threads.values() if count >= 2
126
+ )
127
  if threads_with_dups < min_threads_with_dups:
128
  return False
129
 
130
  complexities: set = set()
131
+ for q1, q2, q3 in sample:
132
  complexities.add(q1["complexity"])
133
  complexities.add(q2["complexity"])
134
+ complexities.add(q3["complexity"])
135
  if len(complexities) < min_distinct_complexity_levels:
136
  return False
137
 
138
  return True
139
 
140
 
141
+ def sample_chains(
142
  pool: Optional[Dict[str, Any]] = None,
143
+ n_chains: int = 8,
144
  seed: Optional[int] = None,
145
  max_attempts: int = 200,
146
  ) -> Tuple[
 
148
  List[Tuple[int, int]],
149
  List[Dict[str, Any]],
150
  ]:
151
+ """Sample `n_chains` chains with stratification + priority discipline.
152
 
153
  Args:
154
  pool: Pre-loaded pool dict. If None, loads from default path.
155
+ n_chains: Total number of (Q1, Q2, Q3) chains to sample. Each
156
+ chain contributes 3 turns, so total turns = 3 * n_chains.
157
+ Phase B default 8 chains β†’ 24 turns/run.
158
  seed: RNG seed for reproducibility. None = nondeterministic.
159
+ max_attempts: Rejection-sampling retry budget on the non-priority
160
+ portion of the sample.
 
161
 
162
  Returns:
163
  interleaved_questions: list of (category, prompt_text) tuples,
164
+ 3*n_chains entries. Turn structure:
165
+ 0..n-1: Q1s
166
+ n..2n-1: Q2s (matching, same order)
167
+ 2n..3n-1: Q3s (matching, same order)
168
  same_cat_pairs: list of (q1_turn_idx, q2_turn_idx) tuples,
169
+ n_chains entries. Phase A semantics:
170
+ always [(i, i+n_chains) for i in range(n)].
171
+ Q3 turns aren't paired here (Option A from
172
+ 2026-05-11; future Option B can add Q1↔Q3
173
+ and Q2↔Q3 pairs).
174
+ sample_meta: list of n_chains dicts with q1_id, q2_id,
175
+ q3_id, category, thread, q1_complexity,
176
+ q2_complexity, q3_complexity.
177
+
178
+ Priority categories (from pool["priority_categories"]) are force-
179
+ included: one chain from each priority category is pre-selected
180
+ before rejection sampling fills the remaining slots from the non-
181
+ priority pool. Stratification is checked on the COMBINED final
182
+ sample, so the forced chain's thread/complexity contribute to the
183
+ constraint accounting.
184
  """
185
  if pool is None:
186
  pool = load_pool()
187
 
188
+ chains = _build_chains(pool)
189
+ if len(chains) < n_chains:
190
  raise ValueError(
191
+ f"Pool has {len(chains)} chains, cannot sample {n_chains}"
192
  )
193
 
194
+ priority_cats: List[str] = pool.get("priority_categories", []) or []
195
  rng = random.Random(seed)
196
 
197
+ # Step 1 β€” Pre-select forced chains from priority categories
198
+ forced: List[
199
+ Tuple[Dict[str, Any], Dict[str, Any], Dict[str, Any]]
200
+ ] = []
201
+ for cat in priority_cats:
202
+ cat_chains = [c for c in chains if c[0]["category"] == cat]
203
+ if cat_chains:
204
+ forced.append(rng.choice(cat_chains))
205
+
206
+ # Step 2 β€” Fill remaining slots from non-priority chains via
207
+ # rejection sampling against the COMBINED (forced + sampled) total
208
+ n_remaining = n_chains - len(forced)
209
+ if n_remaining < 0:
210
+ raise ValueError(
211
+ f"More priority categories ({len(forced)}) than n_chains "
212
+ f"({n_chains}); reduce priority list or raise n_chains"
213
+ )
214
+ forced_ids = {c[0]["id"] for c in forced}
215
+ non_priority = [c for c in chains if c[0]["id"] not in forced_ids]
216
+
217
+ selected: Optional[
218
+ List[Tuple[Dict[str, Any], Dict[str, Any], Dict[str, Any]]]
219
+ ] = None
220
  for _attempt in range(max_attempts):
221
+ if n_remaining > 0:
222
+ candidate_remaining = rng.sample(non_priority, n_remaining)
223
+ else:
224
+ candidate_remaining = []
225
+ candidate = forced + candidate_remaining
226
  if _validate_sample(candidate):
227
  selected = candidate
228
  break
229
 
230
  if selected is None:
231
+ # Fallback β€” accept partial constraint satisfaction rather than
232
+ # aborting. Forced chains still included; remaining slots filled
233
+ # by best-effort random draw.
234
+ if n_remaining > 0:
235
+ selected = forced + rng.sample(non_priority, n_remaining)
236
+ else:
237
+ selected = list(forced)
238
 
239
  interleaved: List[Tuple[str, str]] = []
240
+ for q1, _q2, _q3 in selected:
241
  interleaved.append((q1["category"], q1["text"]))
242
+ for _q1, q2, _q3 in selected:
243
  interleaved.append((q2["category"], q2["text"]))
244
+ for _q1, _q2, q3 in selected:
245
+ interleaved.append((q3["category"], q3["text"]))
246
 
247
  same_cat_pairs: List[Tuple[int, int]] = [
248
+ (i, i + n_chains) for i in range(n_chains)
249
  ]
250
 
251
  sample_meta: List[Dict[str, Any]] = []
252
+ for q1, q2, q3 in selected:
253
  sample_meta.append({
254
  "q1_id": q1["id"],
255
  "q2_id": q2["id"],
256
+ "q3_id": q3["id"],
257
  "category": q1["category"],
258
  "thread": q1["thread"],
259
  "q1_complexity": q1["complexity"],
260
  "q2_complexity": q2["complexity"],
261
+ "q3_complexity": q3["complexity"],
262
  })
263
 
264
  return interleaved, same_cat_pairs, sample_meta
 
270
  """Produce a small structured summary of a sample for logging.
271
 
272
  Used by the benchmark to surface in JSON output what was actually
273
+ sampled this run β€” useful for correlating per-run substrate
274
+ behavior with which threads / categories / complexity registers
275
+ were exercised, and for confirming priority_categories are
276
+ being respected.
277
  """
278
  cats = Counter(m["category"] for m in sample_meta)
279
  threads = Counter(m["thread"] for m in sample_meta)
280
+ complexities: Counter = Counter()
281
  for m in sample_meta:
282
  complexities[m["q1_complexity"]] += 1
283
  complexities[m["q2_complexity"]] += 1
284
+ complexities[m["q3_complexity"]] += 1
285
 
286
  return {
287
+ "n_chains": len(sample_meta),
288
+ "n_turns": 3 * len(sample_meta),
289
  "categories_sampled": dict(cats),
290
  "threads_sampled": dict(threads),
291
  "complexity_distribution": dict(complexities),
292
+ "chain_ids": [
293
+ (m["q1_id"], m["q2_id"], m["q3_id"]) for m in sample_meta
294
+ ],
295
  }
nuwave/benchmark_pool.yaml CHANGED
@@ -56,6 +56,15 @@ threads:
56
  - conflict
57
  - beauty
58
 
 
 
 
 
 
 
 
 
 
59
  complexity_levels:
60
  - casual # offhand curiosity, low cognitive load
61
  - practical # how-to, applied
@@ -333,6 +342,189 @@ q1_layer:
333
  complexity: pop_culture
334
  text: "Apollo 11 was 60 years ago and it still has cultural weight that newer space stuff doesn't really match. Why does that one stick?"
335
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
  # ────────────────────────────────────────────────────────────────────
337
  # Q2 LAYER β€” pending Q1 layer approval
338
  # ────────────────────────────────────────────────────────────────────
@@ -640,3 +832,724 @@ q2_layer:
640
  thread: memory
641
  complexity: conceptual
642
  text: "When SpaceX lands a booster perfectly, it's incredible engineering but doesn't land the same way emotionally. What does Apollo have that the modern stuff doesn't?"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  - conflict
57
  - beauty
58
 
59
+ # Categories that MUST appear in every per-run sample. Subversion is here
60
+ # so the substrate gets consistent exposure to expectation-subverting
61
+ # content across runs β€” testing whether activation-pattern shifts produced
62
+ # by riddle/twist/counter-intuitive prompts are strong enough to cause
63
+ # canonical predictive-coding errors (the substrate-level "surprise"
64
+ # events that have been silent across all runs to date).
65
+ priority_categories:
66
+ - subversion
67
+
68
  complexity_levels:
69
  - casual # offhand curiosity, low cognitive load
70
  - practical # how-to, applied
 
342
  complexity: pop_culture
343
  text: "Apollo 11 was 60 years ago and it still has cultural weight that newer space stuff doesn't really match. Why does that one stick?"
344
 
345
+ # ───────────────────────────────────────────────────────────────────
346
+ # Phase B additions β€” 7 new categories Γ— 4 Q1s each = 28 new Q1s
347
+ # Bipartite expansion: each existing thread now spans 7-10 categories
348
+ # instead of Phase A's 5. Subversion is in priority_categories so
349
+ # every per-run sample includes one of its 4 chains; the other 6 new
350
+ # categories rotate through with the existing 10.
351
+ # ───────────────────────────────────────────────────────────────────
352
+
353
+ # ─── Chemistry ─────────────────────────────────────────────────────
354
+ - id: chm-q1-1
355
+ category: chemistry
356
+ thread: energy
357
+ complexity: casual
358
+ text: "When I dump baking soda into vinegar and it foams over, where does that energy actually come from?"
359
+
360
+ - id: chm-q1-2
361
+ category: chemistry
362
+ thread: connection
363
+ complexity: conceptual
364
+ text: "Ice floats while most things get denser when they freeze. What's special about how water molecules connect that makes it the exception?"
365
+
366
+ - id: chm-q1-3
367
+ category: chemistry
368
+ thread: growth
369
+ complexity: practical
370
+ text: "Walk me through how a battery grows weaker over time β€” what's actually happening to the chemistry inside as it cycles?"
371
+
372
+ - id: chm-q1-4
373
+ category: chemistry
374
+ thread: pattern
375
+ complexity: theoretical
376
+ text: "Walk me through how chemists predict whether a reaction will be exothermic or endothermic just from the molecular structures."
377
+
378
+ # ─── Language / Linguistics ────────────────────────────────────────
379
+ - id: lng-q1-1
380
+ category: language
381
+ thread: pattern
382
+ complexity: casual
383
+ text: "People from totally different cultures still smile when they're happy. Real human universal, or have we just exported it?"
384
+
385
+ - id: lng-q1-2
386
+ category: language
387
+ thread: memory
388
+ complexity: practical
389
+ text: "Why is it easier to learn a third language once you've learned a second, even if the third is completely unrelated?"
390
+
391
+ - id: lng-q1-3
392
+ category: language
393
+ thread: conflict
394
+ complexity: deep
395
+ text: "Linguists fight over whether language shapes thought or thought shapes language. Where does that argument actually land in the evidence?"
396
+
397
+ - id: lng-q1-4
398
+ category: language
399
+ thread: time
400
+ complexity: pop_culture
401
+ text: "Slang moves so fast β€” 'bet,' 'no cap,' 'mid' β€” but somehow some words from the 90s never leave. What makes a slang term last?"
402
+
403
+ # ─── Psychology ────────────────────────────────────────────────────
404
+ - id: psy-q1-1
405
+ category: psychology
406
+ thread: memory
407
+ complexity: practical
408
+ text: "I forget where I put my keys five minutes ago, but I can still recite a poem from third grade. What's actually happening with memory there?"
409
+
410
+ - id: psy-q1-2
411
+ category: psychology
412
+ thread: connection
413
+ complexity: conceptual
414
+ text: "People in long-term relationships supposedly start to look like each other over time. Real effect, or confirmation bias dressed up as one?"
415
+
416
+ - id: psy-q1-3
417
+ category: psychology
418
+ thread: conflict
419
+ complexity: deep
420
+ text: "Cognitive dissonance β€” when your behavior doesn't match your beliefs, your mind rewrites the beliefs. How does that actually work, and is there any way to short-circuit it?"
421
+
422
+ - id: psy-q1-4
423
+ category: psychology
424
+ thread: growth
425
+ complexity: theoretical
426
+ text: "Personality is supposedly mostly locked in by 30 β€” the 'Big Five' calcified or whatever. What does the research actually say about how much it shifts in adulthood?"
427
+
428
+ # ─── Games / Strategy ─────────────────────────────���────────────────
429
+ - id: gms-q1-1
430
+ category: games
431
+ thread: pattern
432
+ complexity: casual
433
+ text: "Why is Minesweeper still the perfect 5-minute lunch break game? What did it nail that newer games miss?"
434
+
435
+ - id: gms-q1-2
436
+ category: games
437
+ thread: conflict
438
+ complexity: practical
439
+ text: "When poker players talk about reading 'tells,' how much of that is real psychology and how much is movie nonsense?"
440
+
441
+ - id: gms-q1-3
442
+ category: games
443
+ thread: time
444
+ complexity: conceptual
445
+ text: "Chess endgames are mostly tablebase territory now β€” computers have solved them. Why does the middle game still resist that?"
446
+
447
+ - id: gms-q1-4
448
+ category: games
449
+ thread: beauty
450
+ complexity: pop_culture
451
+ text: "Tetris feels weirdly good and you're literally just sorting blocks. Flow state, dopamine timing, something else? What's actually doing the work?"
452
+
453
+ # ─── Travel / Geography ────────────────────────────────────────────
454
+ - id: trv-q1-1
455
+ category: travel
456
+ thread: connection
457
+ complexity: casual
458
+ text: "A place feels familiar the second time even if you only spent two days there years ago. What's the brain actually doing with that thin slice of input?"
459
+
460
+ - id: trv-q1-2
461
+ category: travel
462
+ thread: memory
463
+ complexity: practical
464
+ text: "When you travel, why are food memories the most vivid ones years later? More than the views, more than the museums?"
465
+
466
+ - id: trv-q1-3
467
+ category: travel
468
+ thread: growth
469
+ complexity: conceptual
470
+ text: "Some cities feel like they're 'still themselves' after a hundred years and some feel completely transformed. What makes a place keep its character vs lose it?"
471
+
472
+ - id: trv-q1-4
473
+ category: travel
474
+ thread: time
475
+ complexity: deep
476
+ text: "People cry at airports and it's not really about the leaving β€” something about that specific liminal space catches people off guard. What is it about that space?"
477
+
478
+ # ─── Art (Visual) ──────────────────────────────────────────────────
479
+ - id: art-q1-1
480
+ category: art
481
+ thread: pattern
482
+ complexity: practical
483
+ text: "Most photographers say the rule of thirds 'works' even though most great photos break it. What's actually doing the work β€” the rule, or the deviation from it?"
484
+
485
+ - id: art-q1-2
486
+ category: art
487
+ thread: beauty
488
+ complexity: conceptual
489
+ text: "Some paintings make you stop walking past them in a museum. Most don't. There's no obvious pattern β€” what's actually pulling people in?"
490
+
491
+ - id: art-q1-3
492
+ category: art
493
+ thread: energy
494
+ complexity: deep
495
+ text: "Some Rothkos make people cry. They're just colored rectangles. What's actually happening when people respond to abstract art that strongly?"
496
+
497
+ - id: art-q1-4
498
+ category: art
499
+ thread: memory
500
+ complexity: pop_culture
501
+ text: "The shower scene in Psycho still scares people even though they've seen it parodied a hundred times before ever seeing the original. How does that work?"
502
+
503
+ # ─── Subversion (priority_category β€” always sampled) ───────────────
504
+ - id: sub-q1-1
505
+ category: subversion
506
+ thread: pattern
507
+ complexity: casual
508
+ text: "What has keys but can't open locks, space but no rooms, and you can enter but can't go inside? Why does that riddle work where others fall flat?"
509
+
510
+ - id: sub-q1-2
511
+ category: subversion
512
+ thread: conflict
513
+ complexity: conceptual
514
+ text: "Counterintuitive thing about heat loss: most of it doesn't actually go through your head, despite what we tell kids. So why does putting on a hat warm you up so much?"
515
+
516
+ - id: sub-q1-3
517
+ category: subversion
518
+ thread: beauty
519
+ complexity: deep
520
+ text: "If you could remove all uncertainty from your decisions, would you actually be better off? Or does decision-making partly work because you can't predict the outcome?"
521
+
522
+ - id: sub-q1-4
523
+ category: subversion
524
+ thread: memory
525
+ complexity: pop_culture
526
+ text: "The Sixth Sense's twist still works on rewatch even though you know it's coming. Most twist movies don't survive the rewatch. What makes that one different?"
527
+
528
  # ────────────────────────────────────────────────────────────────────
529
  # Q2 LAYER β€” pending Q1 layer approval
530
  # ────────────────────────────────────────────────────────────────────
 
832
  thread: memory
833
  complexity: conceptual
834
  text: "When SpaceX lands a booster perfectly, it's incredible engineering but doesn't land the same way emotionally. What does Apollo have that the modern stuff doesn't?"
835
+
836
+ # ───────────────────────────────────────────────────────────────────
837
+ # Phase B Q2 additions β€” 7 new categories Γ— 4 Q2s each = 28 new Q2s
838
+ # Each Q2 inherits its Q1's category and thread; complexity register
839
+ # shifts (typically harder than Q1) and follow-up shape varies across
840
+ # the standard patterns: deepen / contrast / specific-case / apply /
841
+ # stress-test.
842
+ # ───────────────────────────────────────────────────────────────────
843
+
844
+ # ─── Chemistry ─────────────────────────────────────────────────────
845
+ - id: chm-q2-1
846
+ parent: chm-q1-1
847
+ category: chemistry
848
+ thread: energy
849
+ complexity: deep
850
+ text: "If chemical bonds store energy and breaking them releases it, where did the energy come from in the first place β€” back through stars, supernovas, the Big Bang?"
851
+
852
+ - id: chm-q2-2
853
+ parent: chm-q1-2
854
+ category: chemistry
855
+ thread: connection
856
+ complexity: practical
857
+ text: "If ice didn't float because of those weird hydrogen bonds, would lakes survive winters? How dependent is life on that one quirk of water?"
858
+
859
+ - id: chm-q2-3
860
+ parent: chm-q1-3
861
+ category: chemistry
862
+ thread: growth
863
+ complexity: deep
864
+ text: "Lithium-ion batteries degrade no matter what β€” even sitting unused. Is that thermodynamically inevitable for any energy storage, or is it just current chemistry?"
865
+
866
+ - id: chm-q2-4
867
+ parent: chm-q1-4
868
+ category: chemistry
869
+ thread: pattern
870
+ complexity: conceptual
871
+ text: "Some reactions are so reliable chemists call them 'click chemistry' β€” Nobel Prize-level reliable. What pattern makes a reaction click together that cleanly when most reactions are messy?"
872
+
873
+ # ─── Language / Linguistics ────────────────────────────────────────
874
+ - id: lng-q2-1
875
+ parent: lng-q1-1
876
+ category: language
877
+ thread: pattern
878
+ complexity: conceptual
879
+ text: "If smiling is universal, what about laughter? Is the pattern as cross-cultural, or do different cultures laugh at totally different things?"
880
+
881
+ - id: lng-q2-2
882
+ parent: lng-q1-2
883
+ category: language
884
+ thread: memory
885
+ complexity: conceptual
886
+ text: "Adults learning a new language always sound 'foreign' β€” kids don't. What's actually happening at the brain level that locks in around puberty?"
887
+
888
+ - id: lng-q2-3
889
+ parent: lng-q1-3
890
+ category: language
891
+ thread: conflict
892
+ complexity: theoretical
893
+ text: "If language genuinely shapes thought, what experiment could actually prove it β€” beyond the 'people see colors differently if they have different color words' kind of stuff?"
894
+
895
+ - id: lng-q2-4
896
+ parent: lng-q1-4
897
+ category: language
898
+ thread: time
899
+ complexity: deep
900
+ text: "Some words from older slang are now formal English β€” 'cool,' 'dude,' even 'awesome.' What separates the slang that climbs into the language from the slang that dies in five years?"
901
+
902
+ # ─── Psychology ────────────────────────────────────────────────────
903
+ - id: psy-q2-1
904
+ parent: psy-q1-1
905
+ category: psychology
906
+ thread: memory
907
+ complexity: deep
908
+ text: "Working memory and long-term memory feel like different systems entirely. Are they actually different, or different views of the same underlying thing?"
909
+
910
+ - id: psy-q2-2
911
+ parent: psy-q1-2
912
+ category: psychology
913
+ thread: connection
914
+ complexity: practical
915
+ text: "If we DO start to mirror people we're around, what does that mean for who you become if you switch your friend group every five years?"
916
+
917
+ - id: psy-q2-3
918
+ parent: psy-q1-3
919
+ category: psychology
920
+ thread: conflict
921
+ complexity: pop_culture
922
+ text: "Sunk cost fallacy is basically dissonance in disguise β€” you'd quit a bad relationship if you'd just started, but two years in you can't. Does naming the bias actually help anyone escape it?"
923
+
924
+ - id: psy-q2-4
925
+ parent: psy-q1-4
926
+ category: psychology
927
+ thread: growth
928
+ complexity: conceptual
929
+ text: "If the Big Five doesn't shift much in adulthood, why do trauma and major life events seem to genuinely change people? Is it personality changing, or something else doing the work?"
930
+
931
+ # ─── Games / Strategy ──────────────────────────────────────────────
932
+ - id: gms-q2-1
933
+ parent: gms-q1-1
934
+ category: games
935
+ thread: pattern
936
+ complexity: conceptual
937
+ text: "Games like Minesweeper, Solitaire, Wordle β€” they all share something structural that makes them perfect 5-minute games. What's the actual recipe?"
938
+
939
+ - id: gms-q2-2
940
+ parent: gms-q1-2
941
+ category: games
942
+ thread: conflict
943
+ complexity: conceptual
944
+ text: "Online poker has no tells, no body language. Is the game actually different at high levels, or do the math players win in both formats?"
945
+
946
+ - id: gms-q2-3
947
+ parent: gms-q1-3
948
+ category: games
949
+ thread: time
950
+ complexity: deep
951
+ text: "If chess endgames are solved and openings are deeply theorized, will the middle game eventually be solved too? Or is there something fundamentally different about that part of the game?"
952
+
953
+ - id: gms-q2-4
954
+ parent: gms-q1-4
955
+ category: games
956
+ thread: beauty
957
+ complexity: conceptual
958
+ text: "There's a 'Tetris effect' where people see falling blocks when they close their eyes after long sessions. What does that say about what the game's actually doing to your brain?"
959
+
960
+ # ─── Travel / Geography ────────────────────────────────────────────
961
+ - id: trv-q2-1
962
+ parent: trv-q1-1
963
+ category: travel
964
+ thread: connection
965
+ complexity: conceptual
966
+ text: "Sometimes a place you've never been feels familiar β€” dΓ©jΓ  vu for locations. What's the brain doing when somewhere genuinely new feels remembered?"
967
+
968
+ - id: trv-q2-2
969
+ parent: trv-q1-2
970
+ category: travel
971
+ thread: memory
972
+ complexity: deep
973
+ text: "If food memories are the strongest travel memories, does that mean the rest of travel is forgettable by comparison? Or is food just punching above its weight?"
974
+
975
+ - id: trv-q2-3
976
+ parent: trv-q1-3
977
+ category: travel
978
+ thread: growth
979
+ complexity: practical
980
+ text: "Tokyo and Rome both have 2000 years of history. One feels ancient at every corner; the other feels like a brand-new city wearing some old buildings. What's the actual difference?"
981
+
982
+ - id: trv-q2-4
983
+ parent: trv-q1-4
984
+ category: travel
985
+ thread: time
986
+ complexity: pop_culture
987
+ text: "Train stations don't have the same emotional weight airports do, even though they involve the same departures. Is it the speed, the distance, or something about flight specifically?"
988
+
989
+ # ─── Art (Visual) ──────────────────────────────────────────────────
990
+ - id: art-q2-1
991
+ parent: art-q1-1
992
+ category: art
993
+ thread: pattern
994
+ complexity: conceptual
995
+ text: "Composition rules feel arbitrary until you violate them and the image breaks. Is there an underlying principle the rules are pointing at, or did we just train ourselves to expect them?"
996
+
997
+ - id: art-q2-2
998
+ parent: art-q1-2
999
+ category: art
1000
+ thread: beauty
1001
+ complexity: deep
1002
+ text: "If great art has some deep structural property that makes it 'work,' you'd think we could engineer it. We can't, reliably. Does that mean the property doesn't exist, or that we just can't see it directly?"
1003
+
1004
+ - id: art-q2-3
1005
+ parent: art-q1-3
1006
+ category: art
1007
+ thread: energy
1008
+ complexity: theoretical
1009
+ text: "Aesthetic experience produces measurable physiological responses β€” heart rate, pupil dilation, skin conductance. Does that mean we could in principle measure 'how much' a piece of art affects someone?"
1010
+
1011
+ - id: art-q2-4
1012
+ parent: art-q1-4
1013
+ category: art
1014
+ thread: memory
1015
+ complexity: conceptual
1016
+ text: "If parody-first exposure doesn't immunize you from the original's impact, what does that say about how cinematic memory actually works?"
1017
+
1018
+ # ─── Subversion ────────────────────────────────────────────────────
1019
+ - id: sub-q2-1
1020
+ parent: sub-q1-1
1021
+ category: subversion
1022
+ thread: pattern
1023
+ complexity: conceptual
1024
+ text: "Riddles that work usually have one specific structural move β€” misdirection toward an obvious wrong answer. Are there other structural moves that produce the same satisfaction?"
1025
+
1026
+ - id: sub-q2-2
1027
+ parent: sub-q1-2
1028
+ category: subversion
1029
+ thread: conflict
1030
+ complexity: practical
1031
+ text: "When you find out a 'fact' you've believed forever is wrong, some people update easily and others double down. What's actually different between those two reactions?"
1032
+
1033
+ - id: sub-q2-3
1034
+ parent: sub-q1-3
1035
+ category: subversion
1036
+ thread: beauty
1037
+ complexity: pop_culture
1038
+ text: "Stories that subvert your expectations feel beautiful when they work β€” but the same trick used cynically feels gimmicky. What's the actual line between earned subversion and a cheap twist?"
1039
+
1040
+ - id: sub-q2-4
1041
+ parent: sub-q1-4
1042
+ category: subversion
1043
+ thread: memory
1044
+ complexity: deep
1045
+ text: "If a twist's power survives knowing it, what's actually being subverted on rewatch? Not the surprise β€” something else. What?"
1046
+
1047
+ # ──────────────────────────���─────────────────────────────────────────
1048
+ # Q3 LAYER β€” third-tier follow-ups, 17 categories Γ— 4 chains = 68 Q3s
1049
+ # ────────────────────────────────────────────────────────────────────
1050
+ #
1051
+ # Each Q3 inherits its chain's category and thread. Q3 follow-up shapes
1052
+ # vary across the standard patterns: Apply (given Q1+Q2, would X work?),
1053
+ # Stress test (where does this break down?), Connect (how does this
1054
+ # relate to other-domain idea?), Personal (what does this mean for me?),
1055
+ # Synthesize (combining Q1+Q2, what's the takeaway?), Open question
1056
+ # (what should we be asking that we aren't?).
1057
+ #
1058
+ # Q3 turns are positions 17-24 in the 24-turn run sample (turns 0-7 are
1059
+ # Q1, 8-15 are Q2, 16-23 are Q3). Q3-pulls-Q1 in pith tests substrate
1060
+ # recall across a 16+-turn gap β€” a more demanding test than Phase A's
1061
+ # 8-turn Q2-pulls-Q1 measurement.
1062
+
1063
+ q3_layer:
1064
+ # ─── Biology ───────────────────────────────────────────────────────
1065
+ - id: bio-q3-1
1066
+ parent: bio-q1-1
1067
+ category: biology
1068
+ thread: growth
1069
+ complexity: pop_culture
1070
+ text: "Bats are tiny but live 30+ years β€” completely breaks the lifespan-vs-body-size rule that holds for most mammals. What did bats find that everyone else missed?"
1071
+
1072
+ - id: bio-q3-2
1073
+ parent: bio-q1-2
1074
+ category: biology
1075
+ thread: memory
1076
+ complexity: deep
1077
+ text: "If memories are stored in synaptic strengths, what happens to memories when individual neurons die? Are they re-stored elsewhere automatically, or do you lose pieces?"
1078
+
1079
+ - id: bio-q3-3
1080
+ parent: bio-q1-3
1081
+ category: biology
1082
+ thread: connection
1083
+ complexity: pop_culture
1084
+ text: "Cancer evades the immune system by hijacking the same self/non-self signals it normally responds to β€” like learning to whisper your password back. How close is that analogy to what's actually happening?"
1085
+
1086
+ - id: bio-q3-4
1087
+ parent: bio-q1-4
1088
+ category: biology
1089
+ thread: energy
1090
+ complexity: practical
1091
+ text: "When I hit a wall on hard cardio and feel like I can't push through, is the mitochondrial limit actually being reached, or is the brain shutting things down protectively before then?"
1092
+
1093
+ # ─── Physics ───────────────────────────────────────────────────────
1094
+ - id: phy-q3-1
1095
+ parent: phy-q1-1
1096
+ category: physics
1097
+ thread: time
1098
+ complexity: pop_culture
1099
+ text: "If entropy gives time its arrow, what happens to the arrow inside a black hole β€” where the entropy is supposedly already maxed out?"
1100
+
1101
+ - id: phy-q3-2
1102
+ parent: phy-q1-2
1103
+ category: physics
1104
+ thread: beauty
1105
+ complexity: practical
1106
+ text: "Some physicists say a theory's mathematical beauty predicts its truth. Other physicists say that's exactly how you fool yourself for a generation. Which side has more recent track record?"
1107
+
1108
+ - id: phy-q3-3
1109
+ parent: phy-q1-3
1110
+ category: physics
1111
+ thread: energy
1112
+ complexity: deep
1113
+ text: "Hawking radiation lets black holes evaporate over astronomical timescales. If you're falling in right before that happens, do you experience the evaporation as it occurs, or does time work differently for you?"
1114
+
1115
+ - id: phy-q3-4
1116
+ parent: phy-q1-4
1117
+ category: physics
1118
+ thread: pattern
1119
+ complexity: pop_culture
1120
+ text: "If sci-fi gets entanglement wrong, are there other quantum mechanics phenomena it actually gets RIGHT? Is there any film or book that nails the physics?"
1121
+
1122
+ # ─── Computing ─────────────────────────────────────────────────────
1123
+ - id: cmp-q3-1
1124
+ parent: cmp-q1-1
1125
+ category: computing
1126
+ thread: pattern
1127
+ complexity: deep
1128
+ text: "If 'standard pattern' instincts came from old text editors into modern game UIs, are there modern interfaces stuck with bad patterns just because everyone copied them once?"
1129
+
1130
+ - id: cmp-q3-2
1131
+ parent: cmp-q1-2
1132
+ category: computing
1133
+ thread: memory
1134
+ complexity: theoretical
1135
+ text: "Cache hierarchies are entirely about latency-vs-capacity tradeoffs. If we had infinite-bandwidth memory at any distance, would the hierarchy collapse, or are there other reasons we'd still need it?"
1136
+
1137
+ - id: cmp-q3-3
1138
+ parent: cmp-q1-3
1139
+ category: computing
1140
+ thread: beauty
1141
+ complexity: pop_culture
1142
+ text: "Knuth famously wrote 'beware of bugs in the above code, I have only proved it correct, not tried it.' Is there beauty in code that's elegantly wrong? Or is beauty inseparable from correctness?"
1143
+
1144
+ - id: cmp-q3-4
1145
+ parent: cmp-q1-4
1146
+ category: computing
1147
+ thread: connection
1148
+ complexity: practical
1149
+ text: "If graph databases are great for highly-connected data, why hasn't social media moved to them entirely? What's keeping the major platforms on relational?"
1150
+
1151
+ # ─── Math ──────────────────────────────────────────────────────────
1152
+ - id: mth-q3-1
1153
+ parent: mth-q1-1
1154
+ category: math
1155
+ thread: pattern
1156
+ complexity: conceptual
1157
+ text: "Probability paradoxes β€” Monty Hall, the birthday problem, the boy-girl paradox β€” share a structural feature. Is there a unifying way to see why intuition fails on all of them at once?"
1158
+
1159
+ - id: mth-q3-2
1160
+ parent: mth-q1-2
1161
+ category: math
1162
+ thread: growth
1163
+ complexity: theoretical
1164
+ text: "Compound growth feels infinite when graphed but real-world growth always hits limits. What does the math actually say about when exponential turns into logistic?"
1165
+
1166
+ - id: mth-q3-3
1167
+ parent: mth-q1-3
1168
+ category: math
1169
+ thread: conflict
1170
+ complexity: deep
1171
+ text: "0.999... = 1 mostly stops bothering people once they've worked through the limit definition. Are there other math 'truths' where understanding the rigor never makes them feel intuitive?"
1172
+
1173
+ - id: mth-q3-4
1174
+ parent: mth-q1-4
1175
+ category: math
1176
+ thread: beauty
1177
+ complexity: pop_culture
1178
+ text: "If the Riemann hypothesis turns out to be false, would that change what 'beautiful proof' means? Or would the proof of its falsity itself be considered beautiful?"
1179
+
1180
+ # ─── Philosophy ────────────────────────────────────────────────────
1181
+ - id: phi-q3-1
1182
+ parent: phi-q1-1
1183
+ category: philosophy
1184
+ thread: conflict
1185
+ complexity: pop_culture
1186
+ text: "Most people who claim 'lying is always wrong' would still lie to a Nazi at the door asking about hidden refugees. Does that mean their stated belief is wrong, or that their stated belief is actually a useful default with exceptions?"
1187
+
1188
+ - id: phi-q3-2
1189
+ parent: phi-q1-2
1190
+ category: philosophy
1191
+ thread: time
1192
+ complexity: deep
1193
+ text: "Compatibilism saves free will by redefining it. Is that intellectually satisfying, or does it feel like changing the goalposts? When have other philosophical positions done the same trick well?"
1194
+
1195
+ - id: phi-q3-3
1196
+ parent: phi-q1-3
1197
+ category: philosophy
1198
+ thread: energy
1199
+ complexity: theoretical
1200
+ text: "If consciousness emerges from organized energy patterns, could you in principle build a conscious being from a different substrate β€” quantum fields, magnetic patterns, anything besides neurons?"
1201
+
1202
+ - id: phi-q3-4
1203
+ parent: phi-q1-4
1204
+ category: philosophy
1205
+ thread: connection
1206
+ complexity: deep
1207
+ text: "If the Cave's prisoners get out and see the sun, would they just be in a bigger cave with a different unseen shadow-source? At what point are you actually 'out'?"
1208
+
1209
+ # ─── Film / TV ─────────────────────────────────────────────────────
1210
+ - id: flm-q3-1
1211
+ parent: flm-q1-1
1212
+ category: film_tv
1213
+ thread: memory
1214
+ complexity: practical
1215
+ text: "If Ratatouille's meal scene works because it triggers food-memory in viewers, would the same scene with a culture's food you've never tasted hit as hard, or is the cultural specificity load-bearing?"
1216
+
1217
+ - id: flm-q3-2
1218
+ parent: flm-q1-2
1219
+ category: film_tv
1220
+ thread: beauty
1221
+ complexity: theoretical
1222
+ text: "Three-act structure lives because it works on the brain at a level we don't articulate. Are there other narrative structures from other cultures (kishōtenketsu, dastan) that do the same thing differently?"
1223
+
1224
+ - id: flm-q3-3
1225
+ parent: flm-q1-3
1226
+ category: film_tv
1227
+ thread: growth
1228
+ complexity: pop_culture
1229
+ text: "Walter White's slide is recognizable as how moral collapse works. Are there real historical figures whose decline mirrors his arc closely enough that watching the show feels like history?"
1230
+
1231
+ - id: flm-q3-4
1232
+ parent: flm-q1-4
1233
+ category: film_tv
1234
+ thread: conflict
1235
+ complexity: conceptual
1236
+ text: "Breaking Bad and The Sopranos and Mad Men all share the 'man getting worse over time' arc. What changed in storytelling around 2000 that made that arc dominant?"
1237
+
1238
+ # ─── Relationships ─────────────────────────────────────────────────
1239
+ - id: rel-q3-1
1240
+ parent: rel-q1-1
1241
+ category: relationships
1242
+ thread: time
1243
+ complexity: pop_culture
1244
+ text: "Some couples have years of comfortable silence. Some never get there. Is comfortable silence learned, earned, or is it a personality match thing that exists from the start?"
1245
+
1246
+ - id: rel-q3-2
1247
+ parent: rel-q1-2
1248
+ category: relationships
1249
+ thread: connection
1250
+ complexity: practical
1251
+ text: "Long-friendships-survive-divergent-paths makes sense for childhood friends. Does it work the same for friendships you make in your 30s, or are those structurally different?"
1252
+
1253
+ - id: rel-q3-3
1254
+ parent: rel-q1-3
1255
+ category: relationships
1256
+ thread: conflict
1257
+ complexity: theoretical
1258
+ text: "If apologizing right is genuinely hard, are there cultures or institutions that teach the skill explicitly? What does that pedagogy look like?"
1259
+
1260
+ - id: rel-q3-4
1261
+ parent: rel-q1-4
1262
+ category: relationships
1263
+ thread: memory
1264
+ complexity: pop_culture
1265
+ text: "Shared memory bonds people. But two people often remember the same event differently. Does the act of telling and retelling together generate a 'shared version' that becomes more bonding than the original event?"
1266
+
1267
+ # ─── Music ─────────────────────────────────────────────────────────
1268
+ - id: mus-q3-1
1269
+ parent: mus-q1-1
1270
+ category: music
1271
+ thread: pattern
1272
+ complexity: conceptual
1273
+ text: "If teen-years music hits different because of brain wiring, what about people who didn't have access to music as teens β€” late refugees, people in restricted environments? What's THEIR equivalent attachment?"
1274
+
1275
+ - id: mus-q3-2
1276
+ parent: mus-q1-2
1277
+ category: music
1278
+ thread: energy
1279
+ complexity: theoretical
1280
+ text: "If high-energy songs can be engineered, can low-energy songs be engineered the same way? Why does ambient music feel like it resists that kind of analysis?"
1281
+
1282
+ - id: mus-q3-3
1283
+ parent: mus-q1-3
1284
+ category: music
1285
+ thread: time
1286
+ complexity: conceptual
1287
+ text: "Some odd time signatures (5/4, 7/8) feel jarring; others feel natural after a few listens. What makes 'Take Five' or 'Money' feel resolved despite the unusual count?"
1288
+
1289
+ - id: mus-q3-4
1290
+ parent: mus-q1-4
1291
+ category: music
1292
+ thread: conflict
1293
+ complexity: practical
1294
+ text: "If genre-collision works in Bohemian Rhapsody, when does it fail catastrophically? What's a clear example of a song trying the same trick and feeling like a medley instead?"
1295
+
1296
+ # ─── Food / Cooking ────────────────────────────────────────────────
1297
+ - id: fud-q3-1
1298
+ parent: fud-q1-1
1299
+ category: food
1300
+ thread: growth
1301
+ complexity: deep
1302
+ text: "If long ferments give bread depth that fast methods can't match, why isn't slow-fermented bread the default in every bakery? What's the actual tradeoff?"
1303
+
1304
+ - id: fud-q3-2
1305
+ parent: fud-q1-2
1306
+ category: food
1307
+ thread: energy
1308
+ complexity: theoretical
1309
+ text: "If energy drinks and coffee hit differently despite same caffeine, what does that say about caffeine itself? Is 'caffeine' actually multiple things grouped under one name?"
1310
+
1311
+ - id: fud-q3-3
1312
+ parent: fud-q1-3
1313
+ category: food
1314
+ thread: beauty
1315
+ complexity: pop_culture
1316
+ text: "If plating changes taste, can it change taste in negative directions too? Could you ruin an excellent dish by plating it badly enough?"
1317
+
1318
+ - id: fud-q3-4
1319
+ parent: fud-q1-4
1320
+ category: food
1321
+ thread: pattern
1322
+ complexity: practical
1323
+ text: "Maillard reaction needs ~140Β°C. Why don't we get great Maillard at home β€” is it temperature, technique, or pan thermal mass?"
1324
+
1325
+ # ─── History ───────────────────────────────────────────────────────
1326
+ - id: his-q3-1
1327
+ parent: his-q1-1
1328
+ category: history
1329
+ thread: growth
1330
+ complexity: conceptual
1331
+ text: "If Britain's Industrial Revolution required specific local conditions, are there countries today with similar setups that haven't industrialized fully? What's missing?"
1332
+
1333
+ - id: his-q3-2
1334
+ parent: his-q1-2
1335
+ category: history
1336
+ thread: connection
1337
+ complexity: theoretical
1338
+ text: "If the Silk Road's real value was idea/religion transmission, are there modern equivalents β€” networks where the trade is cover and the real exchange is information?"
1339
+
1340
+ - id: his-q3-3
1341
+ parent: his-q1-3
1342
+ category: history
1343
+ thread: time
1344
+ complexity: practical
1345
+ text: "If Roman patterns recur in democracies, what specifically should US-watchers be looking at right now? Or is 'pattern recognition' across centuries always cherry-picked retroactively?"
1346
+
1347
+ - id: his-q3-4
1348
+ parent: his-q1-4
1349
+ category: history
1350
+ thread: memory
1351
+ complexity: deep
1352
+ text: "Apollo's emotional weight came partly from being live, communal, uncertain. Is the modern parallel watching SpaceX online β€” or is it impossible to recreate that weight when engineering improvements make things more reliable?"
1353
+
1354
+ # ─── Chemistry ─────────────────────────────────────────────────────
1355
+ - id: chm-q3-1
1356
+ parent: chm-q1-1
1357
+ category: chemistry
1358
+ thread: energy
1359
+ complexity: pop_culture
1360
+ text: "Photosynthesis stores sun energy in chemical bonds. Burning fossil fuels releases that energy back. If we capture and re-store it through industrial processes, are we functionally just doing photosynthesis at industrial speed?"
1361
+
1362
+ - id: chm-q3-2
1363
+ parent: chm-q1-2
1364
+ category: chemistry
1365
+ thread: connection
1366
+ complexity: deep
1367
+ text: "Hydrogen bonds give water its anomalies. Are there other 'hydrogen-bond-equivalent' weak interactions that give other molecules unexpected behavior? What molecule has the most surprising emergent property from a small detail?"
1368
+
1369
+ - id: chm-q3-3
1370
+ parent: chm-q1-3
1371
+ category: chemistry
1372
+ thread: growth
1373
+ complexity: pop_culture
1374
+ text: "Battery degradation is partly mechanical (electrode cracking) and partly chemical (SEI layer growth). Solid-state batteries solve some of that. Where does the next bottleneck show up?"
1375
+
1376
+ - id: chm-q3-4
1377
+ parent: chm-q1-4
1378
+ category: chemistry
1379
+ thread: pattern
1380
+ complexity: deep
1381
+ text: "If click chemistry's reliability comes from specific structural features, can the principle be extended β€” could there be 'click biology' for protein engineering?"
1382
+
1383
+ # ─── Language / Linguistics ────────────────────────────────────────
1384
+ - id: lng-q3-1
1385
+ parent: lng-q1-1
1386
+ category: language
1387
+ thread: pattern
1388
+ complexity: theoretical
1389
+ text: "If smiles and laughter are universal but humor isn't (a joke that crosses cultures fine often falls flat in another), what's actually transferable about emotional expression vs not?"
1390
+
1391
+ - id: lng-q3-2
1392
+ parent: lng-q1-2
1393
+ category: language
1394
+ thread: memory
1395
+ complexity: pop_culture
1396
+ text: "Adult language learning produces an accent because the auditory cortex stops re-tuning around puberty. Is that lock-in for ALL phonemes, or just the phonemes you weren't exposed to early enough?"
1397
+
1398
+ - id: lng-q3-3
1399
+ parent: lng-q1-3
1400
+ category: language
1401
+ thread: conflict
1402
+ complexity: pop_culture
1403
+ text: "If Sapir-Whorf is hard to test rigorously, what would convince a hardcore universalist that language DOES shape thought? Or is the position effectively unfalsifiable?"
1404
+
1405
+ - id: lng-q3-4
1406
+ parent: lng-q1-4
1407
+ category: language
1408
+ thread: time
1409
+ complexity: conceptual
1410
+ text: "Some slang dies because the social group dies; some lives because it filled a real gap in the language. 'Cool' filled a gap. What real gap does 'mid' fill, and will it stay?"
1411
+
1412
+ # ─── Psychology ────────────────────────────────────────────────────
1413
+ - id: psy-q3-1
1414
+ parent: psy-q1-1
1415
+ category: psychology
1416
+ thread: memory
1417
+ complexity: theoretical
1418
+ text: "If working and long-term memory are different views of the same system, what's actually happening in 'memory consolidation' during sleep? Does sleep just reduce interference, or is something more specific going on?"
1419
+
1420
+ - id: psy-q3-2
1421
+ parent: psy-q1-2
1422
+ category: psychology
1423
+ thread: connection
1424
+ complexity: pop_culture
1425
+ text: "If we mirror people we're around, what about people we DON'T like? Do we anti-mirror them β€” adopt opposite traits to differentiate? Is that even a thing?"
1426
+
1427
+ - id: psy-q3-3
1428
+ parent: psy-q1-3
1429
+ category: psychology
1430
+ thread: conflict
1431
+ complexity: conceptual
1432
+ text: "Cognitive dissonance handles a single inconsistency. What about when you hold dozens of inconsistent beliefs at once β€” does the brain dissonance-resolve all of them simultaneously, or just whichever one becomes salient?"
1433
+
1434
+ - id: psy-q3-4
1435
+ parent: psy-q1-4
1436
+ category: psychology
1437
+ thread: growth
1438
+ complexity: deep
1439
+ text: "If personality is mostly stable but experiences can change behavior dramatically, where does that leave the question of 'who you really are'? Is 'real self' a useful concept or a confused one?"
1440
+
1441
+ # ─── Games / Strategy ──────────────────────────────────────────────
1442
+ - id: gms-q3-1
1443
+ parent: gms-q1-1
1444
+ category: games
1445
+ thread: pattern
1446
+ complexity: deep
1447
+ text: "If 5-minute-game design has a recipe, why have so many flagship mobile games failed at it? Is the recipe necessary-but-not-sufficient?"
1448
+
1449
+ - id: gms-q3-2
1450
+ parent: gms-q1-2
1451
+ category: games
1452
+ thread: conflict
1453
+ complexity: theoretical
1454
+ text: "If high-level online poker is essentially solved at the math level, what does 'getting better' even mean for top pros now? What's the next skill ceiling?"
1455
+
1456
+ - id: gms-q3-3
1457
+ parent: gms-q1-3
1458
+ category: games
1459
+ thread: time
1460
+ complexity: pop_culture
1461
+ text: "Computers solved chess endgames by brute force. Is the middle game resistant because it has more positions, or because evaluation in the middle game requires something other than position-counting?"
1462
+
1463
+ - id: gms-q3-4
1464
+ parent: gms-q1-4
1465
+ category: games
1466
+ thread: beauty
1467
+ complexity: deep
1468
+ text: "The Tetris effect (seeing falling blocks after long play sessions) shows up in other games too. What's it indicating about how the brain is restructuring during play, and is that restructuring useful elsewhere?"
1469
+
1470
+ # ─── Travel / Geography ────────────────────────────────────────────
1471
+ - id: trv-q3-1
1472
+ parent: trv-q1-1
1473
+ category: travel
1474
+ thread: connection
1475
+ complexity: deep
1476
+ text: "If a place feels familiar from a brief past visit, what about places that feel familiar from books or movies you've never visited? Is that a different mechanism or the same?"
1477
+
1478
+ - id: trv-q3-2
1479
+ parent: trv-q1-2
1480
+ category: travel
1481
+ thread: memory
1482
+ complexity: theoretical
1483
+ text: "If food travel-memories are vivid, what about smell memories from a place? Walking into a city and recognizing its smell years later β€” is that as durable as food memory or more fragile?"
1484
+
1485
+ - id: trv-q3-3
1486
+ parent: trv-q1-3
1487
+ category: travel
1488
+ thread: growth
1489
+ complexity: pop_culture
1490
+ text: "Tokyo and Rome show the difference. Apply the question: which modern city today is going to feel like a 'still itself' city in 100 years, and which will feel transformed beyond recognition?"
1491
+
1492
+ - id: trv-q3-4
1493
+ parent: trv-q1-4
1494
+ category: travel
1495
+ thread: time
1496
+ complexity: theoretical
1497
+ text: "If airport-crying is partly about flight specifically β€” speed, distance, irreversibility β€” what's the equivalent for an interstellar departure? Would astronauts on a generation ship cry differently than people on a flight?"
1498
+
1499
+ # ─── Art (Visual) ──────────────────────────────────────────────────
1500
+ - id: art-q3-1
1501
+ parent: art-q1-1
1502
+ category: art
1503
+ thread: pattern
1504
+ complexity: theoretical
1505
+ text: "Composition rules might be inherited from natural-vision statistics β€” humans evolved to find certain spatial arrangements meaningful. Does that mean an AI trained on different visual statistics would produce alien art that humans literally couldn't see as art?"
1506
+
1507
+ - id: art-q3-2
1508
+ parent: art-q1-2
1509
+ category: art
1510
+ thread: beauty
1511
+ complexity: pop_culture
1512
+ text: "If great art's structural property exists but eludes engineering, is that because it's emergent β€” only visible after the fact β€” or because it's actually socially/culturally constructed and there IS no underlying property?"
1513
+
1514
+ - id: art-q3-3
1515
+ parent: art-q1-3
1516
+ category: art
1517
+ thread: energy
1518
+ complexity: practical
1519
+ text: "If we measure aesthetic response physiologically, could we discover that people who say they love a piece actually have weaker physiological response than people who say they don't? What would that mean about 'taste'?"
1520
+
1521
+ - id: art-q3-4
1522
+ parent: art-q1-4
1523
+ category: art
1524
+ thread: memory
1525
+ complexity: deep
1526
+ text: "If parody-first exposure doesn't immunize you from the original's impact, what's the threshold for actual immunization? Would seeing it 50 times before the original do it? 500?"
1527
+
1528
+ # ─── Subversion ────────────────────────────────────────────────────
1529
+ - id: sub-q3-1
1530
+ parent: sub-q1-1
1531
+ category: subversion
1532
+ thread: pattern
1533
+ complexity: theoretical
1534
+ text: "Beyond misdirection, are there riddle structures based on changing a word's meaning mid-sentence, or on requiring impossible knowledge that turns out trivial? What other 'riddle types' actually exist?"
1535
+
1536
+ - id: sub-q3-2
1537
+ parent: sub-q1-2
1538
+ category: subversion
1539
+ thread: conflict
1540
+ complexity: deep
1541
+ text: "If updating-vs-doubling-down is really about identity protection (the belief is part of who you think you are), are there real techniques for separating beliefs from identity? Or is that fighting human nature?"
1542
+
1543
+ - id: sub-q3-3
1544
+ parent: sub-q1-3
1545
+ category: subversion
1546
+ thread: beauty
1547
+ complexity: conceptual
1548
+ text: "If earned subversion has a structural prerequisite, what is it? The story has to set up its own subversion fairly β€” the camera shot that shows the twist but you didn't see it the first time."
1549
+
1550
+ - id: sub-q3-4
1551
+ parent: sub-q1-4
1552
+ category: subversion
1553
+ thread: memory
1554
+ complexity: practical
1555
+ text: "On rewatch, you notice the actor's choices that signal the truth without revealing it. Is the rewatch experience BETTER than the first watch in some way? Most twist movies aren't β€” what makes The Sixth Sense different?"