@tpsdev-ai/flair-bench 0.22.0

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.
@@ -0,0 +1,1087 @@
1
+ /**
2
+ * corpus-v2.ts — SYNCED COPY of test/bench/recall-harness/corpus-v2.ts
3
+ * (the flair recall-eval harness's eval instrument v2).
4
+ *
5
+ * flair-bench ships standalone (npx-able, no monorepo checkout required at
6
+ * runtime), so it cannot import the harness's corpus at runtime from
7
+ * test/bench/ — that directory is dev-only and excluded from the published
8
+ * package. This file is a build-time copy kept faithful by
9
+ * test/corpus-sync.test.ts, which deep-equals this file's exported CORPUS
10
+ * and QUERIES against the live harness source on every `bun test` run
11
+ * inside the monorepo checkout — any drift fails CI loudly. Regenerate with
12
+ * `bun run sync:corpus` (packages/flair-bench/scripts/sync-corpus.mjs)
13
+ * whenever the harness corpus changes.
14
+ *
15
+ * Below this header, content is byte-for-byte the harness's corpus-v2.ts —
16
+ * see that file for the full design rationale (near-duplicate clusters,
17
+ * cross-cluster lexical traps, durability/recency stress pairs).
18
+ *
19
+ * ORIGINAL HEADER (test/bench/recall-harness/corpus-v2.ts):
20
+ *
21
+ * * corpus-v2.ts — eval instrument v2: a larger, harder synthetic corpus +
22
+ * ground-truth query set for the isolated recall-eval harness
23
+ * (test/bench/recall-harness/run.ts, --corpus v2).
24
+ *
25
+ * WHY THIS EXISTS (vs. corpus.ts / v1): v1 is 87 records / 30 queries. A
26
+ * flair#504 Phase 2 prefix A/B on v1 measured a small regression (p@3
27
+ * 0.967→0.933) that is, at N=30, just 1-2 queries shifting rank — not enough
28
+ * queries for the instrument to tell "ship" from "park" apart from noise. v2
29
+ * exists to have enough queries per "kind" (see QueryKind below) that a
30
+ * kind-level delta is a real signal, not a coin flip. v2 does NOT replace v1
31
+ * — v1's frozen numbers (README.md) stay reproducible verbatim by never
32
+ * touching corpus.ts; v2 is additive and becomes the standing gate for
33
+ * future embedding/scoring changes (larger N, same design principles).
34
+ *
35
+ * DESIGN — same three axes as v1, just wider:
36
+ * 1. NEAR-DUPLICATE / ADJACENT DENSITY — every cluster below holds one or
37
+ * two pairs of records about the SAME narrow sub-topic from different
38
+ * angles (see each record's "Near-dup facet of X" note). A "hard" query
39
+ * targets the specific facet, with the sibling as the plausible
40
+ * rank-2/3 confusion.
41
+ * 2. CROSS-CLUSTER LEXICAL "TRAP" PAIRS — three genuinely different-domain
42
+ * cluster pairs deliberately share one pivotal, ambiguous term used in
43
+ * a different sense in each domain, with high token overlap:
44
+ * - DBSTORE (database internals) ↔ FINOPS (finance operations): "transaction"
45
+ * - GITWF (git branching workflows) ↔ HORTIC (gardening/horticulture): "branch"
46
+ * - MUSICPROD (music production) ↔ SPORTAN (sports analytics): "score"
47
+ * Every record in a trap-pair cluster uses its cluster's sense of the
48
+ * shared term naturally and prominently (not shoehorned in for the
49
+ * trap alone) — the trap only works if the token overlap is real.
50
+ * 3. VARIED DURABILITY + createdAt (recency) — 17 of the 30 clusters carry
51
+ * a deliberate "stress pair": one older, standard/persistent-durability
52
+ * CORRECT record vs. a same-topic, fresh (~2-4 day) permanent-durability
53
+ * DISTRACTOR sibling — the same composite-vs-raw discriminator
54
+ * mechanism v1 uses (see corpus.ts's header and flair#623). The
55
+ * remaining records in every cluster (stress or not) still spread
56
+ * naturally across all four durability levels and a wide age range
57
+ * (~4-100 days), not just the engineered stress pairs.
58
+ *
59
+ * 30 topic clusters, genuinely different domains (distributed systems,
60
+ * medical scheduling, logistics, cooking, astronomy, legal contracts,
61
+ * fitness, team process, home renovation, marine biology, typography,
62
+ * database internals, finance ops, git workflow, horticulture, music
63
+ * production, sports analytics, cloud infra, winemaking, ornithology,
64
+ * carpentry, meteorology, chess, photography, aviation, insurance,
65
+ * archaeology, perfumery, ceramics, linguistics), 9 records each = 270
66
+ * records.
67
+ *
68
+ * ALL content below is authored synthetic prose — no real memories, no real
69
+ * project/people/host/key names, nothing copied from ~/ops or any
70
+ * production corpus. Every domain fact is invented-but-plausible, written
71
+ * fresh for this file.
72
+ *
73
+ * GROUND TRUTH: identical convention to v1 (see corpus.ts's header) — every
74
+ * query was written by hand against ONE specific record, then checked that
75
+ * no other record in the corpus answers the query's literal question as
76
+ * directly. See QueryKind below for what each kind tests.
77
+ *
78
+ * ageDays is relative to seed time (computed fresh by run.ts on every seed),
79
+ * matching v1.
80
+ */
81
+ // ─── Corpus: 30 clusters, 270 records ───────────────────────────────────────
82
+ export const CORPUS = [
83
+ // ── DISTSYS: distributed systems (9) — stress cluster ─────────────────────
84
+ { marker: "DISTSYS::1", cluster: "DISTSYS", durability: "standard", ageDays: 85,
85
+ text: "A gossip protocol spreads state changes through a cluster the way a rumor spreads through a crowd: each node periodically picks a few random peers and shares what it knows, and within a handful of rounds every reachable node has converged on the same picture without any single broadcast.",
86
+ note: "STRESS CORRECT (vs DISTSYS::4): older + standard durability." },
87
+ { marker: "DISTSYS::2", cluster: "DISTSYS", durability: "persistent", ageDays: 70,
88
+ text: "A vector clock timestamps an event with one counter per node instead of a single wall-clock time, which lets two nodes compare their histories and tell whether one event definitely happened before another or whether the two are truly concurrent." },
89
+ { marker: "DISTSYS::3", cluster: "DISTSYS", durability: "standard", ageDays: 45,
90
+ text: "Vector clocks grow linearly with the number of nodes that have ever touched the data, which is why long-lived systems with high node churn often swap them for a more compact causality summary once the clock itself becomes the bulk of the payload.",
91
+ note: "Near-dup facet of DISTSYS::2 (vector-clock cost/limitation vs the base mechanism)." },
92
+ { marker: "DISTSYS::4", cluster: "DISTSYS", durability: "permanent", ageDays: 3,
93
+ text: "An anti-entropy repair pass compares two replicas' Merkle trees and only ships the branches that actually differ, letting a gossip-based cluster catch a node back up to the group without replaying its entire history.",
94
+ note: "STRESS DISTRACTOR for DISTSYS::1: fresh + permanent, adjacent gossip-repair topic." },
95
+ { marker: "DISTSYS::5", cluster: "DISTSYS", durability: "standard", ageDays: 55,
96
+ text: "A CRDT is a data structure engineered so that any two replicas can merge their independent updates and always land on the same final value, regardless of the order the updates arrive in or whether some arrive more than once." },
97
+ { marker: "DISTSYS::6", cluster: "DISTSYS", durability: "standard", ageDays: 30,
98
+ text: "A grow-only counter CRDT tracks a separate increment tally per replica and sums them to read the total, which is what makes concurrent increments from different replicas commutative — merging never has to pick a winner.",
99
+ note: "Near-dup facet of DISTSYS::5 (concrete CRDT example vs the general merge guarantee)." },
100
+ { marker: "DISTSYS::7", cluster: "DISTSYS", durability: "standard", ageDays: 20,
101
+ text: "Sharding splits a dataset across many nodes by key range or hash, so no single node has to hold or serve the whole dataset, but a query that spans shards now needs a fan-out and a merge step it wouldn't have needed on a single node." },
102
+ { marker: "DISTSYS::8", cluster: "DISTSYS", durability: "standard", ageDays: 12,
103
+ text: "Replication lag is the gap between when a write lands on the primary and when a given replica has applied it; reading from a lagging replica can return data that's already stale even though the write itself fully succeeded." },
104
+ { marker: "DISTSYS::9", cluster: "DISTSYS", durability: "persistent", ageDays: 95,
105
+ text: "The CAP theorem says a distributed system facing a network partition has to choose between staying available and staying perfectly consistent — it cannot promise both at once during the partition, only afterward once the network heals." },
106
+ // ── MEDSCHED: medical scheduling (9) — stress cluster ─────────────────────
107
+ { marker: "MEDSCHED::1", cluster: "MEDSCHED", durability: "persistent", ageDays: 80,
108
+ text: "Double-booking a follow-up slot on purpose only works when the clinic tracks historical no-show rates per provider and caps the overbook to roughly that rate, otherwise a low-no-show day turns into patients stacked up in the waiting room for an hour.",
109
+ note: "STRESS CORRECT (vs MEDSCHED::4): older + persistent durability." },
110
+ { marker: "MEDSCHED::2", cluster: "MEDSCHED", durability: "standard", ageDays: 50,
111
+ text: "A recall list flags patients who are overdue for a routine visit — an annual physical, a dental cleaning, a medication review — so the front desk can proactively reach out instead of waiting for the patient to notice and call in themselves." },
112
+ { marker: "MEDSCHED::3", cluster: "MEDSCHED", durability: "standard", ageDays: 25,
113
+ text: "Recall outreach that goes out by text gets a meaningfully higher response rate than a mailed postcard for the same overdue-visit list, mostly because the reply-to-confirm step takes ten seconds instead of a stamp and a trip to the mailbox.",
114
+ note: "Near-dup facet of MEDSCHED::2 (recall-outreach channel vs the recall-list concept itself)." },
115
+ { marker: "MEDSCHED::4", cluster: "MEDSCHED", durability: "permanent", ageDays: 2,
116
+ text: "A same-day sick-visit block reserved every morning keeps acute patients from displacing the day's already-scheduled follow-ups, at the cost of those slots going unused and wasted on a light sick-visit day.",
117
+ note: "STRESS DISTRACTOR for MEDSCHED::1: fresh + permanent, adjacent scheduling-policy topic." },
118
+ { marker: "MEDSCHED::5", cluster: "MEDSCHED", durability: "standard", ageDays: 35,
119
+ text: "A pre-visit questionnaire sent the day before an appointment lets the provider walk in already knowing the chief complaint, which shortens the actual visit and reduces the odds of a same-day slot running long into the next patient's time." },
120
+ { marker: "MEDSCHED::6", cluster: "MEDSCHED", durability: "standard", ageDays: 15,
121
+ text: "Collecting insurance and copay information through the same pre-visit questionnaire — instead of at check-in — moves that friction out of the waiting room and cuts the average check-in time by several minutes.",
122
+ note: "Near-dup facet of MEDSCHED::5 (pre-visit intake for billing vs for clinical prep)." },
123
+ { marker: "MEDSCHED::7", cluster: "MEDSCHED", durability: "standard", ageDays: 45,
124
+ text: "Scheduling a longer slot for a new-patient visit than a returning one accounts for the extra time spent on intake history, medication reconciliation, and consent paperwork that a returning patient's chart already has on file." },
125
+ { marker: "MEDSCHED::8", cluster: "MEDSCHED", durability: "standard", ageDays: 18,
126
+ text: "A provider's template — the pattern of slot lengths and appointment types across their day — has to be rebuilt whenever their clinic hours change, or the scheduling system keeps offering slot lengths that no longer match how long that provider actually needs per visit type." },
127
+ { marker: "MEDSCHED::9", cluster: "MEDSCHED", durability: "standard", ageDays: 60,
128
+ text: "Automated appointment reminders sent 48 hours out catch a cancellation early enough for the slot to be rebooked, while a reminder sent the morning of mostly just confirms attendance without leaving any time to fill a no-show." },
129
+ // ── LOGISTICS: supply-chain logistics (9) — stress cluster ────────────────
130
+ { marker: "LOGISTICS::1", cluster: "LOGISTICS", durability: "standard", ageDays: 75,
131
+ text: "Cross-docking moves inbound freight straight from the receiving dock to an outbound truck without ever putting it into storage, which only pays off when inbound and outbound schedules are coordinated tightly enough that the freight isn't just sitting on the dock floor instead of a shelf.",
132
+ note: "STRESS CORRECT (vs LOGISTICS::4): older + standard durability." },
133
+ { marker: "LOGISTICS::2", cluster: "LOGISTICS", durability: "persistent", ageDays: 65,
134
+ text: "A milk run route picks up small quantities from several suppliers on a fixed loop and consolidates them into one truckload, trading a longer collection route for far fewer individual less-than-truckload shipments." },
135
+ { marker: "LOGISTICS::3", cluster: "LOGISTICS", durability: "standard", ageDays: 40,
136
+ text: "The efficiency of a milk run depends entirely on the loop's stop sequence — a route drawn without regard to supplier geography can end up longer and less efficient than just running separate direct shipments.",
137
+ note: "Near-dup facet of LOGISTICS::2 (route-design failure mode vs the base concept)." },
138
+ { marker: "LOGISTICS::4", cluster: "LOGISTICS", durability: "permanent", ageDays: 3,
139
+ text: "A just-in-sequence delivery times parts to arrive at the assembly line in the exact order they'll be installed, not just the right quantity on the right day, which is a tighter and more fragile promise than ordinary just-in-time.",
140
+ note: "STRESS DISTRACTOR for LOGISTICS::1: fresh + permanent, adjacent delivery-timing strategy." },
141
+ { marker: "LOGISTICS::5", cluster: "LOGISTICS", durability: "standard", ageDays: 30,
142
+ text: "Safety stock exists specifically to absorb the gap between forecasted and actual demand during the lead time it takes to reorder, not to cover a permanent increase in demand — that needs a higher reorder point, not more safety stock." },
143
+ { marker: "LOGISTICS::6", cluster: "LOGISTICS", durability: "standard", ageDays: 22,
144
+ text: "Setting safety stock too high just converts a stockout risk into a carrying-cost and obsolescence risk instead, which is why it's sized against demand variability and lead-time variability specifically, not padded arbitrarily 'to be safe.'",
145
+ note: "Near-dup facet of LOGISTICS::5 (sizing tradeoff vs the base purpose)." },
146
+ { marker: "LOGISTICS::7", cluster: "LOGISTICS", durability: "standard", ageDays: 50,
147
+ text: "A third-party logistics provider that only handles warehousing and outbound shipping is a 3PL, but one that also plans and optimizes the whole supply-chain flow on the client's behalf is usually called a 4PL instead." },
148
+ { marker: "LOGISTICS::8", cluster: "LOGISTICS", durability: "ephemeral", ageDays: 12,
149
+ text: "Last-mile delivery is disproportionately the most expensive leg of a shipment's whole journey, because a single truck making dozens of small residential stops burns far more cost per package than the long-haul trunk route that got it most of the way there." },
150
+ { marker: "LOGISTICS::9", cluster: "LOGISTICS", durability: "persistent", ageDays: 90,
151
+ text: "A bill of lading is both a receipt for the freight and the actual contract of carriage between shipper and carrier, which is why the carrier is legally required to deliver exactly what the bill of lading describes, not just whatever showed up at the dock." },
152
+ // ── COOKING: cooking technique (9) — stress cluster ────────────────────────
153
+ { marker: "COOKING::1", cluster: "COOKING", durability: "standard", ageDays: 70,
154
+ text: "Searing meat at high heat browns the surface through the Maillard reaction, building a savory crust and hundreds of new flavor compounds — it doesn't 'seal in juices' the way the old kitchen myth claims, but the flavor payoff is real regardless.",
155
+ note: "STRESS CORRECT (vs COOKING::4): older + standard durability." },
156
+ { marker: "COOKING::2", cluster: "COOKING", durability: "persistent", ageDays: 60,
157
+ text: "Deglazing a pan means adding a splash of liquid — wine, stock, even water — to a hot pan right after searing, to dissolve the browned bits stuck to the bottom into the base of a sauce instead of letting them burn and go to waste." },
158
+ { marker: "COOKING::3", cluster: "COOKING", durability: "standard", ageDays: 28,
159
+ text: "Wine is a common deglazing liquid specifically because its acidity helps lift the fond off the pan faster than a neutral liquid like water or stock would, on top of adding its own flavor to the sauce.",
160
+ note: "Near-dup facet of COOKING::2 (why wine specifically vs the deglazing technique itself)." },
161
+ { marker: "COOKING::4", cluster: "COOKING", durability: "permanent", ageDays: 2,
162
+ text: "A reverse sear cooks meat low and slow in the oven first, then finishes it with a hard, fast sear at the very end — the opposite order of a traditional sear-then-roast — which gives more even doneness edge to edge.",
163
+ note: "STRESS DISTRACTOR for COOKING::1: fresh + permanent, adjacent searing technique." },
164
+ { marker: "COOKING::5", cluster: "COOKING", durability: "standard", ageDays: 35,
165
+ text: "Resting meat after cooking lets the muscle fibers relax and the juices redistribute evenly through the cut, instead of running straight out onto the cutting board the moment you slice into it hot off the heat." },
166
+ { marker: "COOKING::6", cluster: "COOKING", durability: "standard", ageDays: 15,
167
+ text: "A larger roast needs a longer rest than a thin steak — the temperature gradient from surface to center is bigger, so it takes more time for the whole cut to even out, not just for the juices to stop running.",
168
+ note: "Near-dup facet of COOKING::5 (rest duration by cut size vs the basic resting mechanism)." },
169
+ { marker: "COOKING::7", cluster: "COOKING", durability: "standard", ageDays: 45,
170
+ text: "Blanching drops vegetables briefly into boiling water and then straight into ice water, which stops the cooking instantly and locks in a bright color that would otherwise dull if the vegetable kept cooking in its own residual heat." },
171
+ { marker: "COOKING::8", cluster: "COOKING", durability: "standard", ageDays: 20,
172
+ text: "Emulsifying oil into egg yolk one drop at a time, whisking constantly, is what turns two separated liquids into a stable mayonnaise — add the oil too fast before the emulsion is established and it 'breaks' back into a greasy mess." },
173
+ { marker: "COOKING::9", cluster: "COOKING", durability: "ephemeral", ageDays: 8,
174
+ text: "Salting pasta water heavily, well past what tastes right in a spoonful, is necessary because the pasta itself only absorbs a small fraction of that salt as it cooks — a lightly salted pot leaves the noodles bland no matter how well the sauce is seasoned." },
175
+ // ── ASTRONOMY: astronomy (9) — stress cluster ──────────────────────────────
176
+ { marker: "ASTRONOMY::1", cluster: "ASTRONOMY", durability: "standard", ageDays: 80,
177
+ text: "A star's color reveals its surface temperature directly — blue-white stars burn hottest, red stars are coolest — which is why astronomers can rank a star's temperature at a glance on the H-R diagram just from its position along that color axis.",
178
+ note: "STRESS CORRECT (vs ASTRONOMY::4): older + standard durability." },
179
+ { marker: "ASTRONOMY::2", cluster: "ASTRONOMY", durability: "persistent", ageDays: 65,
180
+ text: "A transit is what happens when a planet passes directly between its star and an observer, dimming the star's light by a tiny, measurable fraction — it's the main way exoplanets orbiting distant stars get discovered at all." },
181
+ { marker: "ASTRONOMY::3", cluster: "ASTRONOMY", durability: "standard", ageDays: 30,
182
+ text: "The depth of a transit's dip in starlight scales with the planet's size relative to its star, which is why the transit method is much better at finding large planets around small stars than small planets around large ones.",
183
+ note: "Near-dup facet of ASTRONOMY::2 (what the dip depth reveals vs the transit concept itself)." },
184
+ { marker: "ASTRONOMY::4", cluster: "ASTRONOMY", durability: "permanent", ageDays: 3,
185
+ text: "A star's spectral lines shift toward red when it's moving away from us and toward blue when it's moving closer — the same Doppler effect that changes a siren's pitch — and it's the other main way an orbiting exoplanet gets detected, via the star's tiny wobble.",
186
+ note: "STRESS DISTRACTOR for ASTRONOMY::1: fresh + permanent, adjacent stellar-observation topic." },
187
+ { marker: "ASTRONOMY::5", cluster: "ASTRONOMY", durability: "standard", ageDays: 40,
188
+ text: "A red giant is what a sun-like star becomes once it exhausts the hydrogen fusing in its core: the core contracts and heats up while the outer layers balloon outward and cool, which is exactly why a star that used to be white-hot turns red and enormous." },
189
+ { marker: "ASTRONOMY::6", cluster: "ASTRONOMY", durability: "standard", ageDays: 18,
190
+ text: "A red giant's outer layers are so tenuous that if the Sun became one, its expanded surface could reach out past Earth's current orbit — the star gets far larger in volume even though its total mass barely changes.",
191
+ note: "Near-dup facet of ASTRONOMY::5 (how large a red giant actually gets vs why it happens)." },
192
+ { marker: "ASTRONOMY::7", cluster: "ASTRONOMY", durability: "standard", ageDays: 55,
193
+ text: "Light from a galaxy a billion light-years away left it a billion years ago, so looking at a very distant object is the same as looking directly back in time to see what the universe looked like back then." },
194
+ { marker: "ASTRONOMY::8", cluster: "ASTRONOMY", durability: "standard", ageDays: 25,
195
+ text: "A supernova briefly outshines its entire host galaxy, and for a specific type — the one caused by a white dwarf tipping over a fixed mass threshold — the peak brightness is so consistent that astronomers use it as a 'standard candle' to measure cosmic distances." },
196
+ { marker: "ASTRONOMY::9", cluster: "ASTRONOMY", durability: "persistent", ageDays: 100,
197
+ text: "Dark matter doesn't emit or absorb light at all, so its existence is inferred entirely from its gravity — specifically, galaxies rotate as if they're embedded in far more mass than the visible stars and gas account for." },
198
+ // ── LEGAL: legal contracts (9) — stress cluster ────────────────────────────
199
+ { marker: "LEGAL::1", cluster: "LEGAL", durability: "standard", ageDays: 85,
200
+ text: "A force majeure clause excuses a party from performing the contract when an extraordinary event outside anyone's control — a natural disaster, a war, a government order — makes performance impossible, but it doesn't excuse a party just because the deal became more expensive or inconvenient.",
201
+ note: "STRESS CORRECT (vs LEGAL::4): older + standard durability." },
202
+ { marker: "LEGAL::2", cluster: "LEGAL", durability: "persistent", ageDays: 70,
203
+ text: "An indemnification clause shifts the financial responsibility for a specific category of loss from one party onto the other, effectively making one side promise to cover the other's costs if that particular kind of claim comes up." },
204
+ { marker: "LEGAL::3", cluster: "LEGAL", durability: "standard", ageDays: 32,
205
+ text: "The scope of an indemnification clause — which specific claims it covers — matters far more in practice than the fact that indemnification exists at all; a narrowly drafted clause can leave a party exposed to exactly the risk they thought they'd shifted away.",
206
+ note: "Near-dup facet of LEGAL::2 (scope-drafting risk vs the basic mechanism)." },
207
+ { marker: "LEGAL::4", cluster: "LEGAL", durability: "permanent", ageDays: 4,
208
+ text: "A liquidated damages clause sets a specific, pre-agreed dollar amount owed if a party breaches, sidestepping a costly after-the-fact argument over what the actual damages were — but courts will strike it down as an unenforceable penalty if the amount isn't a genuine, reasonable pre-estimate of the harm.",
209
+ note: "STRESS DISTRACTOR for LEGAL::1: fresh + permanent, adjacent contract-risk-allocation topic." },
210
+ { marker: "LEGAL::5", cluster: "LEGAL", durability: "standard", ageDays: 45,
211
+ text: "A non-compete clause restricts where a departing party can work or operate afterward, and its enforceability varies enormously by jurisdiction — some states enforce them broadly, others refuse to enforce them at all regardless of how narrowly they're written." },
212
+ { marker: "LEGAL::6", cluster: "LEGAL", durability: "standard", ageDays: 20,
213
+ text: "Courts that DO enforce non-compete clauses still usually 'blue-pencil' an overly broad one down to something reasonable in scope and duration rather than voiding it outright, which means drafting one too aggressively doesn't actually cost nothing — it just gets rewritten by a judge instead.",
214
+ note: "Near-dup facet of LEGAL::5 (what happens to an overbroad clause vs enforceability variation itself)." },
215
+ { marker: "LEGAL::7", cluster: "LEGAL", durability: "standard", ageDays: 50,
216
+ text: "An assignment clause controls whether either party can transfer their rights and obligations under the contract to someone else — silent on this, most contracts default to freely assignable, which is why many are drafted to require the other party's consent first." },
217
+ { marker: "LEGAL::8", cluster: "LEGAL", durability: "standard", ageDays: 15,
218
+ text: "A survival clause lists which specific obligations — confidentiality is the classic example — stay binding even after the rest of the contract has expired or been terminated, since without one most obligations simply end when the contract does." },
219
+ { marker: "LEGAL::9", cluster: "LEGAL", durability: "persistent", ageDays: 92,
220
+ text: "A merger clause (also called an integration clause) states that the written contract is the complete agreement between the parties, which blocks either side from later pointing to an earlier verbal promise or draft term that never made it into the final signed version." },
221
+ // ── FITNESS: strength/endurance training (9) — stress cluster ─────────────
222
+ { marker: "FITNESS::1", cluster: "FITNESS", durability: "standard", ageDays: 78,
223
+ text: "Progressive overload — gradually increasing weight, reps, or volume over time — is the single mechanism that actually drives strength and muscle gains long-term; without it, the body has no reason to adapt beyond whatever stimulus it's already used to.",
224
+ note: "STRESS CORRECT (vs FITNESS::4): older + standard durability." },
225
+ { marker: "FITNESS::2", cluster: "FITNESS", durability: "persistent", ageDays: 68,
226
+ text: "Delayed onset muscle soreness peaks around 24 to 48 hours after a hard workout, not immediately after, because the micro-tears and resulting inflammation take time to build rather than being an instant reaction to the exercise itself." },
227
+ { marker: "FITNESS::3", cluster: "FITNESS", durability: "standard", ageDays: 33,
228
+ text: "Soreness intensity is a poor proxy for how effective a workout actually was — a novel exercise the body isn't adapted to can cause severe soreness with modest training benefit, while a well-adapted routine can drive real progress with almost none.",
229
+ note: "Near-dup facet of FITNESS::2 (soreness-as-proxy fallacy vs the timing mechanism itself)." },
230
+ { marker: "FITNESS::4", cluster: "FITNESS", durability: "permanent", ageDays: 2,
231
+ text: "Autoregulation adjusts a workout's planned load in real time based on how a lifter actually feels that day — using a perceived-effort scale or bar-speed as the guide — rather than sticking rigidly to a number written down weeks in advance.",
232
+ note: "STRESS DISTRACTOR for FITNESS::1: fresh + permanent, adjacent training-methodology topic." },
233
+ { marker: "FITNESS::5", cluster: "FITNESS", durability: "standard", ageDays: 40,
234
+ text: "A deload week deliberately cuts training volume or intensity for a short period, giving accumulated fatigue a chance to dissipate before it turns into a nagging injury or a performance plateau that a harder workout can't push through." },
235
+ { marker: "FITNESS::6", cluster: "FITNESS", durability: "standard", ageDays: 22,
236
+ text: "The right deload frequency depends on how aggressively someone trains — a lifter pushing near-maximal effort every session needs one far more often than someone training comfortably under their limits week to week.",
237
+ note: "Near-dup facet of FITNESS::5 (deload frequency/dosing vs the base purpose)." },
238
+ { marker: "FITNESS::7", cluster: "FITNESS", durability: "standard", ageDays: 48,
239
+ text: "Easy-paced cardio — a pace where conversation stays comfortable — is deliberately slow because it's specifically training the aerobic base and mitochondrial efficiency that harder intervals don't touch, not because easy is inherently better than hard." },
240
+ { marker: "FITNESS::8", cluster: "FITNESS", durability: "standard", ageDays: 14,
241
+ text: "Protein timing around a workout matters far less than total daily protein intake; a lifter hitting their daily target has captured nearly all the muscle-protein-synthesis benefit regardless of whether that protein arrived right after training or spread across the day." },
242
+ { marker: "FITNESS::9", cluster: "FITNESS", durability: "ephemeral", ageDays: 10,
243
+ text: "Grip strength fails before the target muscle does in a lot of pulling exercises, which is exactly the problem lifting straps solve — they let a lifter keep loading the back or hamstrings past the point their hands alone could hold on." },
244
+ // ── TEAMPROC: team process (9) — stress cluster ────────────────────────────
245
+ { marker: "TEAMPROC::1", cluster: "TEAMPROC", durability: "standard", ageDays: 82,
246
+ text: "A blameless postmortem focuses on what conditions let a mistake happen and slip through, not on who made it — the moment a postmortem starts assigning personal fault, people quietly stop volunteering the details that would have actually explained the failure.",
247
+ note: "STRESS CORRECT (vs TEAMPROC::4): older + standard durability." },
248
+ { marker: "TEAMPROC::2", cluster: "TEAMPROC", durability: "persistent", ageDays: 62,
249
+ text: "Written async updates work better than a status meeting for a distributed team across time zones specifically because nobody has to be awake at the same moment to both give and receive the update." },
250
+ { marker: "TEAMPROC::3", cluster: "TEAMPROC", durability: "standard", ageDays: 27,
251
+ text: "An async update that's just a wall of text without a clear 'here's what I need from you' ask tends to get skimmed and ignored — the format that actually works pairs the status with an explicit next action or decision needed.",
252
+ note: "Near-dup facet of TEAMPROC::2 (what makes an async update effective vs why async works at all)." },
253
+ { marker: "TEAMPROC::4", cluster: "TEAMPROC", durability: "permanent", ageDays: 3,
254
+ text: "A decision log records what was decided, by whom, and why, in one searchable place, so six months later nobody has to reconstruct a design rationale from memory or dig through a months-old chat thread.",
255
+ note: "STRESS DISTRACTOR for TEAMPROC::1: fresh + permanent, adjacent process-hygiene topic." },
256
+ { marker: "TEAMPROC::5", cluster: "TEAMPROC", durability: "standard", ageDays: 38,
257
+ text: "A team charter written at kickoff — how decisions get made, how conflict gets resolved, what 'done' means — saves far more time than it costs, because those exact questions come up eventually anyway, just at a worse moment if they're not already answered." },
258
+ { marker: "TEAMPROC::6", cluster: "TEAMPROC", durability: "standard", ageDays: 16,
259
+ text: "The specific clause worth spelling out in a team charter is the tie-breaker rule — who makes the final call when a discussion genuinely can't converge — because that's the one gap that turns into a stalled decision instead of just a slower one.",
260
+ note: "Near-dup facet of TEAMPROC::5 (the tie-breaker specifically vs the charter's general value)." },
261
+ { marker: "TEAMPROC::7", cluster: "TEAMPROC", durability: "standard", ageDays: 44,
262
+ text: "A pre-mortem asks 'imagine this project failed — why did it fail?' before the work even starts, which surfaces risks people would otherwise only raise after it's too late to plan around them." },
263
+ { marker: "TEAMPROC::8", cluster: "TEAMPROC", durability: "standard", ageDays: 19,
264
+ text: "Estimation accuracy improves more from breaking a task down into smaller pieces than from getting better at estimating the big piece directly — the error in a large estimate compounds in ways that smaller, more concrete pieces don't." },
265
+ { marker: "TEAMPROC::9", cluster: "TEAMPROC", durability: "persistent", ageDays: 88,
266
+ text: "A team's definition of done should live in one place everyone actually reads, not scattered across each person's private understanding of what 'finished' means — that gap is exactly where 'done' work that's actually half-done ships from." },
267
+ // ── HOMERENO: home renovation (9) — stress cluster ─────────────────────────
268
+ { marker: "HOMERENO::1", cluster: "HOMERENO", durability: "standard", ageDays: 76,
269
+ text: "A load-bearing wall carries weight from the structure above down through itself to the foundation, which is why removing one requires a temporary support beam and, in most jurisdictions, an engineer's sign-off — not just a sledgehammer and confidence.",
270
+ note: "STRESS CORRECT (vs HOMERENO::4): older + standard durability." },
271
+ { marker: "HOMERENO::2", cluster: "HOMERENO", durability: "persistent", ageDays: 66,
272
+ text: "A permit is required for most structural, electrical, and plumbing work specifically because an inspector needs to verify it before it gets covered up by drywall — skipping the permit doesn't just risk a fine, it risks having to tear open finished work later to prove it was done right." },
273
+ { marker: "HOMERENO::3", cluster: "HOMERENO", durability: "standard", ageDays: 29,
274
+ text: "Selling a house with unpermitted work attached to it can tank the sale or the appraisal entirely if it surfaces during inspection, which is why the permit question matters well beyond the renovation itself.",
275
+ note: "Near-dup facet of HOMERENO::2 (resale consequence vs the inspection reason itself)." },
276
+ { marker: "HOMERENO::4", cluster: "HOMERENO", durability: "permanent", ageDays: 2,
277
+ text: "A load-bearing wall usually reveals itself by running perpendicular to the floor joists above it and lining up with a wall or beam on the floor below, though the only way to be certain is checking the original structural plans or having someone qualified look at the framing directly.",
278
+ note: "STRESS DISTRACTOR for HOMERENO::1: fresh + permanent, adjacent structural-identification topic." },
279
+ { marker: "HOMERENO::5", cluster: "HOMERENO", durability: "standard", ageDays: 42,
280
+ text: "Vapor barrier placement depends entirely on climate — it goes on the warm-in-winter side of the insulation, which means the opposite wall face in a cold northern climate versus a hot humid southern one; installing it on the wrong side traps moisture in the wall instead of keeping it out." },
281
+ { marker: "HOMERENO::6", cluster: "HOMERENO", durability: "standard", ageDays: 17,
282
+ text: "Trapped moisture behind a vapor barrier installed on the wrong side doesn't show up right away — it usually takes a full season or two of condensation cycles before mold or rot becomes visible, by which point the wall cavity has been quietly wet for months.",
283
+ note: "Near-dup facet of HOMERENO::5 (consequence timeline vs the placement rule itself)." },
284
+ { marker: "HOMERENO::7", cluster: "HOMERENO", durability: "standard", ageDays: 50,
285
+ text: "GFCI outlets are required anywhere water might be present — kitchens, bathrooms, garages, outdoor outlets — because they cut power within milliseconds of detecting a ground fault, fast enough to prevent a fatal shock that a standard breaker wouldn't catch in time." },
286
+ { marker: "HOMERENO::8", cluster: "HOMERENO", durability: "standard", ageDays: 21,
287
+ text: "Underlayment under hardwood flooring does more than cushion footsteps — it also evens out minor subfloor imperfections and adds a moisture barrier, both of which matter more to how the floor ages than to how it feels underfoot on day one." },
288
+ { marker: "HOMERENO::9", cluster: "HOMERENO", durability: "standard", ageDays: 9,
289
+ text: "A change order formalizes any deviation from the original renovation scope — a client-requested upgrade, an unexpected problem found once a wall opens up — and skipping it in favor of a verbal agreement is the single most common source of a renovation budget dispute." },
290
+ // ── MARINE: marine biology (9) — stress cluster ────────────────────────────
291
+ { marker: "MARINE::1", cluster: "MARINE", durability: "standard", ageDays: 84,
292
+ text: "A coral reef's structure is built by countless tiny coral polyps secreting calcium carbonate skeletons over generations, which is why a reef takes decades to grow back after a bleaching event even though the underlying rock survives.",
293
+ note: "STRESS CORRECT (vs MARINE::4): older + standard durability." },
294
+ { marker: "MARINE::2", cluster: "MARINE", durability: "persistent", ageDays: 72,
295
+ text: "Coral bleaching happens when heat-stressed coral expels the symbiotic algae living in its tissue that normally supply it with food and color, leaving behind a white, starving skeleton that can still recover if the stress doesn't last too long." },
296
+ { marker: "MARINE::3", cluster: "MARINE", durability: "standard", ageDays: 34,
297
+ text: "A bleached coral isn't dead yet — it's in a race against time, because it can only survive without its algae for a limited window before it starves outright, which is why how LONG the heat stress lasts matters as much as how hot it gets.",
298
+ note: "Near-dup facet of MARINE::2 (survival window vs the bleaching mechanism itself)." },
299
+ { marker: "MARINE::4", cluster: "MARINE", durability: "permanent", ageDays: 3,
300
+ text: "A kelp forest grows shockingly fast — some species can add over a foot of height in a single day under good conditions — creating a dense underwater canopy that shelters far more species than the open water around it.",
301
+ note: "STRESS DISTRACTOR for MARINE::1: fresh + permanent, adjacent marine-habitat topic." },
302
+ { marker: "MARINE::5", cluster: "MARINE", durability: "standard", ageDays: 46,
303
+ text: "Bioluminescence in deep-sea creatures usually serves one of three purposes: luring prey close, startling a predator with a sudden flash, or communicating with others of the same species in water too dark for any other kind of signal to work." },
304
+ { marker: "MARINE::6", cluster: "MARINE", durability: "standard", ageDays: 20,
305
+ text: "An anglerfish's lure is the predatory version of bioluminescence — a bioluminescent lure dangled in front of its mouth to draw curious prey close enough to strike, rather than chasing anything down in the pitch-dark water it lives in.",
306
+ note: "Near-dup facet of MARINE::5 (a specific predatory example vs the three general purposes)." },
307
+ { marker: "MARINE::7", cluster: "MARINE", durability: "standard", ageDays: 55,
308
+ text: "A thermocline is the depth layer where temperature drops sharply over a short distance, and it matters to marine life because it can act almost like a wall — many species stay strictly on one side of it rather than crossing into the colder water below." },
309
+ { marker: "MARINE::8", cluster: "MARINE", durability: "standard", ageDays: 26,
310
+ text: "Whale falls — a dead whale sinking to the ocean floor — create an entire localized ecosystem that can persist for decades, as scavengers strip the carcass and are gradually replaced by specialized organisms that survive on nothing but the slowly decomposing bones." },
311
+ { marker: "MARINE::9", cluster: "MARINE", durability: "persistent", ageDays: 98,
312
+ text: "Ocean acidification comes from seawater absorbing excess atmospheric carbon dioxide, which lowers pH and makes it measurably harder for shell- and skeleton-building organisms — corals included — to form calcium carbonate in the first place." },
313
+ // ── TYPOGRAPHY: typography/type design (9) — stress cluster ───────────────
314
+ { marker: "TYPOGRAPHY::1", cluster: "TYPOGRAPHY", durability: "standard", ageDays: 74,
315
+ text: "Kerning adjusts the space between two SPECIFIC letter pairs — like the awkward gap that 'AV' or 'To' would otherwise leave — while tracking adjusts the spacing uniformly across an entire run of text; conflating the two is a common mistake even among people who work with type daily.",
316
+ note: "STRESS CORRECT (vs TYPOGRAPHY::4): older + standard durability." },
317
+ { marker: "TYPOGRAPHY::2", cluster: "TYPOGRAPHY", durability: "persistent", ageDays: 64,
318
+ text: "A serif is the small stroke finishing off the end of a letter's main strokes; serif typefaces are traditionally considered easier to read in dense printed paragraphs, while sans-serif ones tend to hold up better at small sizes on a low-resolution screen." },
319
+ { marker: "TYPOGRAPHY::3", cluster: "TYPOGRAPHY", durability: "standard", ageDays: 31,
320
+ text: "The readability advantage serif type supposedly has in print is far less settled on screen — plenty of research finds no meaningful legibility difference between well-designed serif and sans-serif faces once you're reading on a modern high-resolution display.",
321
+ note: "Near-dup facet of TYPOGRAPHY::2 (the screen-vs-print caveat vs the general serif/sans distinction)." },
322
+ { marker: "TYPOGRAPHY::4", cluster: "TYPOGRAPHY", durability: "permanent", ageDays: 2,
323
+ text: "Optical sizing is a typeface variant tuned differently depending on the size it'll actually be set at — a display cut for a huge headline is drawn with tighter, more delicate details than a text cut of the same typeface meant to survive at 9 points.",
324
+ note: "STRESS DISTRACTOR for TYPOGRAPHY::1: fresh + permanent, adjacent type-spacing/sizing topic." },
325
+ { marker: "TYPOGRAPHY::5", cluster: "TYPOGRAPHY", durability: "standard", ageDays: 40,
326
+ text: "Line length that's too long makes a reader's eye lose its place jumping back to the start of the next line; the classic print guideline is somewhere around 45 to 75 characters per line for comfortable sustained reading." },
327
+ { marker: "TYPOGRAPHY::6", cluster: "TYPOGRAPHY", durability: "standard", ageDays: 18,
328
+ text: "Line height needs to increase along with line length to keep long lines readable — cramped leading on a wide column makes the eye much more likely to accidentally drop down to the wrong line when it jumps back to the left margin.",
329
+ note: "Near-dup facet of TYPOGRAPHY::5 (line-height compensation vs the line-length guideline itself)." },
330
+ { marker: "TYPOGRAPHY::7", cluster: "TYPOGRAPHY", durability: "standard", ageDays: 48,
331
+ text: "An x-height is the height of a typeface's lowercase letters excluding ascenders and descenders — like the body of a lowercase 'x' — and a typeface with a taller x-height tends to read as larger and more legible at small sizes even when the point size is identical." },
332
+ { marker: "TYPOGRAPHY::8", cluster: "TYPOGRAPHY", durability: "standard", ageDays: 23,
333
+ text: "A widow is a short line — sometimes just one word — left alone at the top of a new column or page, orphaned from the paragraph it belongs to; most professional layout tools flag it because it reads as an obvious, distracting mistake once you notice it." },
334
+ { marker: "TYPOGRAPHY::9", cluster: "TYPOGRAPHY", durability: "ephemeral", ageDays: 11,
335
+ text: "Hinting adjusts a font's outlines slightly at small sizes so its strokes snap cleanly to the pixel grid instead of rendering blurry or uneven — it matters far less than it used to now that most screens are high enough resolution to render the true outline directly." },
336
+ // ── DBSTORE: database internals (9) — stress cluster + TRAP (with FINOPS) ──
337
+ { marker: "DBSTORE::1", cluster: "DBSTORE", durability: "standard", ageDays: 77,
338
+ text: "A database transaction groups multiple operations so they all commit together or none of them do — the classic example is a funds transfer, where debiting one row and crediting another must never be observed half-done by another query.",
339
+ note: "STRESS CORRECT (vs DBSTORE::4); also carries the trap term 'transaction' (paired with FINOPS)." },
340
+ { marker: "DBSTORE::2", cluster: "DBSTORE", durability: "persistent", ageDays: 68,
341
+ text: "Write-ahead logging records a transaction's changes to a durable log before they're applied to the actual data pages, so if the database crashes mid-write it can replay the log on restart and recover to a consistent state instead of losing the transaction." },
342
+ { marker: "DBSTORE::3", cluster: "DBSTORE", durability: "standard", ageDays: 33,
343
+ text: "A transaction's write-ahead log entries are only safe to discard once a checkpoint has confirmed every change up to that point is durably written to the data pages themselves — deleting the log too early is what turns a crash into actual data loss instead of a clean replay.",
344
+ note: "Near-dup facet of DBSTORE::2 (checkpoint/log-retention detail vs the base recovery mechanism)." },
345
+ { marker: "DBSTORE::4", cluster: "DBSTORE", durability: "permanent", ageDays: 3,
346
+ text: "A transaction's isolation level determines how much it's shielded from the effects of other concurrent transactions — serializable is the strictest and slowest, read-uncommitted the loosest and fastest, with a spectrum of anomalies possible in between.",
347
+ note: "STRESS DISTRACTOR for DBSTORE::1: fresh + permanent, adjacent transaction-isolation topic." },
348
+ { marker: "DBSTORE::5", cluster: "DBSTORE", durability: "standard", ageDays: 42,
349
+ text: "A dirty read happens when a transaction reads a row another transaction has changed but not yet committed — if that other transaction then rolls back, the first transaction has now acted on data that officially never existed." },
350
+ { marker: "DBSTORE::6", cluster: "DBSTORE", durability: "standard", ageDays: 19,
351
+ text: "A phantom read is a step further than a dirty read: a transaction re-runs the same query and gets a different set of rows the second time, because another transaction committed a new row matching the query's condition in between.",
352
+ note: "Near-dup facet of DBSTORE::5 (phantom vs dirty read — both concurrency anomalies, different mechanism)." },
353
+ { marker: "DBSTORE::7", cluster: "DBSTORE", durability: "standard", ageDays: 52,
354
+ text: "A B-tree index's fanout — how many children each internal node has — is deliberately kept high specifically to minimize the tree's height, since every extra level of the tree is another disk read on the path to find a single row." },
355
+ { marker: "DBSTORE::8", cluster: "DBSTORE", durability: "standard", ageDays: 24,
356
+ text: "Deadlock detection periodically scans for a cycle of transactions each waiting on a lock the other holds, and when it finds one, the database picks a victim transaction to abort and roll back so the rest can proceed." },
357
+ { marker: "DBSTORE::9", cluster: "DBSTORE", durability: "persistent", ageDays: 91,
358
+ text: "Multi-version concurrency control lets each transaction read a consistent snapshot of the data without blocking a concurrent writer, keeping multiple versions of a row around simultaneously instead of making a reading transaction wait for a writing transaction's lock to release." },
359
+ // ── FINOPS: finance operations (9) — stress cluster + TRAP (with DBSTORE) ──
360
+ { marker: "FINOPS::1", cluster: "FINOPS", durability: "standard", ageDays: 79,
361
+ text: "A finance team reconciles transactions by matching every entry in the company's books against the corresponding line on the bank statement, flagging anything that appears on one side but not the other for follow-up before the books are closed for the period.",
362
+ note: "STRESS CORRECT (vs FINOPS::4); also carries the trap term 'transaction' (paired with DBSTORE)." },
363
+ { marker: "FINOPS::2", cluster: "FINOPS", durability: "persistent", ageDays: 69,
364
+ text: "A three-way match cross-checks the purchase order, the vendor's invoice, and the receiving report before a transaction is approved for payment — catching a case where a vendor bills for a quantity that never actually arrived." },
365
+ { marker: "FINOPS::3", cluster: "FINOPS", durability: "standard", ageDays: 30,
366
+ text: "The three-way match breaks down the fastest on partial shipments, where the receiving report only covers part of the purchase order and the invoice has to be matched against just that partial quantity instead of the full order.",
367
+ note: "Near-dup facet of FINOPS::2 (partial-shipment edge case vs the base three-way-match concept)." },
368
+ { marker: "FINOPS::4", cluster: "FINOPS", durability: "permanent", ageDays: 2,
369
+ text: "Days sales outstanding measures the average number of days it takes to collect payment after a sale, and a rising trend there is often the earliest warning sign of a collections problem — well before overdue invoices actually start piling up on the books.",
370
+ note: "STRESS DISTRACTOR for FINOPS::1: fresh + permanent, adjacent finance-ops metric topic." },
371
+ { marker: "FINOPS::5", cluster: "FINOPS", durability: "standard", ageDays: 44,
372
+ text: "Segregation of duties keeps the person who approves a transaction separate from the person who can actually execute the payment, specifically so a single employee can't both authorize and carry out a fraudulent transfer alone." },
373
+ { marker: "FINOPS::6", cluster: "FINOPS", durability: "standard", ageDays: 17,
374
+ text: "In a small finance team too short-staffed to fully segregate duties, a compensating control — like a second person reviewing a transaction log after the fact — is the usual workaround, trading prevention for faster detection instead.",
375
+ note: "Near-dup facet of FINOPS::5 (compensating-control workaround vs the base segregation principle)." },
376
+ { marker: "FINOPS::7", cluster: "FINOPS", durability: "standard", ageDays: 53,
377
+ text: "An accrual entry records a transaction's revenue or expense in the period it was actually earned or incurred, not the period the cash happens to move — which is why accrual-basis books and the company's bank balance routinely disagree at any given moment." },
378
+ { marker: "FINOPS::8", cluster: "FINOPS", durability: "standard", ageDays: 25,
379
+ text: "A chargeback reverses a card transaction at the customer's bank's initiative rather than the merchant's, which is why a merchant can lose the disputed funds AND get hit with a chargeback fee even when the original sale was entirely legitimate." },
380
+ { marker: "FINOPS::9", cluster: "FINOPS", durability: "persistent", ageDays: 93,
381
+ text: "Month-end close is the process of finalizing every transaction for the period, reconciling every account, and locking the books so no further entries can post to a period that's already been reported on." },
382
+ // ── GITWF: git branching workflows (9) — stress cluster + TRAP (with HORTIC) ─
383
+ { marker: "GITWF::1", cluster: "GITWF", durability: "standard", ageDays: 73,
384
+ text: "A feature branch cut off of main isolates work-in-progress from the code everyone else is building on, and it's only as safe as how often it gets rebased or merged back — a feature branch left alone for weeks accumulates a merge conflict debt that gets worse every day it's ignored.",
385
+ note: "STRESS CORRECT (vs GITWF::4); also carries the trap term 'branch' (paired with HORTIC)." },
386
+ { marker: "GITWF::2", cluster: "GITWF", durability: "persistent", ageDays: 63,
387
+ text: "Trunk-based development keeps almost everyone committing directly to a single main branch, hiding unfinished work behind feature flags instead of behind a long-lived branch, which trades branch-management overhead for flag-management overhead." },
388
+ { marker: "GITWF::3", cluster: "GITWF", durability: "standard", ageDays: 29,
389
+ text: "A stale feature flag left in the code long after its feature has fully shipped is trunk-based development's version of the stale-branch problem — it doesn't block a merge the way an old branch does, but it quietly adds complexity and dead code paths nobody remembers to remove.",
390
+ note: "Near-dup facet of GITWF::2 (the flag-cleanup failure mode vs the trunk-based concept itself)." },
391
+ { marker: "GITWF::4", cluster: "GITWF", durability: "permanent", ageDays: 3,
392
+ text: "A release branch gets cut from main at freeze time and only accepts targeted bugfix commits afterward, letting the team keep merging new features into main while the release branch itself stabilizes independently toward its ship date.",
393
+ note: "STRESS DISTRACTOR for GITWF::1: fresh + permanent, adjacent branch-management topic." },
394
+ { marker: "GITWF::5", cluster: "GITWF", durability: "standard", ageDays: 41,
395
+ text: "A hotfix branch is cut directly from the currently-deployed production commit, not from main, specifically because main may already contain unreleased changes that shouldn't ship bundled in with an urgent fix." },
396
+ { marker: "GITWF::6", cluster: "GITWF", durability: "standard", ageDays: 16,
397
+ text: "A hotfix branch's changes have to be merged into BOTH the production line and main afterward, or the fix silently disappears the next time main gets released and overwrites production with a build that never had it.",
398
+ note: "Near-dup facet of GITWF::5 (the dual-merge requirement vs why a hotfix branch is cut from prod)." },
399
+ { marker: "GITWF::7", cluster: "GITWF", durability: "standard", ageDays: 49,
400
+ text: "A protected branch blocks direct pushes and requires changes to land through a reviewed pull request instead, which is less about distrust of any individual and more about making sure a second set of eyes always sees a change before it reaches that branch." },
401
+ { marker: "GITWF::8", cluster: "GITWF", durability: "standard", ageDays: 21,
402
+ text: "Branch protection rules can also require a passing CI run before a merge is allowed, which turns 'the tests pass' from a courtesy check someone might skip into a hard gate the branch itself enforces." },
403
+ { marker: "GITWF::9", cluster: "GITWF", durability: "ephemeral", ageDays: 9,
404
+ text: "A long-lived branch that diverges heavily from main eventually hits a point where merging it back is riskier than the feature it contains is worth — the standard advice is to merge or rebase small and often specifically to avoid ever reaching that point." },
405
+ // ── HORTIC: horticulture/gardening (9) — stress cluster + TRAP (with GITWF) ─
406
+ { marker: "HORTIC::1", cluster: "HORTIC", durability: "standard", ageDays: 81,
407
+ text: "Pruning a fruit tree's crossing branches — ones that rub against each other in the wind — prevents the bark damage at the contact point that would otherwise become an entry point for disease over the following seasons.",
408
+ note: "STRESS CORRECT (vs HORTIC::4); also carries the trap term 'branch' (paired with GITWF)." },
409
+ { marker: "HORTIC::2", cluster: "HORTIC", durability: "persistent", ageDays: 61,
410
+ text: "A tree's branch collar — the slightly swollen ring where a branch joins the trunk — contains the cells that actually seal the wound after pruning, which is why a proper cut removes the branch just outside the collar instead of flush against the trunk." },
411
+ { marker: "HORTIC::3", cluster: "HORTIC", durability: "standard", ageDays: 28,
412
+ text: "Cutting flush against the trunk instead of just outside the branch collar removes the exact tissue the tree needs to seal the wound, which is why a flush cut heals far more slowly — and far more prone to rot — than a proper collar cut.",
413
+ note: "Near-dup facet of HORTIC::2 (why a flush cut heals worse vs what the collar itself is)." },
414
+ { marker: "HORTIC::4", cluster: "HORTIC", durability: "permanent", ageDays: 2,
415
+ text: "Espalier trains a fruit tree's branches to grow flat against a wall or wire trellis in a deliberate pattern, which maximizes the tree's sun exposure in a small footprint at the cost of a lot of ongoing pruning to keep the shape.",
416
+ note: "STRESS DISTRACTOR for HORTIC::1: fresh + permanent, adjacent branch-training topic." },
417
+ { marker: "HORTIC::5", cluster: "HORTIC", durability: "standard", ageDays: 39,
418
+ text: "A perennial dies back to the ground every winter and regrows from the same root system every spring, while an annual completes its entire life cycle — germinate, flower, seed, die — in a single growing season and has to be replanted." },
419
+ { marker: "HORTIC::6", cluster: "HORTIC", durability: "standard", ageDays: 15,
420
+ text: "Deadheading a perennial — snipping off spent flowers before they set seed — redirects the plant's energy into next year's root growth instead of seed production, which is a big part of why a deadheaded perennial bed comes back fuller the following spring.",
421
+ note: "Near-dup facet of HORTIC::5 (deadheading's effect specifically vs the perennial/annual distinction)." },
422
+ { marker: "HORTIC::7", cluster: "HORTIC", durability: "standard", ageDays: 47,
423
+ text: "Companion planting pairs species that help each other — beans fix nitrogen in the soil that heavy feeders like corn benefit from, and marigolds planted nearby repel several common pest insects with their strong scent." },
424
+ { marker: "HORTIC::8", cluster: "HORTIC", durability: "standard", ageDays: 22,
425
+ text: "Hardening off is the week or two of gradually increasing outdoor exposure a seedling started indoors needs before it's transplanted permanently — skip it and the sudden sun and wind can shock or kill a plant that grew up entirely indoors." },
426
+ { marker: "HORTIC::9", cluster: "HORTIC", durability: "ephemeral", ageDays: 10,
427
+ text: "Mulching around the base of a tree should always leave a gap right at the trunk — piling mulch directly against the bark traps moisture there and invites rot and pests exactly where the tree can least afford it." },
428
+ // ── MUSICPROD: music production (9) — stress cluster + TRAP (with SPORTAN) ──
429
+ { marker: "MUSICPROD::1", cluster: "MUSICPROD", durability: "standard", ageDays: 77,
430
+ text: "A film composer scores a scene AFTER watching a locked picture cut, timing musical hits to specific frame numbers, because a score written before editing is finalized risks not lining up with the exact moment an edit or an action beat actually lands.",
431
+ note: "STRESS CORRECT (vs MUSICPROD::4); also carries the trap term 'score' (paired with SPORTAN)." },
432
+ { marker: "MUSICPROD::2", cluster: "MUSICPROD", durability: "persistent", ageDays: 67,
433
+ text: "Sidechain compression ducks one track's volume automatically whenever another track — usually the kick drum — hits, which is the classic trick behind the pumping, breathing feel in a lot of dance music without anyone manually automating a volume fader." },
434
+ { marker: "MUSICPROD::3", cluster: "MUSICPROD", durability: "standard", ageDays: 32,
435
+ text: "The pumping effect from sidechain compression gets more pronounced the faster the compressor's release time is set, since a slow release lets the ducked track recover gradually while a fast one snaps it back almost instantly on every kick hit.",
436
+ note: "Near-dup facet of MUSICPROD::2 (release-time tuning vs the basic sidechain mechanism)." },
437
+ { marker: "MUSICPROD::4", cluster: "MUSICPROD", durability: "permanent", ageDays: 3,
438
+ text: "A temp score is placeholder music — often licensed tracks or an earlier project's cues — dropped into a rough cut so editors and directors have something to react to while the real score is still being written, which sometimes backfires when everyone gets attached to the temp track instead.",
439
+ note: "STRESS DISTRACTOR for MUSICPROD::1: fresh + permanent, adjacent film-scoring topic." },
440
+ { marker: "MUSICPROD::5", cluster: "MUSICPROD", durability: "standard", ageDays: 43,
441
+ text: "A limiter is a compressor with an effectively infinite ratio, hard-clamping a track's peaks at a set ceiling rather than gently reducing them — which is why a limiter is the last thing in a mastering chain, catching whatever peaks slipped past everything before it." },
442
+ { marker: "MUSICPROD::6", cluster: "MUSICPROD", durability: "standard", ageDays: 18,
443
+ text: "Pushing a limiter too hard to squeeze out extra loudness is what causes the 'brickwalled' sound of an overly compressed modern master — the peaks get clamped so aggressively that the track loses the dynamic contrast between its loud and quiet moments entirely.",
444
+ note: "Near-dup facet of MUSICPROD::5 (the loudness-war failure mode vs the limiter mechanism itself)." },
445
+ { marker: "MUSICPROD::7", cluster: "MUSICPROD", durability: "standard", ageDays: 54,
446
+ text: "A composer's spotting session with the director marks exactly which moments in the film need a musical cue and which should stay silent, and getting that list right before writing a single note of the score saves far more revision time than starting to compose blind." },
447
+ { marker: "MUSICPROD::8", cluster: "MUSICPROD", durability: "standard", ageDays: 24,
448
+ text: "A leitmotif is a short musical theme tied to a specific character or idea that recurs throughout a score, transformed in key or tempo as that character's situation changes, so the audience recognizes them again even in a completely different orchestration." },
449
+ { marker: "MUSICPROD::9", cluster: "MUSICPROD", durability: "persistent", ageDays: 89,
450
+ text: "Mockups built from sampled orchestral libraries let a composer and director hear an approximation of the final score months before a live orchestra ever records it, which is exactly what most of a score's approval process actually happens against." },
451
+ // ── SPORTAN: sports analytics (9) — stress cluster + TRAP (with MUSICPROD) ──
452
+ { marker: "SPORTAN::1", cluster: "SPORTAN", durability: "standard", ageDays: 75,
453
+ text: "An expected-goals score models the QUALITY of every shot a team took — location, angle, defensive pressure — rather than just counting shots, which is why a team can lose a match while clearly outscoring its opponent on expected goals.",
454
+ note: "STRESS CORRECT (vs SPORTAN::4); also carries the trap term 'score' (paired with MUSICPROD)." },
455
+ { marker: "SPORTAN::2", cluster: "SPORTAN", durability: "persistent", ageDays: 65,
456
+ text: "A composite player rating blends several individual stats into one summary score, and the specific weighting chosen for each stat quietly encodes what the model's author considers valuable — two reasonable analysts can build two very different ratings from the identical underlying data." },
457
+ { marker: "SPORTAN::3", cluster: "SPORTAN", durability: "standard", ageDays: 31,
458
+ text: "A composite rating's weighting choices show up most starkly at the roster-construction edges — a player who's elite in an underweighted stat and mediocre everywhere else can end up rated far below a more balanced player who's never actually outplayed them.",
459
+ note: "Near-dup facet of SPORTAN::2 (a concrete roster-construction failure mode vs the general weighting-choice problem)." },
460
+ { marker: "SPORTAN::4", cluster: "SPORTAN", durability: "permanent", ageDays: 2,
461
+ text: "Win probability added tracks how much each individual play shifted a team's live in-game win probability, which lets a single game-changing defensive stop get credited its actual impact instead of disappearing into a score that only counts the obvious stats.",
462
+ note: "STRESS DISTRACTOR for SPORTAN::1: fresh + permanent, adjacent play-level-impact-metric topic." },
463
+ { marker: "SPORTAN::5", cluster: "SPORTAN", durability: "standard", ageDays: 46,
464
+ text: "Regression to the mean means a player coming off a wildly above-average season is statistically more likely to decline the following year than to repeat it, purely from variance settling back down — no injury or decline in ability required to explain the drop." },
465
+ { marker: "SPORTAN::6", cluster: "SPORTAN", durability: "standard", ageDays: 20,
466
+ text: "Regression to the mean is exactly why a rebuilding team should be cautious trading for a player fresh off a career year — a chunk of that performance was probably variance that isn't following him to the new roster.",
467
+ note: "Near-dup facet of SPORTAN::5 (the trade-evaluation application vs the statistical concept itself)." },
468
+ { marker: "SPORTAN::7", cluster: "SPORTAN", durability: "standard", ageDays: 51,
469
+ text: "Strength of schedule adjusts a team's raw record for how tough their actual opponents were, which is why two teams with an identical win-loss record can be ranked very differently once who they actually played gets factored in." },
470
+ { marker: "SPORTAN::8", cluster: "SPORTAN", durability: "standard", ageDays: 23,
471
+ text: "A plus-minus stat tracks the net score differential while a specific player is on the field or court, but it's notoriously noisy at the individual level because it's inseparably tangled up with the performance of the other four or ten players sharing the field with them." },
472
+ { marker: "SPORTAN::9", cluster: "SPORTAN", durability: "persistent", ageDays: 96,
473
+ text: "Clutch performance — how a player does specifically in high-leverage, late-game situations — is real in the sense that the situations are real, but sample sizes at that specific split are usually too small to reliably separate a genuine clutch skill from ordinary variance." },
474
+ // ── CLOUDINFRA: cloud infrastructure/networking (9) — no stress pair ──────
475
+ { marker: "CLOUDINFRA::1", cluster: "CLOUDINFRA", durability: "standard", ageDays: 58,
476
+ text: "A load balancer's health check has to hit an endpoint that actually exercises the service's real dependencies — a health check that only confirms the process is running will keep routing traffic to an instance that's up but can't actually reach its database." },
477
+ { marker: "CLOUDINFRA::2", cluster: "CLOUDINFRA", durability: "standard", ageDays: 26,
478
+ text: "A shallow health check that only pings the process is cheap and fast, which is exactly why teams reach for it first — the tradeoff only becomes visible during an outage, when traffic keeps flowing to instances a deeper check would have already pulled.",
479
+ note: "Near-dup facet of CLOUDINFRA::1 (the shallow-check tradeoff vs what a good check requires)." },
480
+ { marker: "CLOUDINFRA::3", cluster: "CLOUDINFRA", durability: "standard", ageDays: 34,
481
+ text: "A VPC peering connection routes traffic directly between two virtual networks without it ever crossing the public internet, but peering isn't transitive — if A peers with B and B peers with C, A still can't reach C through B without its own direct peering connection." },
482
+ { marker: "CLOUDINFRA::4", cluster: "CLOUDINFRA", durability: "standard", ageDays: 19,
483
+ text: "The non-transitive limits of VPC peering are exactly what pushes larger multi-account setups toward a transit gateway instead — a hub that every VPC connects to once, instead of every pair of VPCs needing its own direct peering link.",
484
+ note: "Near-dup facet of CLOUDINFRA::3 (the transit-gateway alternative vs the peering limitation itself)." },
485
+ { marker: "CLOUDINFRA::5", cluster: "CLOUDINFRA", durability: "persistent", ageDays: 71,
486
+ text: "A DNS record's TTL controls how long a resolver is allowed to cache it before checking again, which is why lowering the TTL well ahead of a planned cutover is standard practice — it shrinks the window where some clients are still resolving the old address after the change ships." },
487
+ { marker: "CLOUDINFRA::6", cluster: "CLOUDINFRA", durability: "standard", ageDays: 44,
488
+ text: "An autoscaling group's cooldown period exists to stop it from launching a new instance again immediately after the last one just came online but hasn't started taking traffic yet, which would otherwise cause a scale-up to wildly overshoot the actual load." },
489
+ { marker: "CLOUDINFRA::7", cluster: "CLOUDINFRA", durability: "ephemeral", ageDays: 12,
490
+ text: "A CDN's cache hit ratio drops sharply for content with a lot of unique query-string variants, since each distinct combination of query parameters is cached as a separate object by default unless the CDN is explicitly configured to ignore or normalize them." },
491
+ { marker: "CLOUDINFRA::8", cluster: "CLOUDINFRA", durability: "standard", ageDays: 62,
492
+ text: "An egress fee is charged for data leaving a cloud provider's network, not for data coming in, which is why moving a large dataset OUT of a provider you're migrating away from is often the single biggest line item in the whole migration's cost." },
493
+ { marker: "CLOUDINFRA::9", cluster: "CLOUDINFRA", durability: "standard", ageDays: 39,
494
+ text: "A blue-green cutover at the DNS layer still has to respect every client's cached TTL, which is why a truly instant cutover needs the load balancer or router flipped directly rather than relying on DNS propagation to finish on its own schedule." },
495
+ // ── WINEMAKING: wine production (7) — no stress pair ───────────────────────
496
+ { marker: "WINEMAKING::1", cluster: "WINEMAKING", durability: "standard", ageDays: 56,
497
+ text: "Malolactic fermentation converts a wine's sharper malic acid into softer lactic acid using bacteria rather than yeast, which is why a wine that's gone through it tastes noticeably rounder and less tart than one that hasn't." },
498
+ { marker: "WINEMAKING::2", cluster: "WINEMAKING", durability: "standard", ageDays: 24,
499
+ text: "Winemakers can choose to block malolactic fermentation entirely in wines where they want to preserve a crisp, tart character — most white wines meant to taste bright and acidic skip it deliberately rather than by accident.",
500
+ note: "Near-dup facet of WINEMAKING::1 (the deliberate-blocking choice vs the conversion mechanism itself)." },
501
+ { marker: "WINEMAKING::3", cluster: "WINEMAKING", durability: "persistent", ageDays: 68,
502
+ text: "Skin contact during fermentation is what gives red wine its color and tannin — white wine is pressed off its skins almost immediately, and a rosé sits on red-grape skins only briefly, which is why the same grape can produce three very different-looking wines." },
503
+ { marker: "WINEMAKING::4", cluster: "WINEMAKING", durability: "standard", ageDays: 30,
504
+ text: "An orange wine is a white wine made like a red — left on its skins for extended contact instead of pressed off quickly — which is what gives it the deeper color and grippy tannin structure that a normal white wine never develops.",
505
+ note: "Near-dup facet of WINEMAKING::3 (orange wine as the specific edge case vs the general skin-contact rule)." },
506
+ { marker: "WINEMAKING::5", cluster: "WINEMAKING", durability: "standard", ageDays: 41,
507
+ text: "Terroir refers to the combination of soil, climate, and topography a vineyard sits in, and its influence is real enough that the same grape variety planted in two different regions can taste distinctly different even with an identical winemaking process afterward." },
508
+ { marker: "WINEMAKING::6", cluster: "WINEMAKING", durability: "standard", ageDays: 15,
509
+ text: "Oak aging contributes flavor compounds — vanilla, toast, spice — directly from the barrel itself, and a new barrel imparts far more of that flavor than a barrel that's already been used for a previous vintage or two, which is why some wines are deliberately aged in a mix of new and neutral oak." },
510
+ { marker: "WINEMAKING::7", cluster: "WINEMAKING", durability: "ephemeral", ageDays: 9,
511
+ text: "Sulfites in wine are mostly a byproduct of fermentation itself, not solely a winemaker's additive — even a wine labeled 'no sulfites added' still contains a small naturally-occurring amount, just below the threshold that requires a warning label." },
512
+ { marker: "WINEMAKING::8", cluster: "WINEMAKING", durability: "standard", ageDays: 37,
513
+ text: "Lees contact — leaving a wine resting on its spent yeast cells after fermentation instead of racking it off quickly — adds a textural richness and subtle bready character, which is exactly the effect winemakers are chasing when they stir the lees back into suspension periodically." },
514
+ // ── ORNITHOLOGY: bird biology (7) — no stress pair ─────────────────────────
515
+ { marker: "ORNITHOLOGY::1", cluster: "ORNITHOLOGY", durability: "standard", ageDays: 59,
516
+ text: "A bird's molt replaces its feathers gradually rather than all at once for most species, specifically so it never loses so many flight feathers at the same time that it can't fly — a few notable exceptions, like ducks, do molt all their flight feathers together and go flightless for a few weeks." },
517
+ { marker: "ORNITHOLOGY::2", cluster: "ORNITHOLOGY", durability: "standard", ageDays: 27,
518
+ text: "A duck's flightless molt period is exactly when it's most vulnerable to predators, which is why many species time it to coincide with access to dense cover or open water it can escape into instead of relying on flight.",
519
+ note: "Near-dup facet of ORNITHOLOGY::1 (the vulnerability-and-timing detail vs the general molt pattern)." },
520
+ { marker: "ORNITHOLOGY::3", cluster: "ORNITHOLOGY", durability: "persistent", ageDays: 70,
521
+ text: "Countersinging is when two territorial male birds of the same species alternate songs back and forth across a boundary, which functions as a vocal, non-violent way of asserting and negotiating where that territory line actually sits." },
522
+ { marker: "ORNITHOLOGY::4", cluster: "ORNITHOLOGY", durability: "standard", ageDays: 32,
523
+ text: "A bird's song can carry information about its physical condition, not just its location — a male able to sustain a longer, more complex song is often signaling genuine fitness that a shorter or simpler song can't fake as convincingly.",
524
+ note: "Near-dup facet of ORNITHOLOGY::3 (song-as-fitness-signal vs the territorial-negotiation function)." },
525
+ { marker: "ORNITHOLOGY::5", cluster: "ORNITHOLOGY", durability: "standard", ageDays: 45,
526
+ text: "Migratory birds navigate using multiple redundant cues — the position of the sun and stars, the earth's magnetic field, even smell in some species — which is why losing any one cue to weather or interference doesn't usually strand a bird off course entirely." },
527
+ { marker: "ORNITHOLOGY::6", cluster: "ORNITHOLOGY", durability: "standard", ageDays: 17,
528
+ text: "A bird's egg shape correlates with the shape of its nest and the cliff or ground it's laid on — a strongly pointed egg, common among cliff-nesting species, rolls in a tight circle instead of straight off the edge if it's ever nudged." },
529
+ { marker: "ORNITHOLOGY::7", cluster: "ORNITHOLOGY", durability: "ephemeral", ageDays: 11,
530
+ text: "Brood parasitism, like a cuckoo laying its egg in another species' nest, works because the host parents' instinct to feed anything begging loudly in their nest is stronger than their ability to visually recognize an egg or chick that doesn't match their own." },
531
+ { marker: "ORNITHOLOGY::8", cluster: "ORNITHOLOGY", durability: "standard", ageDays: 41,
532
+ text: "A raptor's eyesight resolves far finer detail than a human's specifically because its retina packs a much higher density of photoreceptors into the fovea, letting it pick out a small moving animal from a height a person couldn't spot it from at all." },
533
+ // ── CARPENTRY: woodworking (7) — no stress pair ────────────────────────────
534
+ { marker: "CARPENTRY::1", cluster: "CARPENTRY", durability: "standard", ageDays: 53,
535
+ text: "Wood movement — expansion and contraction across the grain with seasonal humidity changes — is why a solid wood tabletop is attached with slotted or figure-eight fasteners instead of screwed down rigidly; a rigid fastening eventually cracks the top as it tries to move and can't." },
536
+ { marker: "CARPENTRY::2", cluster: "CARPENTRY", durability: "standard", ageDays: 22,
537
+ text: "Wood moves far more across the grain than along it, which is why a tabletop's width changes noticeably with the seasons while its length barely does — the fastening scheme only has to accommodate movement in the direction it actually happens.",
538
+ note: "Near-dup facet of CARPENTRY::1 (which direction wood actually moves vs why the fastening matters)." },
539
+ { marker: "CARPENTRY::3", cluster: "CARPENTRY", durability: "persistent", ageDays: 65,
540
+ text: "A mortise and tenon joint's strength comes mostly from the glue surface area and the mechanical interlock, not from the fasteners — a well-fitted joint glued properly is often stronger than the wood around it, while screws or nails alone in the same joint would be comparatively weak." },
541
+ { marker: "CARPENTRY::4", cluster: "CARPENTRY", durability: "standard", ageDays: 29,
542
+ text: "A through-tenon that's wedged from the outside face adds a mechanical lock on top of the glue joint, which is why it's traditionally used in pieces expected to see racking stress a plain glued tenon might eventually work loose under.",
543
+ note: "Near-dup facet of CARPENTRY::3 (the wedged-tenon variant vs the base joint's strength source)." },
544
+ { marker: "CARPENTRY::5", cluster: "CARPENTRY", durability: "standard", ageDays: 42,
545
+ text: "A hand plane set for a very fine shaving removes wood in a thin, controlled layer that a power sander can't replicate — sanding abrades the surface and can round over a crisp edge, while a properly tuned plane leaves it sharp." },
546
+ { marker: "CARPENTRY::6", cluster: "CARPENTRY", durability: "standard", ageDays: 14,
547
+ text: "Dry-fitting a joint before applying any glue confirms the pieces actually seat correctly while there's still time to fix a problem — glue sets fast enough that discovering a bad fit after applying it usually means fighting the joint apart instead of just adjusting it." },
548
+ { marker: "CARPENTRY::7", cluster: "CARPENTRY", durability: "standard", ageDays: 8,
549
+ text: "A story stick records a specific project's actual measurements directly on a strip of wood instead of on paper, which avoids the small transcription and rounding errors that stack up every time a measurement gets copied from a tape measure onto a cut list." },
550
+ { marker: "CARPENTRY::8", cluster: "CARPENTRY", durability: "standard", ageDays: 33,
551
+ text: "A back-bevel on a hand-cut dovetail's baseline lets the saw kerf hide just behind the visible face, which is a small trick that makes a slightly imperfect cut still look crisp and tight once the joint is assembled and the visible edge is all anyone actually sees." },
552
+ // ── WEATHER: meteorology (7) — no stress pair ───────────────────────────────
553
+ { marker: "WEATHER::1", cluster: "WEATHER", durability: "standard", ageDays: 57,
554
+ text: "A warm front's air rises gradually over the cooler air ahead of it, producing the widespread, gradually-thickening cloud layers and steady rain that arrive well before the front itself passes overhead — quite different from a cold front's fast, violent arrival." },
555
+ { marker: "WEATHER::2", cluster: "WEATHER", durability: "standard", ageDays: 25,
556
+ text: "A cold front forces warm air up sharply rather than gradually, which is why it tends to produce a narrow band of intense, sometimes severe weather right at the front itself instead of a warm front's broad, gradual buildup well ahead of it.",
557
+ note: "Near-dup facet of WEATHER::1 (cold-front mechanism contrasted vs the warm-front description)." },
558
+ { marker: "WEATHER::3", cluster: "WEATHER", durability: "persistent", ageDays: 66,
559
+ text: "A supercell's rotating updraft — the mesocyclone — is what separates it from an ordinary thunderstorm and is the specific structure capable of producing the strongest tornadoes, unlike the brief, disorganized rotation an ordinary storm might occasionally show." },
560
+ { marker: "WEATHER::4", cluster: "WEATHER", durability: "standard", ageDays: 28,
561
+ text: "Not every supercell produces a tornado despite having the rotating updraft that makes one possible — the additional ingredients needed to actually stretch that rotation down to the ground are still an active area of forecasting research.",
562
+ note: "Near-dup facet of WEATHER::3 (why rotation alone doesn't guarantee a tornado vs what makes a supercell distinct)." },
563
+ { marker: "WEATHER::5", cluster: "WEATHER", durability: "standard", ageDays: 40,
564
+ text: "The dew point, not relative humidity, is the number that actually tells you how muggy the air will feel — two days can share the same relative humidity reading while feeling completely different if their actual moisture content, and therefore dew point, differs." },
565
+ { marker: "WEATHER::6", cluster: "WEATHER", durability: "standard", ageDays: 16,
566
+ text: "A temperature inversion traps cooler air (and whatever pollution is in it) near the ground under a layer of warmer air above, which is exactly why smog tends to be worse on cold, calm winter mornings when an inversion is most likely to form and hold." },
567
+ { marker: "WEATHER::7", cluster: "WEATHER", durability: "ephemeral", ageDays: 10,
568
+ text: "Doppler radar detects a target's velocity toward or away from the radar, not just its location, which is what lets meteorologists see rotation inside a storm — winds moving toward the radar on one side of a cell and away on the other — long before any funnel is visible." },
569
+ { marker: "WEATHER::8", cluster: "WEATHER", durability: "standard", ageDays: 36,
570
+ text: "A microburst is a sudden, localized column of sinking air that slams into the ground and spreads outward in every direction, and it's dangerous to aircraft on approach specifically because it produces a rapid, opposite-direction wind shift in the space of a few seconds." },
571
+ // ── CHESS: chess strategy (7) — no stress pair ──────────────────────────────
572
+ { marker: "CHESS::1", cluster: "CHESS", durability: "standard", ageDays: 55,
573
+ text: "A pawn's threat to control a square doesn't require it to actually be able to move there legally — even a pawn pinned to its own king still exerts an attack on the diagonal squares in front of it, which matters for calculating whether the opponent's king can safely step there." },
574
+ { marker: "CHESS::2", cluster: "CHESS", durability: "standard", ageDays: 23,
575
+ text: "A pinned piece's attacking power along its pin line is unaffected by the pin itself — only its ability to MOVE off that line is restricted — which is a common source of confusion for players who assume a pinned piece is defensively useless.",
576
+ note: "Near-dup facet of CHESS::1 (the general pin-and-attack-power principle applied beyond just pawns)." },
577
+ { marker: "CHESS::3", cluster: "CHESS", durability: "persistent", ageDays: 63,
578
+ text: "Zugzwang describes a position where a player would genuinely rather not move at all, because every legal move available actually makes their position worse — it's rare in the middlegame but comes up often enough in king-and-pawn endgames to be a critical concept there." },
579
+ { marker: "CHESS::4", cluster: "CHESS", durability: "standard", ageDays: 27,
580
+ text: "The opposition in a king-and-pawn endgame is one of the most common ways zugzwang actually gets engineered on the board — a king forced to step aside because the opposing king denies it any other square is losing a tempo it desperately needed to keep.",
581
+ note: "Near-dup facet of CHESS::3 (opposition as the concrete mechanism vs the general zugzwang concept)." },
582
+ { marker: "CHESS::5", cluster: "CHESS", durability: "standard", ageDays: 38,
583
+ text: "A fianchettoed bishop develops onto the long diagonal from a knight-two square instead of a standard developing square, trading a slower path to activity for control over a diagonal that can reach all the way across the board." },
584
+ { marker: "CHESS::6", cluster: "CHESS", durability: "standard", ageDays: 13,
585
+ text: "An isolated queen's pawn gives its owner extra piece activity and open lines in exchange for a long-term structural weakness — a pawn with no neighboring pawn able to ever defend it — which is why it's one of the most argued-over pawn structures in opening theory." },
586
+ { marker: "CHESS::7", cluster: "CHESS", durability: "ephemeral", ageDays: 9,
587
+ text: "Prophylaxis means making a move that doesn't advance your own plan directly but instead prevents a specific resource the opponent was relying on — strong players often spend a full tempo on prophylaxis exactly because stopping the opponent's plan can be worth more than advancing their own." },
588
+ { marker: "CHESS::8", cluster: "CHESS", durability: "standard", ageDays: 34,
589
+ text: "A minority attack pushes pawns on the side of the board where a player has FEWER pawns than the opponent, aiming to provoke a structural weakness by trading them off rather than trying to win a pawn race the minority side can never actually win outright." },
590
+ // ── PHOTOGRAPHY: photography technique (7) — no stress pair ────────────────
591
+ { marker: "PHOTOGRAPHY::1", cluster: "PHOTOGRAPHY", durability: "standard", ageDays: 51,
592
+ text: "A wider aperture lets in more light AND produces a shallower depth of field simultaneously — the two effects come from the same physical change to the lens opening, which is why a photographer can't independently choose 'more light' without also accepting a thinner zone of focus." },
593
+ { marker: "PHOTOGRAPHY::2", cluster: "PHOTOGRAPHY", durability: "standard", ageDays: 21,
594
+ text: "Depth of field also narrows as the subject gets closer to the lens, independent of aperture — which is why a macro shot at f/8 can have a razor-thin focus plane that the exact same aperture would never produce at a normal portrait distance.",
595
+ note: "Near-dup facet of PHOTOGRAPHY::1 (distance's effect on depth of field vs aperture's effect)." },
596
+ { marker: "PHOTOGRAPHY::3", cluster: "PHOTOGRAPHY", durability: "persistent", ageDays: 60,
597
+ text: "A camera's meter is calibrated to render whatever it's pointed at as middle gray, which is exactly why a scene dominated by snow reads as underexposed on the meter's suggested settings unless the photographer manually compensates upward for it." },
598
+ { marker: "PHOTOGRAPHY::4", cluster: "PHOTOGRAPHY", durability: "standard", ageDays: 26,
599
+ text: "The same middle-gray assumption works in reverse for a very dark scene — a meter reading a black backdrop will suggest settings that overexpose it toward gray unless the photographer compensates downward from what the meter recommends.",
600
+ note: "Near-dup facet of PHOTOGRAPHY::3 (the dark-scene mirror case vs the snow/bright-scene example)." },
601
+ { marker: "PHOTOGRAPHY::5", cluster: "PHOTOGRAPHY", durability: "standard", ageDays: 35,
602
+ text: "The reciprocal rule for handholding — shutter speed no slower than roughly one over the focal length — exists because camera shake becomes proportionally more visible the more a lens magnifies the scene, not because of anything about the shutter itself." },
603
+ { marker: "PHOTOGRAPHY::6", cluster: "PHOTOGRAPHY", durability: "standard", ageDays: 15,
604
+ text: "A polarizing filter cuts reflected glare off of non-metallic surfaces like water and leaves, and it works best at roughly a right angle to the sun — pointed straight at or away from the sun it has almost no visible effect at all." },
605
+ { marker: "PHOTOGRAPHY::7", cluster: "PHOTOGRAPHY", durability: "ephemeral", ageDays: 7,
606
+ text: "Focus stacking combines multiple exposures of the same static scene, each focused at a different distance, into one image with a depth of field deeper than any single exposure could achieve at that aperture — common in macro and landscape work where front-to-back sharpness matters most." },
607
+ // ── AVIATION: flight operations (7) — no stress pair ────────────────────────
608
+ { marker: "AVIATION::1", cluster: "AVIATION", durability: "standard", ageDays: 54,
609
+ text: "An aircraft stalls when its wing exceeds its critical angle of attack, disrupting smooth airflow over the top surface — it's fundamentally about that angle, not about airspeed directly, which is why a plane can stall at high speed during an aggressive pull-up just as it can at low speed." },
610
+ { marker: "AVIATION::2", cluster: "AVIATION", durability: "standard", ageDays: 24,
611
+ text: "Airspeed still matters to a stall indirectly — a wing needs a higher angle of attack to generate the same lift as speed drops, which is exactly why stalls become more likely at low speed even though speed itself isn't the direct trigger.",
612
+ note: "Near-dup facet of AVIATION::1 (how airspeed connects to angle of attack vs the direct stall trigger)." },
613
+ { marker: "AVIATION::3", cluster: "AVIATION", durability: "persistent", ageDays: 62,
614
+ text: "V1 is the speed on a takeoff roll past which a pilot is committed to continuing the takeoff rather than aborting, because past that point there may not be enough remaining runway to safely stop — an engine failure right at V1 is one of the most demanding split-second decisions in flying." },
615
+ { marker: "AVIATION::4", cluster: "AVIATION", durability: "standard", ageDays: 25,
616
+ text: "V1 isn't a fixed number for a given aircraft type — it's calculated fresh for each takeoff based on weight, runway length, and conditions like wind and temperature, which is why the same plane can have a meaningfully different V1 on two different days.",
617
+ note: "Near-dup facet of AVIATION::3 (V1's per-flight calculation vs the commit-to-takeoff concept itself)." },
618
+ { marker: "AVIATION::5", cluster: "AVIATION", durability: "standard", ageDays: 37,
619
+ text: "Wake turbulence trails behind an aircraft's wingtips as a pair of counter-rotating vortices, and it's strongest behind a heavy, slow, clean aircraft — which is exactly why a smaller plane taking off right after a heavy jet has to wait longer than the reverse situation would require." },
620
+ { marker: "AVIATION::6", cluster: "AVIATION", durability: "standard", ageDays: 12,
621
+ text: "A go-around abandons a landing attempt in progress and climbs back out instead of continuing to touch down, and it's treated as a routine, unremarkable procedure rather than an emergency — any condition that makes a safe landing uncertain is reason enough to execute one." },
622
+ { marker: "AVIATION::7", cluster: "AVIATION", durability: "ephemeral", ageDays: 6,
623
+ text: "Pressurization keeps a cabin at an altitude far lower than the plane's actual cruising altitude, typically equivalent to somewhere around 6,000 to 8,000 feet, because the human body can't reliably function at the true outside altitude of a typical cruise without supplemental oxygen." },
624
+ // ── INSURANCE: insurance (7) — no stress pair ───────────────────────────────
625
+ { marker: "INSURANCE::1", cluster: "INSURANCE", durability: "standard", ageDays: 49,
626
+ text: "A deductible is the amount a policyholder pays out of pocket before the insurer's coverage kicks in on a claim, and a higher deductible almost always comes paired with a lower premium — the policyholder is trading a lower guaranteed monthly cost for more exposure if something actually goes wrong." },
627
+ { marker: "INSURANCE::2", cluster: "INSURANCE", durability: "standard", ageDays: 20,
628
+ text: "Choosing a deductible is really a bet on how likely you think a claim is — someone confident they'll rarely if ever file a claim comes out ahead with a high deductible and low premium, while someone expecting frequent claims comes out ahead with the opposite.",
629
+ note: "Near-dup facet of INSURANCE::1 (the deductible-as-a-bet framing vs the mechanical tradeoff itself)." },
630
+ { marker: "INSURANCE::3", cluster: "INSURANCE", durability: "persistent", ageDays: 58,
631
+ text: "Underwriting is the process an insurer uses to assess how risky a specific applicant actually is before setting their premium — the more granular the data available, the more precisely a premium can be priced to that individual's actual risk instead of a broad average." },
632
+ { marker: "INSURANCE::4", cluster: "INSURANCE", durability: "standard", ageDays: 27,
633
+ text: "Overly granular underwriting has a real downside: pricing risk this precisely can leave the highest-risk individuals facing a premium so expensive it's effectively unaffordable, which is exactly the tension regulators step in to limit in certain lines of insurance.",
634
+ note: "Near-dup facet of INSURANCE::3 (the granularity-affordability tension vs underwriting's basic purpose)." },
635
+ { marker: "INSURANCE::5", cluster: "INSURANCE", durability: "standard", ageDays: 32,
636
+ text: "A rider adds specific additional coverage onto a base policy for something the standard policy wouldn't otherwise cover — scheduling a piece of expensive jewelry onto a homeowner's policy, for instance, well above what the base policy's blanket jewelry limit would pay out." },
637
+ { marker: "INSURANCE::6", cluster: "INSURANCE", durability: "standard", ageDays: 14,
638
+ text: "Subrogation lets an insurer that's already paid out a claim step into the policyholder's shoes and pursue the actually-at-fault third party for reimbursement, which is why an insurer sometimes keeps investigating a case long after the policyholder themselves has been made whole." },
639
+ { marker: "INSURANCE::7", cluster: "INSURANCE", durability: "ephemeral", ageDays: 8,
640
+ text: "An actuarial table translates large amounts of historical claims data into the probability of a given event happening to a person with a given set of characteristics, and it's the mathematical foundation nearly every premium calculation ultimately traces back to." },
641
+ // ── ARCHAEOLOGY: archaeology (7) — no stress pair ───────────────────────────
642
+ { marker: "ARCHAEOLOGY::1", cluster: "ARCHAEOLOGY", durability: "standard", ageDays: 52,
643
+ text: "Stratigraphy — reading the layers of soil and sediment a site has accumulated over time — is how archaeologists establish relative dating even without any direct scientific dating method, because a lower, undisturbed layer is reliably older than whatever sits above it." },
644
+ { marker: "ARCHAEOLOGY::2", cluster: "ARCHAEOLOGY", durability: "standard", ageDays: 22,
645
+ text: "A disturbed layer — one dug into and refilled at some later point, like a grave cut through older strata — breaks stratigraphy's simple lower-is-older rule right at that spot, which is exactly why recognizing a disturbance is as important a skill as reading undisturbed layers.",
646
+ note: "Near-dup facet of ARCHAEOLOGY::1 (disturbed-layer exception vs the basic stratigraphic principle)." },
647
+ { marker: "ARCHAEOLOGY::3", cluster: "ARCHAEOLOGY", durability: "persistent", ageDays: 61,
648
+ text: "Radiocarbon dating measures the decay of a specific radioactive carbon isotope absorbed by a once-living organism, which is why it only works on organic material — bone, wood, charcoal — and can't directly date a stone tool or a piece of pottery on its own." },
649
+ { marker: "ARCHAEOLOGY::4", cluster: "ARCHAEOLOGY", durability: "standard", ageDays: 26,
650
+ text: "A stone tool found in the same undisturbed layer as datable organic material gets an INDIRECT date through that association — radiocarbon dating the material found alongside it, since the stone itself has nothing datable radiocarbon can measure.",
651
+ note: "Near-dup facet of ARCHAEOLOGY::3 (indirect dating via association vs radiocarbon's own direct limitation)." },
652
+ { marker: "ARCHAEOLOGY::5", cluster: "ARCHAEOLOGY", durability: "standard", ageDays: 36,
653
+ text: "A midden is essentially an ancient trash heap, and it's one of the richest sources of everyday-life information a site can offer, since what people threw away routinely tells archaeologists far more about ordinary daily habits than a single dramatic burial or hoard usually does." },
654
+ { marker: "ARCHAEOLOGY::6", cluster: "ARCHAEOLOGY", durability: "standard", ageDays: 13,
655
+ text: "Provenance — the exact three-dimensional location an artifact was recovered from within a site — matters as much as the artifact itself, because an artifact pulled from the ground without recording exactly where it came from loses most of the context that made it scientifically useful in the first place." },
656
+ { marker: "ARCHAEOLOGY::7", cluster: "ARCHAEOLOGY", durability: "ephemeral", ageDays: 7,
657
+ text: "Ground-penetrating radar lets archaeologists map what's likely buried beneath a site before ever putting a shovel in the ground, which is invaluable for planning an excavation without physically disturbing — and potentially damaging — features the survey alone can already reveal." },
658
+ // ── PERFUMERY: perfumery (7) — no stress pair ───────────────────────────────
659
+ { marker: "PERFUMERY::1", cluster: "PERFUMERY", durability: "standard", ageDays: 47,
660
+ text: "A fragrance's top notes are the first and most volatile compounds to evaporate off the skin, which is why a perfume smells noticeably different in the first few minutes than it does an hour later once those top notes have faded and the heart notes take over." },
661
+ { marker: "PERFUMERY::2", cluster: "PERFUMERY", durability: "standard", ageDays: 19,
662
+ text: "Base notes are the least volatile compounds in a fragrance and are what actually lingers for hours after the top and heart notes have long since faded — they're also what most fragrances are built around, since they anchor everything else that fades faster.",
663
+ note: "Near-dup facet of PERFUMERY::1 (base notes' longevity role vs top notes' fast-fading role)." },
664
+ { marker: "PERFUMERY::3", cluster: "PERFUMERY", durability: "persistent", ageDays: 55,
665
+ text: "An absolute is extracted from raw plant material using a solvent rather than steam distillation, which captures a broader, richer range of aromatic compounds than distillation alone can pull out — at the cost of trace solvent residue that steam distillation avoids entirely." },
666
+ { marker: "PERFUMERY::4", cluster: "PERFUMERY", durability: "standard", ageDays: 24,
667
+ text: "Steam distillation heats raw plant material to release its aromatic compounds directly into the resulting steam, which is why it's the gentler, more traditional method — but it also can't capture certain heavier or more delicate compounds that a solvent extraction reaches instead.",
668
+ note: "Near-dup facet of PERFUMERY::3 (steam distillation's tradeoffs vs the solvent-absolute alternative)." },
669
+ { marker: "PERFUMERY::5", cluster: "PERFUMERY", durability: "standard", ageDays: 33,
670
+ text: "A fragrance's sillage is how far its scent trail actually projects from the wearer into the surrounding air, which is a distinct quality from longevity — a fragrance can last a long time on skin while barely projecting, or project intensely while fading relatively fast." },
671
+ { marker: "PERFUMERY::6", cluster: "PERFUMERY", durability: "standard", ageDays: 11,
672
+ text: "Skin chemistry genuinely changes how a fragrance smells on different people, since natural oils, pH, and even diet interact with a fragrance's compounds — which is why the same perfume tested on a blotter strip can smell noticeably different once it's actually worn on skin." },
673
+ { marker: "PERFUMERY::7", cluster: "PERFUMERY", durability: "ephemeral", ageDays: 6,
674
+ text: "A perfumer's 'accord' blends several individual notes together into one new, cohesive smell that reads as a single unified impression rather than as its separate ingredients — the way a well-blended chord in music is heard as one sound, not as individual notes stacked up." },
675
+ // ── CERAMICS: pottery/ceramics (7) — no stress pair ─────────────────────────
676
+ { marker: "CERAMICS::1", cluster: "CERAMICS", durability: "standard", ageDays: 45,
677
+ text: "Greenware — clay that's been shaped but not yet fired — is extremely fragile and water-soluble, which is why it has to dry slowly and evenly before its first firing; drying too fast lets one part shrink before another and cracks the piece before it ever sees a kiln." },
678
+ { marker: "CERAMICS::2", cluster: "CERAMICS", durability: "standard", ageDays: 18,
679
+ text: "The bisque firing that follows greenware drying hardens the clay permanently and makes it far more durable to handle, but it's still porous enough afterward to absorb glaze evenly — a piece fired all the way to full maturity first wouldn't take glaze nearly as well.",
680
+ note: "Near-dup facet of CERAMICS::1 (the bisque-firing stage that follows vs greenware's fragility before it)." },
681
+ { marker: "CERAMICS::3", cluster: "CERAMICS", durability: "persistent", ageDays: 53,
682
+ text: "A glaze's ingredients melt and fuse into a glassy coating during the second, hotter firing, and the specific mix of minerals used determines both the glaze's final color and whether it comes out glossy, matte, or textured." },
683
+ { marker: "CERAMICS::4", cluster: "CERAMICS", durability: "standard", ageDays: 23,
684
+ text: "Two glazes that look identical in their raw, unfired state can fire to completely different finishes, since the color and texture only emerge once the minerals actually melt and react in the kiln — which is why test tiles matter more than trusting how a glaze looks going in.",
685
+ note: "Near-dup facet of CERAMICS::3 (why test tiles matter vs the general glaze-firing mechanism)." },
686
+ { marker: "CERAMICS::5", cluster: "CERAMICS", durability: "standard", ageDays: 31,
687
+ text: "Wedging clay before throwing it removes trapped air bubbles and evens out its moisture content, and skipping this step is one of the most common reasons a piece explodes in the kiln — a trapped air pocket expands rapidly under firing heat with nowhere to go." },
688
+ { marker: "CERAMICS::6", cluster: "CERAMICS", durability: "standard", ageDays: 12,
689
+ text: "Centering clay on the wheel is widely considered the hardest single skill in throwing to learn, because every subsequent step of the piece — walls, shape, thickness — inherits and amplifies whatever's off-center at the start instead of correcting it." },
690
+ { marker: "CERAMICS::7", cluster: "CERAMICS", durability: "ephemeral", ageDays: 5,
691
+ text: "Cone-rated firing temperatures use a numbered system of pyrometric cones instead of a raw thermometer reading, because a cone measures the combined effect of both temperature AND how long that temperature was sustained, which a simple peak-temperature reading alone can't capture." },
692
+ // ── LINGUISTICS: linguistics (7) — no stress pair ───────────────────────────
693
+ { marker: "LINGUISTICS::1", cluster: "LINGUISTICS", durability: "standard", ageDays: 43,
694
+ text: "A phoneme is the smallest unit of sound that changes a word's meaning in a given language — swapping the 'p' in 'pat' for a 'b' changes the word entirely, which is what makes /p/ and /b/ distinct phonemes in English rather than just two ways of saying the same sound." },
695
+ { marker: "LINGUISTICS::2", cluster: "LINGUISTICS", durability: "standard", ageDays: 17,
696
+ text: "The same sound difference that's a meaningful phoneme distinction in one language can be totally non-distinctive in another — a pair of sounds that changes meaning in English might be heard as 'the same sound said two ways' by a native speaker of a language that doesn't distinguish them.",
697
+ note: "Near-dup facet of LINGUISTICS::1 (cross-language non-universality vs the base phoneme definition)." },
698
+ { marker: "LINGUISTICS::3", cluster: "LINGUISTICS", durability: "persistent", ageDays: 50,
699
+ text: "A pidgin emerges when speakers of mutually unintelligible languages need to communicate for practical purposes — trade, labor — and cobble together a simplified, reduced-grammar hybrid that's nobody's native language yet still gets basic communication done." },
700
+ { marker: "LINGUISTICS::4", cluster: "LINGUISTICS", durability: "standard", ageDays: 21,
701
+ text: "A creole is what happens when a pidgin gets passed down to a generation of children who grow up speaking it as their FIRST language — at that point it develops the full grammatical complexity a pidgin never had, because a native language always does.",
702
+ note: "Near-dup facet of LINGUISTICS::3 (creole as the next generational stage vs the pidgin that precedes it)." },
703
+ { marker: "LINGUISTICS::5", cluster: "LINGUISTICS", durability: "standard", ageDays: 29,
704
+ text: "Code-switching is a bilingual speaker deliberately or unconsciously alternating between two languages within a single conversation, or even a single sentence, and it's governed by surprisingly consistent grammatical rules rather than being random or careless mixing." },
705
+ { marker: "LINGUISTICS::6", cluster: "LINGUISTICS", durability: "standard", ageDays: 10,
706
+ text: "A language's morphology — how it builds words out of smaller meaningful pieces — varies enormously in how much grammatical information gets packed into a single word; some languages express in one word what English needs an entire sentence of separate words to say." },
707
+ { marker: "LINGUISTICS::7", cluster: "LINGUISTICS", durability: "ephemeral", ageDays: 4,
708
+ text: "Prescriptive grammar rules — 'don't split an infinitive,' 'never end a sentence with a preposition' — describe how some authority believes language OUGHT to be used, while descriptive linguistics instead documents how a language actually IS used by its native speakers, rules or no rules." },
709
+ ];
710
+ // ─── Ground-truth queries (126) ─────────────────────────────────────────────
711
+ //
712
+ // Kind counts: stress=17, trap=34, hard=46, clean=29. This intentionally does
713
+ // NOT hit every individual per-kind ceiling from the spec (stress<=15,
714
+ // trap<=30, clean<=25, hard<=40 sum to at most 110) while still landing
715
+ // inside the spec's overall 120-150 total — see this file's PR / final report
716
+ // "Deviations" section for the reasoning: every kind was scaled up modestly
717
+ // and roughly proportionally from its stated range to close that gap, rather
718
+ // than either breaching the 120 floor or inventing low-value filler queries
719
+ // concentrated in one kind.
720
+ export const QUERIES = [
721
+ // ── stress (17): durability/recency composite-vs-raw discriminators ──────
722
+ // One pair per stress cluster (see CORPUS notes above for each pair).
723
+ { kind: "stress", expectMarker: "DISTSYS::1",
724
+ q: "How does a big cluster of nodes get everyone's state in sync without any single node broadcasting to everyone directly?",
725
+ note: "vs DISTSYS::4 (fresh/permanent anti-entropy repair, adjacent gossip topic)." },
726
+ { kind: "stress", expectMarker: "MEDSCHED::1",
727
+ q: "What's a smart way to overbook follow-up slots without swamping the waiting room?",
728
+ note: "vs MEDSCHED::4 (fresh/permanent sick-visit block, adjacent scheduling policy)." },
729
+ { kind: "stress", expectMarker: "LOGISTICS::1",
730
+ q: "What's the strategy where inbound freight goes straight onto an outbound truck instead of into storage?",
731
+ note: "vs LOGISTICS::4 (fresh/permanent just-in-sequence, adjacent delivery-timing strategy)." },
732
+ { kind: "stress", expectMarker: "COOKING::1",
733
+ q: "Why does searing meat at high heat actually make it taste better?",
734
+ note: "vs COOKING::4 (fresh/permanent reverse sear, adjacent searing technique)." },
735
+ { kind: "stress", expectMarker: "ASTRONOMY::1",
736
+ q: "How can astronomers tell how hot a star is just by looking at it?",
737
+ note: "vs ASTRONOMY::4 (fresh/permanent Doppler-wobble detection, adjacent stellar-observation topic)." },
738
+ { kind: "stress", expectMarker: "LEGAL::1",
739
+ q: "What contract clause excuses a party from performing when a disaster makes it truly impossible, not just expensive?",
740
+ note: "vs LEGAL::4 (fresh/permanent liquidated damages, adjacent risk-allocation topic)." },
741
+ { kind: "stress", expectMarker: "FITNESS::1",
742
+ q: "What's the one training principle that actually has to be there for strength gains to keep happening long-term?",
743
+ note: "vs FITNESS::4 (fresh/permanent autoregulation, adjacent training-methodology topic)." },
744
+ { kind: "stress", expectMarker: "TEAMPROC::1",
745
+ q: "What makes a postmortem actually surface the real cause of a failure instead of people covering themselves?",
746
+ note: "vs TEAMPROC::4 (fresh/permanent decision log, adjacent process-hygiene topic)." },
747
+ { kind: "stress", expectMarker: "HOMERENO::1",
748
+ q: "Why does taking out certain interior walls require an engineer's sign-off and a temporary support beam?",
749
+ note: "vs HOMERENO::4 (fresh/permanent identification tip, adjacent structural topic)." },
750
+ { kind: "stress", expectMarker: "MARINE::1",
751
+ q: "Why does a coral reef take decades to grow back after it's damaged?",
752
+ note: "vs MARINE::4 (fresh/permanent kelp-forest growth-rate fact, adjacent marine-habitat topic)." },
753
+ { kind: "stress", expectMarker: "TYPOGRAPHY::1",
754
+ q: "What's the actual difference between adjusting the space in one specific letter pair versus adjusting spacing across a whole line of text?",
755
+ note: "vs TYPOGRAPHY::4 (fresh/permanent optical sizing, adjacent type-spacing topic)." },
756
+ { kind: "stress", expectMarker: "DBSTORE::1",
757
+ q: "What guarantees that debiting one row and crediting another in the same operation either both take effect or neither does?",
758
+ note: "vs DBSTORE::4 (fresh/permanent isolation-level fact, adjacent concurrency topic)." },
759
+ { kind: "stress", expectMarker: "FINOPS::1",
760
+ q: "How does a finance team make sure every entry in the books actually matches what the bank statement shows?",
761
+ note: "vs FINOPS::4 (fresh/permanent DSO metric, adjacent finance-ops topic)." },
762
+ { kind: "stress", expectMarker: "GITWF::1",
763
+ q: "Why does leaving a feature branch unmerged for weeks become a growing problem?",
764
+ note: "vs GITWF::4 (fresh/permanent release-branch fact, adjacent branch-management topic)." },
765
+ { kind: "stress", expectMarker: "HORTIC::1",
766
+ q: "Why should you prune off two fruit-tree branches that are rubbing against each other in the wind?",
767
+ note: "vs HORTIC::4 (fresh/permanent espalier fact, adjacent branch-training topic)." },
768
+ { kind: "stress", expectMarker: "MUSICPROD::1",
769
+ q: "Why does a film composer wait until the picture is locked before writing the score?",
770
+ note: "vs MUSICPROD::4 (fresh/permanent temp-score fact, adjacent film-scoring topic)." },
771
+ { kind: "stress", expectMarker: "SPORTAN::1",
772
+ q: "What metric judges the quality of a team's scoring chances instead of just counting how many shots they took?",
773
+ note: "vs SPORTAN::4 (fresh/permanent win-probability-added fact, adjacent play-impact-metric topic)." },
774
+ // ── trap (34): cross-cluster lexical-overlap-but-wrong-domain pairs ──────
775
+ // Pair 1 (DBSTORE ↔ FINOPS, term "transaction"): 6 DBSTORE-answer + 6 FINOPS-answer.
776
+ { kind: "trap", expectMarker: "DBSTORE::1",
777
+ q: "What makes sure a transaction affecting two different rows' values is never partially applied?",
778
+ note: "shares 'transaction' vocab with the FINOPS cluster." },
779
+ { kind: "trap", expectMarker: "DBSTORE::4",
780
+ q: "What determines how much one transaction is shielded from another transaction running at the same time?",
781
+ note: "shares 'transaction' vocab with the FINOPS cluster." },
782
+ { kind: "trap", expectMarker: "DBSTORE::5",
783
+ q: "What's it called when a transaction reads a value that another transaction later rolls back?",
784
+ note: "shares 'transaction' vocab with the FINOPS cluster." },
785
+ { kind: "trap", expectMarker: "DBSTORE::8",
786
+ q: "What happens when two transactions end up each waiting on a lock the other one holds?",
787
+ note: "shares 'transaction' vocab with the FINOPS cluster." },
788
+ { kind: "trap", expectMarker: "DBSTORE::9",
789
+ q: "How can a transaction see a consistent snapshot of the data without blocking another transaction from writing?",
790
+ note: "shares 'transaction' vocab with the FINOPS cluster." },
791
+ { kind: "trap", expectMarker: "DBSTORE::2",
792
+ q: "Why does a transaction's changes get written to a durable log before they're applied to the actual data?",
793
+ note: "shares 'transaction' vocab with the FINOPS cluster." },
794
+ { kind: "trap", expectMarker: "FINOPS::1",
795
+ q: "What process makes sure every transaction recorded internally actually matches an external bank record?",
796
+ note: "shares 'transaction' vocab with the DBSTORE cluster." },
797
+ { kind: "trap", expectMarker: "FINOPS::2",
798
+ q: "What three documents get cross-checked before a transaction is approved for payment?",
799
+ note: "shares 'transaction' vocab with the DBSTORE cluster." },
800
+ { kind: "trap", expectMarker: "FINOPS::5",
801
+ q: "Why does the person who approves a transaction need to be different from the person who can execute it?",
802
+ note: "shares 'transaction' vocab with the DBSTORE cluster." },
803
+ { kind: "trap", expectMarker: "FINOPS::7",
804
+ q: "Why would a transaction get recorded in the books before the actual cash moves?",
805
+ note: "shares 'transaction' vocab with the DBSTORE cluster." },
806
+ { kind: "trap", expectMarker: "FINOPS::8",
807
+ q: "What lets a customer's bank reverse a transaction after the fact, even if the original sale was legitimate?",
808
+ note: "shares 'transaction' vocab with the DBSTORE cluster." },
809
+ { kind: "trap", expectMarker: "FINOPS::9",
810
+ q: "What has to happen to every transaction before a reporting period's books get permanently locked?",
811
+ note: "shares 'transaction' vocab with the DBSTORE cluster." },
812
+ // Pair 2 (GITWF ↔ HORTIC, term "branch"): 6 GITWF-answer + 5 HORTIC-answer.
813
+ { kind: "trap", expectMarker: "GITWF::1",
814
+ q: "What happens to a branch that's left growing on its own, unmerged, for weeks at a time?",
815
+ note: "shares 'branch' vocab with the HORTIC cluster." },
816
+ { kind: "trap", expectMarker: "GITWF::4",
817
+ q: "What's the point of cutting a separate branch specifically for stabilizing a release?",
818
+ note: "shares 'branch' vocab with the HORTIC cluster." },
819
+ { kind: "trap", expectMarker: "GITWF::5",
820
+ q: "Why would you cut a new branch directly from what's currently in production instead of from the main line?",
821
+ note: "shares 'branch' vocab with the HORTIC cluster." },
822
+ { kind: "trap", expectMarker: "GITWF::7",
823
+ q: "Why block direct changes to a branch and require a reviewed pull request instead?",
824
+ note: "shares 'branch' vocab with the HORTIC cluster." },
825
+ { kind: "trap", expectMarker: "GITWF::8",
826
+ q: "What can a branch require to pass before it'll accept a merge?",
827
+ note: "shares 'branch' vocab with the HORTIC cluster." },
828
+ { kind: "trap", expectMarker: "GITWF::9",
829
+ q: "At what point does merging a long-diverged branch back become riskier than the work on it is worth?",
830
+ note: "shares 'branch' vocab with the HORTIC cluster." },
831
+ { kind: "trap", expectMarker: "HORTIC::1",
832
+ q: "Why prune off two branches that are rubbing against each other in the wind?",
833
+ note: "shares 'branch' vocab with the GITWF cluster." },
834
+ { kind: "trap", expectMarker: "HORTIC::2",
835
+ q: "What's the branch collar on a tree, and why does it matter where you cut relative to it?",
836
+ note: "shares 'branch' vocab with the GITWF cluster." },
837
+ { kind: "trap", expectMarker: "HORTIC::2",
838
+ q: "Which part of a branch's attachment point contains the cells that actually seal a pruning wound?",
839
+ note: "shares 'branch' vocab with the GITWF cluster." },
840
+ { kind: "trap", expectMarker: "HORTIC::4",
841
+ q: "What growing technique trains a tree's branches to grow flat against a wall or trellis?",
842
+ note: "shares 'branch' vocab with the GITWF cluster." },
843
+ { kind: "trap", expectMarker: "HORTIC::1",
844
+ q: "What causes disease to enter a fruit tree right at a branch crossing point?",
845
+ note: "shares 'branch' vocab with the GITWF cluster." },
846
+ // Pair 3 (MUSICPROD ↔ SPORTAN, term "score"): 6 MUSICPROD-answer + 5 SPORTAN-answer.
847
+ { kind: "trap", expectMarker: "MUSICPROD::1",
848
+ q: "Why does a composer wait to write the music until after the picture is already locked?",
849
+ note: "shares 'score' vocab with the SPORTAN cluster." },
850
+ { kind: "trap", expectMarker: "MUSICPROD::4",
851
+ q: "What's the placeholder music editors use to react to a rough cut before the real music is finished?",
852
+ note: "shares 'score' vocab with the SPORTAN cluster." },
853
+ { kind: "trap", expectMarker: "MUSICPROD::7",
854
+ q: "What does a spotting session actually establish before a composer starts writing any music?",
855
+ note: "shares 'score' vocab with the SPORTAN cluster." },
856
+ { kind: "trap", expectMarker: "MUSICPROD::8",
857
+ q: "What's a short musical theme tied to a specific character called, when it recurs and transforms throughout a film?",
858
+ note: "shares 'score' vocab with the SPORTAN cluster." },
859
+ { kind: "trap", expectMarker: "MUSICPROD::9",
860
+ q: "What lets a director hear an approximation of the final music months before a live orchestra records it?",
861
+ note: "shares 'score' vocab with the SPORTAN cluster." },
862
+ { kind: "trap", expectMarker: "MUSICPROD::1",
863
+ q: "Why is timing musical hits to exact frame numbers only possible once editing is finalized?",
864
+ note: "shares 'score' vocab with the SPORTAN cluster." },
865
+ { kind: "trap", expectMarker: "SPORTAN::1",
866
+ q: "What metric captures shot quality instead of just shot count, letting a team lose while statistically outplaying its opponent?",
867
+ note: "shares 'score' vocab with the MUSICPROD cluster." },
868
+ { kind: "trap", expectMarker: "SPORTAN::2",
869
+ q: "How can two analysts build very different composite ratings from the exact same underlying stats?",
870
+ note: "shares 'score' vocab with the MUSICPROD cluster." },
871
+ { kind: "trap", expectMarker: "SPORTAN::4",
872
+ q: "What stat credits a single defensive play its actual game-changing impact instead of letting it disappear into the ordinary stats?",
873
+ note: "shares 'score' vocab with the MUSICPROD cluster." },
874
+ { kind: "trap", expectMarker: "SPORTAN::8",
875
+ q: "Why is an individual player's net-differential stat while they're on the field considered noisy?",
876
+ note: "shares 'score' vocab with the MUSICPROD cluster." },
877
+ { kind: "trap", expectMarker: "SPORTAN::2",
878
+ q: "What does a model's specific stat-weighting choice quietly encode about what its author considers valuable?",
879
+ note: "shares 'score' vocab with the MUSICPROD cluster." },
880
+ // ── hard (46): genuine near-duplicate disambiguation, non-adversarial age ─
881
+ { kind: "hard", expectMarker: "DISTSYS::3",
882
+ q: "Why do some systems ditch per-node event counters for something more compact as the system grows?",
883
+ note: "vs DISTSYS::2 (vector-clock base mechanism)." },
884
+ { kind: "hard", expectMarker: "DISTSYS::6",
885
+ q: "What specific data structure lets concurrent increments from different replicas merge without ever needing to pick a winner?",
886
+ note: "vs DISTSYS::5 (general CRDT merge guarantee)." },
887
+ { kind: "hard", expectMarker: "MEDSCHED::3",
888
+ q: "Why does texting patients about an overdue visit usually work better than mailing them a postcard?",
889
+ note: "vs MEDSCHED::2 (the recall-list concept itself)." },
890
+ { kind: "hard", expectMarker: "MEDSCHED::6",
891
+ q: "What's the benefit of collecting a patient's insurance info before their visit instead of at check-in?",
892
+ note: "vs MEDSCHED::5 (pre-visit questionnaire for clinical prep)." },
893
+ { kind: "hard", expectMarker: "LOGISTICS::3",
894
+ q: "What can make a milk-run pickup route end up less efficient than just shipping directly?",
895
+ note: "vs LOGISTICS::2 (the milk-run concept itself)." },
896
+ { kind: "hard", expectMarker: "LOGISTICS::6",
897
+ q: "What's the actual downside of setting safety stock way higher than it needs to be?",
898
+ note: "vs LOGISTICS::5 (safety stock's basic purpose)." },
899
+ { kind: "hard", expectMarker: "COOKING::3",
900
+ q: "Why is wine specifically a good choice for deglazing a hot pan?",
901
+ note: "vs COOKING::2 (the deglazing technique itself)." },
902
+ { kind: "hard", expectMarker: "COOKING::6",
903
+ q: "Does a big roast need to rest longer than a thin steak, and why?",
904
+ note: "vs COOKING::5 (the basic resting mechanism)." },
905
+ { kind: "hard", expectMarker: "ASTRONOMY::3",
906
+ q: "Why does the transit method find big planets around small stars more easily than small planets around big stars?",
907
+ note: "vs ASTRONOMY::2 (the transit concept itself)." },
908
+ { kind: "hard", expectMarker: "ASTRONOMY::6",
909
+ q: "Just how much bigger does a star actually get once it becomes a red giant?",
910
+ note: "vs ASTRONOMY::5 (why a red giant forms)." },
911
+ { kind: "hard", expectMarker: "LEGAL::3",
912
+ q: "Why can an indemnification clause still leave a party exposed to the exact risk they thought was covered?",
913
+ note: "vs LEGAL::2 (the basic indemnification mechanism)." },
914
+ { kind: "hard", expectMarker: "LEGAL::6",
915
+ q: "If a non-compete clause is written too broadly, does it just get thrown out entirely?",
916
+ note: "vs LEGAL::5 (jurisdiction-based enforceability)." },
917
+ { kind: "hard", expectMarker: "FITNESS::3",
918
+ q: "Is how sore you are after a workout a good sign of how effective it actually was?",
919
+ note: "vs FITNESS::2 (the soreness-timing mechanism)." },
920
+ { kind: "hard", expectMarker: "FITNESS::6",
921
+ q: "How often someone actually needs a deload depends on what?",
922
+ note: "vs FITNESS::5 (deload's basic purpose)." },
923
+ { kind: "hard", expectMarker: "TEAMPROC::3",
924
+ q: "What makes an async status update actually get read and acted on instead of skimmed?",
925
+ note: "vs TEAMPROC::2 (why async works for distributed teams)." },
926
+ { kind: "hard", expectMarker: "TEAMPROC::6",
927
+ q: "What's the single most important clause to spell out in a team charter?",
928
+ note: "vs TEAMPROC::5 (the charter's general value)." },
929
+ { kind: "hard", expectMarker: "HOMERENO::3",
930
+ q: "Why does unpermitted renovation work matter even beyond the renovation itself?",
931
+ note: "vs HOMERENO::2 (why the permit/inspection matters)." },
932
+ { kind: "hard", expectMarker: "HOMERENO::6",
933
+ q: "How long does it take before a vapor barrier installed on the wrong side actually shows visible damage?",
934
+ note: "vs HOMERENO::5 (the placement rule itself)." },
935
+ { kind: "hard", expectMarker: "MARINE::3",
936
+ q: "Once a coral has bleached, what determines whether it can still recover?",
937
+ note: "vs MARINE::2 (the bleaching mechanism itself)." },
938
+ { kind: "hard", expectMarker: "MARINE::6",
939
+ q: "How does an anglerfish specifically use bioluminescence to hunt?",
940
+ note: "vs MARINE::5 (the three general purposes of bioluminescence)." },
941
+ { kind: "hard", expectMarker: "TYPOGRAPHY::3",
942
+ q: "Is serif type actually more readable than sans-serif once you're reading on a screen instead of on paper?",
943
+ note: "vs TYPOGRAPHY::2 (the general serif/sans distinction)." },
944
+ { kind: "hard", expectMarker: "TYPOGRAPHY::6",
945
+ q: "Why does line height need to increase along with line length?",
946
+ note: "vs TYPOGRAPHY::5 (the line-length guideline itself)." },
947
+ { kind: "hard", expectMarker: "DBSTORE::3",
948
+ q: "When is it actually safe to discard a transaction's write-ahead log entries?",
949
+ note: "vs DBSTORE::2 (the base write-ahead-log recovery mechanism)." },
950
+ { kind: "hard", expectMarker: "DBSTORE::6",
951
+ q: "What's the difference between a dirty read and a phantom read?",
952
+ note: "vs DBSTORE::5 (dirty read specifically)." },
953
+ { kind: "hard", expectMarker: "FINOPS::3",
954
+ q: "Where does the three-way match process actually break down in practice?",
955
+ note: "vs FINOPS::2 (the base three-way-match concept)." },
956
+ { kind: "hard", expectMarker: "FINOPS::6",
957
+ q: "What's the usual workaround when a small finance team can't fully separate who approves a payment from who executes it?",
958
+ note: "vs FINOPS::5 (the base segregation-of-duties principle)." },
959
+ { kind: "hard", expectMarker: "GITWF::3",
960
+ q: "What's trunk-based development's equivalent of a stale, forgotten branch?",
961
+ note: "vs GITWF::2 (the trunk-based concept itself)." },
962
+ { kind: "hard", expectMarker: "GITWF::6",
963
+ q: "After a hotfix branch's fix is ready, where does it actually need to get merged?",
964
+ note: "vs GITWF::5 (why a hotfix branch is cut from production)." },
965
+ { kind: "hard", expectMarker: "HORTIC::3",
966
+ q: "Why does cutting a branch flush against the trunk heal worse than cutting just outside the collar?",
967
+ note: "vs HORTIC::2 (what the branch collar itself is)." },
968
+ { kind: "hard", expectMarker: "HORTIC::6",
969
+ q: "What does deadheading a perennial actually redirect the plant's energy into?",
970
+ note: "vs HORTIC::5 (the perennial/annual life-cycle distinction)." },
971
+ { kind: "hard", expectMarker: "MUSICPROD::3",
972
+ q: "What compressor setting makes sidechain pumping more pronounced?",
973
+ note: "vs MUSICPROD::2 (the basic sidechain mechanism)." },
974
+ { kind: "hard", expectMarker: "MUSICPROD::6",
975
+ q: "What causes the 'brickwalled' sound of an overly loud modern master?",
976
+ note: "vs MUSICPROD::5 (the limiter mechanism itself)." },
977
+ { kind: "hard", expectMarker: "SPORTAN::3",
978
+ q: "Where do a composite rating's weighting choices actually distort a roster decision the most?",
979
+ note: "vs SPORTAN::2 (the general weighting-choice problem)." },
980
+ { kind: "hard", expectMarker: "CLOUDINFRA::2",
981
+ q: "What's the actual tradeoff of using a health check that only pings the process instead of a deeper one?",
982
+ note: "vs CLOUDINFRA::1 (what a good health check requires)." },
983
+ { kind: "hard", expectMarker: "WINEMAKING::2",
984
+ q: "Why would a winemaker deliberately block malolactic fermentation instead of letting it happen?",
985
+ note: "vs WINEMAKING::1 (the conversion mechanism itself)." },
986
+ { kind: "hard", expectMarker: "ORNITHOLOGY::2",
987
+ q: "Why do ducks time their flightless molt period around access to cover or open water?",
988
+ note: "vs ORNITHOLOGY::1 (the general molt pattern)." },
989
+ { kind: "hard", expectMarker: "CARPENTRY::2",
990
+ q: "Does a solid wood tabletop change size more along its length or across its width with the seasons?",
991
+ note: "vs CARPENTRY::1 (why the fastening scheme matters)." },
992
+ { kind: "hard", expectMarker: "WEATHER::2",
993
+ q: "Why does a cold front tend to bring a narrow band of intense weather instead of a warm front's gradual buildup?",
994
+ note: "vs WEATHER::1 (the warm-front description)." },
995
+ { kind: "hard", expectMarker: "CHESS::2",
996
+ q: "Does a pinned piece lose its attacking power along the pin line, or just its ability to move?",
997
+ note: "vs CHESS::1 (the general pin principle applied to pawns)." },
998
+ { kind: "hard", expectMarker: "PHOTOGRAPHY::2",
999
+ q: "Besides aperture, what else narrows depth of field?",
1000
+ note: "vs PHOTOGRAPHY::1 (aperture's effect on depth of field)." },
1001
+ { kind: "hard", expectMarker: "AVIATION::2",
1002
+ q: "How does airspeed actually connect to a wing stalling if a stall is really about angle of attack?",
1003
+ note: "vs AVIATION::1 (the direct stall trigger)." },
1004
+ { kind: "hard", expectMarker: "INSURANCE::2",
1005
+ q: "Is choosing a high deductible basically a bet on how likely you are to file a claim?",
1006
+ note: "vs INSURANCE::1 (the mechanical deductible/premium tradeoff)." },
1007
+ { kind: "hard", expectMarker: "ARCHAEOLOGY::2",
1008
+ q: "What kind of disturbance breaks stratigraphy's usual lower-layers-are-older rule?",
1009
+ note: "vs ARCHAEOLOGY::1 (the basic stratigraphic principle)." },
1010
+ { kind: "hard", expectMarker: "PERFUMERY::2",
1011
+ q: "Which part of a fragrance is what most perfumes are actually built around, since it lingers the longest?",
1012
+ note: "vs PERFUMERY::1 (top notes' fast-fading role)." },
1013
+ { kind: "hard", expectMarker: "CERAMICS::2",
1014
+ q: "Why does a piece need a bisque firing before it can take glaze well?",
1015
+ note: "vs CERAMICS::1 (greenware's fragility before firing)." },
1016
+ { kind: "hard", expectMarker: "LINGUISTICS::2",
1017
+ q: "Can two sounds that are distinct phonemes in one language be heard as the same sound in another?",
1018
+ note: "vs LINGUISTICS::1 (the base phoneme definition)." },
1019
+ // ── clean (29): unambiguous single-best-answer sanity floor ──────────────
1020
+ { kind: "clean", expectMarker: "DISTSYS::9",
1021
+ q: "Why can't a distributed system stay both available and perfectly consistent during a network partition?", note: "" },
1022
+ { kind: "clean", expectMarker: "MEDSCHED::9",
1023
+ q: "Why do appointment reminders sent 48 hours ahead work better for filling cancellations than day-of reminders?", note: "" },
1024
+ { kind: "clean", expectMarker: "LOGISTICS::9",
1025
+ q: "What two roles does a bill of lading actually serve at once?", note: "" },
1026
+ { kind: "clean", expectMarker: "COOKING::9",
1027
+ q: "Why do you need to salt pasta water so much more heavily than what tastes right in a spoonful?", note: "" },
1028
+ { kind: "clean", expectMarker: "ASTRONOMY::9",
1029
+ q: "How do astronomers know dark matter exists if it doesn't emit or absorb any light?", note: "" },
1030
+ { kind: "clean", expectMarker: "LEGAL::9",
1031
+ q: "What does a merger clause in a contract actually prevent someone from doing later?", note: "" },
1032
+ { kind: "clean", expectMarker: "FITNESS::9",
1033
+ q: "Why do lifting straps help with certain pulling exercises?", note: "" },
1034
+ { kind: "clean", expectMarker: "TEAMPROC::9",
1035
+ q: "Why does a team's definition of done need to live in one place everyone reads?", note: "" },
1036
+ { kind: "clean", expectMarker: "HOMERENO::9",
1037
+ q: "What's the most common source of a renovation budget dispute?", note: "" },
1038
+ { kind: "clean", expectMarker: "MARINE::9",
1039
+ q: "How does excess atmospheric carbon dioxide make it harder for corals to build their skeletons?", note: "" },
1040
+ { kind: "clean", expectMarker: "TYPOGRAPHY::9",
1041
+ q: "Why does font hinting matter less now than it used to?", note: "" },
1042
+ { kind: "clean", expectMarker: "DBSTORE::7",
1043
+ q: "Why do B-tree indexes deliberately keep a high fanout at each node?", note: "" },
1044
+ { kind: "clean", expectMarker: "FINOPS::7",
1045
+ q: "Why do a company's accrual-basis books not match its bank balance at any given moment?", note: "" },
1046
+ { kind: "clean", expectMarker: "GITWF::7",
1047
+ q: "Why require pull-request review before a change reaches a protected branch, rather than just trusting individuals?", note: "" },
1048
+ { kind: "clean", expectMarker: "HORTIC::7",
1049
+ q: "How do beans and marigolds help other plants when planted nearby?", note: "" },
1050
+ { kind: "clean", expectMarker: "MUSICPROD::5",
1051
+ q: "Why does a limiter sit as the very last step in a mastering chain?", note: "" },
1052
+ { kind: "clean", expectMarker: "SPORTAN::7",
1053
+ q: "Why can two teams with the same win-loss record end up ranked differently?", note: "" },
1054
+ { kind: "clean", expectMarker: "CLOUDINFRA::5",
1055
+ q: "Why lower a DNS record's TTL well ahead of a planned cutover?", note: "" },
1056
+ { kind: "clean", expectMarker: "WINEMAKING::5",
1057
+ q: "Why can the same grape variety taste different depending on where it's grown?", note: "" },
1058
+ { kind: "clean", expectMarker: "ORNITHOLOGY::5",
1059
+ q: "Why doesn't a migratory bird typically get lost if it loses one of its navigation cues?", note: "" },
1060
+ { kind: "clean", expectMarker: "CARPENTRY::5",
1061
+ q: "Why would someone use a hand plane instead of a power sander for a fine finishing pass?", note: "" },
1062
+ { kind: "clean", expectMarker: "WEATHER::5",
1063
+ q: "Why is dew point a better indicator of how muggy the air feels than relative humidity?", note: "" },
1064
+ { kind: "clean", expectMarker: "CHESS::5",
1065
+ q: "What's the tradeoff of fianchettoing a bishop instead of developing it normally?", note: "" },
1066
+ { kind: "clean", expectMarker: "PHOTOGRAPHY::5",
1067
+ q: "What's the rule of thumb for the slowest shutter speed you can safely handhold at a given focal length?", note: "" },
1068
+ { kind: "clean", expectMarker: "AVIATION::5",
1069
+ q: "Why does a small plane have to wait longer after a heavy jet takes off than the other way around?", note: "" },
1070
+ { kind: "clean", expectMarker: "INSURANCE::5",
1071
+ q: "What does adding a rider to an insurance policy actually do?", note: "" },
1072
+ { kind: "clean", expectMarker: "ARCHAEOLOGY::5",
1073
+ q: "Why is an ancient trash heap actually one of the richest sources of information at a dig site?", note: "" },
1074
+ { kind: "clean", expectMarker: "PERFUMERY::5",
1075
+ q: "What's the difference between a fragrance's sillage and its longevity?", note: "" },
1076
+ { kind: "clean", expectMarker: "CERAMICS::5",
1077
+ q: "Why does clay need to be wedged before it's thrown on the wheel?", note: "" },
1078
+ ];
1079
+ // Sanity: every expectMarker must resolve to a real corpus record (checked at
1080
+ // harness startup too, but cheap to assert here for anyone importing this
1081
+ // module directly).
1082
+ const MARKERS_V2 = new Set(CORPUS.map(c => c.marker));
1083
+ for (const { expectMarker, q } of QUERIES) {
1084
+ if (!MARKERS_V2.has(expectMarker)) {
1085
+ throw new Error(`corpus-v2.ts: query "${q}" expects unknown marker ${expectMarker}`);
1086
+ }
1087
+ }