Skip to content

Latest commit

 

History

History
388 lines (303 loc) · 18.9 KB

File metadata and controls

388 lines (303 loc) · 18.9 KB

2026-06-12 (v2.0.12) — 巳午阴阳修正 + 紫微五行局修复 + 全引擎审计修复

Bug Fixes (12)

  1. 地支巳/午阴阳映射反转 (engine/udm.py:47-48)

    • 问题:巳被标记为阳火、午被标记为阴火,与传统命理完全相反
    • 修正:巳→阴火、午→阳火
    • 影响:所有依赖地支阴阳的计算(十神、藏干分析、五行平衡)结果错误
  2. 紫微斗数五行局数字解析失败 (engine/ziwei_engine.py:161)

    • 问题:int(wuxing_ju_str[1]) 对中文数字"三"调用.isdigit()返回False,导致所有五行局默认为6
    • 修正:使用中文数字映射表 CN_DIGITS = {'一':1,'二':2,...,'六':6}
    • 影响:木三局→6(错)、水二局→6(错),紫微星排布全部偏移
  3. 八字引擎logger未定义 (engine/bazi_engine.py:137)

    • 问题:logger.warning() 调用NameError,大运异常时崩溃
    • 修正:添加 import logging; logger = logging.getLogger(__name__)
    • 影响:大运计算异常时服务器500错误
  4. 1986/1988年夏令时起始日期错误 (engine/time_engine.py:65,67)

    • 问题:1986年写4月13日(应5月4日)、1988年写4月10日(应4月17日)
    • 修正:更新为正确历史日期
    • 影响:1986年4月13日-5月3日、1988年4月10日-16日出生者时间偏移1小时
  5. 三合/半合同时触发 (engine/udm.py:316)

    • 问题:len(zhi_set & sanhe) >= 2 导致三合时同时输出"半合"和"三合"
    • 修正:改为 == 2(恰好2个才触发半合)
    • 影响:申子辰全齐时重复输出
  6. Health check使用错误属性名 (main.py:53)

    • 问题:orch.engines 不存在,实际是 orch._engines
    • 修正:改为 orch._engines
    • 影响:引擎数量始终显示硬编码的7
  7. perspective_engine KeyError无保护 (engine/perspective_engine.py:424)

    • 问题:self.figures[pid] 对不存在的figure_id直接KeyError崩溃
    • 修正:改用 .get() 并跳过不存在的ID
    • 影响:请求不存在的人物ID时服务器500错误
  8. LLM_FIGURES人物ID不匹配 (engine/perspective_engine.py:584)

    • 问题:"sun-tzu""confucius" 在默认figures中不存在
    • 修正:改为 "sunzi""kongzi"
    • 影响:孙子和孔子始终用模板推理,从未触发LLM推理
  9. 占星ASC/MC在0°时误判为falsy (engine/astro_engine.py:137,139)

    • 问题:if ascendant 在0.0时为False,返回int 0而非float 0.0
    • 修正:改为 if ascendant is not None
    • 影响:白羊座0°上升时类型不一致
  10. 太乙引擎int()无异常处理 (engine/taiyi_engine.py:77)

    • 问题:int(r.get('太乙落宮', 0)) 非数值时ValueError
    • 修正:添加try/except
    • 影响:kintaiyi返回非数值时服务器崩溃
  11. 内容检查器重复比喻词 (engine/content_checker.py:30)

    • 问题:"犹如"出现两次,减少检测多样性
    • 修正:去重,保留8个唯一模式
    • 影响:比喻检测覆盖率降低
  12. 测试断言永远通过 (tests/test_engines.py:60)

    • 问题:or True 使断言永远通过
    • 修正:移除 or True
    • 影响:男女大运差异测试从未真正验证

Improvements (5)

  1. 前端年份下拉扩展到当前年+5 (frontend/index.html:90)

    • 原来硬编码2025,改为 new Date().getFullYear() + 5
    • 2026年起用户可选择当前年份
  2. CSS变量补全 (frontend/css/style.css:28-32)

    • 新增 --border-color--border--success--danger--bg-main 变量
    • 修复chart.html、debate.html、index.html中引用未定义变量导致的样式缺失
  3. base.py移除冗余导入 (engine/base.py:69)

    • 删除 run_all() 方法内重复的 from .udm import DestinyModel
  4. udm.py移除冗余条件 (engine/udm.py:197)

    • Pillar.wuxing 属性中 if self.nayin 重复检查
  5. 完整引擎审计 — 发现并记录50+潜在问题(详见下方待办)

验证结果

术数 状态 验证方法
八字 ✅ PASS /api/validate 对比 lunar-python 直接计算(2组测试数据)
占星 ✅ PASS pyswisseph 直接计算对比(Sun=双子,Moon=巨蟹,ASC=射手)
紫微 ✅ 修复 五行局数字解析修正,火六局现在正确返回
六爻 ✅ 正常 najia 排盘
奇门 ⚠️ 简化 值使门仍为简化实现(硬编码休门)
大六壬 ⚠️ 简化 三传仅实现贼克法
太乙 ✅ 修复 int()异常处理已添加
姓名学 ✅ 正常 三才+八字配合已修复

下次优先待办

  1. 奇门遁甲值使门硬编码 — 需实现真正的值使门推算逻辑
  2. 大六壬三传算法 — 需实现涉害法、遥克法、昴星法等8种方法
  3. chart.html紫微渲染palace.stars 字段名不匹配,需改为 major_stars
  4. chart.html六壬渲染k.ke 属性不存在,需改为正确字段
  5. chart_result.html — 完全静态页面,需改为动态或删除
  6. CSS重复定义清理 — confidence-badge/loading/spinner 有多处重复
  7. 硬编码API密钥 — config.py和test_engines.py中的密钥应移至环境变量

2026-06-12 (v2.0.11) — 六爻京房八宫修正 + 姓名学三才补全 + DST时序修复

Bug Fixes (6)

  1. 姓名学八字配合逻辑错误 (engine/xingming_engine.py:bazi_match)

    • 问题:调候用神比较时,用五行(木火土金水)直接匹配天干(癸庚丁),导致永远匹配失败
    • 修正:先将调候天干映射为五行,再与名字五行比对
    • 影响:所有姓名学分析的"是否补调候"字段结果相反
  2. 六爻六亲定法错误 (engine/liuyao_engine.py:_najia_zhuanggua)

    • 问题:六亲计算用上卦五行代替卦宫五行,游魂卦/归魂卦六亲全部错误
    • 修正:改用京房八宫归属表(GUA_GONG_WUXING)定卦宫五行
    • 影响:如"火地晋"(上卦离=火)实际属乾宫(金),六亲判定完全不同
  3. 夏令时DST时序错误 (engine/time_engine.py:correct)

    • 问题:DST回退在UTC转换后执行,但DST边界按北京时间定义,导致1986-1991年出生者时间偏移1小时
    • 修正:将DST回退移到UTC转换之前(在本地时间上检查)
    • 影响:中国1986-1991年夏令时期间出生的人,所有术法排盘时间可能偏移1小时
  4. 奇门遁甲甲子序号计算公式错误 (engine/qimen_engine.py:_get_jiazi_idx)

    • 问题:(gan_idx * 6 + (zhi_idx - gan_idx) % 12) % 60 公式对部分干支组合返回错误值
    • 修正:改用预计算六十甲子表(60项dict)直接查表
    • 影响:奇门遁甲阴阳遁/局数/三元判定可能出错
  5. 姓名学三才配置表不完整 (engine/xingming_engine.py:SANCAI_LUCK)

    • 问题:三才配置表缺少大量常见组合(如水-金-金、木-水-火等),返回"未知"
    • 修正:补充约50种三才配置到SANCAI_LUCK表
    • 影响:很多名字的三才配置显示为"未知"
  6. 六爻gua_gong_wuxing变量未定义 (engine/liuyao_engine.py)

    • 问题:上一版修复引入的bug——gua_gong_wuxing在使用后才定义
    • 修正:将定义移到使用之前,删除重复定义
    • 影响:六爻引擎完全无法运行

Improvements (3)

  1. 新增 /api/validate 验证端点 (api/routes.py)

    • 功能:对比 lunar-python 直接计算结果与 API 排盘结果
    • 用途:自动化准确性验证,排查排盘错误
    • 返回:PASS/FAIL + 逐字段mismatches
  2. 姓名学笔画表扩展 (engine/xingming_engine.py:STROKE_MAP)

    • 新增约300+常见名字用字(明/浩/涵/清/源/溪/俊/信/修/怡/慧等)
    • 减少未知字fallback警告
  3. 前端移动端CSS优化 (frontend/css/style.css)

    • 新增 @media (max-width: 768px) 响应式规则
    • 表单/按钮/卡片/表格在窄屏下自适应
    • Loading动画spinner优化

验证结果

术数 状态 验证方法
八字 ✅ PASS /api/validate 对比 lunar-python 直接计算
紫微 ✅ 正常 iztro-py 排盘,12宫+主星完整
六爻 ✅ 修复 京房八宫五行现在正确使用
奇门 ✅ 修复 甲子序号改用查表法
大六壬 ✅ 正常 kinliuren 排盘
太乙 ✅ 正常 kintaiyi 排盘
占星 ✅ 正常 pyswisseph 对比验证(Sun=双子,Moon=巨蟹,ASC=射手)
姓名学 ✅ 修复 三才配置+八字配合逻辑修正

2026-06-12 (v2.0.10) — 时间解析修复 + 占星真太阳时 + 前端修复

Bug Fixes (7)

  1. 时间解析不支持带秒格式 (engine/time_engine.py:174)

    • 问题:_parse_time() 缺少 "%Y-%m-%d %H:%M:%S" 格式,导致 "2005-06-09 11:50:00" 解析失败
    • 修正:添加6种带秒的时间格式(%H:%M:%S、%H%M%S等)
    • 影响:所有API请求带秒的时间参数返回500错误
  2. 占星宫位/ASC用UTC而非真太阳时 (engine/astro_engine.py:55-63)

    • 问题:swe.houses() 传入UTC JD,导致ASC偏移~90°(射手应为处女)
    • 修正:行星位置用 jd_utcswe.calc_ut),宫位/ASC用 jd_solar(真太阳时JD)
    • 影响:所有上升星座、宫位计算结果错误
  3. 紫微引擎名称不匹配导致UDM数据丢失 (engine/ziwei_engine.py:113, engine/base.py:112)

    • 问题:引擎返回 name="紫微斗数" 但UDM writer检查 "紫微",导致紫微数据不写入UDM
    • 修正:统一为 "紫微"
    • 影响:紫微排盘结果不显示(数据被丢弃)
  4. 缺少CORS中间件 (main.py)

    • 问题:前端跨域请求被浏览器拦截
    • 修正:添加 CORSMiddleware,允许所有来源
    • 影响:前端无法从不同端口/域名访问API
  5. 占星相位容许度统一8°不合理 (engine/astro_engine.py:153-176)

    • 问题:所有相位统一用8°容许度,六合(60°)不应超过4°
    • 修正:合相8°、六合4°、刑6°、三合6°、冲8°
    • 影响:六合相位误判率高
  6. 前端上升星座显示度数而非星座名 (frontend/index.html:203)

    • 问题:a.ascendant 是度数(258.73),应显示 a.ascendant_sign(射手)
    • 修正:改为 a.ascendant_sign || a.ascendant
    • 影响:上升星座显示为数字而非中文星座名
  7. 前端紫微星曜渲染字段名不匹配 (frontend/index.html:198)

    • 问题:代码引用 pal.stars 但API返回 pal.major_stars(对象数组含.name属性)
    • 修正:合并 pal.major_starspal.minor_stars,提取 .name 属性
    • 影响:紫微斗数面板星曜全部不显示

验证结果

术法 验证状态 备注
八字 乙酉壬午甲子庚午,与lunar-python一致
紫微 命宫子、火六局,四化天机禄/天梁权/紫微科/太阴忌
占星 太阳双子18°、月亮巨蟹14°、ASC射手259°(真太阳时修正后)
六爻 风雷益→天雷无妄,六亲/世应/动爻全部正确
奇门 阳遁6局,芒种,时干庚,值符戊,值使休门
大六壬 月将传送(申),四课正确,三传辰午申
太乙 坤二宫,积年4702,年干支乙酉
姓名学 张伟:天格9水/人格12木/地格5土,三才水木土

改进

  1. CORS中间件 — 允许前端跨域访问API
  2. 相位容许度分层 — 不同相位使用不同容许度(合/冲8°,刑/三合6°,六合4°)

待办

  • STROKE_MAP全面迁移到康熙字典笔画
  • 姓名学三才配置表补全(当前约66/125种组合)
  • 大六壬三传算法需完善(当前用贼克法简化)
  • 奇门遁甲八门/九星/八神需与天盘地盘联动
  • 紫微斗数大限/流年推演功能
  • 行运盘(transit)功能

玄照 v2.0 CHANGELOG

2026-06-12 (v2.0.9) — 八术深度修复 + 安全加固

Bug Fixes (8)

  1. 六爻六亲关系系统性错误 (engine/liuyao_engine.py:347-353)

    • 问题:水/火/土三行的7组六亲关系全部生克颠倒
    • 修正:水-土→官鬼(克我),水-木→子孙(我生),火-水→官鬼,火-土→子孙,土-木→官鬼,土-火→父母(生我),土-金→子孙
    • 影响:所有水/火/土卦宫的六爻断卦结果错误
  2. 六爻壬癸日六神起始错误 (engine/liuyao_engine.py:123-124)

    • 问题:壬癸日六神从白虎起(与庚辛日相同),应从玄武起
    • 修正:壬癸 → ['玄武', '青龙', '朱雀', '勾陈', '螣蛇', '白虎']
    • 影响:所有壬癸日起卦的六神排列错误
  3. 占星相位命名不规范 (engine/astro_engine.py:148-152)

    • 问题:六分/四分/三分/对冲 不符合中文占星术语
    • 修正:六分→六合,四分→刑,三分→三合,对冲→冲
    • 影响:所有相位名称显示错误
  4. 占星天文计算时间基准错误 (engine/astro_engine.py:55-62)

    • 问题:swe.julday()期望UTC时间,但代码传入真太阳时(本地时间),导致ASC偏移~93°
    • 修正:改用 time.utc 替代 time.true_solar
    • 影响:所有上升星座、宫位计算结果错误
  5. 占星宫位索引偏移 (engine/astro_engine.py:100-107)

    • 问题:Placidus分宫制下 cusps[0] 是ASC而非1宫头,循环应从 cusps[1] 取2-12宫头
    • 修正:1宫头使用 ascmc[0](ASC),2-12宫头使用 cusps[1..11]
    • 影响:1宫宫头度数可能不准确
  6. 姓名学偏旁笔画标准错误 (engine/xingming_engine.py:18,217)

    • 问题:偏旁使用简化字笔画而非康熙字典标准(辶=3应为7,艹=3应为6等)
    • 修正:辶→7,忄→4,氵→4,犭→4,扌→4,艹→6,钅→8,讠→7,饣→8,纟→6
    • 影响:所有含这些偏旁的名字笔画计算错误
  7. 前端多面板同时显示 (frontend/index.html:105-112)

    • 问题:switchPanel() 后所有面板又被 display:block 覆盖
    • 修正:移除行内的 display:block 设置,仅保留 switchPanel() 控制
    • 影响:所有术数面板同时可见,界面混乱
  8. API异常信息泄露 (api/routes.py:206,257,289,322,408)

    • 问题:5处 except 直接返回 str(e) 给客户端,暴露内部堆栈
    • 修正:添加 logger.exception() 记录详细错误,返回通用错误消息
    • 影响:生产环境安全风险

验证结果

术法 验证状态 备注
八字 乙酉壬午甲子庚午,与lunar-python一致
紫微 命宫子、火六局,四化天机禄/天梁权/紫微科/太阴忌
占星 太阳双子18°、ASC处女165°(UTC修正后)
六爻 风雷益→天雷无妄,六亲全部正确
奇门 阳遁6局,时干庚,值符戊
大六壬 月将传送(申),三传辰午申
太乙 坤二宫,积年4702
姓名学 ⚠️ 偏旁笔画已修正,但STROKE_MAP中大量简化字仍需逐步迁移到康熙标准

待办

  • STROKE_MAP全面迁移到康熙字典笔画(当前仅修正了偏旁特殊笔画)
  • 姓名学三才配置表补全(当前约66/125种组合)
  • LLM客户端401错误(需配置有效API key)
  • 大六壬三传算法需完善(当前用贼克法简化)
  • 奇门遁甲八门/九星/八神需与天盘地盘联动
  • 紫微斗数大限/流年推演功能

2026-06-12 (v2.0.8) — 八术准确性修复 + 五行得分 + UI增强

Bug Fixes (5)

  1. 六爻六神表庚辛排列错误 (engine/liuyao_engine.py)

    • 问题:庚辛日的六神从螣蛇开始,应从白虎开始
    • 修正:庚辛 → ['白虎', '玄武', '青龙', '朱雀', '勾陈', '螣蛇']
    • 影响:所有庚辛日起卦的六神排列全部错误
  2. 六爻动爻未标记 (engine/liuyao_engine.py)

    • 问题:_najia_zhuanggua() 返回的6爻中 is_dong 全部为 False
    • 修正:在 analyze() 中设置 yao_list[dong_yao-1]['is_dong'] = True 并切换阴阳
    • 影响:前端无法显示哪一爻是动爻
  3. 六爻世应未标记 (engine/liuyao_engine.py)

    • 问题:计算了 shi_posying_pos 但未标记到 yao_listis_shi/is_ying 字段
    • 修正:在 analyze() 中标记世应到本卦和变卦的 yao_list
    • 影响:前端无法显示世爻和应爻位置
  4. 大六壬贵人顺逆未区分阴阳日 (engine/liuren_engine.py)

    • 问题:_pai_tian_jiang() 只做顺布,未区分日干阴阳
    • 修正:阳日(甲丙戊庚壬)顺布,阴日(乙丁己辛癸)逆布;巳亥反向
    • 影响:所有阴日起的六壬天将排列全部错误
  5. API缺失关键字段 (api/routes.py)

    • 紫微缺 shen_gonggender 字段
    • 奇门缺 time_ganzhi_shi 字段
    • 八字缺 wuxing_score 字段

Improvements (5)

  1. 八字五行得分计算 (engine/bazi_engine.py, engine/udm.py, engine/base.py)

    • 新增 _calc_wuxing_score() 方法:天干本气1分、地支本气1分、中气0.5分、余气0.3分
    • DestinyModel 新增 wuxing_score 字段
    • API 新增 wuxing_score 返回
  2. 姓名学三才配置补全 (engine/xingming_engine.py)

    • 从25种配置扩展到66种,覆盖所有五行三才组合
    • 修复"水-土-土"等配置显示"未知"的问题
  3. 太乙神数五福计算精确化 (engine/taiyi_engine.py)

    • 太乙行宫:从每年移一宫修正为每三年移一宫
    • 五福:每个星用独立公式计算,不再共用同一基数
  4. 前端五行得分可视化 (frontend/static/css/style.css, frontend/index.html)

    • 新增五行得分5色柱状图(木绿/火红/土金/金银/水蓝)
    • 新增六爻动爻/世应彩色标记样式
    • 移动端响应式适配
  5. 前端六爻标记增强 (frontend/index.html)

    • 动爻用脉冲金色标记
    • 世爻用金色标记、应爻用紫色标记
    • 动爻行高亮显示

验证结果

术法 验证状态 备注
八字 乙酉壬午甲子庚午,与lunar-python一致
紫微 命宫子、火六局,与iztro-py一致
占星 太阳双子18°、月亮巨蟹13°,与pyswisseph一致
六爻 风雷益→天雷无妄,动爻/世应标记正确
奇门 阳遁6局,时干庚
大六壬 月将传送(申),四课正确
太乙 坤二宫,积年4702
姓名学 三才配置正确识别

待办

  • LLM客户端401错误(需配置有效API key)
  • 大六壬三传算法需完善(当前用贼克法简化)
  • 奇门遁甲八门/九星/八神需与天盘地盘联动
  • 紫微斗数大限/流年推演功能

历史变更

  • v2.0.7: 前端暗色主题 + 七术排盘 + 辩论台
  • v2.0.6: 108视角群体智能引擎
  • v2.0.5: 交叉验证引擎
  • v2.0.4: 奇门遁甲 + 大六壬 + 太乙神数引擎
  • v2.0.3: 紫微斗数引擎
  • v2.0.2: 六爻纳甲引擎
  • v2.0.1: 八字引擎 + 占星引擎
  • v2.0.0: 项目初始化