Baltimorean Note unlock loop — full UX from bawlmorese pronoun pick → Brief banner → DON → palette modal → dashboard swatch ; rootvars.scss adds the Baltimorean (Blt) hue family (red 200,16,46 / yellow 255,212,0 / white 255,255,255 / black 0,0,0 / purple 26,25,95 / orange 221,73,38 — Maryland-flag-derived plus a --sixBlt: 162,170,173 neutral) + two .palette-baltimore / .palette-maryland palette classes wiring those hues into the standard --priUser--decUser slots; companion section-header rename "/* X Palette */" → "/* X Hues */" across rootvars to disambiguate raw hue families (Precious Metal / Cosmic Metal / Chroma / Earthman / Technoman / Inferno) from actual palette classes — section-comment-only, no rule-level change ; baltimorean entry added in 3 registries that drive the loop: _NOTE_DISPLAY (drama/models.py) — {"greeting": "Ayo,", "title": "Ard!"} so DON flips navbar Welcome, EarthmanAyo, Ard!; _NOTE_TITLES (dashboard/views.py, user-pre-staged) — drives the "recognized via Baltimorean" copy on dashboard palette swatches; _NOTE_META (billboard/views.py) — Baltimorean title + the literal description "Aaron earned an iron urn." + palette_options [palette-baltimore, palette-maryland] feeding the my-notes swatch modal ; set_pronouns view rewired (dashboard/views.py) — first-time pronouns = bawlmorese selection calls Note.grant_if_new(user, "baltimorean") + returns {"brief": brief.to_banner_dict()} JSON @ 200; idempotent on repeat (the grant_if_new returns brief=None on second call so the 204 path resumes naturally); non-bawlmorese choices stay on the original 204 contract ; client wiring: game-kit.js pronouns commit() handles the 200 JSON path — resp.json().then(data => Brief.showBanner(data.brief)) instead of reload (reload would lose the just-fired banner); 204 still reloads to update active pronoun card; game_kit.html pulls in apps/dashboard/note.js so Brief is in scope on the Game Kit page (it wasn't before) ; Brief banner placement fix — note.js showBanner() now measures the .row .col-lg-6 h2 at render-time + sets inline top so the banner portals SQUARELY OVER the page h2 letter-spread wordmark instead of parking at the SCSS-default top: 0.5rem (which had it lurking above the wordmark area on every page); portrait-only (gated if window.innerWidth > window.innerHeight return) — landscape h2 lives in a writing-mode: vertical-rl fixed sidebar column + would need a full banner reorientation (writing-mode + flex-direction restyle of banner contents) to "overlay" sensibly, deferred to a follow-up sprint ; tests: drama/tests/unit/test_models.py (new file) — 5 UTs for _NOTE_DISPLAY[baltimorean] greeting/title/name + stargazer smoke tests; dashboard/tests/integrated/test_views.py — SetPronounsBawlmoreseUnlockTest (9 ITs covering first-bawlmorese-returns-200-w-brief / Note granted / title Ard! / square_url to /billboard/my-notes/ / idempotent on repeat / non-bawlmorese unaffected / bawlmorese-after-other still grants); existing SetPronounsViewTest.test_post_each_valid_choice docstring updated to flag the bawlmorese 200 branch ; functional_tests/test_bill_baltimorean.py (new file) — 6 FTs walking the full UX: T1 Game-Kit pronouns click → Brief banner w. Ard! title + Look! prose + ?-square + FYI nav; T2 idempotent repeat-click (no re-fire); T3 my-notes Baltimorean item carries the Aaron quote verbatim; T4 DON flips navbar greeting Welcome, EarthmanAyo, Ard!; T5 palette modal offers Baltimore + Maryland swatches (and not Bardo/Sheol); T6 Baltimore swatch click previews → OK commits → dashboard Palette applet shows the swatch unlocked w. data-description carrying Baltimorean + non-empty data-unlocked-date + Note.palette = palette-baltimore in DB — all 6 green in 51s; full IT/UT sweep 997 → green in 45s — TDD
Some checks failed
ci/woodpecker/push/pyswiss Pipeline was successful
ci/woodpecker/push/main Pipeline failed

Code architected by Disco DeDisco <discodedisco@outlook.com>
Git commit message Co-Authored-By:
Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-05-18 02:17:07 -04:00
parent bc77296dd4
commit 435a192349
11 changed files with 544 additions and 8 deletions

View File

@@ -14,7 +14,7 @@
:root {
/* rgb Variable Index */
/* Precious Metal Palette */
/* Precious Metal Hues */
// nickel
--priNi: 141, 142, 140;
--secNi: 118, 120, 118;
@@ -59,7 +59,7 @@
--quiAg: 175, 175, 175;
--sixAg: 240, 240, 240;
/* Cosmic Metal Palette */
/* Cosmic Metal Hues */
// mercury (Mercury)
--priHg: 23, 31, 51;
--secHg: 51, 62, 87;
@@ -117,7 +117,7 @@
--quiPu: 189, 175, 214;
--sixPu: 235, 211, 217;
/* Chroma Palette */
/* Chroma Hues */
// red (A-Fire)
--priRd: 233, 53, 37;
--secRd: 193, 43, 28;
@@ -203,7 +203,7 @@
--quiMe: 89, 0, 48;
--sixMe: 59, 0, 32;
/* Earthman Palette */
/* Earthman Hues */
// bark
--priBrk: 162, 103, 98;
--secBrk: 117, 78, 68;
@@ -233,7 +233,7 @@
--secFor: 94, 124, 61;
--terFor: 74, 102, 43;
/* Technoman Palette */
/* Technoman Hue */
// carbon steel
// stainless steel
// maraging steel
@@ -253,7 +253,7 @@
--tooltip-bg: 0, 0, 0;
--title-shadow-offset: -0.125rem;
/* Inferno Palette (4 per) */
/* Inferno Hues (4 per) */
// mist (Elpis's Lethe)
--priMst: 168, 202, 172;
--secMst: 103, 145, 105;
@@ -282,7 +282,7 @@
--terIce: 74, 119, 125;
--quaIce: 35, 65, 75;
/* Terrestre Palette (6 per) */
/* Terrestre Hues (6 per) */
// crumbling perse (Contrition)
--priPer: 34, 30, 77;
--secPer: 52, 45, 99;
@@ -304,7 +304,7 @@
--quiAdm: 197, 213, 228;
--sixAdm: 226, 244, 253;
/* Emanation Palettes */
/* Emanation Hues */
// Plant Bundle
// • beige-pink (streetlamps)
--priBpk: 223, 159, 140;
@@ -336,6 +336,23 @@
--ninClh: 192, 77, 1;
--decClh: 255, 174, 0;
/* Lord Baltimore Hues */
// yellow
--priBlt: 235, 171, 0;
--secBlt: 187, 147, 52;
// white
--terBlt: 255, 255, 255;
// --quaBlt: ;
// black
--quiBlt: 0, 0, 0;
--sixBlt: 162, 170, 173;
// purple
--sepBlt: 26, 25, 95;
--octBlt: 157, 34, 53;
// orange
--ninBlt: 221, 73, 38;
// --decBlt: ;
// Felt values
--undUser: var(--priFor);
--duoUser: var(--terFor);
@@ -423,6 +440,34 @@
/* Nebula Palette */
/* Baltimore Palette */
.palette-baltimore {
--priUser: var(--sepBlt);
--secUser: var(--terBlt);
--terUser: var(--ninBlt);
--quaUser: var(--priYl);
--quiUser: var(--priBlt);
--sixUser: var(--quiBlt);
--sepUser: var(--quiBlt);
--octUser: var(--quiBlt);
--ninUser: var(--sixBlt);
--decUser: var(--quiBlt);
}
/* Maryland Palette */
.palette-maryland {
--priUser: var(--quiBlt);
--secUser: var(--sixBlt);
--terUser: var(--octBlt);
--quaUser: var(--priBlt);
--quiUser: var(--secBlt);
--sixUser: var(--quiBlt);
--sepUser: var(--quiBlt);
--octUser: var(--quiBlt);
--ninUser: var(--priRd);
--decUser: var(--quiBlt);
}
/* Monochrome Dark Palette */
.palette-monochrome-dark {
--priUser: var(--priAg); /* 30,30,30 — near-black bg */