Commit Graph
23 Commits
Author SHA1 Message Date
Jesse_ChenandClaude Opus 5.5 b0329ef03e fix(dignity): Rahu/Ketu have no own sign; yoga main path uses fixed Scorpio/Aquarius lords (T5, BUG-1211)
Astrologer ruling 甲12. jyotish_engine._get_dignity_level drops the Rahu-Virgo /
Ketu-Pisces OWN_SIGN clause (fed the D1 status column, Vimsopaka and
varga_dignity); no node exaltation/debilitation added. yoga_engine.YogaContext
resolves Scorpio -> Mars and Aquarius -> Saturn by default (as the lord chain,
functional roles and frontend SIGN_LORDS do); _stronger_co_lord and
RAHU_KETU_OWNED_SIGN_INDEX stay for Jaimini variants (dynamic_co_lords=True) only.
narayana_dasha co-lord rules unchanged. Separate commit so it can be reverted alone;
v5 / reported-offset results in PROGRESS.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-03 12:47:12 +08:00
Jesse_ChenandClaude Opus 5.5 6916bbaecc fix(yoga): Kemadruma has one main detector; lunar/solar neighbour yogas count five planets (T2, BUG-1206)
Astrologer ruling 甲7: yoga_expansion.detect_kemadruma is the main detector (2nd/12th
from the Moon count only Mars..Saturn, no kendra cancellation, nodes in kendras do
not cancel). kemadruma_yoga (ky2 kendra cancellation) and kemadruma_variant (nodes as
neighbours) are reference_only; YogaEngine.detect appends the main row.

BUG-1187 omission: the algorithmic _detect_solar_lunar_yogas block still counted the
Sun, Moon and nodes, so Ketu next to the Moon gave 'Anapha Yoga' beside Kemadruma
(Taylor) and Sun/nodes gave Durudhura beside Sunaphaa. Both blocks now count the
five true planets. divisional_yoga compared a 'house' key vargas never carry (always
'isolated') and counted the Sun; it now uses sign adjacency and the same five.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-03 11:40:54 +08:00
Jesse_ChenandClaude Opus 5.5 df21e591e8 fix(yoga): Neecha Bhanga lists the conditions that hold, never Raja Yoga (T8, BUG-1205)
Astrologer ruling 乙14. One condition source, yogas_doshas.calc_nicha_bhanga_raj_yoga
(conditions A-F, now also structured). New scripts/main_yoga_detectors.py turns it
into yoga_engine-shaped rows (zh + en twins) that YogaEngine.detect appends; the
four neechabhanga_* rules are reference_only (kept, renamed, not evaluated).
Card: traditional_yogas canonical 落陷取消(Neecha Bhanga) with 成立条件; compact
yoga entries keep conditions/reductions. Report: category 落陷取消, mixed group,
not raja; personal-report alias neecha_bhanga -> special.

Changed assertion (test_consultation_yoga_detection_merge): canonical name
'Neecha Bhanga Raja Yoga' -> '落陷取消(Neecha Bhanga)' (ruling 乙14).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-03 11:38:52 +08:00
Jesse_ChenandClaude Opus 5.5 7fb165ecf6 fix: resolve Badhaka house by lagna in curse yogas, drop death wording (upstream 6abfe983 follow-up, BUG-1192)
Preta Yoga hard-coded the 11th house as Badhaka; it now uses the single
yoga_engine.badhaka_house() definition (movable 11 / fixed 9 / dual 7).
Remaining early-death / lineage-ending phrases removed from curse yoga
family effects and the Matru-hani yoga effects list.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 23:45:06 +08:00
Jesse_ChenandClaude Opus 5.5 45d6dbf6ca fix: bound Budhaditya yoga under combustion (upstream 994638f0, Budha-Aditya part only)
A combust Mercury keeps the Budha-Aditya formation visible but downgrades it
to conditional. Upstream's other card-gating fields in the same hunk come
from separate commits and are not taken. TASK-upstream-sync5-20261002 U7.

(cherry picked from commit 994638f0)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 23:40:55 +08:00
Jesse_ChenandClaude Opus 5.5 f3ed950982 fix(yogas): lunar and solar yogas count only the five true planets; retire duplicate rules (upstream 2dd6062a)
bvr_002..004 (Sunaphaa/Anaphaa/Duradhara) and bvr_016..018 (Vesi/Vosi/
Ubhayachara) take upstream yinduzhanxing 2dd6062a's logic (Mars..Saturn
only). kemadruma_yoga also ignores the nodes (product decision: classical
definition; upstream still counts them). The six lunar/solar duplicates of
upstream's RETIRED_RULE_IDS are retired; upstream's four other retirements
are out of scope. TASK-upstream-sync4-20261002 T5.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 13:53:02 +08:00
Jesse_ChenandClaude Opus 5.5 57782aea8a feat(functional): adopt upstream BPHS ch.34 profile v2; fix Pancha Mahapurusha self-conjunction; yoga engine reads the same functional roles
Ported verbatim from the upstream skill repo (yinduzhanxing e9beae6b) with
product authorization 2026-10-02: scripts/functional_benefics.py,
scripts/pancha_mahapurusha.py, references/functional-role-profile.md; only
the two functional-role methods of scripts/yoga_engine.py (our file diverged).
v5 77-case rectification eval: 5 cells up (to +7.8pp), one cell -1.3pp (one
case); product accepted. Rectification memoization golden still to be
regenerated (scores change with the grouping).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-10-02 10:57:14 +08:00
Jesse_ChenandClaude Opus 5.5 419e1f4d37 feat(report): English reader edition from the same packet; yoga combination English twins (E1/E2/E3 wiring)
- /api/professional_report_reference accepts languages [zh,en]; one packet, zh
  byte-identical, markdown_en + reader_dasha_applicability_en, or
  english_unavailable when a Chinese character would leak.
- pl9_reader_english renders the parity volume with report_language=en and a
  fixed term table; yoga_engine carries combination_en / effects_en / strength_en.
- 75 fictional charts: zero Han, same line count, same numbers outside yoga tables.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
2026-09-29 19:26:00 +08:00
Jesse_ChenandClaude Opus 5 63c419f375 perf(consultation): 健康探测加 TTL、yoga 表达式只编译一次
Independent Staging Quality Gate / validate (push) Canceled after 27s
Independent Staging Quality Gate / publish (push) Canceled after 0s
BUG-734: probe_official_rest_health 不是 ping —— 它把一份虚构 smoke 排盘
POST 给官方 HoroscopePredictions(实测单次 1,034 ms),还经 call() 吃掉对方
每分钟 5 个限流令牌之一,而结论零 TTL。连续 6 轮前台请求下,第 6 次探测会被
本地限流器挡下、反过来报出假的 official_blocked,真正的业务调用还要和它抢令牌。

加进程级 TTL 缓存(成功 60 s / 失败 10 s,配置变即失效,缓存键只记 key 配没配
的布尔)。force_refresh 默认 True:诊断端点调的是裸 gateway_status() 且该文件
本轮不得改,默认实时才不会让运维看到旧结论;run_gateway_packet 显式走 False。
探测在锁外执行。6 轮实测:探测 6→1、握手 5→1、限流令牌 6→1。

连接复用(任务书 6.2)按让步顺序砍掉:实测 urllib.request 没有连接池,模块级
共享 opener 在 6 次请求下仍开 6 条 TCP 连接,按任务书写法只能骗过「同一个
opener 实例」的断言而省不掉任何握手。另立单。

BUG-735: yoga_engine._eval_custom 对静态规则表的表达式每请求重新编译。实测每次
检测 386 次源码编译(182 次 eval 字符串 + 204 次 ast.parse/compile)。拆出
_build_custom_exec_globals(每次新建,绑定当前盘 ctx)与 lru_cache 的
_compiled_eval_code / _compiled_exec_code,只缓存 code object,绝不缓存求值
结果。求值语义逐条对齐改前。第二次检测起编译 0 次,单次 27.4 ms → 3.3 ms。

等价用同进程差分(BUG-733 的做法):192 条去重表达式 × 3 张公开虚构示例盘,
与逐字复刻的改前实现同值,另有反向验证证明差分非恒真。

未改 scripts/jyotish_api_server.py。既有断言一条未改。新增 23 条测试。
快速门唯一红的 test_chat_page_uses_authenticated_cloud_persistence 经干净
origin/staging 检出复跑确认为基线红,记入 BLOCKED.md BLK-002,不顺手修。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JUei7K13cYxLHE3Axe4A45
2026-09-16 02:01:33 +00:00
732642856 04d901e1be Clarify benchmark boundaries and improve annual workflow surfaces 2026-06-27 19:09:31 +08:00
732642856 066c59bee3 v6.1.11: Solar/Lunar Yogas恢复 + 全量碎片审计
从Git dangling commit f19369c恢复遗失代码:
- scripts/yoga_engine.py: 新增_detect_solar_lunar_yogas()
  - Solar Yogas: Veshi/Voshi/Ubhayachari (太阳第2/12宫判断)
  - Lunar Yogas: Sunapha/Anapha/Durudhura (月亮第2/12宫判断)
- technique_registry: 新增solar_lunar_yogas条目 (covered)

全量碎片审计完成(28个文件 + Git + Desktop + Downloads + auto-generated)
- Brain: 5份P0文件提取待整合
- Git: 7个dangling commits确认 - f19369c代码已恢复,其余自然吸收
- New open-source: 12个项目发现 (vedic-calc/vedic-astro-skills/VedicAstro等)
2026-06-11 11:28:31 +08:00
732642856 0406723b7e v6.1.3: D9/D60 engine upgrade + 5 bottleneck rules tuned
Engine (yoga_engine.py):
- Added D60/Shashtiamsa context injection (d60_house_of, d60_sign_of, etc.)
- Added D9 dignity queries (is_exalted_in_d9, is_own_sign_in_d9, etc.)
- Added functional_malefics() / functional_benefics()
- Added is_shashtiamsa_evil/good() and vaiseshikamsa_score()
- Exposed all new methods to rule expression sandbox

Data (_compute_one_chart.py):
- Generate D60 positions alongside D1/D9
- Inject D60 into context for all computed charts

Rules (yoga_rules.json):
- thrikaala_gnana: D1 strong = exalted/own/moola only (kendra/trikona removed)
  + D9 strong check (at least 1 of 3 in D9 exalted/own/moola)
  FP: 12→0, FN: stable
- dharidhra: restored method1 (L2/L11 in dusthana + unfriendly navamsa + malefic aspect)
  FN reduced
- bandhubhisthyaktha: added is_shashtiamsa_evil(lord_4)
- nishkapata: added vaiseshikamsa_score(lord(1)) >= 15
- kapata: reverted functional_malefics (caused 22 FN), back to MALEFICS

Validation:
- FP: 45→39 (-6)
- FN: 72→67 (-5)
- F1: 94.35%→94.88% (+0.53%)
- Precision: 95.60%→96.18% (+0.58%)

New scripts:
- scripts/add_d60_to_test_charts.py: batch D60 augmentation
- scripts/ashtottari_dasha.py, yogini_dasha.py, kalachakra_dasha.py
- scripts/report_orchestrator.py

D60 data added to all 60 standard test charts.
2026-06-07 14:44:53 +08:00
732642856 bc07add030 Release v6.0.52: fix same_house(self) bug globally in yoga_engine\n\n- Removed 'if a==b: return False' guard from same_house() function\n- A planet is trivially in the same house as itself (lord(X) == planet case)\n- Prior workaround in mathibhramana variation_2 now redundant but harmless\n- FN: 79->74 (-5). Recall: 92.47%->92.95% (+0.48%). F1: 93.54%->93.80% (+0.26%)\n- kapata: 8->5 FN (3 auto-fixed from global fix)\n- Other rules with same_house(lord, planet) patterns also benefit 2026-06-07 09:07:33 +08:00
732642856 26835f80b8 Release v6.0.43 Yoga F1 93.76%
- Fix 3 PyJHora source bugs (kalaanidhi Yoga JUPITER_ID->VENUS_ID x2,
  krisanga Yoga missing return)
- Implement planet_in_house_with_aspect_or_conjunction semantic condition
- Fix lagna_lord_in_dry_sign: dry_signs set correction (Capricorn->Taurus),
  add ll_owner_dry check using dynamic co-lord resolution
- Regenerate reference data against fixed PyJHora
- F1 93.28% -> 93.76% (FN 96->86, FP 44 unchanged)
2026-06-06 09:58:28 +08:00
732642856 86e7d03c4a Release v6.0.41 Yoga source parity 2026-06-05 23:20:53 +08:00
732642856 ede8b96d2c Release v6.0.40 Yoga source parity 2026-06-05 22:37:25 +08:00
732642856 94be318d56 Release v6.0.39 Yoga source parity 2026-06-05 22:03:06 +08:00
732642856 58fc615b16 fix: align yoga source rules 2026-06-05 20:31:14 +08:00
732642856 975f00f5f2 fix: improve context-aware yoga precision 2026-06-05 18:00:00 +08:00
732642856 93610326fe feat: add yoga context validation fixtures 2026-06-05 17:16:23 +08:00
732642856 4b840b5c2a fix: tighten yoga precision pass 2026-06-05 16:39:05 +08:00
732642856 44221191f6 fix: align high-impact yoga logic 2026-06-05 16:17:38 +08:00
732642856 8da45c56b3 feat: add yoga logic validation and varga fixes 2026-06-05 14:30:20 +08:00