SIG SELECT: fix major arcana reversed face slot order — title first, qualifier second after spin — TDD
All checks were successful
ci/woodpecker/push/pyswiss Pipeline was successful
ci/woodpecker/push/main Pipeline was successful

DOM-second flex child appears first after card rotates 180°; swap qualifier/name slot
assignments for major arcana so reversed face reads "The Schizo, / Enlightened" not
"Enlightened / The Schizo"; spec updated to document the slot-swap invariant

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-04-28 20:48:47 -04:00
parent 4852113fbd
commit b5fbc3d354
3 changed files with 12 additions and 8 deletions

View File

@@ -148,8 +148,10 @@ var SigSelect = (function () {
// - Non-major w/o reversal: fall back to mirroring the polarity qualifier
var reversal = cardEl.dataset.reversal || '';
if (isMajor) {
stageCard.querySelector('.fan-card-reversal-qualifier').textContent = qualifier;
stageCard.querySelector('.fan-card-reversal-name').textContent = title;
// Slots are swapped vs. non-major: spin reverses DOM order visually,
// so qualifier-slot (DOM-second) appears first and name-slot (DOM-first) appears second.
stageCard.querySelector('.fan-card-reversal-qualifier').textContent = title + ',';
stageCard.querySelector('.fan-card-reversal-name').textContent = qualifier;
} else if (reversal) {
stageCard.querySelector('.fan-card-reversal-qualifier').textContent = reversal;
stageCard.querySelector('.fan-card-reversal-name').textContent = title;

View File

@@ -548,13 +548,14 @@ describe("SigSelect", () => {
.toBe(card.dataset.nameTitle);
});
it("major arcana reversed face: polarity qualifier + card title (concept name in FYI)", () => {
it("major arcana reversed face: title, in qualifier slot (first after spin); qualifier in name slot (second)", () => {
makeFixture({ polarity: "levity", userRole: "PC" });
card.dataset.arcana = "Major Arcana";
card.dataset.nameTitle = "The Schizo";
hover();
expect(stageCard.querySelector(".fan-card-reversal-qualifier").textContent).toBe("Elevated");
expect(stageCard.querySelector(".fan-card-reversal-name").textContent).toBe("The Schizo");
// DOM-second element appears first after card spins — so title goes in qualifier slot
expect(stageCard.querySelector(".fan-card-reversal-qualifier").textContent).toBe("The Schizo,");
expect(stageCard.querySelector(".fan-card-reversal-name").textContent).toBe("Elevated");
});
it("non-major without data-reversal: reversal-name empty, qualifier mirrors polarity", () => {

View File

@@ -548,13 +548,14 @@ describe("SigSelect", () => {
.toBe(card.dataset.nameTitle);
});
it("major arcana reversed face: polarity qualifier + card title (concept name in FYI)", () => {
it("major arcana reversed face: title, in qualifier slot (first after spin); qualifier in name slot (second)", () => {
makeFixture({ polarity: "levity", userRole: "PC" });
card.dataset.arcana = "Major Arcana";
card.dataset.nameTitle = "The Schizo";
hover();
expect(stageCard.querySelector(".fan-card-reversal-qualifier").textContent).toBe("Elevated");
expect(stageCard.querySelector(".fan-card-reversal-name").textContent).toBe("The Schizo");
// DOM-second element appears first after card spins — so title goes in qualifier slot
expect(stageCard.querySelector(".fan-card-reversal-qualifier").textContent).toBe("The Schizo,");
expect(stageCard.querySelector(".fan-card-reversal-name").textContent).toBe("Elevated");
});
it("non-major without data-reversal: reversal-name empty, qualifier mirrors polarity", () => {