fix(qa): per-CardSet detector thresholds for Rules calibration (#412 follow-up) - #431
Merged
Conversation
Read-only terminological consistency analysis across 8 languages: - Fallacies: 0 inconsistencies (8 families, 21 sub-families, 63 sub-sub-families) - Scenarii: 25 inconsistencies (PT case/translation variants in categories) - Virtues: 21 inconsistencies (AR/FA/ZH/ES/RU outlier variants in families) - Rules: 0 inconsistencies (heading structure consistent across 8 languages) - Coverage: 100% across all content fields for all datasets Total real inconsistencies: 46 (outlier records in minority translations). Scenarii role columns (baratineur/piocheur) confirmed as FALSE POSITIVE (character names, not terminology). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…follow-up) Rules cards have white backgrounds → blank-ratio naturally high (65-95%) causing 23/24 false positives with flat 65% threshold. Bottom-saturation max observed ~18% on saturated rules_23 → 85% threshold never triggers. Per-CardSet thresholds: - Rules: blank-ratio 92%, bottom-sat 12% - Others (Virtues, Fallacies-Web, Scenarii): 65% / 25% Raw values still exposed in pivot tables for #250 Phase 1 analysis. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jun 3, 2026
…idation dossier (#433) §2bis updated post-recalibration (#431 merged e9600c0). Replaces the stale pre-recalibration caveat (2834, global 65/85 thresholds, "po-2024 follow-up pending") with the fresh per-CardSet × per-detector breakdown from the recalibrated run (2026-06-03, 3905 imgs): - Construction-signature table: each detector flags by card construction, not defect. White-bg cards (Rules/Scenarii) → WhiteBand+blank-ratio ~96% noise; colored-bg (Fallacies-Web/Virtues) → blank-ratio clean, bottom-sat the signal. Only discriminant detector = bottom-sat, read per-CardSet. - #188 headline: WhiteBand clean on colored cards (Fallacies-Web 0, Virtues 37 scattered singletons, no 8-lang cluster) → no white-band regression on the cards #188 affected. - True exception list (bottom-sat): Rules rules_23 = #250 FIX 2 (proposed); Scenarii ~7 dense cards saturating ~43% uniformly across all 8 langs = card-intrinsic, NOT translation (new eye point); Virtues zh/ru/es/pt length-overflow cluster = #316/#353 family (PR #400 RU auto-shrink). Binary summary stays non-discriminant (3219/3905) — value is the per-CardSet exception filter, not the binary verdict. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jun 4, 2026
…overflowing footer (#250) jsboige reported Rules card images with overflow regressions on the stylized bullet-point body running into the footer band. Root cause: the Rules body markdown was rendered in a bare <div> with no `.texte` wrapper, so CardPen's #190 autoFitBodyText (frame.js) never engaged — it bails early when `.texte` is absent and, even when present, only shrinks when `.texte` has a BOUNDED clientHeight. Dense cards therefore grew past the absolute footer band (.colorPalette / .pageNumber / variant labels). Fix (two surgical edits, source-of-truth JSON template): - mustache: wrap the body in `.texte > .desc_fr` so #190 sees the body and the localization field tokens resolve as before. - css: `card:not([class~="1"]) .texte { max-height: 390px; overflow: hidden; }` bounds the body height on every non-cover card so #190 binary-searches the font factor down to fit; the cover (variant 1) is excluded — its art lives on bleed/safe backgrounds, not in `.texte`. Validated on the live CardPen engine (Playwright harness, real engine #190 + domtoimage capture) against the canonical dataset CSV (Cards/Rules/Argumentum Rules - Cards.csv), 15 cards x 8 languages. BEFORE (footer collisions, body bottom under footer top): - FR #9 +20px, #15 +22px - RU #9 +12px, #12 +23px - PT #4 +31px, #9 +28px, #10 +39px, #12 +95px - EN none AFTER: zero non-cover collisions across fr/en/ru/pt/es/ar/zh/fa; cover unchanged. Worst case (PT #12, +95px) now renders cleanly with the body auto-shrunk above the footer (eyeballed PNGs). This is the check the #412/#431 mechanical harness missed (it never drove the live #190 engine), which is why the "0px overflow" claim in the #140 dossier was wrong; that claim is corrected in a follow-up. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3 tasks
jsboige
added a commit
that referenced
this pull request
Jun 5, 2026
…SS remap (#250, supersedes #437) (#438) * fix(rules): editorial restructure Tarot Rules 24→15 cards + 15-card CSS remap (#250) Treats ALL #250 Rules layout problems in one pass; supersedes #437 (CSS-only, 24-card). Card model = 1 CSV row = 1 card, so rebalancing = restructuring rows. - #250.1 École: move 2 paragraphs so §5 décompte fits entirely on card 5 - #250.2 covers: merge cover+Matériel+Résumé+Installation into 1 setup card per variant (Bingo/DBP/Moulin/Parlote); École keeps full-page art cover - #250.3 colours: remap CSS [class~=N] selectors to real 15-card boundaries - #250.4 DBP: merge orphan "Fin de partie" into gameplay card - #250.5 Moulin: merge orphan "Fin de partie + Variantes" into gameplay card - #250.6 Parlote: move §3 "tours de jeu" to last Parlote card Content-preservation invariant proven: for every column the \n\n-join of non-empty cells is byte-identical before/after (no content lost/added). Peak card length reduced 1829→1573. Merges applied to all 8 langs; FR paragraph moves mirrored on 7 other langs by po-2023 (heading-anchored). CSS: indices now 1..15, only css value changed (34 non-css keys byte-identical). Visual validation by FR Rules régén pending before merge. Refs #250. Supersedes #437. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * @ fix(rules): tighten Argumentum H1 on variant setup cards so dense DBP setup fits (#250) The 4 merged variant setup cards (7/9/11/13) carry the full-size "Argumentum" H1 (32px, ~83px vertical footprint) plus 4 sections. The densest — DBP setup (card 9) — overflowed by 14px, clipping the last Installation line. Reducing the H1 vertical margins (21.44px -> 6px/8px) on those 4 cards frees ~28px; all 15 cards now fit with zero overflow (verified live + baked render). École cover (card 1) keeps its full-page art. Index-based selector => covers all 8 languages. Only the css value of Argumentum_Rules_fr.json changes (1 JSON line). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> @ * @ docs(rules): add #250 visual validation dossier (15-card layout, 0px overflow) (#250) CardPen render proof (ai-01 Playwright/IIS) for PR #438: 6 representative cards covering all 6 reported Rules layout problems + the card-9 fit fix. Pixel-measured 0px overflow on all 15 cards. Index-based CSS => FR render validates layout/colours for all 8 languages. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> @ * fix(rules): mirror 3 FR paragraph moves to 7 translation languages (#250) Mirror ai-01's editorial paragraph moves (commit 6fc3644) from FR Text to Text_en, Text_ru, Text_pt, Text_ar, Text_es, Text_zh, Text_fa: 1. École move 1: saynète continuation from card 5 → end of card 4 2. École move 2: tie-breaking paragraph from card 6 → end of card 5 3. Parlote move: 'tours de jeu' section from card 14 → beginning of card 15 Invariant verified: \n\n-join byte-identical before/after for all 7 columns. 1 file changed, 172 insertions, 172 deletions (moves only, no content change). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(rules): bound .texte so dense Rules cards auto-shrink instead of overflowing footer (#250) jsboige reported Rules card images with overflow regressions on the stylized bullet-point body running into the footer band. Root cause: the Rules body markdown was rendered in a bare <div> with no `.texte` wrapper, so CardPen's #190 autoFitBodyText (frame.js) never engaged — it bails early when `.texte` is absent and, even when present, only shrinks when `.texte` has a BOUNDED clientHeight. Dense cards therefore grew past the absolute footer band (.colorPalette / .pageNumber / variant labels). Fix (two surgical edits, source-of-truth JSON template): - mustache: wrap the body in `.texte > .desc_fr` so #190 sees the body and the localization field tokens resolve as before. - css: `card:not([class~="1"]) .texte { max-height: 390px; overflow: hidden; }` bounds the body height on every non-cover card so #190 binary-searches the font factor down to fit; the cover (variant 1) is excluded — its art lives on bleed/safe backgrounds, not in `.texte`. Validated on the live CardPen engine (Playwright harness, real engine #190 + domtoimage capture) against the canonical dataset CSV (Cards/Rules/Argumentum Rules - Cards.csv), 15 cards x 8 languages. BEFORE (footer collisions, body bottom under footer top): - FR #9 +20px, #15 +22px - RU #9 +12px, #12 +23px - PT #4 +31px, #9 +28px, #10 +39px, #12 +95px - EN none AFTER: zero non-cover collisions across fr/en/ru/pt/es/ar/zh/fa; cover unchanged. Worst case (PT #12, +95px) now renders cleanly with the body auto-shrunk above the footer (eyeballed PNGs). This is the check the #412/#431 mechanical harness missed (it never drove the live #190 engine), which is why the "0px overflow" claim in the #140 dossier was wrong; that claim is corrected in a follow-up. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(rules): correct false "0px overflow" claim in #250 validation dossier The dossier README claimed "0 px d'overflow partout (scrollHeight == clientHeight)". That measured container auto-fit (trivially scroll==client when height is unbounded), not body-vs-footer collision. The live #190 engine check (real CSV, 8 langs) found residual collisions on the restructured template — FR/RU/PT, worst PT #12 +95px — now resolved by 74ef097 (.texte hook + bound). README updated with the corrected before/after data. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to PR #412 (mechanical QA harness). Per ai-01 calibration finding: flat detector thresholds over/under-flag on Rules cards.
Problem
blank-ratiothreshold 65% flags 23/24 Rules cards (false positive) — Rules have white backgrounds, so high blank-ratio is naturalbottom-saturationthreshold 85% never triggers — max observed on saturated rules_23 is ~18%Fix
Per-CardSet threshold dictionary:
Changes
Dictionary<string, CardSetThresholds>cardSetparameterTest Results
Related