COGNITIVE:HUB│DECISIONS│74 ENTRIES│2026-10-21
Decision log

74 decisions, dated

What the project decided and why, grouped by theme. Doctrine entries D1–D81 are cited by number; several fold into one decision where they express one rule. Nothing here is deleted; superseded entries say what replaced them.

70 accepted1 open1 discharged0 superseded

Correctness — the house rules

DEC-0012026-07-22●accepted

Solvable by construction, never generate-and-hope

Decision

Every generator produces an instance it can prove solvable — reverse generation from a solved state, constructive growth, or an algebraic invariant. No generator emits an instance and hopes a solver finds an answer.

Why

Cycle 0 found five of sixteen types with no validator (~44% of days unwinnable), unsolvable word ladders and an invalid 6×6 sudoku generator. Shipping unwinnable puzzles is this codebase's cardinal historical sin.

Consequences

Reverse-runnable rule sets are preferred sources (D14). Curated banks are the only part of the system that can be silently wrong, so construction beats curation wherever ground truth can be built (D24).

Status
●accepted
Source

CLAUDE.md house rule 2; docs/CYCLE_LOG.md Cycle 0; D14, D24

DEC-0022026-07-22●accepted

Validation is rules-based; any valid solution is accepted

Decision

Validators check the rules, never exact-match against a stored grid when the rules can be checked. New-style validators live in their generator file and are re-exported by PuzzleEngine.ts with a one-line case (King's verdict V3).

Why

A stored answer key is a second place for the truth to live, and the one that rots.

Consequences

The simulator family validates by replaying the player's construction against the terminal predicate, with no stored key at all (D20).

Status
●accepted
Source

CLAUDE.md house rule 3; docs/design/cycle2/KING_VERDICT.md V3; D20

DEC-0032026-07-22●accepted

Every type has an independent verifier that must agree

Decision

Each type ships a canonicalAnswer case in tests/PuzzleIntegrity.test.ts plus an independent second solver (BFS, subset search, a different algorithm) that must agree with the generator on every seeded instance.

Why

Two solvers written independently do not share a bug. A bug is caught by data, and data cannot share a bug with code.

Consequences

Since Cycle 3 the verifier lives behind a mechanical firewall (DEC-022). Every Cycle 5 type also ships a negative control.

Status
●accepted
Source

CLAUDE.md house rule 4; docs/cycle3/ADJUDICATION_03_scaffold.md §1

DEC-0042026-07-22●accepted

CACHE_VERSION is bumped whenever generator output or answer keys change

Decision

app/puzzles/PuzzleCache.ts CACHE_VERSION moves on every change to generator output or answer keys. Identity/presentation changes never bump it (D44).

Why

Sessions are cached for 30 days in AsyncStorage; a stale cache keeps a broken puzzle alive on every installed phone.

Consequences

Every wave close bumps it once (14 at wave 1, 24 at wave 11). A golden-baseline move without a bump is a bug.

Status
●accepted
Source

CLAUDE.md architecture notes; docs/CYCLE_LOG.md gates per wave

DEC-0052026-07-22●accepted

One deterministic session per calendar day, for everyone

Decision

The day's session is built from FNV-1a hashes of the date with independent streams for template, type and difficulty. Local state (performance history, arc position) may alter the route to a puzzle or a cosmetic parameter; it may never alter the set of valid answers (D18).

Why

Same date, same answers, for everyone. Adaptive difficulty is opt-in and local, and stays a bias on selection, never on truth.

Consequences

Any feature that changes valid answers by local state is a bug, not a feature. Contrast pairs must land in the same session (D11).

Status
●accepted
Source

app/puzzles/SessionGenerator.ts; D11, D18

DEC-0062026-07-22●accepted

Local-first, no accounts, no network, no streaks

Decision

No accounts, no network, no streaks, no guilt mechanics, no FOMO. The station keeps a log, not a scoreboard.

Why

The audience is people who write code, price risk and run experiments; the product is you-vs-you. A causeway that floods once a day is the whole retention model.

Consequences

Every meta feature (records, constellation, journal) reads only local stores. Sharing, if it ever exists, is text and opt-in.

Status
●accepted
Source

CLAUDE.md; docs/cycle3/VISION.md §2; docs/cycle3/ADJUDICATION_01_character.md

DEC-0072026-07-29●accepted

Curated real-world content is hand-verified with source notes

Decision

Fact banks (Paper Trail, Assay, Magnitude anchors, the knowledge family) carry a source per row; new rows need a one-search source, B1–B7 compliance and a same-PR FROZEN_INTERVALS addition. The King spot-checks facts at acceptance.

Why

Wrong answer keys were the historical failure. Facts are the one input construction cannot verify.

Consequences

Time-stability heuristic (D29): prefer facts true because of how the world is assembled over facts true because someone counted recently — if you would write "as of 2026" beside it, it fails. Assay's distinctness assertion bounced sulfur and hornblende in wave 10; the discipline works.

Status
●accepted
Source

docs/design/cycle2/KING_VERDICT.md PT-4, Assay rulings; D28, D29

Design system — Phosphor

DEC-0082026-07-28●accepted

Phosphor: amber on carbon, three type roles, one voice of colour

Decision

Amber-on-carbon terminal heritage. Space Grotesk for display, IBM Plex Sans for body, IBM Plex Mono for every number and label. Amber is the one voice of the system and marks exactly one thing: live, active, yours to act on.

Why

A precision instrument for the mind. Numbers live in monospace; chrome is quiet warm-black hairlines; the accent has to mean something or it means nothing.

Consequences

Count the amber elements on any screen — three or fewer, or remove one (D8, enforced by tests/AmberSlice.test.ts at ≤3 accent references per renderer). Category hues never touch buttons or body text.

Status
●accepted
Source

docs/design/UI_SPEC.md §1–2; D8, D46

DEC-0092026-07-28●accepted

The voice law: precise, dry, zero exclamation marks

Decision

No exclamation points, ever. Praise the work, not the person. Failure is information: errors report state and suggest a method, never apologise, never console, never taunt. No emoji. The glyph set is typographic and closed: ▮ ▸ ▾ ▴ ◂ ● ○ ▪ ▫ × ✓ + plus box drawing.

Why

The register is a sharp colleague, not a cheerleader. Wit comes from understatement and exactness.

Consequences

Binding on Sepia too — being an animal is not an exemption. Rogue glyphs (the flag U+2691 and the cross U+2715) were vetoed by name in Cycle 2 and substituted with ○/×. Every type carries a voice-law tagline checked by tests/Taglines.test.ts.

Status
●accepted
Source

docs/design/UI_SPEC.md §4, §8; KING_VERDICT.md V4; docs/cycle3/VISION.md §2

DEC-0102026-07-28●accepted

app/theme.ts is the only source of design tokens

Decision

Zero hardcoded hex outside app/theme.ts (token plus '66'/'1F' alpha suffixes and '#00000099' allowed). No fontWeight beside custom fonts. No springs or scale bounces.

Why

One source of tokens is what lets a design system be audited by grep at every cycle close.

Consequences

Greps run at every close. tests/DepthTokens.test.ts (197 assertions) walls the depth tokens since wave 4.

Status
●accepted
Source

CLAUDE.md hard style rules; docs/design/UI_SPEC.md

DEC-0112026-07-29●accepted

Bevel is affordance; Key.tsx is the one recipe; no drop shadows ever

Decision

An element carries a bevel if and only if tapping it acts. The edge-light bevel lives in theme.bevel and app/ui/Key.tsx only; raw edge tokens elsewhere are a violation. No shadows, no elevation, no blur. Travel is 2px everywhere. The accentBright → accent gradient exists in exactly one place: the primary Key face.

Why

Depth has to be semantic or it is grease. A strobing gradient on lit phosphor cells buys nothing but GPU churn.

Consequences

The flat-exemption ledger (StatusLine, brackets, chips, nav, givens) is canonical law. Answer chips beside a bench are flat by named exemption: the bench is the machine, the lineup is paper.

Status
●accepted
Source

docs/design/cycle2/VISION.md; KING_VERDICT.md rulings (a)–(c), V5; UI_SPEC.md §3.5

DEC-0122026-07-29●accepted

One source of durations, one haptics module

Decision

app/ui/motion.ts owns every duration constant; flip.ts imports from it. app/ui/haptics.ts is the only importer of expo-haptics. The no-op haptics stub was refused: the real module merges first.

Why

Time and touch are system-wide feelings; two owners means two feelings.

Consequences

haptics.timerWarning ships reserved and wired nowhere until a countdown mode exists (the timer counts up; buzzing at elapsed 0:30 states no fact the user caused).

Status
●accepted
Source

KING_VERDICT.md V1, V2, ruling (a)

DEC-0132026-07-29●accepted

The reveal after three misses is mercy, not a solve

Decision

A revealed puzzle books the last attempt with correct: false, never sets bench records and never fires a notable line. THE RECORD still renders in full.

Why

The player leaves taught either way; the records stay honest.

Consequences

Inherited by every later type. Par registers are AT PAR / OVER PAR where par is a proven minimum; UNDER PAR exists only for types whose par includes slack.

Status
●accepted
Source

KING_VERDICT.md PT-3, Assay (2)

DEC-0142026-07-30●accepted

Z encodes agency: four materials, one-face perspective, amber never atmosphere

Decision

Exactly four materials — PANEL (flat, the world), KEY (raised, you act here), RECESS (sunk glass, the instrument speaks), SOLID (quantised four-facet volume). Verticals stay vertical; only tops recede. The lamp reveals form, the phosphor reveals state; nothing is lit by both for the same reason.

Why

A dimensional world must stay legible one-handed in sunlight, and the moment amber becomes atmosphere Phosphor is dead and this is a dark puzzle app with a bird in it.

Consequences

The palette gained a cold end (weatherFar, weatherHaze) so richness has somewhere else to go. Four ramp steps only on a solid; no gradient on a volume, ever. The decorative 4° board tilt was retired.

Status
●accepted
Source

D5–D8; app/theme.ts v3 WORLD tokens; docs/cycle3/ART_DIRECTION.md

DEC-0152026-08-22●accepted

Visual identity is derived, never chosen

Decision

Eight identity axes are derived by identityOf() from six facts a type already declares. Name-hashing a type to an appearance is forbidden; a manual identity override is forbidden. Identity is golden-pinned (tests/__golden__/identities.json) and does not bump CACHE_VERSION.

Why

If two boards look the same the question is not "which axis do I change" but "are these the same puzzle?" The grammar is a diagnostic instrument for catalogue duplication, not a cosmetic escape hatch from it (D45).

Consequences

Shared engine reads as the same apparatus in a different laboratory; shared operation reads as the same laboratory with different apparatus — D30 made visible. Every renderer sits on <Board>.

Status
●accepted
Source

D44, D45; docs/cycle4/SPEC_VISUAL_GRAMMAR.md; app/ui/grammar/

DEC-0162026-08-22●accepted

Smooth means protecting rest, not optimising motion

Decision

Idle animation is banned, so the app is at rest almost always. Definition: no frame over 16.7 ms with a finger down; nothing jumps; every change ≥120 ms or instantaneous; the hand gets an answer within 33 ms; steady-state re-renders per second: zero.

Why

D48 found the whole board reconciling once per second, 26 accessibility listeners on a 26-key board, and solvers running in render bodies. Adding 500 types onto a board that stutters multiplies a defect.

Consequences

Fixed before any new puzzle shipped (wave 1): Clock, one reducedMotion store, memoised renderers with empty render bodies, the Independence parser extended to Reanimated imports. Stage-entrance animation was refused in wave 5 under this law.

Status
●accepted
Source

D47, D48; docs/cycle4/SPEC_MOTION.md

World and character

DEC-0172026-07-30●accepted

The world is Outstation IX; the guide is Sepia; the magpie is struck

Decision

ART_DIRECTION.md built Outstation IX and populated it with Pica, a magpie; CHARACTER_BIBLE.md built Sepia, a cuttlefish. Ruling: the world survives, the cuttlefish wins, nothing of the bird remains. Sepia lives in the glass: the RECESS material and the guide are the same surface.

Why

The station explains the architecture (the causeway floods, so one session a day; a station keeps a log, not a scoreboard; eight decommissioned outstations are the eight categories). Sepia officinalis is colourblind and the ocean's finest colour-matcher — it does not have the channel, it reasons its way to the channel, which is what every puzzle asks of the player.

Consequences

The sheen token keeps its name and is reassigned to Sepia's chromatophore flush, capped at personal-best moments and ≤2% of frame. The kept-Sparks screen is justified by the instrument (a station keeps a log), not the animal.

Status
●accepted
Source

docs/cycle3/ADJUDICATION_01_character.md

DEC-0182026-07-30●accepted

Warm world, cool voice: Sepia's utterance budget

Decision

Two pushed lines a day, ≤1 per screen, zero during a puzzle, zero on a wrong answer, hint or give-up, zero about absence, ≤3 Home days in 7, silent for the first three sessions, muteable from Settings. Sepia may only assert what a store computes; below a template's sample floor the line does not exist. Cite a number the player can verify or say nothing; facts unhedged, causes always hedged.

Why

The obvious thing — a smiling cartoon fox congratulating you over a Bloomberg terminal — is forbidden by name. Warmth comes from being known, not from cheer.

Consequences

Not rendered during a solve. Zero idle motion. The rest-day line was refused in wave 5 per the bible. Bank at 48 templates after wave 10.

Status
●accepted
Source

docs/cycle3/VISION.md §0; ADJUDICATION_01 "What carries over"; docs/cycle3/CHARACTER_BIBLE.md

Stack and platform

DEC-0192026-07-30●accepted

Skia removed; Reanimated kept on a narrow licence; Tier-B Views render the solids

Decision

The Skia proof-of-concept failed the ≤34 MB APK gate on size alone (39.85 MB, librnskia.so 9.67 MB). Skia is uninstalled. react-native-reanimated and react-native-worklets are kept solely to serve useAnimatedSensor in app/ui/tilt.ts, the sole sensor importer. Solids render as Views with a matrix transform and ramp fills. Also refused: three.js, react-native-svg, Lottie, Rive (Windows path-length build failures — our exact wound), expo-sensors, gesture-handler, sprite atlases, bloom.

Why

Uninstalling all three would have surrendered the device-rotation family the owner asked for by name, to save a budget we did not need. The pure projection math was built Skia-free so the pivot cost two files.

Consequences

APK 29.88 MB, confirmed to within 0.08 MB of prediction. Board ceiling is 6³ at the ≤400-view budget (Skia's would have been 4³). General-purpose Reanimated elsewhere stays forbidden; SolidStage holds the single clause (attitude parallax, D49).

Status
●accepted
Source

docs/cycle3/ADJUDICATION_02_stack.md; ADJUDICATION_04_skia_verdict.md; D49

DEC-0202026-07-30●accepted

The web gate must mount the bundle, not merely build it

Decision

npm run gate:web exports and then runs the bundle in jsdom, asserting React committed real DOM into #root and that every named asset was emitted. The bare expo export is not the gate.

Why

Skia's web build was green and would have crashed on open — a 7.6 MB canvaskit.wasm never emitted. A gate that passes on a bundle which crashes is worse than no gate, because it is trusted.

Consequences

The gate's header documents what it does not catch (layout, WebGL, fonts, anything past the first frame, anything native). It runs at every wave close.

Status
●accepted
Source

ADJUDICATION_04 §2.3, §3b; scripts/webgate.js

DEC-0212026-07-30●accepted

Device attitude: the answer must be an attitude, and a tap twin is mandatory

Decision

Rotation is legitimate only when the answer is an attitude — if a slider would preserve the puzzle it is a control scheme and it is banned (tilt-to-steer, tilt-to-aim, shake). Every rotation-primary type ships a same-day tap twin from the same generator and validator. ±25° cone from the captured rest pose; no held attitude beyond 3 s; motion input default-off under OS reduce-motion; no motion input is ever required to finish a daily.

Why

Two independent surveys sized the honest family at about five in sixty. The tap-fallback constraint is a design filter, not a tax — in three of five cases the fallback came out stronger.

Consequences

initTilt at boot behind a Settings switch, default off. Quantised snap plus hysteresis, never free gyro rotation of a board.

Status
●accepted
Source

D2, D2a; ADJUDICATION_02 Conflict 2; docs/cycle3/VISION.md §1

DEC-0222026-07-30●accepted

The verifier firewall is mechanical

Decision

tests/verifiers/** may import only generatePuzzle and types — never kit/**, never a *Generators.ts, never PuzzleEngine — enforced by tests/Independence.test.ts parsing imports. VERIFIERS: Record<PuzzleGeneratorType, …> makes a missing verifier a tsc error.

Why

PuzzleIntegrity was found verifying toggle_grid and nim_duel with the generators' own helpers. The independent-verifier guarantee was breached in shipped code and enforced only by a comment.

Consequences

Firewalled count went 2 → 19 in wave 1 and covers every type since. The grandfathered breaches are capped and may only shrink.

Status
●accepted
Source

ADJUDICATION_03 §1; docs/CYCLE_LOG.md Cycle 3 finding 4

DEC-0232026-07-30●accepted

The stream contract and the golden baseline

Decision

Kit functions consume identical rand() draw counts so adoption is output-identical; any kit function that cannot state its draw count is not admitted. A golden file pins generator outputs (930 at Cycle 3, 5700 at wave 11); regeneration only via npm run golden:regen, deliberately, and only with a CACHE_VERSION bump.

Why

"Output-identical" became a machine check instead of a claim in a pull request — proved by a 47-draw trace table on generateFutoshiki.

Consequences

The registrar's merge assertion is "0 pre-existing hashes moved" at every step. Wave 10's move was confined to exactly assay + paper_trail and validated as such.

Status
●accepted
Source

ADJUDICATION_03 §0; tests/__golden__/generators.json

DEC-0242026-07-30●accepted

The simulator's preimage assertion never gains a bypass flag

Decision

With validateBySimulation there is no stored answer key, so a wrong tick corrupts generation and validation identically. Defence: tick/unTick preimage round-trip always on with no bypass; a naive tickRef in tests/verifiers/ written from a required rulesProse field; trace invariants; par re-derived by BFS. If either clause is relaxed the family is withdrawn rather than shipped weakened.

Why

Fifty types could be consistently wrong and consistently accepted. Differential testing cannot catch a wrong mental model, so human review of rulesProse is mandatory.

Consequences

kit/sim.ts shipped in wave 1 with the assertion on and no bypass. A performance argument is not grounds for one.

Status
●accepted
Source

ADJUDICATION_03 §3; app/puzzles/kit/sim.ts

DEC-0252026-07-30●accepted

The four-rung hint ladder; rungs 1–2 are free and invisible to records

Decision

Rung 1 (attention — where to look) and rung 2 (name the mechanism) are free, uncounted and invisible to BenchRecordsStore, PerformanceStore and every median. Rungs 3 (confirm a fragment) and 4 (the step on a different example) count as hints always did.

Why

Rungs 1–2 are part of reading the puzzle. Charging for them taxes unfamiliarity, which is what makes a hard catalogue feel hostile — and the catalogue was about to get much harder. The ladder turns stuck into slow, never into given.

Consequences

Historical hint data maps cleanly onto rungs 3–4; no migration. The untimed-briefing pattern (DEC-032) is the ladder's home wherever a timed phase follows.

Status
●accepted
Source

D17; ADJUDICATION_03 §2

Catalogue doctrine — what counts as a new puzzle

DEC-0262026-07-30●accepted

Uniqueness is measured by mental operation, not theme, category or engine

Decision

Two puzzles are the same if a player mid-solve performs the same mental operation. Dedup runs against narrow CHC abilities, never the eight product categories (which hide duplication: nine of the shipped 31 were one narrow ability) and never against shared code. Sharing an engine is not a reskin when the operation differs.

Why

A Sudoku with animals is a Sudoku. The category labels are a lying map (D21). Thirty countries' worth of provenance can still be one puzzle.

Consequences

Every catalogue entry names its nearest shipped type and defeats it (D4). Build priority: Gsm-WM > executive function > Gv > rule induction > metacognition > Glr > Grw > silent Ga.

Status
●accepted
Source

docs/cycle3/VISION.md §3.2; D4, D21, D30

DEC-0272026-07-30●accepted

The cheapness trap: cost is a tiebreaker, never a selector

Decision

Uniqueness is the gate; cheapness only orders what is already through it. The grid-constraint engine is built but capped, and constraint-propagation entries are on a quota spent on ones that add a level, not a predicate. Any wave whose additions cluster in Gf-RG is rejected at review regardless of how many source traditions it cites.

Why

The cheapest path to 500 (one engine unlocking ~30 pencil genres) would have built 39 copies of one puzzle — visible only by holding two agents' reports against each other. Fund the expensive half.

Consequences

The ≥2-axis rule (DEC-028) made this arithmetic. Theme, tradition, shared engine, a new predicate, difficulty and bookkeeping all count as zero axes.

Status
●accepted
Source

D14, D26, D32; docs/CYCLE_LOG.md Cycle 3 finding 1

DEC-0282026-08-22●accepted

"Be unique" is replaced by the ≥2-axis rule, and holes are aimed at

Decision

A proposal must differ from its nearest catalogue neighbour on at least two of six axes (ability · who holds the unknown · information structure · time shape · failure mode · interaction grammar), at least one of them ability or failure mode. Read the catalogue as a grid, find the empty cells, aim at them — before generation, not after.

Why

Four of nineteen ability cells held 69% of the 546; ~95% had the same unknown-holder. Cycle 3 generated 763 and discarded 189 at index time because every duplicate was individually defensible.

Consequences

Measured after eight territories: escaped-generator 71%, player-constructs 53%, "applied a rule wrongly" absent entirely (D75). The grammar census is mandatory at index time because agents undercount their own families two- to five-fold (D74).

Status
●accepted
Source

D38–D40, D73–D75

DEC-0292026-07-30●accepted

Claims discipline: promise the tools, not the transfer

Decision

The product may make a knowledge claim (it teaches named, reusable thinking moves) and never a capacity claim (smarter, higher IQ, better general reasoning). "Walk away smarter" governs internal design intent and does not survive into shipped copy or store listing.

Why

Far transfer from cognitive training is not established. This is also the more distinctive marketing position — everyone else in the category claims the thing that is not true.

Consequences

Applied to gambling reveals (no system changes the expectation), spaced-repetition reveals (no efficacy claim) and folk weather lore (Met Office's own mechanism/none division cited).

Status
●accepted
Source

D22; docs/CLAIMS_REVIEW_CHECKLIST.md; register T12/T14/T16 rows

DEC-0302026-07-30●accepted

Fairness governs information access, not simultaneity — the shutter

Decision

Stumped-but-fair means the solver lacked a hypothesis, not information: everything needed is on screen, one nameable aha per puzzle, zero deliberate red herrings, wrong answers return structural facts. A working-memory puzzle may withhold simultaneous visibility but never access — there is always a recoverable path (replay, re-reveal) even at a cost. Score the encoding, not the retention.

Why

Read naively, the fairness rule forbade the entire working-memory family, which the coverage audit ranked first.

Consequences

The shutter — a display recoverable at a cost — is built once in the kit (app/ui/interact/Shutter.tsx) and carries the family.

Status
●accepted
Source

D16, D33, D34

DEC-0312026-07-30●accepted

The impossibility family and the falsification verb

Decision

Verdict-and-certificate puzzles (reachable? tileable? no solution exists, and here is why) are a priority family. The falsification verb is a global submit affordance present on days when it is wrong, never a per-type control; the leak is closed by four combinable devices (twin-payload bar, dual-use certificate, mixed docket, repair-cost dial), named per entry.

Why

Three domains independently found the same missing family. If "no solution exists" only appears when true, its presence leaks the answer.

Consequences

impossibility_proof ("Closed Door") shipped in wave 1. D62's devices are surface grammar, so docket-verdict grew to 67 members and must be diversified in presentation (D80).

Status
●accepted
Source

D3, D12, D15, D62, D80

DEC-0322026-07-30●accepted

Commit-then-watch and the simulator are wave-1 infrastructure

Decision

A deterministic tick-based simulator is built once: it generates solvable instances by reverse simulation and validates by replay. The player authors a complete plan under zero feedback, commits, and watches it run.

Why

All 31 live types were static-state deduction. Two domains independently asked for one harness (~35 catalogue entries ride on it).

Consequences

kit/sim.ts and follow_chain shipped in wave 1. Interaction primitives (shutter, partition tray, impossibility banner) are shared infrastructure, never per-type work (D10, D25).

Status
●accepted
Source

D9, D10, D20, D25

DEC-0332026-07-30●accepted

Speed is capped at five and the clock covers execution only

Decision

The real-clock family is capped at five entries, each with an explicit interruption mitigation. Every speed type has an untimed briefing (rule, goal, full hint ladder, sit as long as you like) followed by a timed execution phase begun by an explicit tap; no hint rung is offered during the timed phase.

Why

Commute-playability (one hand, interruptible, on a train) outranks psychometric completeness. A puzzle that punishes a two-second jostle is wrong for this product no matter which CHC cell it fills.

Consequences

Speed-strategy entries are relabelled honestly rather than claimed as Gs. The briefing pattern is available to any type.

Status
●accepted
Source

D35, D37

DEC-0342026-07-30●accepted

Same-grammar types are capped at one per week

Decision

Families sharing a surface grammar are capped via WeeklyArc.affinity at one per week, enforced mechanically at session assembly, within abilities as well as across them.

Why

Surface-grammar collision is the default failure mode of scale and is invisible to per-type review. A gap-filling pass briefed against duplication still converged on one grammar fourteen times.

Consequences

The catalogue's input column carries the interaction grammar, never the device; tap is forbidden there. Every addendum part carries a grammar census.

Status
●accepted
Source

D19, D36, D74

DEC-0352026-07-30●accepted

Knowledge puzzles pass the closure test on every instance

Decision

Trivia is the evidence table, never the question. Delete the player's world knowledge; if the instance is still uniquely solvable from the pixels, it passes — run on every generated instance. Knowledge buys speed, never correctness. Never author the answer key: derive it from the bank, re-derive it in the validator, re-assert from a frozen table in tests.

Why

The failure mode of the external-knowledge mandate is a quiz. The closure test is machine-checkable, which is the reason the family can ship at all.

Consequences

Medical proposals ship only with fictional conditions and labelled illustrative numbers; later tightened to strict synthetic (DEC-047).

Status
●accepted
Source

D28; docs/cycle3/VISION.md §3.4

DEC-0362026-07-30●accepted

Fair lateral thinking: closed candidate set, minimality, bounded questions

Decision

A closed, always-visible candidate set; the generator guarantees exactly one candidate explains every stated detail while every other leaves an orphan; a bounded question budget validated information-theoretically. Nothing is struck for the player.

Why

The genre's defect is guess-the-author's-mind. These three rules make it decidable and tap-only without losing the feeling.

Consequences

nothing_wasted and falsify shipped in wave 1. Lose "nothing is struck for you" and the family collapses into assay.

Status
●accepted
Source

D23

DEC-0372026-08-22●accepted

A fusion is a cycle; a stapled pair is a DAG

Decision

Draw the dependency graph between the two halves' variables: a genuine fusion contains a cycle. This graph test supersedes D42's oracle test outright; where they disagree the graph wins. Build the cycle deliberately as a minimax (one half pushes the shared number down, the other up).

Why

Of 56 delivered fusions, 19 were rejected, 11 on this test. D53's "the cut that makes two artefacts" was found to be a DAG (one written quantity, two independent scorers) and its fusion claim withdrawn; it stays as a markable Creative pattern.

Consequences

Any entry claiming fusion shows a drawn cycle. Rejected fusions carry their diagnosis forward as stepping stones (D63).

Status
●accepted
Source

D42, D59, D61, D63, D79

DEC-0382026-08-22●accepted

emitted requires a modelled reader

Decision

An entry is emitted only when the puzzle contains a modelled reader whose successful recovery is the win predicate. Do not commission "emit puzzles"; commission readers — receiving systems (a host phonology, a code book) and adversaries supply them free.

Why

The cell sat at zero across 524 indexed rows; the file that claimed nine had two survive audit, and the audit then found fifteen genuine ones in files that never claimed any.

Consequences

The emit family reached 21 members by addendum part ten, including its first error-prone readers.

Status
●accepted
Source

D76, D81

DEC-0392026-08-22●accepted

Process constraints over record systems; the transformation operators

Decision

Where a tradition's formal object is a record system it is closed or already catalogued; where it is a process constraint it is almost always open. Territory agents spend their budget on how things are made. Three operators apply to existing entries: irreversibility (D52), the asymmetric corrector (D66 — make the correction one-directional and the decision moves upstream), and the rule as a live variable (D77 — hand the rule to the player with a stake on both sides).

Why

Craft is monotone; forward generation and replay validation are free and the failure mode ("foreclosed my own option twenty moves ago") was empty in the 546.

Consequences

Legality as a consequence (D50), prefix feasibility (D69), the joint product (D70) and the lossy record (D55) are reusable operators alongside the 22 in CREATIVITY_METHOD.md.

Status
●accepted
Source

D50, D52, D55, D57, D64, D66, D69, D70, D77

DEC-0612026-09-19●accepted

The Cycle 5 catalogue closes at C-1000; the next territory is briefed at @1000

Decision

Part Twelve (T19 optics, 23 of 32 admitted) brings the catalogue of record to C-1000 and the addendum stops there for Cycle 5. Nothing at or below C-1000 is renumbered, retitled or re-waved. Any further territory is briefed against the full 1000 — every D39 nearest-neighbour case re-run at @1000, never against a stale count — and lands in a new document, not a Part Thirteen. C-1000★ is admitted and waved but held off every build list until IDEA-047 returns (DEC-059 at its lighter weight).

Why

Two consecutive source files were briefed one pass stale (@958 for a catalogue at 977; @977 for one at 1000) and nearest neighbours moved at assembly both times (§92 ruling 8, §101 ruling 8). A round number is also an honest place to stop: Gf-RG+RQ took 78–91% of the last three intakes (D67), the owner has reframed the source of new entries (DEC-063), and the build queue already holds the wave-12b and wave-13b shortlists.

Consequences

The build backlog is docs/cycle3/PUZZLE_CATALOG.md (C-001..546) plus docs/cycle5/PUZZLE_CATALOG_ADDENDUM.md (C-547..1000), fixed. Waves 13–14 build from the two queued shortlists. Faculty-axis entries from the Quirk Atlas enter through their own assembly pass with their own numbering once the law questions return.

Status
●accepted
Source

addendum §100–§108 (Part Twelve), §101 ruling 8, §102; docs/CYCLE_LOG.md wave 12; IDEA-047

Representation — cultures, tone, honesty

DEC-0402026-07-30●accepted

Declines are recorded as decisions; structure ships, sacred content never

Decision

Every deliberate non-use of a tradition goes in REPRESENTATION_REGISTER.md with its reason, in one of three states: DECLINED (do not reopen without the owner), SYNTHETIC (invented tokens carry the real structure), OWNER (needs the owner's judgement before build). Standing rules: structure, never sacred content; never invent a tradition or present a contested reconstruction as settled; name peoples accurately with correct diacritics; where sourcing fails, under-attribute rather than guess; a decline is output, not failure.

Why

Otherwise a later cycle rediscovers the tradition, notices its absence and "fixes" a deliberate ethical choice.

Consequences

The register now carries Cycle 3–5 rows for eighteen research territories. OWNER rows are filed in the dashboard inbox for the owner.

Status
●accepted
Source

D24, D51, D58; docs/cycle4/REPRESENTATION_REGISTER.md

DEC-0412026-08-22●accepted

A brief is evidence, not authority

Decision

Where a prompt asserts a historical or cultural claim, the agent verifies it before building on it and reports the correction. An agent that corrects its brief has done its job; compliance with a wrong prompt is a failure.

Why

The integrator's own briefs contained "Persian nard doubling logic" (a New York invention, c. 1925), "sixteen metres" (fifteen), "zellij cut from the back" (glaze-up), a Damascus-steel conflation, and more — eleven claims across five territories, all caught by agents.

Consequences

Every cross-cultural fan-out carries D54 verbatim. Every register part has a CORRECTED table.

Status
●accepted
Source

D54, D65, D71

DEC-0422026-08-22●accepted

A citation is not a licence

Decision

Where a community actively asserts rights over a design tradition, crediting the scholar who analysed it does not confer permission. Ship the composition principle with generated shapes, credit the analysis, leave the vocabulary alone. Extended in Cycle 5 to trades: the working methods of named illusions are declined even where published.

Why

Publication in specialist literature is not a licence to hand a general audience a spoiler for living performers' repertoire, or to reproduce Pacific Northwest formline.

Consequences

Applied to formline, Diné clan names, Andean pallay, and T10's method-exposure line.

Status
●accepted
Source

D58; register T02, T10 rows

DEC-0432026-08-22●accepted

Broadcasting a pattern mid-flight requires claim-staking

Decision

When a pattern is broadcast to running agents, name the instances already claimed and require each recipient to declare a convergence flag on any entry using it. Every generating agent re-reads its last ten proposals every ten and tests them against each other.

Why

Relaying D52 to three territories produced a four-member family across three files and one exact duplicate on all six axes. The self-collision policy closed three emerging shapes at three members each where Cycle 3's worst reached eight.

Consequences

Doctrine that prescribes a mechanism must state its grammar footprint (D80).

Status
●accepted
Source

D43, D60, D72, D80

DEC-0442026-09-11●accepted

Randomisation entries: abstract chips, no casino, the negative result stated

Decision

Randomisation entries ship with abstract chips and tokens — no currency symbols, casino or lottery branding, real bet types, or advantage-play instruction; reveals about betting systems state explicitly that no system changes the expectation. Card counting declined on instruction-hazard grounds.

Why

D22 applied to gambling; the T08 look-alike-drug-names precedent applied to advantage play.

Consequences

Binds C-815..C-862 and every later randomiser skin.

Status
●accepted
Source

register "Cycle 5 additions (T12–T13)" standing rule

DEC-0452026-09-13●accepted

Market and auction entries: no tickers, no venue branding, no manipulation as skill — corpus-wide

Decision

Abstract lots, tokens and synthetic instruments; no brokerage or venue branding, no tickers, no real-price content; no entry whose skill is executing a manipulation. The rule binds reveals and banks, not just boards — manipulation history may be cited as history, never as method — and applies to every market/auction entry at build or reskin time, shipped ones included (C-162, C-224, C-226, C-835, C-836, C-839).

Why

House rule 5 already forbids the data; this fixes the dressing. The market sibling of DEC-044.

Consequences

C-911 Break the Corner is held on an OWNER framing flag (see inbox). Wave 10's lien/euro/pool trios shipped under it.

Status
●accepted
Source

register "Cycle 5 additions (T15)" standing rule

DEC-0462026-09-03●accepted

Tone precedent: nothing on a board models harm to a person

Decision

No real casualties, no real storms named, no real disasters; loads are objects, SAR targets are hulls or buoys, avalanche boards never depict burial (the failure verdict is "the plan is refused"), gunnery lead-prediction declined, literacy tests used for disenfranchisement and the devşirme declined outright even as reveal colour.

Why

The one territory where the theme is people not being saved needed a line; T08 drew it and every later territory checked against it.

Consequences

Casualty-family tone (C-729/C-734/C-744), Snow's dead (C-743), avalanche framing (C-887) and the tontines (C-895/C-906) remain owner taste calls in the inbox; the mechanics do not depend on the framing.

Status
●accepted
Source

register T08, T10, T14, T16, T17 rows

DEC-0472026-09-03●accepted

Strict synthetic content for medicine and assessment

Decision

No real drug facts, doses, criteria or thresholds in play, ever; no real exam questions, word lists, mark schemes, cut scores or rubric text. Historical and structural facts only, cited in reveals. Stricter than R08's illustrative-values compromise, and intentionally so; loosening it for any entry needs the owner.

Why

Medicine and education are training-adjacent. A wrong "real" answer key taught by a puzzle is the cardinal sin pointed at a patient or a child.

Consequences

Every printed number on a law, medicine, code or market board is declared the board's own (D54, the C-600/judo precedent), never asserted as current statute (house rule 5).

Status
●accepted
Source

register T08 OWNER row, T16 standing rule; addendum §90

Process — how cycles run

DEC-0482026-07-29●accepted

Every file has exactly one owner in a multi-agent cycle

Decision

King sets vision and reviews; queens write specs grounded in real files; workers implement with disjoint file ownership (a worker needing a change in another's file files a request; local variants are a firing offence); a registrar integrates and drives the tree green; the King spot-checks facts and grants acceptance; then push and APK.

Why

Seven parallel workers on 29 renderers with zero overlap shipped Cycle 2 in three phases through a 15-hour API blackout.

Consequences

Cycle 5 builders own 1–3 catalogue entries end to end in isolated git worktrees, minting a new generator file per family.

Status
●accepted
Source

KING_VERDICT.md §3; docs/cycle5/BUILDER_BRIEF.md

DEC-0492026-08-22●accepted

Cycle 5 is a build cycle: nothing is "specced for later"

Decision

Cycles 3–4 catalogued 546 entries and wrote the grammar and motion specs but shipped zero new types. Cycle 5 builds: pick an unbuilt catalogue entry, never invent one; deliver generator, validator, renderer, tests, firewalled verifier, Sepia lines and wiring in one branch. Waves follow the addendum's ranked shortlist.

Why

Owner's mandate, verbatim: "More puzzles, more cultures, and improved graphics across the board, it should feel extremely polished and 3D … unique personality."

Consequences

Eleven waves, 31 → 190 types, each wave a shortlist of twelve from the previous assembly pass; a research territory and an assembler pass ride alongside every wave.

Status
●accepted
Source

docs/cycle5/BUILDER_BRIEF.md; docs/CYCLE_LOG.md Cycle 5

DEC-0502026-08-22●accepted

The keep-both merge playbook for the seven shared wiring files

Decision

Builder branches conflict mechanically in PuzzleTypes.ts, generators/index.ts, PuzzleEngine.ts, SessionGenerator.ts, PuzzleScreen.tsx, PuzzleIntegrity.test.ts and the verifiers index. The registrar keeps both sides, closes split interface/registry hunks, merges the SPRINT_EXCLUDED_TYPES arrays, then runs tsc → jest → gate:web before the wave commit.

Why

Eleven branches per wave; the conflicts are the same shape every time.

Consequences

Builders mint family names checked against in-flight waves (wave 5: two trios both minted ProcedureGenerators.ts; one was renamed ChamberGenerators.ts at merge).

Status
●accepted
Source

CLAUDE.md merging note; docs/CYCLE_LOG.md wave 1, wave 5 registrar note

DEC-0512026-07-29○open

Install eslint or strike npm run lint

Decision

A gate that cannot run is worse than no gate. Either install and configure eslint or remove the script from every verification bar.

Why

npm run lint has never been runnable; eslint was never installed.

Consequences

Carried from Cycle 2 through wave 11. Still open.

Status
○open
Source

KING_VERDICT.md acceptance addendum ruling 2; CLAUDE.md

DEC-0522026-07-29●accepted

The dead stack stays untouched without an explicit request

Decision

core/**, services/**, data/**, app/components/**, OnboardingScreen.tsx, useChallenge.ts, scripts/cli.ts are never imported at runtime. Do not fix or wire them. Deletion (~18.5k LOC) needs the owner's explicit approval.

Why

Many tests cover the dead stack and stay green; changing dead code changes nothing in the app and wastes a cycle's attention.

Consequences

Deletion is an inbox item.

Status
●accepted
Source

CLAUDE.md "live code vs dead code"

DEC-0532026-09-16✓discharged

Three Cycle 2 decrees discharged in wave 10

Decision

bevel.faceHue promoted into a theme recipe (SimonSays and RhymeSort migrated, wall test added); Assay bank grown 16 → 22 per its exclusion notes; Paper Trail bank grown 55 → 66 per its header discipline. Par bands beyond card_memory were wired in wave 5.

Why

Each had been carried since 2026-07-29.

Consequences

Retired from the carry list. The golden moved for exactly the two bank types.

Status
✓discharged
Source

docs/CYCLE_LOG.md wave 5, wave 10

DEC-0622026-09-19●accepted

A builder corrects a catalogue sketch that cannot produce its own sentence, and declares it

Decision

A catalogue entry's mechanism sketch is a brief, not a specification (DEC-041 applied to the catalogue itself). When a builder proves the sketch degenerate — it cannot produce the seam the entry was admitted for — the builder ships the smallest model that does, records the deviation under a CATALOGUE DEVIATION header in the generator file and in the commit message, and the registrar records it in the cycle log without re-litigating it. Deviations that would change the entry's ability seat, its reader kind or its two axes are not the builder's to make; those go back to assembly.

Why

Wave 12's adder trio: T17-17's cost model (fetch gap plus duration on a ring) always tied, because shortening a duration lengthens the next gap by the same amount, so "the slow way round is faster" could never occur. The shipped slow_way_round adds the operand word's resident-table placement (what SOAP optimised) and the sentence is true on every board. The same trio replaced a UNIT card on a ring (forbidden by §2.2) with a derived cell, and shipped C-953 as possible days only with par AT the optimum, because its refusal certificate merely restated the number the player had already computed. Three other trios declared their own: between_numbers certifies the transition rather than a single skew instant; two_letters did not adopt T17-04's RULING tick because identity is derived (DEC-015); cure_disease declines T17's "about 200 accesses" figure flagged VERIFY.

Consequences

The declaration is mandatory and the form fixed: what the sketch said, why it fails, what shipped instead, and which catalogue rulings it touches. The cycle log carries a Deviations paragraph per wave from wave 12 on. A builder who silently ships a working model under a sketch that does not work has done half the job; a builder who ships a broken sketch faithfully has done none of it.

Status
●accepted
Source

commit c9376f6 (adder trio), c8ae96d, 51ce46e; docs/CYCLE_LOG.md wave 12 Deviations; docs/cycle5/BUILDER_BRIEF.md; DEC-041

DEC-0632026-09-19●accepted

The Quirk Atlas is Cycle 6's research axis; its law questions are filed, never decided

Decision

The owner's reframe of 2026-09-19 — enumerate the human faculties a phone can exercise (perception, timing, motor control, memory kinds, prediction, attention), then attach them to serendipitous themes — becomes the source of new entries for Cycle 6, alongside and not replacing the mental-operation dedup unit (DEC-026). docs/cycle6/QUIRK_ATLAS.md (204 faculties in twelve clusters, each rated for channel, viability, session fit and roster coverage) is the enumeration of record. Its twelve law questions (gesture vocabulary, tilt-primary play, precision timing versus speed, self-moving stimuli, haptics as content, a test hue, the shutter, calibration copy, cross-day content, figures and faces, reduce-motion for motion content, the illusion shelf) are filed as IDEA-048..059 and stay open until the owner answers them. No U-series design that depends on an open question is built, catalogued or waved; a ✓ in the atlas means a puzzle could be built, never that it should be.

Why

Ten knowledge territories and puzzle culture both over-produce reasoning — Gf-RG+RQ at roughly 80% of recent intakes (D32, D67) — and a grep of both catalogues for subitising, Stroop, n-back, vigilance, tempo, tilt, interception, flicker, illusion, change blindness and proprioception returns two relevant hits in 977 entries. The phone's sensors sit exactly where the roster is thinnest. Each question, though, is a change to a standing law (SPEC_MOTION §1.5, D2, D22, D33–D35, the palette, the haptic map, the anti-streak position), and DEC-060 reserves taste and law to the owner.

Consequences

Cycle 6 runs two tracks: the faculty axis (atlas → U01–U06 designs in docs/cycle6/research/ → an assembly pass of its own, numbered after C-1000 per DEC-061) and the UI/asset direction (held on IDEA-037). Every U-series design names the law questions it depends on and its within-law twin where one exists (the step-tap twin for adjustment tasks, the shutter for brief exposures). The illusion boundary is stated now so nobody builds "guess how wrong you are": the puzzle scores the physical judgement or reports the felt value as a measurement, never the player's having the illusion (house rule 2, D22).

Status
●accepted
Source

docs/cycle6/QUIRK_ATLAS.md §0, §6; docs/dashboard/IDEAS.md IDEA-048..059; docs/cycle6/research/; DEC-026, DEC-029, DEC-060

DEC-0642026-09-19●accepted

Pair bans are recorded, not scheduled

Decision

The catalogue's week-level exclusions from the wave-13 intake — spread_thin never in a week with curb_cable (the self-interference pair), switch_shouting never with between_numbers (C-950, the D69 boundary pair) or C-701, never two sky-bench boards in one week (too_close, closed_both, C-973★ when built), too_close never with hill_carries (non-monotone reach), one emit-family board per week with any_ten never beside two_letters or C-138 (addendum §92 ruling 1, §95) — are recorded as comments on the PUZZLE_TYPE_INFO rows in app/puzzles/generators/index.ts and in the CarrierGenerators.ts header. They are not enforced. SessionGenerator and WeeklyArc carry no week-level exclusion mechanism, and no builder invented one inside a type's worktree. Whether to build one (a WeeklyArc-level exclusion list consulted at type selection, deterministic per ISO week so house rule 1 holds) or to drop the bans as catalogue advice the scheduler does not honour is a decision carried to wave 14.

Why

Three builders met the same gap independently and all three took the same position: a scheduler change touches the deterministic session stream for every player (house rule 1, CACHE_VERSION) and belongs to the registrar's wiring files, not to a type branch. The bans exist because the assembler judged that two boards exercising one narrow operation in one week reads as a repeat (D21), which is scheduling law, not play feel: no board, verdict, copy or motion changes either way. DEC-060 reserves taste and game-design calls to the owner; this is not one, so it is not filed in the inbox.

Consequences

The recorded bans are now law. Over 2026-W01 to 2028-W52 (1,099 days), the table re-draws 32 of 2,191 picks (1.46%), so 32 daily sessions (2.91% of days) differ from the pre-DEC-064 scheduler. Every other day is byte-identical. A year of type selection costs about 25 ms. tests/__golden__/generators.json did not move, because type selection sits upstream of generation. CACHE_VERSION is 28 → 29, because cached sessions on the changed dates would otherwise disagree with regeneration. tests/WeekExclusions.test.ts checks three years of weeks against the table, determinism in both computation orders, the practice exemption and that every type in the table is registered. The row comments stay in place and point to the table. Builders add new bans to the table, never as comments only (BUILDER_BRIEF, "Wave 15 additions"). The addendum's wider affinity families, which were never recorded on shipped rows (e.g. trie-board, marker-model, rotor-ring, bell-rows), are not yet in the table. Migrating them is a separate registrar pass.

Status
●accepted
Source

commits 969e52a, 8a143f4, e937baa (builder declarations); app/puzzles/generators/index.ts PUZZLE_TYPE_INFO wave-13 rows; docs/cycle5/PUZZLE_CATALOG_ADDENDUM.md §92 ruling 1, §95; docs/CYCLE_LOG.md wave 13; DEC-026, DEC-060; app/puzzles/WeekExclusions.ts, tests/WeekExclusions.test.ts

DEC-0652026-09-24●accepted

The owner's "3D polish + sense of progress" message is read as the go for Direction C, with B's window next

Decision

On 2026-09-24 the owner wrote that the goal is "really nice 3D polish and a complete vibe … blending this silly morning games-style vibe with also a sense of progress: 'I'm getting smarter in XYZ areas … if I want to improve this part, I can do more puzzles here'", and asked for puzzles drawn from the senses and from things people enjoy ("I literally just spent 2 minutes chopping virtual wood"), including looking around a 3D world. IDEA-037 (art direction) had not been answered. This message is read as the go-ahead for the recommended direction: C, "The Chart" — the roster drawn as a map of ability areas, per-area practice and records, and a "practice here" run drawn from any area — followed by B's window as the 3D/delight layer. Cycle 6 wave C1 (progress model, Chart, today's leg on Home) starts now. Two research threads open beside it: U07, an atlas of activities people enjoy turned into puzzles (chopping wood is one of them, in a today-law tap form and a gesture form held on the law questions), and a 3D-renderer spike measuring what a real explorable scene costs against the APK gate.

Why

The owner's wording describes C's structure almost exactly (areas you can see yourself progress in, and a way into more puzzles for the area you want to work on) and B's feel (3D, playful). Waiting further on IDEA-037 would idle the loop on a question the owner has, in substance, answered.

Consequences

This is a reading, not a ruling: IDEA-037 stays open with this ADR cited, and if the owner prefers A or B-first the C1 progress model (which is direction-neutral data) is kept and only the drawing changes. Progress copy stays inside D22: it states practice and records per area, never that the player is getting smarter — the owner's phrasing is design intent, not copy (DEC on claims discipline). The voice law holds; "silly" lands as dry humour and small caused delights, and any place where the law blocks the owner's vibe is filed as an inbox item rather than broken. Gesture, timing, tilt-primary and 3D-renderer choices remain the owner's via IDEA-048..059 and the spike's inbox items.

Status
●accepted
Source

owner message 2026-09-24; docs/cycle6/DIRECTIONS.md (recommendation); IDEA-037; DEC-060, DEC-063

DEC-0662026-09-24●accepted

Chart station codes are append-only; FACTS rows are appended, never inserted

Decision

The Chart's station codes (tests/__golden__/chart.json, e.g. 1A-07) are append-only: a wave may add stations, never rename or remove one. Because the codes number by FACTS row order in app/ui/grammar/identities.ts, every new type's FACTS row goes at the end of the table, never grouped mid-table beside its family.

Why

Station codes number by FACTS row order, and nothing else read that order before the Chart, so builders had grouped rows by family. When Cycle 6 C1 (built on 211 types) merged onto wave 14, wave 14's emulsion trio (developed_together, grade_burning, touch_frame) sat mid-table, and the merge would have renamed three existing stations. A renamed station breaks the player's map and any per-station record keyed by its code. The registrar moved the block to the table's tail (55a4f53); generators.json and identities.json stayed byte-identical, so no CACHE_VERSION bump was needed.

Consequences

The builder brief's "Wave 15 additions" (36a55c8) make it a binding rule for builders: new FACTS rows go at the end. The registrar diffs chart.json after every npm run golden:regen in every wave, and a wave that renames or removes a station does not close. Wave 15 added nine stations (220 → 229) and renamed none. The CATALOGUE comment in identities.ts states the rule where the rows are written.

Status
●accepted
Source

commits 55a4f53 (the fix), 36a55c8 (builder brief), a818c90 / 2cdf80a (C1); docs/cycle5/BUILDER_BRIEF.md "Wave 15 additions"; tests/__golden__/chart.json; docs/CYCLE_LOG.md wave 15; DEC-065

DEC-0672026-09-24●accepted

Research paused at C-1302 while build and feel catch up

Decision

No new research territory is commissioned or assembled after Part Twenty-One (T26, C-1281..C-1302). The catalogue of record stays at 1302. The effort moves to building shortlisted entries and to the daily-frame vibe pass (Home, the between-stage moments, the results card). Research resumes when the A-grade backlog of shortlisted, unbuilt entries drops below about 60, or when the owner asks.

Why

At the wave-19 close the catalogue holds 1302 entries and the game has 265 types built, so a further territory adds backlog the build loop cannot reach for many waves. The owner's stated priority (2026-09-24, DEC-065) is 3D polish and a complete vibe, and that lives in the daily frame and the boards, not in more entries.

Consequences

The research slot in each wave goes to build and feel. Waves build from the existing shortlists (wave 20: grading, C-1258, C-1278, C-1265, and repair, C-1230, C-1219, C-1236). Nothing already catalogued is renumbered or withdrawn, and the register rules stand, including T25's rule that no board ever says food, drink or water is safe. Open VERIFY items and owner flags from earlier territories are still worked as they come due. The registrar checks the A-grade shortlisted backlog at each wave close and names the resume trigger in the cycle log when it is met.

Status
●accepted
Source

docs/CYCLE_LOG.md wave 19 ("Research paused; build and feel prioritised"); docs/cycle5/PUZZLE_CATALOG_ADDENDUM.md Parts Twenty and Twenty-One; commits 78e723a, 142add0, 9e3e651; DEC-061, DEC-065

DEC-0682026-10-03●accepted

The 34 MB APK gate is lifted; polish and beauty come first

Decision

The owner wrote on 2026-10-03: "34 mb DOESNT HAVE TO BE THE CAP and all ideas are welcome. The game first, needs a lot more UI UX polish, much smoother, more beautiful characters and animations and scenes". The 34 MB gate no longer binds. APK size is reported every wave against a soft 40 MB budget (SPIKE_VISUAL L11). Generated art (FLUX.1-schnell on the owner's Modal account) and self-authored vector art are both allowed.

Why

The gate had paused puzzle waves at v3.39.0 with 62 KB of headroom, and the owner's priority is feel over bytes.

Consequences

IDEA-116 and IDEA-117 are no longer blocking; R8 stays worth a phone test as a size lever. Puzzle waves may resume. The visual-stack spike (docs/cycle6/SPIKE_VISUAL.md) chose react-native-svg plus Reanimated; Skia, Lottie and expo-image stay refused on cost.

Status
●accepted
Source

owner message 2026-10-03; docs/cycle6/SPIKE_VISUAL.md; IDEA-116, IDEA-117

DEC-0692026-10-04●accepted

Art direction: puzzly gadget worlds; the design-law amendments are approved; the world scene is on by default

Decision

The owner wrote on 2026-10-04: "Art style should feel sort of puzzly, like gizmos and gadgets and puzzles, but at the same time have this futuristic vibe where players feel like they are improving themselves and adventuring across multiple worlds to improve their intelligence in different fields, like spatial, kinetic, or memory. This is the goal of the theme. The design rule changes: I trust you can go ahead with those as long as they fit with the theme that I just mentioned." And: "The scene should be on by default. Reacting to wrong answers should be a setting for players but it should be off by default."

  • Art direction: gizmos, gadgets and puzzle mechanisms in a futuristic setting; each ability area of the Chart is a world the player travels to.
  • SPIKE_VISUAL amendments L1–L11 are approved, applied where they serve that theme.
  • worldScene defaults to on.
  • Sepia's wrong-answer reaction (HMM) is a player setting, default off.
Why

The owner's answer to the spike's open questions (style, amendments, default, HMM).

Consequences

The theme is design intent, not copy: D22 still binds, so on-screen text promises practice and records per area, never that the player gets smarter. Voice law (no "!", dry wit), the hex law and no-springs stay. The world scene ships on; a Settings row turns it off. A second row turns the HMM reaction on.

Status
●accepted
Source

owner messages 2026-10-04; docs/cycle6/SPIKE_VISUAL.md §5 and §8; DEC-065, DEC-068

DEC-0702026-10-05●accepted

Full visual overhaul: type, scale, pop-up motion, futuristic feel

Decision

After v4.2.1 the owner wrote: "There's a bunch of visuals that are just not really showing up or I don't know if they're meant to show up or not. I think you need to fix that to make everything a lot more... actual. When you click it just looks like a line is lighting up. There's not an actual connection or graphics really at all. Everything still feels very bland. I think we need a full overhaul of the font, script size, pop-up animations, smoothness, futuristicness, and just general overall animations."

  • First, find and fix every Cycle 7 visual that does not render on the phone.
  • Then a full overhaul of typography (typefaces and type scale), pop-up and feedback animation, smoothness and the futuristic feel. Taps must produce visible, connected graphics, not only a lit line.
Why

The owner's first device impression of v4.2.1.

Consequences

The Phosphor v1/v2 typography roles (Space Grotesk / IBM Plex) and the motion law's "no springs, no scale bounces" are open to revision under this overhaul, where they make the game feel flat. Voice law (dry, no "!") and D22 still bind; the hex law and reduce-motion support still bind. A prototype of the new look is shown to the owner before it is rolled out across all boards.

Status
●accepted
Source

owner message 2026-10-05; DEC-068, DEC-069

DEC-0712026-10-05●accepted

Design v3 adopted as built: Oxide type, full solve, world-lit keys, pop-up verdict, fly-through

Decision

Shown the design v3 prototype (docs/cycle7/DESIGN_V3.md, lookbook ?tab=d3) and seven choices, the owner answered: "Yes to everything." Read as every option as built:

  1. Type pairing B, OXIDE: Oxanium (display and board numerals), Manrope (text), JetBrains Mono (data).
  2. The full solve sequence, particle flare and second frame pulse included.
  3. Halos on every lit cell.
  4. A world's colour may light the keys.
  5. The verdict as a pop-up card.
  6. The screen swap as a fly-through zoom.
  7. Ambient motion on the hub and gates on.
Why

The owner's answer to the prototype's open choices (DEC-070).

Consequences

Design v3 rolls out through the shared layers (theme type tokens and fonts, Key.tsx, WorldFrame, the pop-ups, ScreenArrival, the hub) so all boards change at once; it ships as v5.0.0. The UI_SPEC typography roles and SPEC_MOTION's no-spring rule are amended as DESIGN_V3.md proposes (mild overshoot springs allowed for pop-ups and key presses). Voice law, D22, the hex law and reduce-motion stills still bind. The perf findings in DESIGN_V3.md (toast state, screen-swap cost, solve at 4×) are addressed in the rollout.

Status
●accepted
Source

owner message 2026-10-05; DEC-070; docs/cycle7/DESIGN_V3.md

DEC-0722026-10-06●accepted

Every board up to par: real icons, 3D and hovering, live type; audited one by one

Decision

After v5.0.1 the owner wrote: "Yes, taps look cool but there's still a bunch of puzzles (for example, the sailing puzzle or the connecting puzzle), where what I'm selecting is just a box with a line in it. It should actually look more interesting, have real icons, and have a much more 3D feeling. The font should feel a lot more alive and animated and everything should feel like it's maybe hovering. I just think it's going to be a lot more 3D and stuff. You should literally go through each puzzle one by one and make sure that each graphic is up to par, checking the screenshot, right? I think that is the goal here so you need to be very rigorous with this."

  • Board content uses real drawn icons (vector, per puzzle family) where a box or glyph stands for a thing.
  • Tiles, keys and cards read as 3D objects that hover: depth, soft cast light and a gentle float.
  • Type feels alive: animated entrances, living headings and numerals.
  • Every one of the 394 boards is screenshotted, graded against a written rubric, upgraded and re-checked from its screenshot.
Why

The owner's device run of v5.0.1.

Consequences

UI_SPEC's sanctioned-glyph list stops governing board content (it still governs voice in copy). The board-screen "no idle motion" rule (L6) is amended to allow a gentle hover within a performance budget, still stilled under reduce-motion. Drop shadows may be used as cast light under hovering objects. Voice law, D22, the hex law and determinism (the golden) still bind.

Status
●accepted
Source

owner message 2026-10-06; DEC-070, DEC-071

DEC-0732026-10-06○proposed

The board pipeline: builder, independent grader, second pass; the grader's verdict counts

Decision

Every DEC-072 board goes through three roles. A builder rebuilds a batch to docs/cycle7/BATCH_BRIEF.md (S1–S4), shoots every board at d3 and d5, 360 and 412 px, click-solves it and self-grades it in BOARD_AUDIT.md. An independent grader, an agent that did not build the batch, grades the shots on the BOARD_AUDIT rubric and writes GRADE_*.md. Any board the grader holds below A goes to a second pass, which is graded again. A board counts as A only on the grader's latest verdict.

Why

Builders' self-grades ran high: at one count, 55 builder As were B on the independent grade (tmp-grade\LEDGER.md, 2026-10-08).

Consequences

Grade files and the ledger live in D:\Users\ashenoy00000\tmp-grade (outside the repo); batch notes in docs/cycle7/batches/. Earlier rulings in the grade files stay in force for later passes (the micro ruling, the tall-board precedent). Rulings on taste or play the grader meets are filed in IDEAS.md, not decided.

Status
○proposed (agent working practice; awaiting the owner)
Source

docs/cycle7/BATCH_BRIEF.md; docs/cycle7/BOARD_AUDIT.md; docs/cycle7/batches/; tmp-grade\GRADE_*.md, LEDGER.md

Operations — this machine, the APK, the dashboard

DEC-0542026-07-27●accepted

The APK builds from C:\Temp\j with a patched CMake staging dir

Decision

Windows MAX_PATH breaks the native build in the deep repo path (long paths disabled machine-wide, no admin). Sync the repo to C:\Temp\j, patch externalNativeBuild.cmake.buildStagingDirectory "C:/tb/n", reactNativeArchitectures=arm64-v8a, build with JDK 17. Ship to O:\rclone-offload\cognitive-hub-vX.Y.Z-<name>.apk.

Why

The native C++ codegen step fails with "Filename longer than 260 characters" from the repo path.

Consequences

Rive was refused partly for walking into this exact trap. Incremental rebuilds take ~3 min.

Status
●accepted
Source

docs/BUILDING.md

DEC-0552026-09-11●accepted

GRADLE_USER_HOME=C:\g — a short gradle home is law

Decision

Never the default ~/.gradle (D: is full) and never C:\Temp\gradle-home: the react-android prefab artifact transform extracts headers ~150 chars deep under the gradle home and a longer base silently breaks every configureCMake task ("Could not read workspace metadata … metadata.bin"), re-failing deterministically; cache wipes do not help.

Why

Learned after five failed builds; a warm cache masks it, a fresh configure exposes it. The wave-6 APK shipped late because of it.

Consequences

Written into BUILDING.md step 3 and the loop prompts.

Status
●accepted
Source

docs/BUILDING.md; commit b43ab8a; docs/CYCLE_LOG.md wave 7 ops note

DEC-0562026-07-29●accepted

Standing order: commit, push and ship the APK after every completed cycle

Decision

After every completed work cycle, commit and push to origin/main and rebuild and ship the APK to OneDrive without asking (skip the APK only if no app code changed). Release builds sign with the debug keystore — installable for personal use, not Play-Store ready.

Why

The owner's order. The APK on OneDrive is the artefact of record; the dashboard maps one frozen page to each.

Consequences

Fifteen APKs shipped to O:\rclone-offload\ from v1.0.0 to v2.4.0-wave11. A real release keystore is an inbox item.

Status
●accepted
Source

CLAUDE.md "Building the Android APK"; docs/BUILDING.md

DEC-0572026-09-11●accepted

Resource headroom: this box is shared

Decision

Other Claude sessions share the machine. At most four local-heavy agents at once, one gradle at a time, waves staggered; the jest suite runs with maxWorkers pinned to 2 as an OOM guard. Now in memory and the loop prompts.

Why

Set by the owner during wave 6.

Consequences

Dashboard builds and other side jobs do not run the app's jest suite; one heavy process at a time.

Status
●accepted
Source

docs/CYCLE_LOG.md wave 6 ops; CLAUDE.md gates

DEC-0582026-08-30●accepted

Disk pressure: hot data on C:, cold data on O:, never node_modules on O:

Decision

D: is critically full (~2 GB free at wave 2). Playwright and gradle caches cleared or offloaded to O:\rclone-offload\; the rclone VFS cache lives on C:; node_modules is never moved to O: (network-backed, pathologically slow for a hot build). The 2.7 GB Downloads offload needs the owner.

Why

Skia alone was ~900 MB across the repo and build trees; the Android build generates substantial intermediates.

Consequences

The Downloads question is an inbox item.

Status
●accepted
Source

ADJUDICATION_02 operational risk; docs/CYCLE_LOG.md wave 2–3 carries; CLAUDE.md (user-level)

DEC-0592026-09-14●accepted

Held entries wait for their owner flag before any build list

Decision

An addendum entry admitted with an OWNER framing flag (C-887 avalanche, C-911 corner) is held off the wave shortlists until the flag returns, even when it ranks. Entries with OWNER-light flags whose mechanics are unaffected (C-895/C-906 tontine tone) build under the recommended option with the flag riding on the brief.

Why

The assembler cannot make taste calls the owner reserved; the mechanics do not depend on the framing, so nothing is lost by waiting.

Consequences

Both are in the inbox with their options.

Status
●accepted
Source

addendum §57/§59, §66/§72; register T14, T15 OWNER rows

DEC-0602026-09-19●accepted

The project dashboard is a static site generated from docs/dashboard/

Decision

dashboard/build.mjs (Node ≥18, zero dependencies) renders docs/dashboard/DECISIONS.md, IDEAS.md, DIRECTIONS.md and releases/*.json into dashboard/dist/, hosted on Vercel. One frozen page per shipped APK under /v/<version>/; old pages are never deleted. The content files are the source of truth and are edited by hand at every wave close.

Why

Owner's mandate: "set up the vercel deploy; it should be updated with the project's progress, decisions, and keep decision log, and future directions … dashboard should be versioned (keep old pages), map each dashboard to each .apk."

Consequences

The registrar's wave-close ritual gains four steps (docs/dashboard/README.md). Game-design ideas and taste questions are always filed in IDEAS.md for the owner, never decided by an agent.

Status
●accepted
Source

docs/dashboard/README.md; vercel.json; dashboard/build.mjs

DEC-0742026-10-06○proposed

Unlink an agent worktree's node_modules junction before removing the worktree

Decision

Agent worktrees link node_modules to the main checkout with a junction. Before removing any agent worktree, unlink the junction with cmd /c rmdir "<worktree>\node_modules" (from Git Bash, cmd //c rmdir), then remove the worktree. Never git worktree remove -f -f a worktree that still holds the junction. Agents never run npm install in a worktree.

Why

On 2026-10-06 a forced removal of batch 12's fork worktrees deleted through their junctions and wiped .bin and about 25 @ scopes from the main checkout's node_modules; the gates failed with "tsc not found".

Consequences

Recovery, if it happens again: robocopy D:\j\node_modules (the APK build copy) back with /E /XJ /XO /XD build .cxx .gradle, provided package-lock.json has not changed since the last APK sync.

Status
○proposed (agent working practice; awaiting the owner)
Source

Cycle 7 board batch 12 (2026-10-06); docs/CYCLE_LOG.md (Cycle 7 board upgrade); CLAUDE.md

▾VERSION v5.13.0-sound · 79 releases · APK MAP