Rules sources — what is verified, what is a variant, what needs a player

Audit of 2026-10-30. Every scoring constant and calendar algorithm in packages/scoring, packages/lunar and the four apps was traced to its source in docs/specs/rules/*.md, and the primary sources were re-read on 2026-10-30 (web). The engine passes 644 tests (521 scoring, 118 lunar, 5 app-core) that encode the worked examples of the specs.

Status key: - Verified — the value is read from an official rule book (federation document) or an astronomical reference and matches the code. - Variant — a regional / house rule with no single authority; the code offers it as a setting, the default is a documented choice. - Needs player — no primary source found; the value comes from a secondary source (pagat.com, Wikipedia, Jass-Wiki) or was chosen by us and must be confirmed by a native player or expert before launch (see docs/specs/rules/OPEN_QUESTIONS.md).

Primary sources (read directly)

Game Authority Document Re-read 2026-10-30
Belote classique, contrée, coinche Fédération Française de Belote (FFB) Règles officielles de Belote 27.01.2016; Belote Contrée 27.01.2016; Belote Coinchée (undated) — ffbelote.org/documents/ yes, all three
Tarot Fédération Française de Tarot (FFT) Règlement officiel RO201206 (1 July 2012) — fftarot.fr yes
Skat Deutscher Skatverband (DSkV) / ISPA Internationale Skatordnung 2022 (ISkO); Spielliste 5er-Tisch 60 Spiele — dskv.de yes
Doppelkopf Deutscher Doppelkopf-Verband (DDV) Turnier-Spielregeln, Stand 21.02.2026 — doko-verband.de yes
Schafkopf Schafkopfschule e. V. München Turnierregeln 2020-01 (tariff, Tout ×2, Sie ×4); 2024 edition for the Laufende caps (read 2026-10-29) yes (2020)
Rommé DSkV Internationale Rommé-Ordnung 02.07.2012 yes
Jass (Weis) Jassverband Schweiz Jass-Wiki Weispunkte (jasswiki.ch/weis-regeln/weispunkte/) yes
Jass (Schieber, slate) — no federation rule book online — pagat.com Schieber Jass (DE); de.wikipedia Jass; jasvel.org Jasstafel schreiben. The reference book Puur Näll As (AGM AGMüller) is not read yes (secondary)
Lunar astronomy Jean Meeus, Astronomical Algorithms 2nd ed. (1998), ch. 22, 25, 47, 48, 49 implemented from the book —
Lunar tradition Maria Thun Aussaattage (constellations); Paungger & Poppe Das Mondjahr (tropical signs) only the Penguin excerpt of Mondjahr 2027 Garten read; icalendrier.fr 2026 (constellation calendar) used for a 365-day comparison partly

A. Jasstafel (CH)

Item Value in code Source Status
Card values, trump (Under 20, Nell 14, A 11, K 4, O 3, Banner 10), plain suits, last trick +5, 157 per hand jass/schieber.ts pagat Schieber; de.wikipedia Jass; Jass-Wiki Verified (secondary sources agree; 157 is arithmetic)
Obenabe: 8 = 8 points same pagat; de.wikipedia Verified
Undenufe: 6 = 11, A = 0 (modern) / A = 11, 6 = 0 (old) setting, default modern de.wikipedia ("Swiss variant: 6 counts 11, A 0; Vorarlberg/South Tyrol keep the standard values"); pagat ("most players now…") Verified as the common CH practice; the old values stay an option
Match = 157 + 100 = 257 same pagat; de.wikipedia; jasvel Verified
Weis table: Dreiblatt 20, Vierblatt 50, Fünfblatt 100, Sechsblatt 150, Siebenblatt 200, Achtblatt 250, Neunblatt 300, vier Gleiche 100 (incl. 6/7/8), vier Nell 150, vier Puur 200, Stöck 20 jass/weis.ts Jass-Wiki Weispunkte (Jassverband Schweiz) Verified
Weis comparison (points → more cards → higher top card, lower in Undenufe → trump → first announced) same Jass-Wiki (identical five steps) Verified
Kreuzweis allowed, both count setting, default on Jass-Wiki ("Beide Weise gelten") Verified; some tables exclude it (option)
Stöck scored by its own team regardless of Weis same Jass-Wiki ("Stöck werden immer von der eigenen Partei geschrieben") Verified
Multipliers: Eichel/Rosen ×1, Schellen/Schilten ×2, Obenabe ×3, Undenufe ×4 preset 1 (default) pagat: ×4 Undenufe. de.wikipedia: "Obenabe and Undenufe ×3, one variant ×4". Appenzell 2–7 (wiki) Variant — ×3 vs ×4 Undenufe is the biggest open default (Q2 / A1); both presets exist. 2026-11-01 AI review: ChatGPT and Gemini keep ×4; Perplexity says ×3 citing pmu.ch Schieber-Jass (not readable by us). Default unchanged
French deck: which suits are ×2 setting pagat (black ×1, red ×2) vs de.wikipedia (red ×1, black ×2) contradict Needs player (Romandie)
Target score default 2500 (1000 / 1500 / 2000 / 3000 options) de.wikipedia "1000 or 2500"; pagat 3000 (with Bergpreis 1500); jasvel "1000, 1500, 2500, 3000 in practice"; Romandie règlement 1000/1500/2000 Variant; no printed-slate source yet (A3)
Finish order Stöck → Wys → Stich default de.wikipedia "most common Swiss rule"; Stöck-Stich-Wys also known; Vorarlberg Stich-Stöck-Wys; jasvel lists Weis → Stöck → Stich Variant (setting exists)
Z slate convention: top line 100, diagonal 50, bottom line 20, remainder as a number; groups of five crossed components/z-slate.tsx de.wikipedia Jass (Jasstafel section), jasvel.org Jasstafel schreiben ("Oben die Hunderter, in der Mitte die Fünfziger, unten die Zwanziger"), pagat DE Verified — closes the open item. There is no fifth line; the extra marks on a real slate are a V = 500 and X = 1000 written on the top line (wiki, jasvel), and fifties are often drawn in crossed pairs (= 100). Optional UI polish, not a scoring rule
Schneider (loser under half), Bergpreis (half target) options, off pagat Variant
Coiffeur: factors Eichel 1 … Gusti 10, Weis/Stöck off, points ÷ 10 before the factor, Match bonus 257 jass/coiffeur.ts pagat Coiffeur; de.wikipedia; factor table 1–10 matches a 2022 Swiss club document (cited by an AI review 2026-11-01, not seen by us); Puur Näll As not read. Since 2026-11-01 the new-game screen offers the counting method (÷10 before or after the factor, or full points), Match bonus on/off and Stöck on/off Needs player (A10–A12)
Differenzler: penalty = |prediction − points|, settlement vs. average jass/differenzler.ts pagat; Eidg. Differenzler-Jass-Verband rules not read Needs player (A13–A14)
Molotow: fewest points wins, Tischweis +, hand Weis −, Strich boards jass/molotow.ts jassverzeichnis.ch; Jass-Wiki; pagat; sources disagree on the end rule Needs player (A15–A18)
Bieter / Pandur / Sidi Barrani / Schellenjass / Handjass boards jass/points-board.ts Jass-Wiki (recommendations), pagat, Gastro Suisse règlement (Romandie names) Needs player (A19–A25). Pandur inheritance checked 2026-11-01 on jasswiki.ch/varianten/pandur: on a missed bid both opponents and the dealer write the bid's Schreibpunkte (2/3/4/5/6 by bid height); no fixed-2 rule there, so the default onFailure is confirmed and twoFixed stays a house-rule option

B. Compteur Belote & Tarot (FR)

Item Value in code Source Status
Belote card values (trump J 20, 9 14, A 11, 10 10, K 4, Q 3; plain J 2, 9 0), 162 incl. dix de der 10, capot 252 belote/*.ts FFB Belote 2016 §values; FFB Contrée; FFB Coinche Verified
Sans Atout A = 19; Tout Atout J 13, 9 9, A 6, 10 5, K 3, Q 2 (Coinche); Tout Atout with trump values 258 → ×162/258 conversion (Contrée §11.3, 198 → 124 + 20) per preset FFB Coinche; FFB Contrée Verified
Belote-rebelote 20; up to 4 belotes (80) in Tout Atout same FFB Coinche Verified
Classic: success = strictly more than the defence (belote included); chute → defence 162 (252 on capot); belote "imprenable"; litige 81–81 held to the next deal (tournament option); rounding to 10 optional (85 → 90, 84 → 80) preset "classique" FFB Belote 2016 Verified
Contrée: bids 80–160 by tens or capot; contré ×2 / surcontré ×4; belote lost on chute; rounding always to 10; two décomptes (points faits / faits + demandés); Note 1 (2C + 160 instead of 2C + 320); Note 2 (unbid capot contré = 320 + 100 = 420); end-of-game example 1770 + 120 + 110 preset "contrée" FFB Contrée 2016 (text) Verified
Contrée table values 160 (chute) / 320 / 640 / 500 (capot bid) / 1000 / 2000 belote/contree FFB Contrée p. 7 — the table is an image, transcribed by us; cross-checked 2026-10-30 with fr.wikipedia Belote contrée (chute 160 + contract + belote; capot réussi 500; capot chuté 410 = 250 + 160, offered as an option) Verified by cross-check; the FFB image itself still worth one look by a FR player (B7)
Contrée target 2001 (Cannes tournaments) option tournament règlements (recorded 2026-10-30) Variant
Coinche: announcements (carré J 200, 9 150, A/10/K/Q 100; Sans Atout carrés A 200, 10 150, others 100; cent 100, cinquante 50, tierce 20); capot 250; success = bid reached and more points; chute → 160 + announcements + belote + contract, ×2 / ×4; rounding to 10 preset "coinche" FFB Coinche Verified
Which game a café table plays by default, targets 1000 / 2000 / 3000 at home defaults 1000 / 2000 / 2000 FFB leaves the target to the organiser; fr.wikipedia "usually 3000" for contrée; pagat 2000 Variant (B1–B2)
Tarot card points (bout/roi 4.5, dame 3.5, cavalier 2.5, valet 1.5, other 0.5 = 91) tarot/tarot.ts FFT RO201206 Verified
Targets 56 / 51 / 41 / 36 by bouts; base 25; Petite ×1, Garde ×2, Garde sans ×4, Garde contre ×6 same FFT Verified
Petit au bout 10 × multiplier, "quel que soit le résultat" same FFT Verified
Poignée 20 / 30 / 40, not multiplied, to the winner of the deal; trumps needed 10/13/15 (4 players), 13/15/18 (3), 8/10/13 (5) POIGNEE_TRUMPS FFT pp. 3–12 Verified (4-player values apply at 3 and 5; FFT gives no separate values)
Chelem +400 / +200 / −200; defence chelem +200 each; Excuse on the last trick changes sides except in a chelem same FFT Verified
4 players: defenders −X each, taker +3X; 5 players: taker 2/3, partner 1/3 (2X / X); 3 players: taker ×2, half-points to the winning side same FFT (3- and 5-player pages) Verified
Pousse (×1/2/4/8/12), poignée 10/20/40 variant, misère, petit chelem options pagat (traditional) Variant
6 players all playing (12 cards, chien 6, poignées 6/8/10, −0.75X per defender); 6–8 with morts rotation; double appel at 7–8 tarot 6–8 modes tarot-multijoueur.com; competitor feature lists; no federation rule Needs player (B14–B16)

C. Skat & Doppelkopf Liste (DE)

Item Value in code Source Status
Skat Augen (J 2, A 11, 10 10, K 4, Q 3) = 120; base values Karo 9 / Herz 10 / Pik 11 / Kreuz 12 / Grand 24; Null 23 / 35 / 46 / 59 skat/skat.ts ISkO 2022 §2.2–2.4 Verified
Gewinnstufen (Skat game 1–3; Hand game 2–7 incl. Schneider/Schwarz angesagt, Offen), Schneider ≤ 30, Schwarz = no trick same ISkO §2.5 Verified
Lost game −2 × value (incl. Hand games) same ISkO §2.5.11 Verified
Überreizt: smallest multiple of the base ≥ bid, lost ×2; Schneider can rescue same ISkO §3.6 (+ example) Verified
Seeger-Fabian: ±50 per won/lost game; +30 to each other player at a 4-table, +40 at a 3-table; ranking tie-breaks skat/seeger-fabian.ts ISkO / SkWO §6.3.1 Verified
Series 48 deals (4-table) / 36 (3-table) same pagat (not in the ISkO text) Verified via pagat; DSkV list PDFs agree
5-player table: seating (first half: dealer's two left neighbours + the right one; second half: three left neighbours), +24 per other player's lost game, 60-deal series skat/list.ts ISkO §3.2.7; DSkV Spielliste 5er-Tisch 60 Spiele Verified
2001 proposal (40 to the two active opponents only) option pagat Variant
Kontra / Re ×2 / ×4 (score, not value); Ramsch (simple −10, Jungfrau 15/−20, Durchmarsch +120, Augenramsch); Bock rounds (= number of players, triggers configurable, sequential vs simultaneous); "Hand wird nicht bestraft"; Bierlachs 301/401 options pagat Skat (variations); de.wikipedia; survey 2026-10-29 Variant — official rules have none of these; defaults from pagat and the survey (C1–C7)
Doppelkopf Augen (A 11, 10 10, K 4, Q 3, J 2, 9 0) = 240; Re wins with 121 (120 when only Kontra announced); Kontra with 120 doppelkopf/doppelkopf.ts DDV TSR 2026 §7.1 Verified
Game points: gewonnen 1; unter 90/60/30/schwarz +1 each; Re / Kontra +2 each; each Absage +1; reaching the threshold against an Absage +1 same TSR §7.2.2 Verified
Sonderpunkte (gegen die Alten, Doppelkopf ≥ 40, Fuchs, Karlchen) 1 each, netted first, normal game only same TSR §7.2.3 Verified
Solo: player ±3P, opponents ∓P; list check sum 0 and all even / all odd same TSR §7.2.4, §7.3.3 Verified
Both parties fail their Absagen → nobody wins, only (a)/(e)/(f) + Sonderpunkte same TSR §7.1.3 Verified text; whether (a) includes the base point needs a DDV referee (C10)
Hochzeit clarification trick: trump or plain suit same TSR §4.4.3 Verified
24 deals per round, Pflichtsolo tournament mode TSR §8 Verified
Re/Kontra as doubling, old "lose everything" rule, Fuchs/Karlchen extras, Bock triggers, 5-player rotation options pagat Doppelkopf variants Variant (C9, C12)
Schafkopf tariff: Rufspiel 10 ¢, Solo/Wenz 50 ¢, +10 ¢ per Schneider / Schwarz / Laufender; Tout ×2, Sie ×4; point scheme 1/2/3 and 6/9/12/18/24 schafkopf/*.ts Schafkopfschule Turnierregeln 2020-01 (tariff, Tout, Sie), 2024 edition (Laufende caps 14 / 8 / 4) Verified (tournament); home tariffs vary (C13)
Schafkopf Kontra/Legen, Ramsch, point-mode ties options de.wikipedia, pagat Variant (C15)
Rommé: A 11, K/Q/J 10, joker 20 in hand, first meld ≥ 40; round bonuses 15/12/10/8/5; penalty tiers; (bonus − penalty) × 10 − card points romme/romme.ts DSkV preset DSkV Rommé-Ordnung 2012 §2.2, §5, §7 Verified
Rommé home preset (minus Augen, Hand-Rommé ×2, 100 if not opened) preset de.wikipedia Variant (C16)

D. Mondkalender (DE/FR)

Item Value in code Source Status
Moon longitude/latitude/distance (Meeus ch. 47, 60-term series), Sun (ch. 25), nutation (ch. 22), illumination (ch. 48), phases (ch. 49), ΔT (Espenak–Meeus polynomial) lunar/astronomy.ts Meeus 1998 Verified by the anchors below
Phase anchors: 2024-04-08 new 18:21; 2025-03-14 full 06:55; 2026-03-03 full 11:38; 2026-08-12 new 17:37 (±3 min tests) astronomy.test.ts Checked 2026-10-30: timeanddate gives 2026-03-03 full moon 11:37 UTC (engine 11:37:57), 2026-03-19 new 01:23 (engine 01:23:30); NASA greatest-eclipse times 11:34 / 17:46 UT are a different instant and must not be used as phase times (spec §8 note) Verified
Ascending / descending moon = sign of dδ/dt; "Wende" turning points calendar.ts Checked 2026-10-30 against the published 2026 Pflanzzeit windows (farbenundleben.de, Thun method): 21.04 14:00 / 05.05 13:00 / 18.05 23:00 / 01.06 18:00 local — engine 12:59 / 13:22 / 21:26 / 18:48. All within 1.5 h of the published (hour-rounded) times; the declination is flat at the turning point so this is the expected tolerance. 365/365 days agree with icalendrier.fr Verified
Constellation boundaries (J2000 ecliptic longitudes 29 / 53.5 / 90 / 118 / 138 / 174 / 218 / 241 / 248 Ophiuchus / 266 / 300 / 328 / 352, precessed 50.29″/yr) zodiac.ts IAU boundaries; cross-checked 2026-10-30 with the Sun's constellation entry dates (TH Rosenheim observatory table: Aries 19.04, Taurus 14.05, Gemini 21.06, Cancer 20.07, Leo 11.08, Virgo 17.09, Libra 31.10, Scorpius 23.11, Ophiuchus 30.11, Sagittarius 18.12, Capricornus 20.01, Aquarius 16.02, Pisces 12.03) — all match within 1° Verified as the astronomical boundaries
Thun's boundaries Ophiuchus folded into Scorpio; otherwise IAU icalendrier.fr (constellation calendar) agrees on 331/365 day types; the 34 differences are at six boundaries (mostly Scorpius→Sagittarius, earlier by ≤ 1 day). Thun adjusted the astronomical boundaries in her calendar; no published table found Needs expert — one month of a printed Aussaattage calendar settles it (D2, D3)
Element → day type (Earth root, Water leaf, Air flower, Fire fruit) zodiac.ts Thun tradition; confirmed by bienenzeitung.ch, farbenundleben.de, gartenbauschule-huenibach.ch, Paungger & Poppe excerpt Verified (tradition, consistent across sources)
Tropical signs (Paungger & Poppe), sidereal option (Lahiri 23.853° J2000 + precession, Fagan-Bradley 24.736°) zodiac.ts de.wikipedia Tierkreiszeichen; standard ayanamsa values Verified
Activity rules: sow above-ground waxing, roots waning, planting/transplanting descending (Thun) or Virgo (P&P), pruning waning / descending, grafting waxing / ascending, weeding waning, pests waning, harvest storage waning activities.ts Paungger & Poppe Mondjahr 2027 Garten excerpt (authors' text); Thun method per bienenzeitung.ch / farbenundleben.de (descending = Pflanzzeit, ascending = harvest fruit, prune vigorous growth) Verified for the listed activities
Activities flagged sourced: false: fertilise, soil work, cuttings, lawn, houseplant watering, root/flower harvest placeholders farbenundleben.de lists fertilising and soil work under the descending moon (Thun) — a candidate source, not yet applied Needs expert (D6)
Node / perigee / apogee "avoid" days: whole local day setting icalendrier.fr marks the whole day (54/54 agree); Thun's window width unknown Variant (D5)
Hair / nail / household days not built Paungger & Poppe main calendar not read Needs source (D7)
Default school per market (Thun default) setting FR: icalendrier.fr follows the constellations; DE: both books sell Needs gardener (D1)
Season windows (apps/mondkalender/src/lib/season.ts) months per activity, one table for DE/AT/CH and one for FR (app language); fruit trees and berry bushes split out as "Obstgehölze pflanzen" (plantTree) First written without a source; plausibility check 2026-10-30 against Plantura Aussaatkalender (DE). 2026-11-01: reviewed by three AI assistants with the prompts in project-files/expert-prompts (ChatGPT and Gemini without citations; Perplexity citing NDR Aussaat-Kalender, Mein schöner Garten, meine-ernte.de, Rustica, sememoi.com — links not opened by us, NDR blocked from our network). Rule: a month changed only where two of three agreed. Result: tomatoes/zucchini planting May–June (split from fruit trees), leaf harvest to December; everything else kept. Fruit trees DE Mar–Apr + Sep–Nov, FR Oct–Mar (ChatGPT only; the others did not split). Catalog plants in "Mein Garten" use their own months instead of the broad window Needs gardener (DE + FR) before launch

What a real player / expert still has to answer

The engine runs with a documented default for each of these; an answer changes a setting or a default, not the code.