fix(consult): card carries the engine's short Narayana label; AD/PD drop derivable years (BUG-1215)

The full note pushed steve_jobs/marriage to 12,028 characters (budget
12,000), and cutting it in the card broke the 'nothing rewritten' contract.
The engine now also writes algorithm_label 旧算法(从上升起、一律顺行), the card
copies it verbatim, and Narayana AD/PD rows drop years (end_age - start_age).
Largest card 11,979 (baseline 11,983). Goldens re-captured; the biography
golden now keeps the Narayana label keys too.

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 16:48:19 +08:00
co-authored by Claude Opus 5.5
parent 921b336ba5
commit 693467bf0c
8 changed files with 20 additions and 13 deletions
+3
View File
@@ -17,6 +17,8 @@ from typing import Any, Dict
LEGACY_PROFILE = "legacy_reference_only"
LEGACY_NOTE_ZH = "旧算法(从上升起、一律顺行),待替换为 Sanjay Rath 版"
LEGACY_NOTE_EN = "Legacy algorithm (starts from the Lagna, always zodiacal); to be replaced by Sanjay Rath's version"
# Short form for the consultation evidence card (12,000-character budget).
LEGACY_LABEL_ZH = "旧算法(从上升起、一律顺行)"
def label_legacy_narayana(result: Any) -> Any:
@@ -25,4 +27,5 @@ def label_legacy_narayana(result: Any) -> Any:
result["profile"] = LEGACY_PROFILE
result["algorithm_note"] = LEGACY_NOTE_ZH
result["algorithm_note_en"] = LEGACY_NOTE_EN
result["algorithm_label"] = LEGACY_LABEL_ZH
return result
@@ -59,9 +59,9 @@ MODULE_KEEP = (
"ashtakavarga", "dasha_sub_periods", "kp_cusps", "gulika",
"functional_benefic_malefic", "kakshya", "yogas", "chara_dasha", "transits",
)
# BUG-1215: + profile / algorithm_note (the legacy-algorithm label the card carries).
# BUG-1215: + profile / algorithm_note / algorithm_label (the legacy-algorithm label the card carries).
NARAYANA_KEEP = ("lagna_sign", "current_dasha", "current_year", "current_age", "mahadasha_sequence",
"profile", "algorithm_note")
"profile", "algorithm_note", "algorithm_label")
def _pick(value: dict[str, Any], keys: tuple[str, ...]) -> dict[str, Any]: