test(consult): regenerate consultation goldens from the real engine; card shadbala rows (T1-T9)

consult-evidence-card-golden.json and consult-biography-backtest-golden.json
re-captured with their capture scripts (JYOTISH_API_CHART_CACHE_TTL_SECONDS=0,
PYTHONHASHSEED=0). Differences are the batch's own: Sodhita chain and
house_scores sav_sodhita (BUG-1209), shadbala minimum fields (BUG-1208),
varshesha_basis (BUG-1212), traditional_yogas names (BUG-1205/1207: Neecha
Bhanga with conditions, Mahapurusha with 部分减弱, Taylor's trikona Hamsa gone),
chart.yogas Kemadruma rows (BUG-1206), Rahu/Ketu status and D9 dignity and
fixed-lord rule hits in the health sieve (BUG-1211).

Card: shadbala rows are rupas / minimum_check / level (the engine's other
three fields restate them; keeps the 12,000-character card budget).
Changed assertions (three columns in PROGRESS): career 10H SAV keys, annual
chart keys, Obama traditional-yoga names.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-03 14:52:13 +08:00
co-authored by Claude Opus 5.5
parent eb00b0f70f
commit 0d6af77cea
5 changed files with 51 additions and 8 deletions
+20 -1
View File
@@ -481,6 +481,25 @@ function rolePlanetRow(base: EvidenceCard["base"], name: string): JsonRecord | u
return klass ? { ...row, functional: klass } : row;
}
const ARUDHA_KEYS = ["sign", "lord"] as const;
/**
* BUG-1208 (ruling 甲13): per planet the rupas, the BPHS minimum check first,
* then the band already labelled 「(网站分档)」 by the engine. The engine's
* `min_required` / `meets_minimum` / `level_source` restate the same two facts
* and are left off the card to keep it within its size budget.
*/
const SHADBALA_CARD_KEYS = ["rupas", "minimum_check", "level"] as const;
function shadbalaCardRows(shadbala: Json): Json {
const rows = record(shadbala);
if (!Object.keys(rows).length) return shadbala;
const out: JsonRecord = {};
for (const [planet, row] of Object.entries(rows)) {
const picked = pickKeys(row, SHADBALA_CARD_KEYS);
out[planet] = nonEmpty(picked) ? picked : (copy(row) ?? null);
}
return out;
}
/** BUG-1209: reduced SAV first, raw SAV beside it (labels: EVIDENCE_CARD_LABELS.savColumns). */
const SAV_HOUSE_KEYS = ["sign", "sav_sodhita", "sav_score", "level"] as const;
/** The engine writes the Arudha Lagna as pada A1 (its own name: "Arudha Lagna (AL)"). */
@@ -820,7 +839,7 @@ function domainSection(
}
if (rule.shadbala) {
const shadbala = copy(chart.shadbala);
if (shadbala !== undefined && shadbala !== null) section.shadbala = shadbala;
if (shadbala !== undefined && shadbala !== null) section.shadbala = shadbalaCardRows(shadbala);
else gaps.push(`${domain}.shadbala`);
}
if (rule.savHouses.length) {