8 Commits
Author SHA1 Message Date
moxiaonian cdc8fe7fd2 v3.9.0 发版:规则库补强(E3 +20 条,548→568)+ 收敛层防护定型 2026-10-13 17:17:59 +08:00
moxiaonian 1a0eed1999 规则库 3.8.1 + 排盘修复 + 评测体系
- 规则库 3.6→3.8.1(542→548 条):剪枝上锁、R-杂-38 从格临界双轨、
  R-事-10~13 冲刑方向判别、R-禁-23 自造必要条件之禁
- 排盘修复随 3.6.2 已发:港澳时区夏令时双向误拨、晚子时双重换日
- 新增 评测/ 目录(BaziQA 题答分离、判分工具、记分卡、with/without-skill 对照)
  与 scripts/query_rules.py 条款检索;ZIPEC_EVAL 评测额度豁免
- manifest 重建并重新签名;VERSION 保持 3.6.2,不发版不打 tag
2026-10-13 12:34:36 +08:00
moxiaonian b20fd5c3c9 v3.6.2 同步发版:晚子时不再双重换日、港澳时区归位
- 晚子时(真太阳时 23:00–24:00,约 4% 的盘)修正:换日改由 tyme4py provider 原生实现(cast 新增 sect 参数,1=子初 / 2=子正),排盘层不再自行预滚日。3.6.1 及此前会滚两次,日柱多进一天、时柱随之错干——锚点 1973-08-23 23:32 男:旧 癸巳日壬子时 → 正 壬辰日庚子时。已排过的晚子时盘建议重排核对
- --day-boundary 子正 现真正生效(走 sect=2,晚子时日柱算当天),此前只改审计文案不改实际排盘
- data/cities.json 港澳 28 个条目由 Asia/Shanghai 改为 Asia/Hong_Kong(19)、Asia/Macau(9):大陆 1986–1991 行夏令时而港澳 1979 年后无,沿用上海区会把大陆夏令时错加到港澳命主身上
- 修副本环境 `pytest tests/` 收集期中断(test_sync_tool 模块级加载外层 tools/,skipif 挡不住导入),现按设计整模块 skip
- .gitignore 新增 data/.license.json、data/.update_check.json,本机授权与更新缓存不再可能误入仓
- 测试 178 项全绿(副本内 sync 工具 4 项按设计 skip);manifest 1278 文件,ed25519 签名,公钥指纹 3089bc1cc9a453e5…
2026-10-12 19:05:09 +08:00
moxiaonian 415cb472b1 v3.6.1 安全修复同步发版
- 盘面图 XSS 防护:装配层全面转义用户可控字段 + 模板严格 CSP(default-src 'none',无 script-src)+ 6 项注入向量回归测试
- 自更新签名信任锚:--apply 双源 manifest 交叉验证 → ed25519 验签(纯 Python 实现,缺 sig 即拒)→ 逐文件 SHA256,全 fail-closed
- sync 工具同步后自动重建 manifest + 签名 + 独立验签,私钥缺失 fail-closed
- 测试 170 项全绿
2026-10-10 16:21:30 +08:00
moxiaonian 433c9b4a41 v3.6.0 同步发版
- 交互契约改对话式询问(禁点选工具、一次1~2问、先铺垫再问),规则库 3.6
- 盘面图默认生成+chart_shot 截图;品牌区、大运/流年小卡信息补全、交流群二维码卡
- day_boundary 子正换日;memory_save --update-chart 换盘留痕;share_export 事件简介+城市级地域
- share_push 失败诊断+代理引导;_runtime_guard;修 STAR_ORDER 三奇贵人 KeyError
- README 规则计数 541→542;manifest 重建(1275 文件);测试 142 项全绿
2026-10-10 13:13:41 +08:00
moxiaonian f725df8ff6 v3.5.1:自更新抓取回退系统 curl(修根证书缺失环境) 2026-10-09 22:34:37 +08:00
moxiaonian a62f2a7d74 新增 HTML 盘面渲染(cast_chart --html,模板 scripts/render/templates/paipan.html) 2026-10-09 22:23:38 +08:00
moxiaonian 4797702e62 share 双远端同时推送;数据仓接入 Gitea 受限上传账号 2026-10-09 22:05:59 +08:00
377 changed files with 39567 additions and 307 deletions
+6
View File
@@ -3,3 +3,9 @@ __pycache__/
*.pyc *.pyc
.pytest_cache/ .pytest_cache/
.venv/ .venv/
# 运行时本机状态:授权文件与自更新缓存一律不入库、不随 zipball 分发
# (与 tools/build_manifest.py 的 EXCLUDED_FILES 保持一致;公众版须不带
# 授权状态文件出货,否则下载者会拿到别人已签发/已耗尽的额度)
data/.license.json
data/.update_check.json
+3 -3
View File
@@ -1,14 +1,14 @@
# ZiPingEightChar · 子平八字(公众授权版) # ZiPingEightChar · 子平八字(公众授权版)
> 子平八字排盘 + 《子平真诠》格局法解释的 AI 技能(Skill)。 > 子平八字排盘 + 《子平真诠》格局法解释的 AI 技能(Skill)。
> 输入姓名、性别、出生日期时刻、出生地,输出结构化命盘 Markdown,并由模型依随附的 541 条编号规则完成取格、成败、用神相神、行运、六亲与流年流月解释。 > 输入姓名、性别、出生日期时刻、出生地,输出结构化命盘 Markdown,并由模型依随附的 542 条编号规则完成取格、成败、用神相神、行运、六亲与流年流月解释。
## 这是什么 ## 这是什么
这是一个面向 AI Agent 的技能包(Skill),由两部分组成: 这是一个面向 AI Agent 的技能包(Skill),由两部分组成:
- **排盘脚本(`scripts/`)**:纯计算器,不含任何命理判断。把出生钟表时间换算成真太阳时(经度修正 + 均时差 + 夏令时回拨),经子初换日定日历日,调用内置的 tyme4py 排出命盘,输出自包含 Markdown:四柱、地支藏干、空亡、纳音、神煞(子平通行查法、注明锚点)、节令、大运、小运(童限)、全量流年(出生年至今 +10 年、逐年标注所属大运)、流月及排盘审计;生于交节前后 12 小时内的盘自带节气边界提示。 - **排盘脚本(`scripts/`)**:纯计算器,不含任何命理判断。把出生钟表时间换算成真太阳时(经度修正 + 均时差 + 夏令时回拨),经子初换日定日历日,调用内置的 tyme4py 排出命盘,输出自包含 Markdown:四柱、地支藏干、空亡、纳音、神煞(子平通行查法、注明锚点)、节令、大运、小运(童限)、全量流年(出生年至今 +10 年、逐年标注所属大运)、流月及排盘审计;生于交节前后 12 小时内的盘自带节气边界提示。
- **规则库(`rules/`)**:541 条编号规则,以《子平真诠》格局法为骨架,蒸馏《滴天髓阐微》《穷通宝鉴》《命理探源》《三命通会》为参看层(`rules/sources/` 按书归档五书原文可供回查),含女命专篇、神煞细节、童限等拓展层(拓展条逐条标注【拓展】)。模型按 SKILL.md 的执行顺序加载规则完成解释。 - **规则库(`rules/`)**:542 条编号规则,以《子平真诠》格局法为骨架,蒸馏《滴天髓阐微》《穷通宝鉴》《命理探源》《三命通会》为参看层(`rules/sources/` 按书归档五书原文可供回查),含女命专篇、神煞细节、童限等拓展层(拓展条逐条标注【拓展】)。模型按 SKILL.md 的执行顺序加载规则完成解释。
- **命主档案(`memory/`)**:本地留存每位命主的排盘与解读归纳(含「已核实/已证伪/未核实」三态反馈记录),同一命主再看时查档延续。档案只存本机,不随副本分发。 - **命主档案(`memory/`)**:本地留存每位命主的排盘与解读归纳(含「已核实/已证伪/未核实」三态反馈记录),同一命主再看时查档延续。档案只存本机,不随副本分发。
## 快速开始 ## 快速开始
@@ -49,7 +49,7 @@ python scripts/cast_chart.py --name 张三 --gender 男 \
``` ```
SKILL.md 技能入口:用法、输出契约、解释规则、文风要求 SKILL.md 技能入口:用法、输出契约、解释规则、文风要求
rules/ 541 条编号解释规则(20 个文件) rules/ 542 条编号解释规则(20 个文件)
sources/ 五书原文归档(回查用) sources/ 五书原文归档(回查用)
tests/golden/ 原书命例黄金集 tests/golden/ 原书命例黄金集
scripts/ 排盘脚本(astro/ chart/ geo/ render/ 分层)与岁运神煞查询 scripts/ 排盘脚本(astro/ chart/ geo/ render/ 分层)与岁运神煞查询
+46 -17
View File
@@ -18,6 +18,15 @@ python scripts/cast_chart.py --name 张三 --gender 男 \
成功时命盘 Markdown 打印到 stdout,退出码 0。诊断信息只走 stderr。 成功时命盘 Markdown 打印到 stdout,退出码 0。诊断信息只走 stderr。
可选:加 `--html` 同步生成 HTML 盘面图(`--html 路径.html` 指定输出,省略路径则写 `./命盘_<姓名>.html`;生成路径打在 stderr):
```bash
python scripts/cast_chart.py --name 张三 --gender 男 \
--birth "1990-05-14 08:30" --place "四川省成都市" --html
```
加 `--shot` 则在生成 HTML 的同时截图 PNG(playwright 优先、Chrome 无头兜底,见「盘面图」节),HTML 与 PNG 路径打在 stdout 末尾;截图工具不可用时只出 HTML 并附降级提示,不影响命盘输出。
另配岁运神煞查询工具(本命神煞已列于命盘 `## 神煞`,此工具查某流年/流月/大运/流日干支相对本命所逢之神煞): 另配岁运神煞查询工具(本命神煞已列于命盘 `## 神煞`,此工具查某流年/流月/大运/流日干支相对本命所逢之神煞):
```bash ```bash
@@ -27,7 +36,7 @@ python scripts/query_shensha.py --gender 女 \
## 运行环境 ## 运行环境
- **只需 Python ≥ 3.10,无需安装任何依赖。** tyme4py 1.5.0 与 tzdata 已内置在 `vendor/`(纯 Python / 纯数据,跨平台跨架构),脚本启动时自动优先加载,优先于环境中已安装的同名包。原理与升级方法见 `vendor/VENDOR.md`。 - **只需 Python ≥ 3.10,无需安装任何依赖。** tyme4py 1.5.0 与 tzdata 已内置在 `vendor/`(纯 Python / 纯数据,跨平台跨架构),脚本启动时自动优先加载,优先于环境中已安装的同名包。原理与升级方法见 `vendor/VENDOR.md`。解释器低于 3.10 时脚本拒绝运行:stderr 打印中文提示(说明所需版本与当前解释器路径)并以退出码 3 结束——macOS 系统自带 python3 为 3.9,不可用,请改用更新版本的 Python 运行。
- 开发模式回退:删除 `vendor/` 即改用环境安装的包(`requirements.txt` 锁定不变),两种方式输出一致。 - 开发模式回退:删除 `vendor/` 即改用环境安装的包(`requirements.txt` 锁定不变),两种方式输出一致。
## 输入参数(四个,全部必需) ## 输入参数(四个,全部必需)
@@ -41,14 +50,16 @@ python scripts/query_shensha.py --gender 女 \
**时刻是必需的。** 时辰决定时柱,差一个时辰就是另一张盘。用户只给了日期(「1990 年 5 月 14 日」)时,**必须追问具体时刻**,不要自行假设 12:00 或任何时刻。 **时刻是必需的。** 时辰决定时柱,差一个时辰就是另一张盘。用户只给了日期(「1990 年 5 月 14 日」)时,**必须追问具体时刻**,不要自行假设 12:00 或任何时刻。
## Intake 追问话术 ## Intake 对话式询问(强制)
输入不全或不可用时,按退出码与下列口径追问,语气温和、一次只问必要的项;多项缺失时合成一次提问,不逐条单独打断: 命理询问是分支式的——前一个回答决定下一个问题。**所有询问一律以普通对话消息进行,禁止调用结构化问卷/点选工具(AskUserQuestion 之类),也禁止在正文罗列编号问题清单让用户勾选。** 口吻是命理老师傅聊天:自然、简短、口语化。
- **缺时刻**:「时辰决定时柱,差一个时辰就是另一张盘,所以出生时间需要精确到小时。您大概几点出生?(如『早上 8 点半』『下午 3 点左右』均可)」若用户确实记不清:「那我按该时段的两个相邻时辰各排一张,并说明哪些结论会随时柱变化、哪些不受影响。」 - **节奏**:一次最多问 1~2 个最关键的问题,得到回答再决定下一个问题。缺多项时按 时刻 → 地点 → 性别 的优先级逐个补,不把整串问题一次甩给用户。
- **缺地点或地点无法解析**(退出码 2):「出生地用来换算真太阳时,差一个经度时辰就可能变。请告诉我您出生的城市或县(如『四川成都』『浙江义乌』)。」 - **先铺垫再问**:盘已排出时,提问前先用一两句不依赖提问即可断出的盘面信息做铺垫(日主、月令、显著特征),再自然带出问题。例如:「这盘甲木生腊月,底子偏寒——先问一句:十来岁那年是不是住过院?」出生信息还不全、盘未排出时没有铺垫可用,直接问缺项即可。
- **缺性别**:「性别决定大运顺排还是逆排,请补充一下性别。」 - **缺时刻**:「时辰决定时柱,差一个时辰就是另一张盘,出生时间得精确到小时。大概几点出生?(『早上 8 点半』『下午 3 点左右』都行)」若用户确实记不清:「那我按该时段的两个相邻时辰各排一张,哪些结论会随时柱变化、哪些不受影响,分开说明。」
- **场景判定**(断运、回溯类问题先问):「这盘是您本人看,还是替别人看?本人或知情人在场、能核对以往的事吗?」——定人称、定能否走核对轮(R-运-33)、定事件候选的颗粒度(命主本人可核到月份与部位,代看通常只能核到年份)。与缺项追问合成一次提问,不单独多占一轮。 - **缺地点或地点无法解析**(退出码 2):「出生地用来换算真太阳时,差一个经度时辰就可能变。生在哪个城市或县?(如『四川成都』『浙江义乌』)」
- **缺性别**:「性别决定大运顺排还是逆排,补一下性别。」
- **场景判定**(断运、回溯类问题先问):「这盘是您本人看,还是替别人看?本人或知情人在场、能核对以往的事吗?」——定人称、定能否走核对轮(R-运-33)、定事件候选的颗粒度(命主本人可核到月份与部位,代看通常只能核到年份)。
- **时间格式错误**(退出码 2):照 stderr 提示转述,不自行猜测改写。 - **时间格式错误**(退出码 2):照 stderr 提示转述,不自行猜测改写。
- **库内部错误**(退出码 3):把 stderr 原样报告给用户,**不要猜盘**,不要凭印象编造四柱。 - **库内部错误**(退出码 3):把 stderr 原样报告给用户,**不要猜盘**,不要凭印象编造四柱。
- **授权不可用**(退出码 4):把 stderr 原样转述给用户(次数用尽 / 已到期 / 授权文件被改动)。**不要尝试绕过或猜测授权状态**;需要续期请用户联系授权方(见 LICENSE.md)。 - **授权不可用**(退出码 4):把 stderr 原样转述给用户(次数用尽 / 已到期 / 授权文件被改动)。**不要尝试绕过或猜测授权状态**;需要续期请用户联系授权方(见 LICENSE.md)。
@@ -59,7 +70,7 @@ python scripts/query_shensha.py --gender 女 \
|---|---|---| |---|---|---|
| 0 | 成功 | 读 stdout 的 Markdown,进入解释 | | 0 | 成功 | 读 stdout 的 Markdown,进入解释 |
| 2 | 输入不可用(出生地无法解析 / 时间格式错误或缺时刻) | 读 stderr 的提示,**向用户追问**后重试 | | 2 | 输入不可用(出生地无法解析 / 时间格式错误或缺时刻) | 读 stderr 的提示,**向用户追问**后重试 |
| 3 | 库内部错误 | 把 stderr 内容原样报告给用户。**不要猜盘**,不要凭印象编造四柱 | | 3 | 库内部错误 / 运行环境不符(Python < 3.10) | 把 stderr 内容原样报告给用户。**不要猜盘**,不要凭印象编造四柱 |
| 4 | 授权不可用(软锁:次数用尽 / 已到期 / 授权文件被改动) | 把 stderr 原样转述给用户,**不要绕过** | | 4 | 授权不可用(软锁:次数用尽 / 已到期 / 授权文件被改动) | 把 stderr 原样转述给用户,**不要绕过** |
## 授权与分发 ## 授权与分发
@@ -69,6 +80,7 @@ python scripts/query_shensha.py --gender 女 \
- **公众版(首启签发个人副本)**:公众版不带授权状态文件,只带标记 `data/.public_edition.json`;首次排盘时由 `scripts/_license_gate.py` 就地签发个人副本——**初始 20 次、不限期**,授权对象 `public-personal`,个人副本编号此时生成。之后与定制副本同样校验。**推送脱敏档案每盘 +10 次,同一盘只计一次**(见「档案共建(share/)」节)。 - **公众版(首启签发个人副本)**:公众版不带授权状态文件,只带标记 `data/.public_edition.json`;首次排盘时由 `scripts/_license_gate.py` 就地签发个人副本——**初始 20 次、不限期**,授权对象 `public-personal`,个人副本编号此时生成。之后与定制副本同样校验。**推送脱敏档案每盘 +10 次,同一盘只计一次**(见「档案共建(share/)」节)。
- **水印指纹**:副本在 `SKILL.md`、`rules/` 各文件、`scripts/cast_chart.py` 与授权状态文件中嵌入唯一副本编号(定制副本形如 `LY-20261007-A3F9`,公众版为池编号形如 `LY-20261009-PUB0`),副本泄露可按编号溯源。 - **水印指纹**:副本在 `SKILL.md`、`rules/` 各文件、`scripts/cast_chart.py` 与授权状态文件中嵌入唯一副本编号(定制副本形如 `LY-20261007-A3F9`,公众版为池编号形如 `LY-20261009-PUB0`),副本泄露可按编号溯源。
- **软锁**:授权副本含 `data/.license.json`,排盘脚本按授权次数与有效期放行;用尽、到期或授权文件被改动时退出码 4。总开关为 `scripts/_license_gate.py` 顶部 `_ENABLED` 一行变量——软锁防君子不防小人,是授权边界的可见表达,真正约束以 `LICENSE.md` 为准。 - **软锁**:授权副本含 `data/.license.json`,排盘脚本按授权次数与有效期放行;用尽、到期或授权文件被改动时退出码 4。总开关为 `scripts/_license_gate.py` 顶部 `_ENABLED` 一行变量——软锁防君子不防小人,是授权边界的可见表达,真正约束以 `LICENSE.md` 为准。
- **评测豁免**:跑 `评测/` 测试集复测时在命令前加 `ZIPEC_EVAL=1`(如 `ZIPEC_EVAL=1 python scripts/cast_chart.py ...`),授权门直接放行——不签发、不扣次、不创建任何文件,不消耗副本额度(口径见 `评测/测试规则.md` §1.1)。
- **母版与副本**:技能开发目录为母版(无授权状态文件、无公众版标记,不锁)。分发副本由授权方一侧的 `tools/make_license_copy.py` 生成:定制副本 `python tools/make_license_copy.py --licensee 张三 --uses 20 --expires 2027-12-31 --out <目标目录>`;公众版 `python tools/make_license_copy.py --public-edition --out <目标目录>`。该工具不随副本分发。 - **母版与副本**:技能开发目录为母版(无授权状态文件、无公众版标记,不锁)。分发副本由授权方一侧的 `tools/make_license_copy.py` 生成:定制副本 `python tools/make_license_copy.py --licensee 张三 --uses 20 --expires 2027-12-31 --out <目标目录>`;公众版 `python tools/make_license_copy.py --public-edition --out <目标目录>`。该工具不随副本分发。
## 输出契约(v1.2,章节标题冻结) ## 输出契约(v1.2,章节标题冻结)
@@ -96,13 +108,13 @@ stdout 的 Markdown 依次包含以下章节。标题是解释规则的定位锚
- **节气边界提示**:出生真太阳时距交节不足 12 小时时,命盘开头出现 ⚠️ 提示。月令对出生记录误差敏感,误差超过提示值则月令改变、四柱全变;解释须声明此敏感性,断运证伪回查(R-运-33 第 4 步)时重排另一月令之盘对照。 - **节气边界提示**:出生真太阳时距交节不足 12 小时时,命盘开头出现 ⚠️ 提示。月令对出生记录误差敏感,误差超过提示值则月令改变、四柱全变;解释须声明此敏感性,断运证伪回查(R-运-33 第 4 步)时重排另一月令之盘对照。
- **夏令时**:1986–1991 年全国夏令时期间(每年 4 月中旬至 9 月中旬)出生者,钟表时间先回拨 1 小时再作后续修正——「钟表 23 点 ≠ 真太阳时 23 点」,是否晚子时以真太阳时为准(「排盘审计」段有「夏令时:是/否」)。 - **夏令时**:1986–1991 年全国夏令时期间(每年 4 月中旬至 9 月中旬)出生者,钟表时间先回拨 1 小时再作后续修正——「钟表 23 点 ≠ 真太阳时 23 点」,是否晚子时以真太阳时为准(「排盘审计」段有「夏令时:是/否」)。
## 解释规则(rules/ 目录,库版本 3.5) ## 解释规则(rules/ 目录,库版本 3.9.0)
取格、用神、断运等解释规则在 `rules/` 下,共 20 个文件、542 条编号规则,以《子平真诠》格局法为骨架,并蒸馏《滴天髓阐微》《穷通宝鉴》《命理探源》《三命通会》四书为格局定论后的参看层(性情/事类/六亲女命增补、调候、神煞书证、旺衰扶抑、童限;拓展条均逐条标注【拓展】);`rules/sources/` 按书归档五书原书全文可供回查,书目登记见 `rules/sources/README.md`。格式规范与锚点约定见 `rules/README.md`。 取格、用神、断运等解释规则在 `rules/` 下,共 20 个文件、568 条编号规则,以《子平真诠》格局法为骨架,并蒸馏《滴天髓阐微》《穷通宝鉴》《命理探源》《三命通会》四书为格局定论后的参看层(性情/事类/六亲女命增补、调候、神煞书证、旺衰扶抑、童限;拓展条均逐条标注【拓展】);`rules/sources/` 按书归档五书原书全文可供回查,书目登记见 `rules/sources/README.md`。格式规范与锚点约定见 `rules/README.md`。
**执行顺序**: **执行顺序**:
0. **问题归类**:判定用户所问的主线(健康/感情/财运/事业/学业/六亲)、前瞻或回溯、以及场景(命主本人/替人看、能否核对——见 Intake 场景判定)。次级关注(隐藏线)只作附带:输出时以一条「顺带看了 X 这条线」声明并简答,不铺成第二主线; 0. **问题归类**:判定用户所问的主线(健康/感情/财运/事业/学业/六亲)、前瞻或回溯、以及场景(命主本人/替人看、能否核对——见「Intake 对话式询问」场景判定)。次级关注(隐藏线)只作附带:输出时以一条「顺带看了 X 这条线」声明并简答,不铺成第二主线;
1. 读命盘 Markdown,加载 `rules/00_总纲_取格.md`,按 §1 六步决策流程定格; 1. 读命盘 Markdown,加载 `rules/00_总纲_取格.md`,按 §1 六步决策流程定格;
2. 命中后加载对应分格文件(`rules/11_正官格.md` … `rules/19_杂格.md`),判成/败/救/应、用神相神、格局高低; 2. 命中后加载对应分格文件(`rules/11_正官格.md` … `rules/19_杂格.md`),判成/败/救/应、用神相神、格局高低;
3. 断运时加载 `rules/90_行运.md`(§7 断运操作序列定喜忌应期,§8 事类落地把关键流年译成现实事件候选,§9 断年核对回路,§10 童限)与分格文件的「取运」节;覆盖多个流年的批量断运按 R-运-33 **核对前置**——先以场景判定分流,可核对者先锚点核对、不可核对者直推,输出只出现一次。**推断任一具体流年/流月前,必须按 R-运-34 五步核对重新打开规则文件查表,不得凭会话记忆推断**;编号记录只列本轮实际查阅的条目(R-运-35),收调试层(见「调试与溯源」); 3. 断运时加载 `rules/90_行运.md`(§7 断运操作序列定喜忌应期,§8 事类落地把关键流年译成现实事件候选,§9 断年核对回路,§10 童限)与分格文件的「取运」节;覆盖多个流年的批量断运按 R-运-33 **核对前置**——先以场景判定分流,可核对者先锚点核对、不可核对者直推,输出只出现一次。**推断任一具体流年/流月前,必须按 R-运-34 五步核对重新打开规则文件查表,不得凭会话记忆推断**;编号记录只列本轮实际查阅的条目(R-运-35),收调试层(见「调试与溯源」);
@@ -119,7 +131,7 @@ stdout 的 Markdown 依次包含以下章节。标题是解释规则的定位锚
解释按以下骨架呈现。标 ★ 的项为强制项,其余为结构引导——行文可详可略,阶段次序不可乱。**输出次序直答在前、推理在后**;思考次序不变——先完成取格、成败、用神相神、高低、行运的全部判定,再落笔,不得边写边编判断。 解释按以下骨架呈现。标 ★ 的项为强制项,其余为结构引导——行文可详可略,阶段次序不可乱。**输出次序直答在前、推理在后**;思考次序不变——先完成取格、成败、用神相神、高低、行运的全部判定,再落笔,不得边写边编判断。
1. **排盘口径** —— 真太阳时修正量(含夏令时回拨);晚子时盘必须在此声明两派分歧(子正换日者日柱、时柱不同),并说明下文按子初换日之盘解释;命盘带 ⚠️ 节气边界提示时,声明月令对出生记录误差敏感; 1. **排盘口径** —— 真太阳时修正量(含夏令时回拨);晚子时盘必须在此声明两派分歧(子正换日者日柱、时柱不同),并说明下文按子初换日之盘解释;命盘带 ⚠️ 节气边界提示时,声明月令对出生记录误差敏感;
2. **直答** ★(问及具体事项或断及流年时必须有;纯取格问答可省)—— 对用户问题的一手回答:**一个主答案**,至多带一个备选,再给**置信度**(能定到年/只能定到窗口/定不了)。白话,三条以内,不展开底盘。用户问题预设某事已发生而盘上无硬信号时,直答「盘上看不出必见此事」(R-运-32 前提挑战),不顺其预设铺年份; 2. **直答** ★(问及具体事项或断及流年时必须有;纯取格问答可省)—— 对用户问题的一手回答:**一个主答案**,至多带一个备选,再给**置信度**(能定到年/只能定到窗口/定不了)。白话,三条以内,不展开底盘。依编号规则被排除、但直白取象路径仍有支撑的候选只降级不删除——主答案置信度不足「高」(只能定到窗口、定不了,或两路径结论相分歧)时必须带备选(R-运-32 降级保留)。用户问题预设某事已发生而盘上无硬信号时,直答「盘上看不出必见此事」(R-运-32 前提挑战),不顺其预设铺年份;
3. **现实对应** ★(问及婚姻、六亲、财运、健康等具体事项,或断及流年时必须有)—— 白话详解,见下「现实对应段」; 3. **现实对应** ★(问及婚姻、六亲、财运、健康等具体事项,或断及流年时必须有)—— 白话详解,见下「现实对应段」;
4. **分析推理(术语段)** —— 按 取格 → 格之成败 → 用神与相神 → 格局高低 → 行运喜忌 的内部次序给出专业判定,须与问题紧密关联。出处用篇名级(如「依《子平真诠》论行运篇」)或直述,**不出现规则编号**(编号收调试层,见「调试与溯源」)。行运喜忌用户问到才展开,按 `rules/90_行运.md` §7 断运操作序列走:先运后年,喜忌系于格局成败,不逐年流水断,关键流年按 §8 落地为现实事件候选(每年 2–3 个、按可能性排序),逐年落笔前经 §9 核对回路重新查表;**全量候选与排序依据收在本段,直答段只取其一**。现实对应段的每一条在本段都必须有出处; 4. **分析推理(术语段)** —— 按 取格 → 格之成败 → 用神与相神 → 格局高低 → 行运喜忌 的内部次序给出专业判定,须与问题紧密关联。出处用篇名级(如「依《子平真诠》论行运篇」)或直述,**不出现规则编号**(编号收调试层,见「调试与溯源」)。行运喜忌用户问到才展开,按 `rules/90_行运.md` §7 断运操作序列走:先运后年,喜忌系于格局成败,不逐年流水断,关键流年按 §8 落地为现实事件候选(每年 2–3 个、按可能性排序),逐年落笔前经 §9 核对回路重新查表;**全量候选与排序依据收在本段,直答段只取其一**。现实对应段的每一条在本段都必须有出处;
5. **存疑与边界声明** —— 命中的存疑规则、规则两可处、无法确认处,如实声明;无则写「无」;不取某条规则之判时,在此段按 R-禁-22 声明偏离(编号、理由、书证); 5. **存疑与边界声明** —— 命中的存疑规则、规则两可处、无法确认处,如实声明;无则写「无」;不取某条规则之判时,在此段按 R-禁-22 声明偏离(编号、理由、书证);
@@ -127,12 +139,15 @@ stdout 的 Markdown 依次包含以下章节。标题是解释规则的定位锚
> 以上内容由灵爻妙解依据古籍《子平真诠》制作技能,ai生成,仅供娱乐参考,不替代医疗、法律、投资、心理咨询等任何专业意见。灵爻妙解,传承易学智慧,欢迎访问 https://lingyaomiaojie.com > 以上内容由灵爻妙解依据古籍《子平真诠》制作技能,ai生成,仅供娱乐参考,不替代医疗、法律、投资、心理咨询等任何专业意见。灵爻妙解,传承易学智慧,欢迎访问 https://lingyaomiaojie.com
**共建提示(首次讲解后)**:本次会话的第一次完整讲解(第 1–6 段全部输出完毕)之轮,在免责引用块**之前**顺带一句共建提示——第 6 段引用块保持一字不改、仍在全轮末尾;**同一会话只提示一次**,后续问答轮不再重复。口吻延续老师傅人设,自然一句带过,不写成广告,参考:「这盘先看到这。若愿意为这门手艺出份力——会话结束后直接发我『推送』二字,会把脱敏后的盘面存入共建档案库,用来校准后续版本;推与不推,都不影响看盘。」用户回应「推送」(或「推送黄金集」等明确意图)后,进入「档案共建(share/)」节既有流程:导出过目 → 授权问答 → 推送授权话术 → 推送计励。
**★边界声明的次数上限**:单轮回答中「这一层我给不出 / 这不是干这个的 / 硬报数字就是忽悠」型的方法边界说明**至多出现一次**,且必须并入第 5 段,不得另起一段、不得打断解读节奏。其余场合一律改用模糊语自然带过(见「文风」节)。声明本身不得写成辩解或自嘲。 **★边界声明的次数上限**:单轮回答中「这一层我给不出 / 这不是干这个的 / 硬报数字就是忽悠」型的方法边界说明**至多出现一次**,且必须并入第 5 段,不得另起一段、不得打断解读节奏。其余场合一律改用模糊语自然带过(见「文风」节)。声明本身不得写成辩解或自嘲。
**阶段纪律**:落笔之前遇下列情形,**必须先向用户声明分歧再继续**—— **阶段纪律**:落笔之前遇下列情形,**必须先向用户声明分歧再继续**——
- 晚子时盘(两派日柱时柱不同); - 晚子时盘(两派日柱时柱不同);
- 杂格闸门两可(正格与外格均可入,依总纲第六步逐条核对后声明取舍); - 杂格闸门两可(正格与外格均可入,依总纲第六步逐条核对后声明取舍);
- 从格/正格临界(日主仅一微根、合化存疑、透干不稳)——按 R-杂-38 两轨并推,声明主轨与备选轨及临界因素;
- 命中标 `> 存疑` 且**影响判定走向**的规则条文(仅涉讹字校勘、不影响判定的存疑,归入第 5 段声明即可,无须中途停下)。 - 命中标 `> 存疑` 且**影响判定走向**的规则条文(仅涉讹字校勘、不影响判定的存疑,归入第 5 段声明即可,无须中途停下)。
这一段属判定分歧的声明,不受上条次数限制;但同样只说一次、说完继续,不反复申明。 这一段属判定分歧的声明,不受上条次数限制;但同样只说一次、说完继续,不反复申明。
@@ -141,10 +156,10 @@ stdout 的 Markdown 依次包含以下章节。标题是解释规则的定位锚
## 断运交互(核对前置) ## 断运交互(核对前置)
用户问「过往发生了什么 / 哪几年是转折」这类覆盖多个流年的问题时,按 `rules/90_行运.md` R-运-33 执行**核对前置**——所有提问发生在铺开断语之前,输出只出现一次: 用户问「过往发生了什么 / 哪几年是转折」这类覆盖多个流年的问题时,按 `rules/90_行运.md` R-运-33 执行**核对前置**——所有提问发生在铺开断语之前,输出只出现一次。核对同样走对话式询问(见「Intake 对话式询问」):不用结构化工具、不列编号选项,一次最多问一两个锚点,答完再定下一个;R-运-33 的核对程序(锚点选取、候选排序、证伪回查)照旧执行。
1. **先定场景**:intake 一问分流(命主本人还是替人看、能否核对过往),与缺项追问合成一次提问; 1. **先定场景**:intake 一问分流(命主本人还是替人看、能否核对过往);
2. **可核对 → 锚点核对**:挑 3 个左右锚点年(组数最多、落在人生阶段窗口、用户所问之线各占其一),每个锚点年一个问题,选项为按可能性排序的 2–3 个候选事件、外加「都对不上」(证伪入口);几个锚点年合成一次结构化提问,不逐条单独打断。断语涉及学业年份时,学制锚点并入同一次提问,不单独多问一轮。核对后按 R-运-32 第 4 步收敛,一次性输出完整断运。无询问工具的环境,在正文列出编号选项请用户回复编号; 2. **可核对 → 锚点核对**:挑 3 个左右锚点年(组数最多、落在人生阶段窗口、用户所问之线各占其一)。每问先给铺垫——该年盘上的显著信号一两句——再自然带出按可能性排序的 2–3 个候选事件,外加「都对不上」(证伪入口);用户答完再挑下一个锚点。断语涉及学业年份时,学制锚点顺嘴并入当轮提问,不单独多问一轮。核对后按 R-运-32 第 4 步收敛,一次性输出完整断运;
3. **不可核对 → 直推**:命主不在场、不知情,或用户明言测试、「不用问、直接说」时,跳过核对,一次性输出最佳推断——直答给主答案与置信度,全量候选收分析推理段。 3. **不可核对 → 直推**:命主不在场、不知情,或用户明言测试、「不用问、直接说」时,跳过核对,一次性输出最佳推断——直答给主答案与置信度,全量候选收分析推理段。
锚点全部落空时先回头查组数判定、阶段假设、时辰边界与节气边界,不硬铺(R-运-33 第 4 步)。 锚点全部落空时先回头查组数判定、阶段假设、时辰边界与节气边界,不硬铺(R-运-33 第 4 步)。
@@ -182,15 +197,19 @@ stdout 的 Markdown 依次包含以下章节。标题是解释规则的定位锚
`python scripts/memory_lookup.py --birth "1990-05-14 08:30" --place "四川省成都市" --gender 男` `python scripts/memory_lookup.py --birth "1990-05-14 08:30" --place "四川省成都市" --gender 男`
(亦可按 `--name` / `--pillars "丁亥 乙巳 庚子 辛巳"` 任意组合检索)。有档则读档延续——此前的归纳、已核实/已证伪反馈在分析推理时直接参用,已证伪的断法不得再断;无档则正常排盘解释,解释完成后用 `python scripts/memory_save.py --name ... --gender ... --birth ... --place ...` 建档(建档即一次排盘,授权副本照常扣次)。 (亦可按 `--name` / `--pillars "丁亥 乙巳 庚子 辛巳"` 任意组合检索)。有档则读档延续——此前的归纳、已核实/已证伪反馈在分析推理时直接参用,已证伪的断法不得再断;无档则正常排盘解释,解释完成后用 `python scripts/memory_save.py --name ... --gender ... --birth ... --place ...` 建档(建档即一次排盘,授权副本照常扣次)。
- **回写纪律**:用户核对或澄清了任何断语后,当轮把结果写回该档案的 `## 反馈与澄清` 小节,每条以状态标签开头——推测性归纳标【未核实】,命主确认改【已核实】,被否改【已证伪】并补一句实际情况;结构性结论同步更新 `## 归纳` 各行。 - **回写纪律**:用户核对或澄清了任何断语后,当轮把结果写回该档案的 `## 反馈与澄清` 小节,每条以状态标签开头——推测性归纳标【未核实】,命主确认改【已核实】,被否改【已证伪】并补一句实际情况;结构性结论同步更新 `## 归纳` 各行。
- **换盘纪律(工作盘唯一 + 变更留痕)**:经用户确认换盘(日界规则分歧、时辰/出生地校正等)后,**必须当轮重排并把档案 `## 盘面` 段整体替换为新盘**——档案任何时候只有一个工作盘,旧盘不得留在盘面段,防止续推时误用。操作:
`python scripts/memory_save.py --update-chart <档案路径> [--day-boundary 子正] [--birth "校正后时刻"] [--place "校正后地点"]`
(重排一次,授权副本照常扣次;frontmatter 四柱/日主同步为新盘,四柱变动时文件自动改为新主键名;目标档案已存在则拒绝覆盖)。留痕:旧盘四柱、换盘原因、确认方式与时间记入 `## 反馈与澄清` 校订条目;凡受变动柱(如日柱/时柱)影响的已有推断条目(`## 归纳`、`## 流年大事` 各行),同轮标记【待复核】,复核前不得继续引用。
- **隐私**:档案属命主个人信息,只存本机、不随授权副本分发、档案原文不进 share;不得把档案原文外发(不粘贴到外部对话、不上传网络、不写入其他文件)。回传授权方的只有按下节规格生成的结构化脱敏包,且必须经用户授权。 - **隐私**:档案属命主个人信息,只存本机、不随授权副本分发、档案原文不进 share;不得把档案原文外发(不粘贴到外部对话、不上传网络、不写入其他文件)。回传授权方的只有按下节规格生成的结构化脱敏包,且必须经用户授权。
## 档案共建(share/) ## 档案共建(share/)
用户可自愿把**脱敏后**的命盘数据回传授权方,用于技能优化与规则蒸馏(脱敏规格、隐私协议与撤回方式见 `share/README.md`)。每成功推送一盘,本副本授权次数 **+10**;同一盘(按盘 hash)只计一次,不重复加次。 用户可自愿把**脱敏后**的命盘数据回传授权方,用于技能优化与规则蒸馏(脱敏规格、隐私协议与撤回方式见 `share/README.md`)。每成功推送一盘,本副本授权次数 **+10**;同一盘(按盘 hash)只计一次,不重复加次。
- **导出**:`python scripts/share_export.py --archive <档案路径>`(或按 `--birth/--place/--gender` 检索定位),生成结构化 JSON 脱敏包到 `share/pending/<盘hash>.json`。完整度门槛:性别/四柱/大运齐全 + 至少一条反馈事件(任意核实状态),不满足则拒绝导出(退出码 2)。**未核实推测不得入包**:归纳小节的推测性结论一律不导出;反馈事件(带核实状态标签)可入包,自由文本(反馈原文、盘面细节、归纳文字)一律不入。 - **导出**:`python scripts/share_export.py --archive <档案路径>`(或按 `--birth/--place/--gender` 检索定位),生成结构化 JSON 脱敏包到 `share/pending/<盘hash>.json`。完整度门槛:性别/四柱/大运齐全 + 至少一条反馈事件(任意核实状态),不满足则拒绝导出(退出码 2);事件简介缺失(档案未写事件内容)不挡导出,包内如实反映。**未核实推测不得入包**:归纳小节的推测性结论一律不导出;反馈事件与流年大事(带核实状态标签)连同事件简介(note)可入包。脱敏纪律:姓名一律删除;出生信息只留年月日与时辰;地域保留到城市级(省+地级市,区县及以下删除);事件简介中**城市级地名保留**(方位信息供规则蒸馏定位),真实姓名、详细住址(小区/门牌/街道号)、身份证/电话等直接定位信息一律删除——脚本自动脱敏,书写事件简介时也只写到城市级;归纳文字、盘面细节等其余自由文本一律不入。**换盘清理纪律**:换盘/出生信息重大更正后重新导出前,先清理 `share/pending/` 中同一命主的旧 hash 包——盘 hash 随四柱/出生地变化,旧包即成孤儿,可能被误推;share_export.py 导出时检测到疑似残留(同出生日同性别、盘 hash 不同)会打 WARN 提示,确认后手动删除。
- **授权询问(强制)**:推送前必须先把脱敏包**全文展示**给用户,并询问是否授权推送——用户同意才执行推送;不同意则取消,脱敏包保留在 `share/pending/`(用户可随时删除),不影响技能正常使用。 - **授权询问(强制)**:推送前必须先把脱敏包**全文展示**给用户,并询问是否授权推送——用户同意才执行推送;不同意则取消,脱敏包保留在 `share/pending/`(用户可随时删除),不影响技能正常使用。
- **推送**:`python scripts/share_push.py`,把 `share/pending/` 的包推送到 `share/config.json` 配置的共建远端(GitHub / Gitea 逐个尝试,至少一个成功即算成功;远端地址由授权方填写)。推送成功后包移入 `share/pushed/`,并告知用户新增授权次数(+10;该盘已计励过则不重复加)。推送失败(无 git / 无网络 / 远端不可达)保留 pending,不丢数据。 - **推送**:`python scripts/share_push.py`,把 `share/pending/` 的包推送到 `share/config.json` 配置的共建远端(GitHub 与 Gitea **两条线都推**,至少一个成功即算成功;远端地址由授权方填写)。推送成功后包移入 `share/pushed/`,并告知用户新增授权次数(+10;该盘已计励过则不重复加)。推送失败(无 git / 无网络 / 远端不可达)保留 pending,不丢数据。
- **推送授权话术(宿主权限层)**:调用推送脚本时宿主会请求执行权限,请用户确认——**「点一下允许」是唯一主路径**。① **推送前先预告**:得到用户口头授权后、调用脚本前,先发一句话预告,如「接下来运行推送脚本,你的环境可能弹出执行权限确认,点『允许』即可」;② **被拦即停、零重试**:脚本被权限层拦截后不得重试(权限状态不会因重试改变),直接向用户说明并问「是否看到权限确认?点允许我就能继续」;③ 终端手动执行 `python scripts/share_push.py` 仅作为宿主静默拦截(不弹确认、直接拒绝)时的兜底,向用户提及时一句话带过,**不列为推荐步骤**;④ **话术宿主中立**:不写死任何具体宿主的权限界面名称,统一表述为「宿主会请求执行权限,请用户确认」。
## 版本与自更新 ## 版本与自更新
@@ -198,6 +217,16 @@ stdout 的 Markdown 依次包含以下章节。标题是解释规则的定位锚
- **更新提示(缓存制、不打扰排盘)**:每次排盘成功后,若本地缓存的检查结果已过期(24 小时)则后台线程拉一次远端 VERSION 刷新缓存(超时 3 秒、失败静默,主流程不等);缓存显示有新版本时,stderr 提示一行「技能有新版本 X.Y.Z,运行 `python scripts/self_update.py --apply` 可更新」。 - **更新提示(缓存制、不打扰排盘)**:每次排盘成功后,若本地缓存的检查结果已过期(24 小时)则后台线程拉一次远端 VERSION 刷新缓存(超时 3 秒、失败静默,主流程不等);缓存显示有新版本时,stderr 提示一行「技能有新版本 X.Y.Z,运行 `python scripts/self_update.py --apply` 可更新」。
- **应用更新(须用户同意)**:用户说「更新技能」时再运行 `python scripts/self_update.py --apply`——从 GitHub 拉取(失败转 Gitea),**先按 manifest.json 逐文件校验 SHA256、任一不符即中止不动本地**,通过后覆盖更新;`data/.license.json`、`memory/archives/`、`share/pending/`、`share/pushed/`、`.git` 保留不动。不得替用户自动执行 --apply。 - **应用更新(须用户同意)**:用户说「更新技能」时再运行 `python scripts/self_update.py --apply`——从 GitHub 拉取(失败转 Gitea),**先按 manifest.json 逐文件校验 SHA256、任一不符即中止不动本地**,通过后覆盖更新;`data/.license.json`、`memory/archives/`、`share/pending/`、`share/pushed/`、`.git` 保留不动。不得替用户自动执行 --apply。
## 盘面图(HTML,默认生成)
拿到出生信息排盘后,**默认立即生成盘面图、截图并发给用户**,然后才进入对话式核对与分析。流程次序:排盘(`cast_chart.py --shot`)→ 生成盘面图并发送 → 对话式核对/补缺 → 分析 → 结论。
- **生成**:`--shot` 一步完成——stdout 出命盘 Markdown,同目录出 HTML 盘面图与 PNG 截图(路径打在 stdout 末尾;`--html 路径` 可另指定 HTML 位置)。截图分级回退:环境装有 playwright 用 playwright(file:// 全页、2 倍分辨率),否则用本机 Chrome 无头截图;两者都不可用只出 HTML 并附降级提示,不影响排盘。也可单独调 `scripts/chart_shot.py <html路径>` 补截图。
- **发给用户**:以宿主支持的方式把盘面图发给用户(图片引用或文件链接);截图不可用时给出 HTML 文件路径并说明可直接打开查看。
- **重排必重生**:出生信息有任何变动(校正时辰、节气边界确认、晚子时分歧对照等)重排时,必须重新生成盘面图与截图,不得沿用旧图。
- 盘面内容:四柱主表(当前大运与流年并列对照)、大运/小运条、全量流年、当年流月,五行配色、空亡标虚线、节气边界与晚子时出警示条。模板在 `scripts/render/templates/paipan.html`,样式可直接改。
- HTML 只是 Markdown 命盘的图形化重渲染,内容以 stdout 命盘为准;解释时引用的字段名仍以 Markdown 章节为准。
## 文风与反 AI 腔(强制) ## 文风与反 AI 腔(强制)
命理解读是「一个人对着一个人说话」,不是报告。以下写法一律禁止: 命理解读是「一个人对着一个人说话」,不是报告。以下写法一律禁止:
+1 -1
View File
@@ -1 +1 @@
3.5.0 3.9.0
+28 -28
View File
@@ -1774,12 +1774,12 @@
"香港": { "香港": {
"lon": 114.17, "lon": 114.17,
"lat": 22.32, "lat": 22.32,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"澳门": { "澳门": {
"lon": 113.54, "lon": 113.54,
"lat": 22.2, "lat": 22.2,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"北京市东城区": { "北京市东城区": {
"lon": 116.4125, "lon": 116.4125,
@@ -16024,132 +16024,132 @@
"香港特别行政区中西区": { "香港特别行政区中西区": {
"lon": 114.1494, "lon": 114.1494,
"lat": 22.2847, "lat": 22.2847,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区湾仔区": { "香港特别行政区湾仔区": {
"lon": 114.178, "lon": 114.178,
"lat": 22.2791, "lat": 22.2791,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区东区": { "香港特别行政区东区": {
"lon": 114.2212, "lon": 114.2212,
"lat": 22.2825, "lat": 22.2825,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区南区": { "香港特别行政区南区": {
"lon": 114.155, "lon": 114.155,
"lat": 22.2486, "lat": 22.2486,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区油尖旺区": { "香港特别行政区油尖旺区": {
"lon": 114.1684, "lon": 114.1684,
"lat": 22.3145, "lat": 22.3145,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区深水埗区": { "香港特别行政区深水埗区": {
"lon": 114.1582, "lon": 114.1582,
"lat": 22.3366, "lat": 22.3366,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区九龙城区": { "香港特别行政区九龙城区": {
"lon": 114.1879, "lon": 114.1879,
"lat": 22.3153, "lat": 22.3153,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区黄大仙区": { "香港特别行政区黄大仙区": {
"lon": 114.199, "lon": 114.199,
"lat": 22.3391, "lat": 22.3391,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区观塘区": { "香港特别行政区观塘区": {
"lon": 114.2092, "lon": 114.2092,
"lat": 22.3237, "lat": 22.3237,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区荃湾区": { "香港特别行政区荃湾区": {
"lon": 114.116, "lon": 114.116,
"lat": 22.371, "lat": 22.371,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区屯门区": { "香港特别行政区屯门区": {
"lon": 113.9717, "lon": 113.9717,
"lat": 22.3968, "lat": 22.3968,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区元朗区": { "香港特别行政区元朗区": {
"lon": 114.0274, "lon": 114.0274,
"lat": 22.4442, "lat": 22.4442,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区北区": { "香港特别行政区北区": {
"lon": 114.1423, "lon": 114.1423,
"lat": 22.4988, "lat": 22.4988,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区大埔区": { "香港特别行政区大埔区": {
"lon": 114.1668, "lon": 114.1668,
"lat": 22.4484, "lat": 22.4484,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区西贡区": { "香港特别行政区西贡区": {
"lon": 114.2598, "lon": 114.2598,
"lat": 22.3171, "lat": 22.3171,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区沙田区": { "香港特别行政区沙田区": {
"lon": 114.1905, "lon": 114.1905,
"lat": 22.3823, "lat": 22.3823,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区葵青区": { "香港特别行政区葵青区": {
"lon": 114.1343, "lon": 114.1343,
"lat": 22.3666, "lat": 22.3666,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"香港特别行政区离岛区": { "香港特别行政区离岛区": {
"lon": 113.9413, "lon": 113.9413,
"lat": 22.2894, "lat": 22.2894,
"tz": "Asia/Shanghai" "tz": "Asia/Hong_Kong"
}, },
"澳门特别行政区花地玛堂区": { "澳门特别行政区花地玛堂区": {
"lon": 113.5478, "lon": 113.5478,
"lat": 22.2108, "lat": 22.2108,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区花王堂区": { "澳门特别行政区花王堂区": {
"lon": 113.5439, "lon": 113.5439,
"lat": 22.2021, "lat": 22.2021,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区望德堂区": { "澳门特别行政区望德堂区": {
"lon": 113.5451, "lon": 113.5451,
"lat": 22.1967, "lat": 22.1967,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区大堂区": { "澳门特别行政区大堂区": {
"lon": 113.5486, "lon": 113.5486,
"lat": 22.1915, "lat": 22.1915,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区风顺堂区": { "澳门特别行政区风顺堂区": {
"lon": 113.5368, "lon": 113.5368,
"lat": 22.1903, "lat": 22.1903,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区嘉模堂区": { "澳门特别行政区嘉模堂区": {
"lon": 113.5536, "lon": 113.5536,
"lat": 22.1567, "lat": 22.1567,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区路凼填海区": { "澳门特别行政区路凼填海区": {
"lon": 113.5645, "lon": 113.5645,
"lat": 22.1396, "lat": 22.1396,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"澳门特别行政区圣方济各堂区": { "澳门特别行政区圣方济各堂区": {
"lon": 113.5549, "lon": 113.5549,
"lat": 22.1264, "lat": 22.1264,
"tz": "Asia/Shanghai" "tz": "Asia/Macau"
}, },
"_aliases": { "_aliases": {
"乌市": "乌鲁木齐", "乌市": "乌鲁木齐",
+377 -37
View File
@@ -1,16 +1,16 @@
{ {
"files": { "files": {
".gitignore": "1e4671dee2d3123a45609ed82a4329531e0d41bf1b6895ab169ecd8813cfb8f5", ".gitignore": "6afd9b30daced03071366d6069e30682c6d4bccd6e0aa08d17936c8d373e8789",
"LICENSE.md": "6b839540e0fd4ab75530ec31fc5c3cbc3c2d5de5fe85068ef1c0901e54be9315", "LICENSE.md": "6b839540e0fd4ab75530ec31fc5c3cbc3c2d5de5fe85068ef1c0901e54be9315",
"README.md": "1e11e5d19856fbd9bb15068c74e184617a10b2e0b18c7e42d9b617cd0d8f534a", "README.md": "adb4481f20360c66e67fd89076c1535c577cdf85f34122d2dac1ff727dd81c38",
"SKILL.md": "8b493ae2236b5941c88e282d4793126487e4d81a6f3c24976020fb26e50cf67a", "SKILL.md": "fc478ff1416acf0aff7ef8ba84b9136a23acd2e02606b3f9fb90c84d979a9e7c",
"VERSION": "76120c1f2c4311c2154c22a6b58e00e411e0ebe76afae0daf608d9196c61f114", "VERSION": "5c0f9e710d6f59bb59980444f3dc58886fc564a0a2d8a1d534d3296be2c67da8",
"data/.public_edition.json": "e8692c45d512c78903fc89a924d0e6d4dc9b95a78ca6b359bb7a5ef5c946ffee", "data/.public_edition.json": "e8692c45d512c78903fc89a924d0e6d4dc9b95a78ca6b359bb7a5ef5c946ffee",
"data/cities.json": "00f17905c8843218162e25238a78aeb4c4a3bb5424b611cc30ed9e436db31854", "data/cities.json": "9ae91a498d2b12e5c2f53efc5dc4989e891cf138b06c9b593796427cdc272393",
"memory/README.md": "b3cf2c58a8418a8c1a54243c2e09fbdb42f31dcd48ba8c841b74f1234c7fe063", "memory/README.md": "a979f985dd87e87bfca49676ebf10a537d299b1eeebac121c506c320c88a3afd",
"pyproject.toml": "58e415e53d2418721fa07bd81b829e4bc5bbfb2155a446bce6222d3f7afeda12", "pyproject.toml": "fab09f4f2de9f411994cd3090c3cd1cc5af7ba8e9bdf882edd5417153d4f966c",
"requirements.txt": "46a4c971b192cbf2c4972dd0f420e7928b7e44cd3cb9f7dc5a36efb321ab6fd6", "requirements.txt": "46a4c971b192cbf2c4972dd0f420e7928b7e44cd3cb9f7dc5a36efb321ab6fd6",
"rules/00_总纲_取格.md": "829a35454f5c91966ecafe4dd2113b913588933efe08d0e1c127ae82ccec0da8", "rules/00_总纲_取格.md": "949f7eec5e2d6da87d2fc775b6bf3ade4b69c18ef2778d015634699db8b6bb39",
"rules/11_正官格.md": "385193d93dfba89a935ca8907098f70548ad1fc12ab6a07a5280fd04224c83b6", "rules/11_正官格.md": "385193d93dfba89a935ca8907098f70548ad1fc12ab6a07a5280fd04224c83b6",
"rules/12_财格.md": "8d2bafdf859d51e4d3932e0dbcddb0eb6b300cbef412b3b17a8b8232a0cef8c8", "rules/12_财格.md": "8d2bafdf859d51e4d3932e0dbcddb0eb6b300cbef412b3b17a8b8232a0cef8c8",
"rules/13_印绶格.md": "57e6e02a47b464ed0983145f01e7dd457ea34be8d7beaccc851f34680b6b10e0", "rules/13_印绶格.md": "57e6e02a47b464ed0983145f01e7dd457ea34be8d7beaccc851f34680b6b10e0",
@@ -19,18 +19,18 @@
"rules/16_伤官格.md": "c70f90d7d6823bb330e8f53141408e304b6761b3e0ec6adfc9fadf109a22fbf5", "rules/16_伤官格.md": "c70f90d7d6823bb330e8f53141408e304b6761b3e0ec6adfc9fadf109a22fbf5",
"rules/17_阳刃格.md": "51055e7c0edd607f6fe98425b7c82c69fb9ec88f2c058fcd3e5aa04d6ede8c0a", "rules/17_阳刃格.md": "51055e7c0edd607f6fe98425b7c82c69fb9ec88f2c058fcd3e5aa04d6ede8c0a",
"rules/18_建禄月劫格.md": "f0b400292d22cb3b38ab5011bda8080d511a065c661305f7a9c0485f1c57705c", "rules/18_建禄月劫格.md": "f0b400292d22cb3b38ab5011bda8080d511a065c661305f7a9c0485f1c57705c",
"rules/19_杂格.md": "78939bc9d61621a427fd41a31156086b3ae6675eccc77c899a3aa7443408ef26", "rules/19_杂格.md": "95131e31bb86c92639475898f740137115c03295f8443cdc93fda323026a0429",
"rules/89_旺衰扶抑.md": "758180d5ee0aa46f4b22e8817baa831974c9c3b239078ba51e0a7b9016f7f47b", "rules/89_旺衰扶抑.md": "758180d5ee0aa46f4b22e8817baa831974c9c3b239078ba51e0a7b9016f7f47b",
"rules/90_行运.md": "510c243e84f3cffacf0a85887b8cc8650bb009083112390c50d5f8ab8c969587", "rules/90_行运.md": "6b6fa85731c68eaf309e6ed8452dd13a7b0b79677b5fb6481479a9760e4d1700",
"rules/91_何知事类.md": "3775448e1830929dbcbc90cacf1065a4ab0592c9c4ee984c09ec187911bcf2c1", "rules/91_何知事类.md": "d3236bffa2221e7d3321fc3f3eb34d954dc4bce903660ddf300bcd32c95a3823",
"rules/92_调候.md": "8d37d2cb722ae4b581532b7b73218fd648f1e75d8e16c6bedbabe0f93a2e1946", "rules/92_调候.md": "8d37d2cb722ae4b581532b7b73218fd648f1e75d8e16c6bedbabe0f93a2e1946",
"rules/93_性情.md": "c9d3003cf4e0869e5075623e34bad41faa294623df1b2481e0f30b80fc61cec6", "rules/93_性情.md": "14b2e1d29f703b73d4346b9b9bc5d4a5cb3722ec92ff0c387f000a89de6b962a",
"rules/94_神煞细节.md": "96daaac4ff70ece5d1fb7b4eea3da458ef30578933d770b9ce7e1fed067f78a2", "rules/94_神煞细节.md": "96daaac4ff70ece5d1fb7b4eea3da458ef30578933d770b9ce7e1fed067f78a2",
"rules/95_禁则.md": "c151aba005c1789ed5e75eb26fcccab4b636035d8f035fa4e0fc18bcdcbf6251", "rules/95_禁则.md": "389d8311d014eac098e88adcce78523e29a470966de5809c62197ef4f8f7609a",
"rules/96_六亲.md": "96cf362bd180558352d0181401ac8e297ac89c09d91d1098972a9d1c40468198", "rules/96_六亲.md": "8ce87573c10ef19bcfc0f1cdbaebbe4f2964a95feea41dad040b33c3ee03d6d6",
"rules/97_女命.md": "52962aa666faa3fa2a5175d352380df14f54fefb8f57cfe0761779ad51e18696", "rules/97_女命.md": "52962aa666faa3fa2a5175d352380df14f54fefb8f57cfe0761779ad51e18696",
"rules/99_附录_干支通例.md": "da906502391833eb1744ff0145a03c7d1e10781ac7156034632dc5994da0d2f4", "rules/99_附录_干支通例.md": "da906502391833eb1744ff0145a03c7d1e10781ac7156034632dc5994da0d2f4",
"rules/README.md": "80a77a744fcac31673dd7eb9f84cb80b83c9d61c4d0aaabcb39e86f98f661c2f", "rules/README.md": "91ace5436bcdddfd05321d903d7e7e06290910b7df9721a97bed53727b8a044a",
"rules/sources/README.md": "183ba554b1d89c16b19fb65ac8a4d0614069c865676fb4c1bd20d95b5581c209", "rules/sources/README.md": "183ba554b1d89c16b19fb65ac8a4d0614069c865676fb4c1bd20d95b5581c209",
"rules/sources/三命通会/00_卷一·原造化之始.md": "6329058dd08aed5f41d1111da99027cac38761aeea7120a84eff02683426294d", "rules/sources/三命通会/00_卷一·原造化之始.md": "6329058dd08aed5f41d1111da99027cac38761aeea7120a84eff02683426294d",
"rules/sources/三命通会/01_卷一·论五行生成.md": "c9db87683a6d3f9b7eea665e3814e383e11a69b608114d9317beb2a2c56825f8", "rules/sources/三命通会/01_卷一·论五行生成.md": "c9db87683a6d3f9b7eea665e3814e383e11a69b608114d9317beb2a2c56825f8",
@@ -563,45 +563,61 @@
"rules/tests/golden/93_性情.yaml": "acfefd4165008a145152fd11cddfbac92d4a5cd7b1abfd68e31ac73b1923dd48", "rules/tests/golden/93_性情.yaml": "acfefd4165008a145152fd11cddfbac92d4a5cd7b1abfd68e31ac73b1923dd48",
"rules/tests/golden/96_六亲.yaml": "dd45a0dd94ebb2a32e2e2d2613dc99fc6335183cc0832abdd69988a1d074ccdd", "rules/tests/golden/96_六亲.yaml": "dd45a0dd94ebb2a32e2e2d2613dc99fc6335183cc0832abdd69988a1d074ccdd",
"rules/tests/golden/97_女命.yaml": "dc229eae558be6592f392be4f71e72ec6650d64590c9bac3361febed9ead9b89", "rules/tests/golden/97_女命.yaml": "dc229eae558be6592f392be4f71e72ec6650d64590c9bac3361febed9ead9b89",
"scripts/_license_gate.py": "4f3a24685c86abc6c66a158b441b89e2738bd14f5d63e8bdd41489654a29e837", "scripts/_license_gate.py": "1caa771382848a5f2c177f02a6b90f1e736ba021d97dc803231f7e438d321226",
"scripts/_memory_store.py": "690e088a208ee5aeb9f66e6d4b5d4342f44bfc852bad51870cdfe397fbdf7660", "scripts/_memory_store.py": "690e088a208ee5aeb9f66e6d4b5d4342f44bfc852bad51870cdfe397fbdf7660",
"scripts/_runtime_guard.py": "c4f9d00acbb5b2ba49680b23ed4f846c60211e67b9d58950079b3e8909dcfe81",
"scripts/_update_sig.py": "9bb3521b950ab834c770e313a98c9cc8f7e997997540258724505af774a4abe6",
"scripts/astro/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "scripts/astro/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"scripts/astro/day_boundary.py": "5dbd942f08a009400c2fbc60faa77c9d9a0c315d01e0cc6edf3d7b2efc09d2c3", "scripts/astro/day_boundary.py": "b0ddd270be439b51fab46595661d2f9b11d83b52acda9c2f1ec6f79fec7aae78",
"scripts/astro/equation_of_time.py": "ee9331022b4ed35d407664e97b5ce9ce99167a06ce7cb8c9ffba5497a437da8e", "scripts/astro/equation_of_time.py": "ee9331022b4ed35d407664e97b5ce9ce99167a06ce7cb8c9ffba5497a437da8e",
"scripts/astro/solar_time.py": "35b45edc365083a6ce90afe076176c6f3e798509e76d3f03819fd1845491b153", "scripts/astro/solar_time.py": "35b45edc365083a6ce90afe076176c6f3e798509e76d3f03819fd1845491b153",
"scripts/astro/timezone_resolve.py": "3a287a64bd50736ce91ac15876e88edeb98745eb6d0459cf18e7e6ee3c026aba", "scripts/astro/timezone_resolve.py": "3a287a64bd50736ce91ac15876e88edeb98745eb6d0459cf18e7e6ee3c026aba",
"scripts/cast_chart.py": "bc08b53ab50f7d9e51b4d7e84deb3c2660040c025dd03c578f7fd51aeba6f315", "scripts/cast_chart.py": "f5fd58dffc9a66d85d018740714b4b7e497cbc13b75c9bf4e901d827ae5f026e",
"scripts/chart/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "scripts/chart/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"scripts/chart/ganzhi.py": "94d53d2a8cd7674312223e976ce6e1379a6fbb53873253b34963b3e3d645508e",
"scripts/chart/luck.py": "d930f3f402cf814eaaa10fdcaa0a8be4a47411e6961dd0324ac38a8f898b4299", "scripts/chart/luck.py": "d930f3f402cf814eaaa10fdcaa0a8be4a47411e6961dd0324ac38a8f898b4299",
"scripts/chart/model.py": "8279145da10901cfb1a7b4823762074169dfd554bbe8ce39ae15862334b001f6", "scripts/chart/model.py": "8279145da10901cfb1a7b4823762074169dfd554bbe8ce39ae15862334b001f6",
"scripts/chart/shensha.py": "1a9a59fa35ad5f2e2700d6b1a0155979dd7bf6f9fea4637356bfd41c5eae7e05", "scripts/chart/shensha.py": "9db4a0e4cfaaa667efa9bbdcf7b8fd3d0c461cafbdf125e037cb467d75803939",
"scripts/chart/tyme_adapter.py": "06a46f16efc3d745edb5f35bbdcfee1c78552a44235fc85de0af3eb6c163eaca", "scripts/chart/tyme_adapter.py": "5a8831050738d41e7a27a9bee55f86a84b351b0e9a203a35d12f383a9f9ef801",
"scripts/chart_shot.py": "0096a01e64128a2628ee0e2d3bc211d93fbb0e2b17a49a34f4f2f9a37da4960c",
"scripts/geo/__init__.py": "1211b885ec767b399472df572f970b07d6d028a5889af49fe50f6fc1a2a0cf7d", "scripts/geo/__init__.py": "1211b885ec767b399472df572f970b07d6d028a5889af49fe50f6fc1a2a0cf7d",
"scripts/geo/cities.py": "9d393608c03a2ad5c7352939e70ea717dae5dd4bc833dfdd0e2f663940c61fb5", "scripts/geo/cities.py": "9d393608c03a2ad5c7352939e70ea717dae5dd4bc833dfdd0e2f663940c61fb5",
"scripts/memory_lookup.py": "853c815a97b457ca20d5b4c03aff234dfb218a58a5511f6c1a55dc635de31c90", "scripts/memory_lookup.py": "23f02b04636924a1f6872d338e85ee2145ed1cde742b3e2e5b6ee4592ff92d50",
"scripts/memory_save.py": "42638841cceb586783b8764eacff91a8518d8df7dfe99b3919b3caa5a432e0ec", "scripts/memory_save.py": "eea51e7483966630c89705094b8a56c14f999573e7b06f5bb911bdd6d0accbca",
"scripts/query_shensha.py": "1d77205c8781676f3536bbeb2f36d397b825ff3065a4b968344fb95e5b8859dd", "scripts/query_rules.py": "22fc054cd0b92a185f11d644d304c20bec6a2a2f536102df8ee135abf56e4b43",
"scripts/query_shensha.py": "e4c852c8e56fb8b32bde0fb376d985647bcfd93a74fe30fd34c5884d2ab77dc3",
"scripts/render/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "scripts/render/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"scripts/render/assets/lingyao-logo.png": "3d63f71ff9af61a443708f2665d1331737bb567a4e731d049676dfeb4710e323",
"scripts/render/assets/logo-font.ttf": "0b3a28b91d30276a68501a837ce7c1874274276c21793957b83f1efbb4a9264a",
"scripts/render/assets/qun-qrcode.jpg": "437854ff4ea6d2b3452b16371afbba1b9bb97e1f2c7fdbc77580ae2cceb3cbaf",
"scripts/render/html.py": "f6054c3fddc9223e32061bbc2bb88c01b9888606baf118ab3ddfb1d11f11ec14",
"scripts/render/markdown.py": "4b2bcc3fc6581728d74bbaa357bf1db2e8aec1d3ec54c2c27ca645b6c5179977", "scripts/render/markdown.py": "4b2bcc3fc6581728d74bbaa357bf1db2e8aec1d3ec54c2c27ca645b6c5179977",
"scripts/self_update.py": "95dc0302ca2b78d71b2893ebaced7e233dbc00944a5e3c5b06081b5c9a749f8a", "scripts/render/templates/paipan.html": "62fc3fcf355089cbedfc9e7b39fae54bb93e91cab73be3c376145b2643853a28",
"scripts/share_export.py": "21396143ad5cc2d244c7cc060a3ece25702594465689a9f12438dfe92de3296f", "scripts/self_update.py": "c7bbb58e750fdbbecad00936948e37d7ff7a47c57e22d116c537c104aa74e8de",
"scripts/share_push.py": "8a367a3a4aa1bad27fbf3e9b241ebf69bf687a134045a06842e06047b58458ae", "scripts/share_export.py": "eab38048e3737de1eb8731e6f4860f4061d29dedb9e9f3a1c9d9ac44ec200c20",
"share/README.md": "42ebed92285752af93c7c7af5eb4b6e84ed836408d0cedb57e1b32c796746b26", "scripts/share_push.py": "307e83747b8d244f20632a198b7bfba51352a6b6bf0a8f98b73c904e719a6b89",
"share/config.json": "22a5615dd7db5aa688e1ed8e464874c70d90d21e6aa126e214b9c7896b99c7cd", "share/README.md": "adccd0f7691bedd64441b11cdd8ce66e20adce55fe4d8de1333f531b689f82b8",
"share/config.json": "b0747cb29b01e65c79e612062e1d572f6658c3046ae8bb5d97020ab2d7c6f04e",
"tests/golden/history_tz.yaml": "3fb74e90c4f53abebaac0a5de8825ac3794fc0b5b41dc84121201e70cecade47", "tests/golden/history_tz.yaml": "3fb74e90c4f53abebaac0a5de8825ac3794fc0b5b41dc84121201e70cecade47",
"tests/golden/longitudes.yaml": "6fda1e6b632d29c135362c9273b931c4416c9f24c31b07e2a7baadc6e2077bc2", "tests/golden/longitudes.yaml": "6fda1e6b632d29c135362c9273b931c4416c9f24c31b07e2a7baadc6e2077bc2",
"tests/golden/time_boundary.yaml": "637090a1c081b9b824fc0073d29dad073d29138c3b48082bdf41ce77f5af3b37", "tests/golden/time_boundary.yaml": "637090a1c081b9b824fc0073d29dad073d29138c3b48082bdf41ce77f5af3b37",
"tests/test_day_boundary.py": "0e6c9ee32177a178f21a7812f83032abe4d1f585de48d07d21e2b432bdbcbd04", "tests/test_chart_shot.py": "7923d2868ded898331a65152b237cf014fa49b180b08706584ff7319f88b7a33",
"tests/test_day_boundary.py": "6e2038152738a02642a3b04edfaf542328179998e62c1960a59389a527868850",
"tests/test_e2e.py": "e324930fad582dc38618fa3599425bb48ec718beaf426efcb76531911c9464fa", "tests/test_e2e.py": "e324930fad582dc38618fa3599425bb48ec718beaf426efcb76531911c9464fa",
"tests/test_equation_of_time.py": "8a3a1baf7e61c42015405cc80fc0bdf4fd9bc732d440bc156f9c92c94e30f790", "tests/test_equation_of_time.py": "8a3a1baf7e61c42015405cc80fc0bdf4fd9bc732d440bc156f9c92c94e30f790",
"tests/test_license_gate.py": "ee44226b75620b3965ba52cc2a0cc5404fbff37822fd96a6faf2aed89d07d47e", "tests/test_html.py": "d40f4558ddfda156706a0c3d4c52c794fbc1e59427acdc93bcdad7df34217638",
"tests/test_license_gate.py": "6694f45972e08b0e028f3af49dbcb825972031c6520a5714cf58a01d3a44fc30",
"tests/test_luck.py": "821f98bc19ab1e920353de58c6ffacac5d757c887c690a2d596f51c1485b21ea", "tests/test_luck.py": "821f98bc19ab1e920353de58c6ffacac5d757c887c690a2d596f51c1485b21ea",
"tests/test_memory.py": "d3decfdc8d7c5bbfc4af5e3aed93bb3c53ab09071b682a0f4808614ac2cd3c6f", "tests/test_memory.py": "bec4427e3e874b655583a6d9a69c85a590aab15c09ad645e6f7ce2a7139403db",
"tests/test_self_update.py": "455461ba121814c8cdbe98bb2d31cd2dac630ef111eafb23118583c42f65a71c", "tests/test_query_rules.py": "bef99f53e088969373ea38208557861fd1ad4b7d2e12355175a8afb125fa388a",
"tests/test_share.py": "399f20da22689d00e71eb78c76d60507060c29a7d68865e6b0e9f591d19be871", "tests/test_runtime_guard.py": "6116760f1f19437c806f62e23d6360ed3e70530a903daf5881482984ec86a18d",
"tests/test_shensha.py": "b8a20d264e18c79f1fe546281381b0d929543af44ec68dc890ef8b64efc625b0", "tests/test_self_update.py": "87a0fdaf28132e70fe407a552ff77f5911e13e67ca1d568581a273eaba875712",
"tests/test_share.py": "7938344415cbba95f683b2a09ecec9af28d00658f475ff0a56563dd13beff630",
"tests/test_shensha.py": "2aaa181279739356828f05a2175027b0ae711b322b4bd0e60d5c5e62538bcac8",
"tests/test_solar_time.py": "f072e5ea82fd0cb331c8a4fdc6dce08148cd9ac81ef9fe4506196fa68a42d1e4", "tests/test_solar_time.py": "f072e5ea82fd0cb331c8a4fdc6dce08148cd9ac81ef9fe4506196fa68a42d1e4",
"tests/test_timezone.py": "3698878999d232bd431d6908c42fe8f4845c696da6085731abaf2f74017d722d", "tests/test_sync_tool.py": "b96cf8ac26480cc7431c95335095b77f718d240caf04243e844d2b5c10d7dd76",
"tests/test_timezone.py": "8b292cc8e5649b8af3e9e1a0214fcd28c06a2aef28f3529874f43c3c6d77ba42",
"tests/test_update_sig.py": "3bfd6ce28a699afe233fe51d9d9c7aacc308f54a4dcb9f9e7ecd272bb0a9b5a2",
"tests/test_version_sentinel.py": "9b2bc603a2e86aa33d904f1381ecd8ab41eb0e759803ec47122d662c10a7df83", "tests/test_version_sentinel.py": "9b2bc603a2e86aa33d904f1381ecd8ab41eb0e759803ec47122d662c10a7df83",
"vendor/VENDOR.md": "dbf017616ac2fda4fef56ce95e3610e77457108b7fa426136fd25764d78fa3c8", "vendor/VENDOR.md": "dbf017616ac2fda4fef56ce95e3610e77457108b7fa426136fd25764d78fa3c8",
"vendor/tyme4py.LICENSE": "e017c12d3476152144886c06e12b67277bb64e922b88c902b76ac02a84ea1c9d", "vendor/tyme4py.LICENSE": "e017c12d3476152144886c06e12b67277bb64e922b88c902b76ac02a84ea1c9d",
@@ -1263,7 +1279,331 @@
"vendor/tzdata/zoneinfo/zone.tab": "e2e8e31c4e10f44576c79345e76060591dbb3eef6ce14e006afc8a373caa9593", "vendor/tzdata/zoneinfo/zone.tab": "e2e8e31c4e10f44576c79345e76060591dbb3eef6ce14e006afc8a373caa9593",
"vendor/tzdata/zoneinfo/zone1970.tab": "5f23781702bf51408ff1581daa109ab3b9257fb433b1554e579d92172892c0cf", "vendor/tzdata/zoneinfo/zone1970.tab": "5f23781702bf51408ff1581daa109ab3b9257fb433b1554e579d92172892c0cf",
"vendor/tzdata/zoneinfo/zonenow.tab": "7f9d1c11445af7a17862c20a9081226d31a09a1730e270ff59a34c8d2b4c7f7f", "vendor/tzdata/zoneinfo/zonenow.tab": "7f9d1c11445af7a17862c20a9081226d31a09a1730e270ff59a34c8d2b4c7f7f",
"vendor/tzdata/zones": "28d8f3eb25839095fa8a209997bb20e822ebfbebe21e60edc483a3d5e20dc881" "vendor/tzdata/zones": "28d8f3eb25839095fa8a209997bb20e822ebfbebe21e60edc483a3d5e20dc881",
"评测/README.md": "7455988261f52b6d4158527be1652cd5001576eafeedd4e9c75b41b63f25777a",
"评测/ai模型纬度得分/deepseek-v4-flash/with-skill/得分.html": "642386a9f3f36027cd2fa0bfbd7e337be678827936f9ca48d7e6f87b53787c52",
"评测/ai模型纬度得分/deepseek-v4-flash/with-skill/得分.json": "e582453300a80900b38d4739f5f473e164540ce59b55528588f1ea0f95d87877",
"评测/ai模型纬度得分/deepseek-v4-flash/with-skill/得分.md": "3857a08b8a8fef8ed78dcb1bbe7b7e84a00c9588b584b98fd884927669ee7634",
"评测/ai模型纬度得分/deepseek-v4-flash/without-skill/得分.html": "ab1cd088cee9cc8fb302f7d6f17a888281f47d2fa105ce1d0d219554c3fb0c46",
"评测/ai模型纬度得分/deepseek-v4-flash/without-skill/得分.json": "a405c51ad260b1af8a99b901f8ea848772b9d989f281636db8d491aa6b6798ca",
"评测/ai模型纬度得分/deepseek-v4-flash/without-skill/得分.md": "7e5e5d2ea5880728fe894156c9951045143bb072d16d2c38ad96561b5afa083c",
"评测/ai模型纬度得分/kimi-k3/with-skill/得分.html": "ee4e62fe76b07a79e33b9b68ad86ce06b1a9f1cf108d4bb4b9eb0a9190bf4b28",
"评测/ai模型纬度得分/kimi-k3/with-skill/得分.json": "020ecd9ca216b2cc70089eeb3c213e3909eb4b84e9de876ef6e119c5c7bba54f",
"评测/ai模型纬度得分/kimi-k3/with-skill/得分.md": "d56465109a0d72f131a6e398c988f49041e758ec580f34ebad4795136146a8f8",
"评测/ai模型纬度得分/kimi-k3/without-skill/得分.html": "27beb06cdda91fac42b738e4f755560816b35cf1b3a044c0922aee91705febd1",
"评测/ai模型纬度得分/kimi-k3/without-skill/得分.json": "cb072934cf794096eb2934b11ade307ddfb7bc612fd839aa3337f6eebca4e6a7",
"评测/ai模型纬度得分/kimi-k3/without-skill/得分.md": "94148e8925688303936e49d33fc235a0afbe16b3971625bf03dde861f41b7dc2",
"评测/ai模型纬度得分/qoder-agent/with-skill/得分.html": "f4fbb15d7eecd10b8938975868255b6ce486d6816c65abf1505724b5304526f5",
"评测/ai模型纬度得分/qoder-agent/with-skill/得分.json": "718016b40e40a24ad0bc7cfa3be84d6495fa590f196fa31727545635c873734d",
"评测/ai模型纬度得分/qoder-agent/with-skill/得分.md": "fd115bb745fe333bfeaf40a91600fb0504552ce0926b7a56e74f88d59c449161",
"评测/ai模型纬度得分/qoder-agent/without-skill/得分.html": "a763f5d19def764399247afc27a9c4bd217a3d53df5f424babdc695905e1145a",
"评测/ai模型纬度得分/qoder-agent/without-skill/得分.json": "5f1daa853d27ba9aab852f3d089cdba423e36426f50960b30907bcb61b3ea8cb",
"评测/ai模型纬度得分/qoder-agent/without-skill/得分.md": "f2e48d3a3f5189e286e45803b3116807e18026e0aea5fa6bf5e683506780ef52",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_female_19670827_P034.md": "163f5280828b2d9686c448b8497190c520d4ff95a99a55d31da603e8e1c6cc38",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_female_19750107_P030.md": "301c5f81310ad69d53ee47bbc1827acff42da7ffed4218e9a11e7f1cf0fc4c83",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_female_19841220_P027.md": "edd65932f39f6cfa11c9add10b8845e26de93429c8435681613190030131dab5",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_male_19530127_P031.md": "7b2e130b3d37d3995a39d8e018a58f3cf8882265616e79b0beecfcdc783188d9",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_male_19540318_P025.md": "69984efbc43a4454f6a537d360d6c5f7c880d3b5b10d4a4b656ac1076ce9f2ab",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_male_19700723_P029.md": "88dcdd8c4766dfce4c8911cc947063eb6c6999d8b5db660f56d009d2dcca4a56",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_male_19710910_P033.md": "def75a7ad2a83b245d8e891bff452002d66bb3db859a3abd6daa4ce592cc21fc",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_male_19770706_P028.md": "56416ce68d5980abc1306380519fc0173b533d91059c795a02b794bcfaa93d2e",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2021_male_19831019_P026.md": "2830ce881c3108e54ad117954b978c7529a5f556ecb7f1aa6bd92935124bc572",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_female_19771026_P020.md": "0caa6a232820b5cf3ce3bc20b42583aea80a965603553f06644e5c7a349a3af3",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_female_19810526_P018.md": "94cd6eba2b4d41ab80d9abbae3c84a8424c6654592f42f200cec75a93ee9ad35",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_female_19841209_P023.md": "960cbe4b71ea48598fdc06427f395b86c571e8165ba03f2100e68e26cfbfe960",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_female_19900523_P019.md": "cadcbb45422a9a6db026bf198dea5dbbf5e40d471cd1f73e097ae9cfc6a90457",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_male_19740428_P017.md": "0c82655daede248181b702af5fd598296537a54987f6eb9ca5e1b878b3948675",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_male_19810617_P024.md": "8d3960e5af591c3fc129f53b4226ae64376482b0e8df69ff3a8852311989a4bb",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_male_19831101_P022.md": "263a9033dae90125a9f8f2e15ccc845f57b81cc3c11d98c3e1c55363b8ed1b27",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2022_male_19850629_P021.md": "2ef4a50688f1079320fd4b07fd6c2d5755c12637810370ef7eeef8d91bfdb993",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_female_19581027_P014.md": "62579b008d5c478f316da248d94ba139993aa6e18134bbaa870afd473a822109",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_female_19661018_P009.md": "5d8528156c53849603bd26c2ca3fac373e26722426c1a9e38241ee471b89c2e9",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_female_19780405_P013.md": "971652b3427feb1fcbc8856a424b4270999edf8f5be59f9d085659147a6dc3f1",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_female_20020601_P015.md": "d165226c07e3f939b7673b763ad71a82058f51701181b224f99989464010263a",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_male_19560311_P012.md": "b5c647a977424cdc42e187ccf1f94434ee0d35afb974ab897d5962424a7ec3fd",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_male_19620806_P010.md": "43766884563b6a5ac789c5f5fc85aa47a1ded8c713372fca6dd8542007619598",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_male_19800711_P016.md": "a9055c62b3c933a3d7600efc58646a14b1281aae809b34f642a702d2d4273338",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2023_male_19860424_P011.md": "f2afdd382a1911dc35e333e06cca0c3dacebcba6520aaf90acdcddf64a951ada",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_chaozhou_male_19720108_P002.md": "2f9b32a4d199f8ce363ed8f0ee51c0e2f450d550d9082ae7a8a9aadaec3cffaf",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_female_19800921_P007.md": "2cec0c34c771ec03bf5a1e0dcd00760c92676421943b366ca6e8afb0748417e9",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_female_19830326_P006.md": "26738984566c41561d46aa3faa94c909f040db6bcda8e3fadd9e9a7937a0dde5",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_female_19831028_P004.md": "08d5c1dfaf969bcc7a0282d9b2d83d7667c05fb27a0705a39be0c565fe8e0a85",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_guangdong_female_19800824_P001.md": "19ea74812fb493daaebf11ec8f243f7ac448c76bdfea832886a9864f4c7c23d0",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_male_19611230_P003.md": "eecabde780a53890a98364009c5017473571e0e7a843f28b60a1652fdd28011e",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_male_19710412_P005.md": "650419e7e140c380321aef0c089da18392e79041f73fb9e46f750215f220b480",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2024_male_20070131_P008.md": "47128c5b8f9d1d03a62d3b0988bbfee40cbebead1238b8ce34858b2cc89f8009",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_beijing_male_19700722_P008.md": "1da527b3c22d294f2adcaed0cffb14ed008d066d9455d8a645546f434a09eb70",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_guangdong_female_19511114_P001.md": "1f0c1f9028073576a386153469cd63c2c4de8ee0d2a0e589029636e9e5515bbc",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_hongkong_female_19870705_P002.md": "b333abb851b47f0493a368b2ce8cf3bbd8780405f70abf133bcfb3ca55d2bd15",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_malaysia_male_19730824_P006.md": "c46293d1422e679f65d5eee22ef2adbd09a28505aadf9141c7c5aaf55756426b",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_malaysia_male_19880110_P005.md": "ba3bda5c86264f64e5d259e28df7f41e7f0a15ca2db38764c5928e235cd9097a",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_miyazaki_male_19830421_P003.md": "ade59b6177429942066862cc26e6d57403e110eeb47b80075edce9f812339783",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_singapore_male_19930408_P004.md": "c432d85f3118d66e0af9057db073286aad8d9c36ef31405b372c8ef0c2be4bf0",
"评测/ai答案/deepseek-v4-flash/with-skill/contest8_2025_taiwan_female_19880215_P007.md": "259691ab8ecc3d501029cd7c575822a088681de4872e6863f0509684cf944725",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_female_19670827_P034.md": "60044262a3c3e8dd5cd1220fd2c492588e19de67a8b04df73888147a6eef4ea2",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_female_19750107_P030.md": "b75f58254c7702925725e5908af1086ed32192523b8fa431731a6deb38f7f2ee",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_female_19841220_P027.md": "be007e8b6ab46a1a6723b9e42ec9d4aa8740da8d9d96f4c2cc6a7cb720895a54",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_male_19530127_P031.md": "24b9fb86094a202391fa3eba871f8c6eb79e3f33e16026d39a320c61276335a1",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_male_19540318_P025.md": "5ff9828d2cc677126ad8f6bf0216fbfd51873b97f954281bc92e7e857bfeb3c1",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_male_19700723_P029.md": "25bfc039a3dc421be2ad59439ec948a82fb2e82c21de1c4c5b9ce6ca12bcfb98",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_male_19710910_P033.md": "c63b0b04f3514b46989f038952f00a571827d7bad0926e370a39c8cf7cedea9a",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_male_19770706_P028.md": "6bdbadfb3c9f127b781b17410d75c814eff58cfd2141048554d1b172c724eb37",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2021_male_19831019_P026.md": "d42727e82d552fe650ebe5e7a3a79f0f331dac650d9adf2db2149075b8c83208",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_female_19771026_P020.md": "785971f2c16c21684c57e37c2ca24ad974ca959c9d6363f4e3a6262cecc431de",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_female_19810526_P018.md": "efd2953d20ecc615a47440092748766a1d1da4f44b11efdd5416f6b290214055",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_female_19841209_P023.md": "d9ca00c96539fb3e1562508aca72ef11d0cd0a577ae2167061c648753bfaf574",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_female_19900523_P019.md": "8f9c80e044d598acfca420e8e72eecc0b7ffebc8b268225169021c8ff2531eb1",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_male_19740428_P017.md": "671a8366bb75399b56078e50efd3fd264439441a7eb3bb3cbd314b0d2dab82f9",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_male_19810617_P024.md": "a51ab1d4fadfd8d8992c48a81d495c7cbee4e7d4ae0d1b982358eb1a06858713",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_male_19831101_P022.md": "c4d159aead377a18b8c72d31e78643905205e0da48da05d961e237872217816c",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2022_male_19850629_P021.md": "6e855f7a957459dd2438baa96e7f0fa8a518ba8bcfb0f2fe23dd87b0500fdfd1",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_female_19581027_P014.md": "9e16d3319ec69695a9a56b6ad23b67d65be84a5b43399b42157faf60087577a9",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_female_19661018_P009.md": "4e26969607c2090262245f8f2c7636e690c7d4f137d182901bd132c3290ab5c7",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_female_19780405_P013.md": "a26e28c6b1cd652f52ed96536035921b174945c9502235c4f08340be87ac56d8",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_female_20020601_P015.md": "0939b6bbce7c62634796c72c9592f28d4b35336274562300355b2d0719d64149",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_male_19560311_P012.md": "6c5d4a54904925f6e7131dbecf5c94f01b590d8c4042a38c0642dc58baaacf20",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_male_19620806_P010.md": "ad24eb8c944919fd9fca9038ff35451ee45c5614b541a703be8545dfb90fb623",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_male_19800711_P016.md": "ba2c134c4de084791281f6e274c6abaad025d5cd14c7d51afc098d07d1a5f5b2",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2023_male_19860424_P011.md": "900f320228243091d02e961ec3cb7025bbc452610db580737ab60605dfe79189",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_chaozhou_male_19720108_P002.md": "5e520ad500e1f1c7c20c99fd326d0612ec68fbd43c42746372a0f023567a143d",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_female_19800921_P007.md": "051137cce3483313f32f89cccc677b03ff94ff4f40433ecff5f1e75472b7ea44",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_female_19830326_P006.md": "5b00cdbd0f782417563dcaa09230d5dc33958832e233890245a9b801ecb4fd9c",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_female_19831028_P004.md": "33975179a6176a350a2c1575378450d16a7c5e576c0cc40cbf9be19188e873da",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_guangdong_female_19800824_P001.md": "aea3b8660a63b3f521b55c5828bae564f855c9bfe0a8434e03899530067827c7",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_male_19611230_P003.md": "bf518f79034a95c9fc7f4a0c4f35d20487b520a79b3e909a45fd3b7a1a9b742f",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_male_19710412_P005.md": "607113e4f9f32d3487a3987e7884c8d095ab68bedfc600bd56de61ed5f4e9c5c",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2024_male_20070131_P008.md": "eb8e63ed94fcf185fb951983f989806430e1e411dbd78b111fa70228b0051679",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_beijing_male_19700722_P008.md": "a06925c000fe74c29f655aa13ca42c4838a81ba188f45765b8c5e708733216f7",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_guangdong_female_19511114_P001.md": "4457cc438d4db05c91649cc37d9922387ba4c51013d7b58c6fe5409b371aeda4",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_hongkong_female_19870705_P002.md": "1e7e40cea3aaa7738bc1456c1d4180ba86f179af819fec5ee185385da34ff99d",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_malaysia_male_19730824_P006.md": "d188a6f870feb5490630a97dcb46bfa09742ed760daa59238da83dcc788ec979",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_malaysia_male_19880110_P005.md": "7ab12648a4f223d75215ca6c953a7ce01cf89380b91af338cc6ec383b781ec04",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_miyazaki_male_19830421_P003.md": "ace742ff937dd97ef899852abe254ab762c893991429e123da24b8dc36242f20",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_singapore_male_19930408_P004.md": "4b13dc654024c7e964f18d20ac3a4f0eef9bdbdf4648ec26aea555bf61140d64",
"评测/ai答案/deepseek-v4-flash/without-skill/contest8_2025_taiwan_female_19880215_P007.md": "cd463315fdbbb28faf83ae606ce7b06363534ebfebe9114abc57cbde607a1dbb",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_female_19670827_P034.md": "fd6d7d6fabeea42e3c133b5fee06c7d966962568b8bbd5f5280290c30fabd4ee",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_female_19750107_P030.md": "5f8e9db35415b3e23de26bf8f7571aa534d67efbc3ca51448b1f9eec57d9b4f1",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_female_19841220_P027.md": "32d946e6549f4cffbc75479110d5dd8cbeded90b92f9b815b8222e5a49b87faa",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_male_19530127_P031.md": "b4133dfb791adbfefc644e5e32a1bd1a1376db940bc24ad2160c032ff503248a",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_male_19540318_P025.md": "4574d14596b73116775ea54ef243c2e2a0f78807f19c944c3cfcebe413a93de8",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_male_19700723_P029.md": "af0a7cd62fa7301061375f42ad00620b382258d8a77631bf99edc3770b01323c",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_male_19710910_P033.md": "32c30a185f9014dfc2d8392f33eb257d1d33740689358abc56af5be3dccc39ba",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_male_19770706_P028.md": "3c83b4e0d4042b891851706ff792c113f5231870a868bc9fdbfe397294aef388",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2021_male_19831019_P026.md": "3ea802b6036d53b1c6ac168f635c32dea17c530e3cce11b55f0a3039ece145a4",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_female_19771026_P020.md": "6e268483b9b6a72fb3106aecee4bf61c53c6e799e22328cd73973abc0b3199e6",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_female_19810526_P018.md": "259de17f9cba98903f8e35ce1573effc1998c5617a7bb0403640898404e6b4d8",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_female_19841209_P023.md": "a19979edf6a8f71047a4fb8c608a1e51f8ceb5ea6ca634ed00f0059509bad9e3",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_female_19900523_P019.md": "782927fda111264b4a7b0f5a3240f522c6e1a7500ae85e46a6ee34d596b88d79",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_male_19740428_P017.md": "b784e60a0a0eabb4b6533adb2853a24c0c56a6986c148a21acab2e536e90059e",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_male_19810617_P024.md": "b8f06af3423a82f5a6220f707384888d5e33858b3a6ba75fba199301a510e4e5",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_male_19831101_P022.md": "63e5bdcd29f9c3b6bcb2fe809249662874a6bd3bea06468386aeceb6d9d66aab",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2022_male_19850629_P021.md": "0c31ddd5ce4e3f960859caa05364c882689b4778c8c10e932d3098c6d2f75f31",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_female_19581027_P014.md": "75b3faca8e1d80ec5f02206d1b3db9a1bc71039c9166268cee29545b2e39e3f9",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_female_19661018_P009.md": "760673c1544bf60a1eff7d7713a21ed325e8bb3f4fd050c89b79f06c54f70382",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_female_19780405_P013.md": "02f288f21ee0f68c107e89d2d31a77fb704a3c41576b49071c33b06fe7f10344",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_female_20020601_P015.md": "ba049c6ab47726585043a6b0d3c639a397aaadd6ff78d468531f2f184dad4e54",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_male_19560311_P012.md": "07e4ed1d2c6f36b5536e13c5780c676d04bd25c0e52995c9f148096aec2def55",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_male_19620806_P010.md": "45a7ddfc56e12d444859d3240cc629e96dec9dfc0873d4f32f285dc5e8cc0207",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_male_19800711_P016.md": "e6cd4ef30f1e36adfa7d62095513909baa11d38b1fae1a964334429492342e75",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2023_male_19860424_P011.md": "a2b7b7dda5283916926745735d824023ae1fb43ccadeac60b13a309e2163a39b",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_chaozhou_male_19720108_P002.md": "428b3d75c7185f01b9ea79e50ea476570fb156f76460984a89aafb196567f13f",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_female_19800921_P007.md": "112242c85e6e533ac644dec340c149240d58b0338c4d0c6b3b30daf3a371133f",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_female_19830326_P006.md": "6fdea63e37aac27eacebed07a4fbb071f73cef91bc8bfbf58020ac946071f893",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_female_19831028_P004.md": "f94c1fda8d8d52368f1633d574795fe01c7a1e568d660e1b404128826b16f492",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_guangdong_female_19800824_P001.md": "ee8072b27f52713f6106e3aa2a33d777c50ec03c4c17a615b67e6b78cf1ed731",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_male_19611230_P003.md": "2eb50edf1668d004c577c3c7a323084368d1e96e78baa688d32cb42cf24cc5a7",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_male_19710412_P005.md": "6f99178d2b05df802f5801a192ae24f2d48adcd649e80a19024f5eaa06701d6a",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2024_male_20070131_P008.md": "2c4f013e43b602de76c57ff1b1eff079e34491c7ae8bcd45472f2d0237f16245",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_beijing_male_19700722_P008.md": "edacbb7400c7676ead6025e65e8e3e62e2b5630e91e5277eee3871dadef52ed4",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_guangdong_female_19511114_P001.md": "c4e77810d7345b86b10a78d8f5d7b8a2d2c372617e04f9b8bfd0e105d0396516",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_hongkong_female_19870705_P002.md": "fb01ed89df463a4b04c7fa22dcc977151e172541f4f227f3398b6df78026afbb",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_malaysia_male_19730824_P006.md": "8411611ce5d1c72efa170e0b140843f3f57f92980377cf8b9e0a06c709b51b9d",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_malaysia_male_19880110_P005.md": "82bb1a966d892185d3f5313f76350df5adbd15e3f991bad47b9c852751746f9d",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_miyazaki_male_19830421_P003.md": "83e198d2104f4bfb965d8d10940b6a346fa7be6f3357afe5e11dde981a1d321e",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_singapore_male_19930408_P004.md": "af9a2ba66cac3bf8d4326c4aee7e1295bc4bf81730d76cf6ae95cb3156f1a057",
"评测/ai答案/kimi-k3/with-skill-v3.6/contest8_2025_taiwan_female_19880215_P007.md": "37e74234df45bd5c1397b0d6b30ca6a08b1060ed7e68f4c4ef6db494187f23db",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_female_19670827_P034.md": "ee81411cdc6bbba2881a3ada22efd70b7480929393c8c44f3b320e2b5b238b76",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_female_19750107_P030.md": "25c7646e2b00c1726ce0107b79e3abbec296986a3191a3a9ded6f610278faba5",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_female_19841220_P027.md": "8fdd1ba96ce4e36dd6c3553cc9952b94fc9abe8f026d52fbc615ec7216bc1577",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_male_19530127_P031.md": "27dad4273f2a0ff526ecf380b949dd9c448d6b08188b6353c68f34a2d5bf47e6",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_male_19540318_P025.md": "988d13a7672f0d39c0e69f6cb4713a33272f2f4b53ac99ff02e24060ba083719",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_male_19700723_P029.md": "2bfe2ec9be2777d9151a58c38aa2af0d920e1589750cdc2e5de5b52fa3732720",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_male_19710910_P033.md": "4e9a9b6f2f2fc823d64e45feb8ff90bedb54bafbccb6cae1e9a9086e0554e97a",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_male_19770706_P028.md": "c2c69d96411038d97ad593a9dc0bd72594e975abeabf267e142bfe12cc9d6dfd",
"评测/ai答案/kimi-k3/with-skill/contest8_2021_male_19831019_P026.md": "d565f4cbfd13d86725d0b2cb0c5f9e8873ef7311e0709b40292e202cd5ec1693",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_female_19771026_P020.md": "4143b0ba66322ea2973e9da677f99bd4bc799d2815c738baed096d138b01b363",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_female_19810526_P018.md": "ea3529a5c0a550db5f117b993cebd1f40efd27200a0509777c41d1e35ca8755d",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_female_19841209_P023.md": "a3623eea4d6f502bdf8145edc09b1275e8b8ba1cb479e55f0a369674cab8701d",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_female_19900523_P019.md": "b2c38d15a8a36f38ce4d50551c21354782cf4b240ffa0e60851862201cd6140a",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_male_19740428_P017.md": "02407ca998ea64b901329abf0c9f3c3c77e4f9a8604ceffa21b37a8ab474b745",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_male_19810617_P024.md": "943da34cac808e82af16bcbc79a4dae8f7dee1c619d606614901f9a5f7845463",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_male_19831101_P022.md": "e27145ebbde7fa5f058663d0000329725ce23b65a87b82907c30ee4d15c587b9",
"评测/ai答案/kimi-k3/with-skill/contest8_2022_male_19850629_P021.md": "d34797aa202db971931fe8d2e81ebf3498f50892b400301f03b49fccb09cdfae",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_female_19581027_P014.md": "59acd0400f37763024880ea5ecc17fd125fd77f6d16d144dec31bea88ca0e1e6",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_female_19661018_P009.md": "9b6ad5ac4b453797c5d2c9c96d05b2d3c66c9c6065301d3b64ef61d182135aef",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_female_19780405_P013.md": "3f8f382282e2ed0c97d2f08a4e9ded2bdd6f49e124bb781cc6d0e683dbfc32e5",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_female_20020601_P015.md": "80b39705ce8a4bfb7eeaa9b8c3d190995d2b6d10c0039471617fe88f128db977",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_male_19560311_P012.md": "68f7aba10f3fc6bc6a9ea72d3f5c47424159c38ff6444be8b3e93912943bb984",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_male_19620806_P010.md": "ecf1c87d86a999f5ccc6392095530f0d8c08a0c861bcc79279b78f31f6258272",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_male_19800711_P016.md": "4b2845f7553304ab27716cceaf5da6ed5c1c53777aedf49e8270817da613bc6d",
"评测/ai答案/kimi-k3/with-skill/contest8_2023_male_19860424_P011.md": "46945895c8c7fd3e3fcc8ddfe7dd2163d7928cb3446489c105b54f75f2ae37a3",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_chaozhou_male_19720108_P002.md": "443cc804b4e7626b85519447797e18147fe0548085d4d4763b5718e69050344e",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_female_19800921_P007.md": "ced0bdfbe280d4497d10f25f1c398b8bfe82bd537971e7358960a085a7925ce0",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_female_19830326_P006.md": "f20afe8b8c3358f95f2d09c458a43b709ac626e28a1a0a7ca05d65ea1ad15736",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_female_19831028_P004.md": "88d9d614c432cfcdff23f4445904aed4ac2771dc12c174724eb51ef6cedcf979",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_guangdong_female_19800824_P001.md": "831162ecaab5f416af2251b999f33c04551fe5eabb3cf58e7b7f32e62d052a60",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_male_19611230_P003.md": "c0ccd5dea489266e229b3894a78db5458a25b7c2b36422614421834d7629141f",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_male_19710412_P005.md": "71d47aca06eb20f3a01a7004e883d068e054e0770d4fbeded45e7a1663826efb",
"评测/ai答案/kimi-k3/with-skill/contest8_2024_male_20070131_P008.md": "d901af6c056da834323fbc92c604da323e31e50c529f86f66748c9db4a2ba1d5",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_beijing_male_19700722_P008.md": "49dbdaff537afb6e49689506f5c75343b2001d041b41bf4c1e049cb5baf864b8",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_guangdong_female_19511114_P001.md": "67f5b5391c3f0f870d61b7159f996d16b092cc22a6efc2582c4bf6012f6ac811",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_hongkong_female_19870705_P002.md": "df72105214a2dd983f8c4e9483979cc42f280f3f059d2cbd3f12b77d1e6ba57c",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_malaysia_male_19730824_P006.md": "0e2ec9078eed02c5e3ada854d8873c1c951df144ac8cbcedb1cde729f83bdf47",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_malaysia_male_19880110_P005.md": "6303b2071e963c2d517f2f8927af8fb140990c4bcabf0195f2689796030aec68",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_miyazaki_male_19830421_P003.md": "606ac01aab499474aa28cd4a408e869267e0482399b4154f57c67a14470b0500",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_singapore_male_19930408_P004.md": "c3b4adc1de18ec20423f696ef7145e6a57174d23eed63cfd9431db3328a71675",
"评测/ai答案/kimi-k3/with-skill/contest8_2025_taiwan_female_19880215_P007.md": "b160ddc6748f1146edcbac732a01fef52f39a2ee89f6f66257444d442f5b0209",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_female_19670827_P034.md": "269d232c101be5ae7bd1483b2d00c651cc32a9fdb8a59f8039c4e5edfb2e4d30",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_female_19750107_P030.md": "4394ea0ff5a60be304306dc8e06d9dd2ec9e953cdd0735a5754a84281c9ea878",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_female_19841220_P027.md": "37cbb1648503661186b4f4843412cecf059870454f61114508d182ebfb54d823",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_male_19530127_P031.md": "eddbf1649cef0bba3eafbd5b6caa8cc01446223e4b6fd5b49fadf4e01d1662b7",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_male_19540318_P025.md": "0bf1d67c2c0cd231280163beab71ea7588d3cf1cce582144d17dcd294a3b0bd3",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_male_19700723_P029.md": "d5b766de2f0358c59009af19c2bcca0d72a36fcab7064e0a978753dec3d551ab",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_male_19710910_P033.md": "ad3a17a9298c88157524cfabca71a516cc53a4a97830c9f0054acc7dbaf3aacb",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_male_19770706_P028.md": "52b7ea3b65df8253a9cf469d68f953deeedfe8753454787117db7c11289f8564",
"评测/ai答案/kimi-k3/without-skill/contest8_2021_male_19831019_P026.md": "6d2dee7bfc8a3a87af67cf482bc89629a88d506bf0e29f077fab99969147471c",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_female_19771026_P020.md": "49811f8fe449d65b818086ea1fe5351d2f28501fae6262b5fc156890d7f91ebc",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_female_19810526_P018.md": "2e7e5fa0db775483fcd55a431a537c84d439e673e58f9e251a52559e344a77be",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_female_19841209_P023.md": "76aac24f4c82baf098cc60c2553bab3dce3af2817dedd8ae004307f73c0f0ccf",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_female_19900523_P019.md": "75e5a7fde24f3d0c5b73b371a4609b87ebd7d96ee734874664993cf0c8bc9873",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_male_19740428_P017.md": "dee0069991ef45a4875c490973d036bafc10b41340839232b972748c0dcf20db",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_male_19810617_P024.md": "45366ed514ca1f3ba98b848d7b1c1375866b355c99f9f88302dbe074bde3a80f",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_male_19831101_P022.md": "8f513113a767816f835a4db9640f2b7a8791c6aa1b96e5b12af867fd80d91900",
"评测/ai答案/kimi-k3/without-skill/contest8_2022_male_19850629_P021.md": "65f396358f294d317d6ab16d2b309ba17ed4086c7fde088be87c20f06819eebf",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_female_19581027_P014.md": "4a107196b3e3751732846cb5b49f4cf76f589b1a90a86e1ac39868710d6bd478",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_female_19661018_P009.md": "0b7cf65d6dd8155a3b5cff6178a2a6b0425aa60d4bb4f2c054c605d6a61440dd",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_female_19780405_P013.md": "716da251ba235e923dad30ba071230ef057c2335a51dc1e37436843c36598f8a",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_female_20020601_P015.md": "0f6c27e6babbd0d295b9f5fe6baeb86153e5f0fa366e12dabfdbd5099029dbfd",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_male_19560311_P012.md": "492471cfd53b0a3f1bb066b1b11547bdd15bb14ddcea3e733ad203138b7c8387",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_male_19620806_P010.md": "cbe6e794dea5b5f44cdbca22084788045ff1105418cbb1a99658f8ad0c132c67",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_male_19800711_P016.md": "e058f8854e2dbbc6525ea33ebcbc995ee32718e8f5f812fd2b3f765fc22ecadf",
"评测/ai答案/kimi-k3/without-skill/contest8_2023_male_19860424_P011.md": "044c90a00d3b075be67c4230d2ebd16a211465314f397331ecdd54920cf75933",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_chaozhou_male_19720108_P002.md": "7fbbfec6d6e83c327e6782f2ee979c995ad5fcc64cf4968e50097f4a465e51fe",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_female_19800921_P007.md": "cd100e55c404a13e9ed4d400d68b6c3e399311484b135b55f5c8d7585bc43dfd",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_female_19830326_P006.md": "e516858ec8deb671ec560489d14dd8e164affbe6db425036674ebfa9558c7185",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_female_19831028_P004.md": "b38d1f725e43e38dd5092e32cd818459095def601f8c7d422f9a34137952c960",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_guangdong_female_19800824_P001.md": "82a95ecea55bce0df52602c04301bc992a18bf3063f30001bca726d50e2ed310",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_male_19611230_P003.md": "323c49b3b54710e1ced172ff9717358ed0fb6df73c6555ac1c9dfae8cd063871",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_male_19710412_P005.md": "b51133a35cfab09e2144aabda0458c47439c74d86574fc37d6e078bcc6be6955",
"评测/ai答案/kimi-k3/without-skill/contest8_2024_male_20070131_P008.md": "ae663dae3de71785f86cb073bb43c77764c41ea4dff989d088c07b7142e9ec90",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_beijing_male_19700722_P008.md": "c919a8bee44c09aaaee10b09290160fc64561d0033014a59fa05a9e0fd707aec",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_guangdong_female_19511114_P001.md": "497cbcbfc3ae2d309694833264d92c0299aa2668a9e9e2b5310d5e3fda48c89c",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_hongkong_female_19870705_P002.md": "20bc4fd71835f8c4bcffac83cda8232f9f3c227b7da2463481e580bacb0c97c0",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_malaysia_male_19730824_P006.md": "67e37899af8d9c6e7961b95777fe1403751f805dc24ac58d124af513fefc0b55",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_malaysia_male_19880110_P005.md": "c2bd8fda179e2d5519478268668f347688dec616aa872b36d9fa4941a1ff0b88",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_miyazaki_male_19830421_P003.md": "d35e857bd6338719356e366da287c572d9ae025a5e212614a6463176d5ae90aa",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_singapore_male_19930408_P004.md": "896452b1cfb74cd33bbed86100d91a1afd20cb9622b936b892e3a227e3dc1f14",
"评测/ai答案/kimi-k3/without-skill/contest8_2025_taiwan_female_19880215_P007.md": "225657f531b1fbc161f9a5676cbeaec826d950630b64e93b5cda26ce6233ba69",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_female_19670827_P034.md": "87fed0726c9a02092d5f4293b8338cee00843b2306a20b04bcbf4c965db9581b",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_female_19750107_P030.md": "1897a11941449420e768e8da445fa650f5cff0d262d8156b70e71b65f5cfdde7",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_female_19841220_P027.md": "6993696244a12ea5bfc40969078799bec321d3547c2334fe5b4d56eb63bb3130",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_male_19530127_P031.md": "1538a103b4f915662bfaf7d31dee93ac3f730e24c194c593a017daa1f9081abd",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_male_19540318_P025.md": "30992c677c751eb38d26625057113ea91ba11447579a2197525723e3acaf1408",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_male_19700723_P029.md": "8e9b5927c0483952baf54bed99344b77d276ad26f17f1f28a70cbaabaa3b0e4c",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_male_19710910_P033.md": "00a199eb464594fb3f7a43e0a48c85259ddafd9d32e9c1b48750617e5422b6dd",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_male_19770706_P028.md": "119a695a23bdeec73fdd6816bdf5f5b3cb1de069fc90fd3ec1da2b3c1aafb746",
"评测/ai答案/qoder-agent/with-skill/contest8_2021_male_19831019_P026.md": "63cba9627d48ddbc176b0555091648b59efa1933842d1d31bf19df9a87a04a6c",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_female_19771026_P020.md": "f45fb2882db389c07ba0701f1b853826361d4c74ee53f3352ee237868dfb2201",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_female_19810526_P018.md": "c75d5528d2659b88eb35e34954c73064b1599e2c64d2f4746e5bfaa59fe0ab3e",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_female_19841209_P023.md": "1056ef463b979e7dbbfeb9d8dbc94a62882a17a7ac270b113ebfe23fcc9f353d",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_female_19900523_P019.md": "6bd6fe16a313680eff003a0a80f81c0d9abca279f7eaf1855eaa032194c1997f",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_male_19740428_P017.md": "87bc6d537ff5eac8633faec7886e12add63567633272f4b43a89a849bcf68a15",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_male_19810617_P024.md": "96035e59096b503d43bf55c17a167da39e6397c1e402b688468cd50582bb9296",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_male_19831101_P022.md": "4aa0cbd9fe67b9e612e0a7a143a28000dc2288008b31a7555ac68d81f818a9a9",
"评测/ai答案/qoder-agent/with-skill/contest8_2022_male_19850629_P021.md": "165e94609bcc653bb8186a2b441619816e363e6c1316511d5f9952b10e7cd1a4",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_female_19581027_P014.md": "d83a181015849e9923f07e3908b6c7f7ccfec935c1464d48c6c5dcbcd17a6dff",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_female_19661018_P009.md": "3ab3b57226c524155fbdca7c7980c4e449efcb842f01e3727e9e059d9b62f613",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_female_19780405_P013.md": "0cd0f73bcf3da2b59fbac1134721ec5e37795e000eba2e521494db80f235c247",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_female_20020601_P015.md": "aed35d6e5e8ec171457ee6d279bece67571d1b133df096e3257b79484bb59e2d",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_male_19560311_P012.md": "4ec472c89d7d016abde29860412103ff52a2c573a974e90563d6551a6ff128a4",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_male_19620806_P010.md": "c4332bd2ef414ab5906c82cb94e9cd41412433ba953161364440461ffc7cc83b",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_male_19800711_P016.md": "7b0f6378cb2897c0465974b2a73c557c1f4d07350846778458ba749a262e2240",
"评测/ai答案/qoder-agent/with-skill/contest8_2023_male_19860424_P011.md": "49355ace3453f1d0c5f0fd83d2174d9887745a75a101ff41792536aaa5c6a081",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_chaozhou_male_19720108_P002.md": "70d37ffc478eb19d2e752ba9518d2703ca80853e04613c7542e1ad6e4e6f9843",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_female_19800921_P007.md": "9ef806222863df0876fffaf14a94d94ad18c940b271af3ea43e778f56c2122fe",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_female_19830326_P006.md": "50a022a635d5b6b80e3b3d0a92147b749ce5b2a7ac8629d5d9e0a88ede2579c5",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_female_19831028_P004.md": "cf182bca0ad8a2a716509c782d6d1f4eb02f276011f4683208729dfe4c101bae",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_guangdong_female_19800824_P001.md": "806127e8fd3654fded1a664dc5ce2da93d43ade8594a4d7e035f605bb44455e7",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_male_19611230_P003.md": "461a6c4227b4f97aa2ce3211c9b2ffd568cd9357752cecf70e33969c49a49af9",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_male_19710412_P005.md": "df3fe6fcc7a9ce244d69f6a5763819b2b270f9347c523ef0f20ef05c48a4d0d0",
"评测/ai答案/qoder-agent/with-skill/contest8_2024_male_20070131_P008.md": "749db455127d280a3106f8fa1158846b412e05b74adb883fa0cfb3f8f81ff57d",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_beijing_male_19700722_P008.md": "8724c55db1028e5421a09f622bca6dd93d99e166c32204f7ec99208b16d2c8a0",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_guangdong_female_19511114_P001.md": "1439ee530002b1caca79b785a8f0183664eb232bc18aa100ade6da0b652b1004",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_hongkong_female_19870705_P002.md": "c54e3d5ee93bdbe59918959352c55c65f4e3307c8c11d793655564d4c0697ad1",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_malaysia_male_19730824_P006.md": "0ec8fbf1960a8da5100ee3ae0d5e61cf4b86ed1a53c8e64cda3933393138e2fc",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_malaysia_male_19880110_P005.md": "4b001078f577913e933f11fef71b095a9d904385cf353d91fa4cf7612de32f77",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_miyazaki_male_19830421_P003.md": "6aa7c02268fd81eb1a59b782944a546d2265d8ad6964434f8b279a978bad3f62",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_singapore_male_19930408_P004.md": "86a54ae9798f497df06982679c5801db1082684d03ffd56726bc4c9722dd4a0c",
"评测/ai答案/qoder-agent/with-skill/contest8_2025_taiwan_female_19880215_P007.md": "f794deced5efc19ac5705db62d2e28fceb165337dd33c28116d1da64d661a533",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_female_19670827_P034.md": "f236840e9b33460a80b970bd9970aad4484483729a51366a0282c2ca6afcb1d2",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_female_19750107_P030.md": "82be21dc8d1b39514a86fa11c2fac587e95140809793d966f7e261bc6827e679",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_female_19841220_P027.md": "a8039b737125ae392aa5b54625b128c7cb30d64887ed13cb22bc766ba73c50f8",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_male_19530127_P031.md": "45485995c0a67daf152c63626701fa01d9eb9ddd966aa58dd6885f0733915570",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_male_19540318_P025.md": "4480c6902402f050e1762ea33cffe6098669f405de29a42bf94c6e87159f97fa",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_male_19700723_P029.md": "4ae037ca154e4ad20b5dd4af0947427d401dcce884f65c356bf57db9cfbf82c5",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_male_19710910_P033.md": "eb4cc0489edb847894b2aa2b106b64bf610616a9c88d8f240ab2ef00699bd1bf",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_male_19770706_P028.md": "b03182c8e7270811cc382b501ba915f703179121fe415d42f628e06264cdcfc6",
"评测/ai答案/qoder-agent/without-skill/contest8_2021_male_19831019_P026.md": "100bb421373322487735839053a286571439e18a9a5fc13517012cdfc105b153",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_female_19771026_P020.md": "9b6b52fb4b0c912bbfc0a1e77c5ecd3412fe8ce813668f87e558adf3b7bf52a1",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_female_19810526_P018.md": "2a95c2bf08bb1b9804995d83398c8ce5c8ac8df7611595120a206efd6fa8376d",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_female_19841209_P023.md": "b22f52b0499706782d1553e159ece2020bbc5e0207779bd3b274ea20219f7196",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_female_19900523_P019.md": "67a277e9a40b3958c94602cfb6d0dfe60b44c9d3693e6adfee5b42be0df95cb1",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_male_19740428_P017.md": "b4eab1cd9ff24f1cf12af275929894311cb23dc355c236cd08e7972c48aabb99",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_male_19810617_P024.md": "8f642e0037d38de845cea51f4230e420d9645cdac0d6e7dcd4f77cc017423dd2",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_male_19831101_P022.md": "ab4350a7050893c0699d8e5bde7b4c9a38b928e2b9e6e145bc0d25fbfed3bb72",
"评测/ai答案/qoder-agent/without-skill/contest8_2022_male_19850629_P021.md": "70b6927adf0243f4a2fa5857a58906653791011b2f971cb6e9e00eb3253f30e8",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_female_19581027_P014.md": "a26c235d19131b23d8d09b741b99737a1987a2e061d9a9e163b643e3f2437e56",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_female_19661018_P009.md": "1a691e997db5a3b98f2b6971d3cd9ea403d527122f86e3fef0c1bd6e1c86cff8",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_female_19780405_P013.md": "e8c6ecba33181185a38bde3583fe19a518cce4cbc68d3c4f00610c28a14feb55",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_female_20020601_P015.md": "d6fe77ea589b2be09de049fc674d5cc276c077dbb499b90488fd75310fdda683",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_male_19560311_P012.md": "fe3025cbebd08c6421e1e7a48995d19b536b0ab4b53a848f316cff255214999f",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_male_19620806_P010.md": "2bf8f8efa695338b16d4e61b4d6ede261ec9c903ba0d9ff94a31b8269b283c60",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_male_19800711_P016.md": "bb456eea1e09cee0fbcf9cd6765f26745aefdcd76c7d1386a15dcd73367f1d07",
"评测/ai答案/qoder-agent/without-skill/contest8_2023_male_19860424_P011.md": "b9132c3f42488fbf36335b45ac20aedc6d4ef7e5680579210c27b66f65e5125c",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_chaozhou_male_19720108_P002.md": "2f863638aa04775f3a961305d69aa70a6b67836064469639570cdeb4f0e6243e",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_female_19800921_P007.md": "5f3d6fb975d044049d02ef7261e58c42c9716c4249c51a42e2a043013fcefbba",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_female_19830326_P006.md": "6ba7167ea3a846f0d37d7b493ec816f27228379b15c050d0074c94eac298f6fe",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_female_19831028_P004.md": "2d62e1c05327070b7ffa3856281594e5d56c5e47487e81d418d4bee329169087",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_guangdong_female_19800824_P001.md": "18ba84e58e9c3e89edc39010a82b9341ab7a05ca4280526aaf816e50b4b8555a",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_male_19611230_P003.md": "d7f2ce4e1746730b96b3b70414568a2a2426d04c799094d13510d798289c2aa0",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_male_19710412_P005.md": "1e9d5d7c45a0b0fff288d5266c5c5dd9ff74e8ea04595e4428141d65b1278c3c",
"评测/ai答案/qoder-agent/without-skill/contest8_2024_male_20070131_P008.md": "a5b61cb43c96270ab95830e44069849be97b49e80384bce2165f43525241462f",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_beijing_male_19700722_P008.md": "f9279e0cbef4b272ff6be561572c97c5c8012e1d6df21727a130989d7ceb324d",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_guangdong_female_19511114_P001.md": "bb82c5f6d3be803373fbc4d7bd6008dde102a1dad0f3b6c17cc53d5396858cec",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_hongkong_female_19870705_P002.md": "592264ced31e2c556fe1c1d77652325cae74e75662f18fb0b0487c0b47d326c5",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_malaysia_male_19730824_P006.md": "c8c51000b12c9d2edff8f4388a37a6fd767d259d5aad10aa292bffe85dfcce25",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_malaysia_male_19880110_P005.md": "66f65b308f2612452e5bf8e4f3923c85089f588c6269a3a6a09d6a587ac4ec37",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_miyazaki_male_19830421_P003.md": "781f861b26466df85476d7eef48c895dc8416222f2289b637ff95b1d0e92c5cc",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_singapore_male_19930408_P004.md": "fa3bd70449a4985658b01d744782728898e969d66ef257f32e96f20dd7a4da27",
"评测/ai答案/qoder-agent/without-skill/contest8_2025_taiwan_female_19880215_P007.md": "cc8901763718c11a136cb1329671a4c4a444c65cefca3f1f2affc27185556106",
"评测/工具/extend_cities.py": "eae58222fb958ffae78fcd287b82483737e0b01007b374b64066e1b45d49d6b7",
"评测/工具/make_blind.py": "b3c315030768c9956e33ca931d068b94a6ca2c22bffabfbb8ca079bc6abb737d",
"评测/工具/render_scorecard.py": "105e3720c5eed3839ac6404b75430f04cd8bb3f4a988a4135a91ddba93991a9e",
"评测/工具/run_eval.py": "2b33b1a1d79e057fbce17f3b00cc8ec90848c0892a7723e4d8e2ad04339c6e27",
"评测/工具/scorecard_template.html": "886c92011cfcda903e7f1fda8f500a7ba0f8bae4fccaa890f89d62245098b953",
"评测/测试规则.md": "78c89cc804fe0702a3ef565c747de03a69a961449f7c11b6e560b1742b24273d",
"评测/试题/BaziQA-全球算命师大赛/SOURCE.md": "1dd5859f5c71eb59fc1500e19baf765493570dcf15fe91621f4bf696a83a3755",
"评测/试题/BaziQA-全球算命师大赛/answers/contest8_2021.json": "0beba3fee1b34026f97063283e50767f1af44dc68cff86f0ac222a1c6f9a9368",
"评测/试题/BaziQA-全球算命师大赛/answers/contest8_2022.json": "32c0bf6e7073364f8a023ba79963931c98a63f21ed751fb2099dd754bc7c3373",
"评测/试题/BaziQA-全球算命师大赛/answers/contest8_2023.json": "41623577d7737a5705a32584b867f91f7ed77f76b5b56b72cc84852550f814aa",
"评测/试题/BaziQA-全球算命师大赛/answers/contest8_2024.json": "b86142a332efe41b527790af616ebb8ff2f2f727a8ed0916c24f235ed1fb7f03",
"评测/试题/BaziQA-全球算命师大赛/answers/contest8_2025.json": "a631acb94588f8a5393214b86d4ce71d23913b733bcb424567279c106b5033f9",
"评测/试题/BaziQA-全球算命师大赛/questions/contest8_2021.json": "395aa64a0aa922fea080b5f4ef0cb85b3d81ea9d0d9b8b2aa4bc9fb3b3fd8b6e",
"评测/试题/BaziQA-全球算命师大赛/questions/contest8_2022.json": "6d20dca147ef090e6c92ea91b87d7785bc8d4c52ab52ee9adbdb732f9226b6ec",
"评测/试题/BaziQA-全球算命师大赛/questions/contest8_2023.json": "0d1f8359db45b6c781cc287bbde51c72704ae96f222eddecf80bb76511d975b6",
"评测/试题/BaziQA-全球算命师大赛/questions/contest8_2024.json": "0d6aad37c9d1278c62fb52982865b06ad57bdb7f1b5356fbe6dfc44f06874d68",
"评测/试题/BaziQA-全球算命师大赛/questions/contest8_2025.json": "29042db26d149e2cd09f9b6f7ad48518059bd015a40e043af5cbd1986538065b",
"评测/错误模式分析-v3.7.md": "ba20c09e60fc04b37a89441c65412720fc91c90a9d69c0cee58f8e00b0b7a2d9"
}, },
"version": "3.5.0" "version": "3.9.0"
} }
+1
View File
@@ -0,0 +1 @@
ry2yHNoGb4YuSmfp5B1xmG0a+/9FfRr+eQDRVZEMUmsgEMBn/HOLMTK588QZmYZEOrQbgaNkN6OpWa5ope0CBA==
+15 -1
View File
@@ -7,6 +7,11 @@
python scripts/memory_save.py --name 张三 --gender 男 \ python scripts/memory_save.py --name 张三 --gender 男 \
--birth "1990-05-14 08:30" --place "四川省成都市" --birth "1990-05-14 08:30" --place "四川省成都市"
# 换盘(经用户确认换盘后):重排并整体替换「## 盘面」段,frontmatter 同步;
# 姓名/性别/出生信息读档案,--birth/--place 仅在校正时给覆盖值
python scripts/memory_save.py --update-chart archives/<档案>.md \
[--day-boundary 子正] [--birth "校正后时刻"] [--place "校正后地点"]
# 检索(条件任意组合、至少一项;大小写/空白容错) # 检索(条件任意组合、至少一项;大小写/空白容错)
python scripts/memory_lookup.py [--name 张三] [--birth "1990-05-14 08:30"] \ python scripts/memory_lookup.py [--name 张三] [--birth "1990-05-14 08:30"] \
[--place 四川省成都市] [--gender 男] [--pillars "庚午 辛巳 己卯 戊辰"] [--place 四川省成都市] [--gender 男] [--pillars "庚午 辛巳 己卯 戊辰"]
@@ -21,7 +26,16 @@ python scripts/memory_lookup.py [--name 张三] [--birth "1990-05-14 08:30"] \
`archives/<四柱连写>-<性别>-<hash6>.md`,其中 `archives/<四柱连写>-<性别>-<hash6>.md`,其中
hash6 = sha1(出生钟表时间 + 出生地 + 性别)(UTF-8)前 6 位十六进制, hash6 = sha1(出生钟表时间 + 出生地 + 性别)(UTF-8)前 6 位十六进制,
用于区分同盘不同人。同主键再次建档只刷新 frontmatter 与「## 盘面」, 用于区分同盘不同人。同主键再次建档只刷新 frontmatter 与「## 盘面」,
正文其余小节原样保留。 正文其余小节原样保留。换盘(`--update-chart`)后四柱或 hash6 变动时,
文件改为新主键名(目标已存在则拒绝覆盖,报错退出 2)。
## 换盘纪律(工作盘唯一 + 变更留痕)
经用户确认换盘(日界规则分歧、时辰/出生地校正等)后,必须重排并把
「## 盘面」段整体替换为新盘:档案任何时候只有一个工作盘,旧盘信息
(原四柱、换盘原因、确认方式与时间)记入「反馈与澄清」校订条目,不留盘面段。
凡受变动柱影响的已有推断条目(归纳、流年大事各行)同轮标记【待复核】,
复核前不得继续引用。
## Schema ## Schema
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "ZiPingEightChar" name = "ZiPingEightChar"
version = "0.1.0" version = "3.9.0"
requires-python = ">=3.10" # zoneinfo 需 3.9+,dataclass 语法需 3.10 requires-python = ">=3.10" # zoneinfo 需 3.9+,dataclass 语法需 3.10
dependencies = [ dependencies = [
"tyme4py==1.5.0", # 精确锁定:历表数据跨版本会变,锁版本 = 锁可复现性 "tyme4py==1.5.0", # 精确锁定:历表数据跨版本会变,锁版本 = 锁可复现性
+3
View File
@@ -49,6 +49,9 @@
但财透而无根仅一位者、及透食而无官煞者,不阻此门 但财透而无根仅一位者、及透食而无官煞者,不阻此门
(与 R-杂-01 但书及合禄格诸命例对齐)。 (与 R-杂-01 但书及合禄格诸命例对齐)。
月令自有用神,或用神虽破而可救者,一概不得弃正格就杂格。 月令自有用神,或用神虽破而可救者,一概不得弃正格就杂格。
从财从煞之临界(日主仅余一微根、合化存疑、透干不稳),
不凭单一要件一票退回正格——依 19_杂格.md R-杂-38 两轨并推,
从格与正格各给结论,行运喜忌对照呈现并注明临界因素。
``` ```
--- ---
+7 -1
View File
@@ -1,7 +1,7 @@
# 子平真诠 · 杂格 # 子平真诠 · 杂格
<!-- rules_version: 1.0 --> <!-- rules_version: 1.0 -->
<!-- 杂格:月令无用神,权以外格用之。启用闸门见 00_总纲_取格.md R-纲-16;本文件蒸馏第四十七篇·论杂格、第四十八篇(附)·论杂格取运。 --> <!-- 杂格:月令无用神,权以外格用之。启用闸门见 00_总纲_取格.md R-纲-16;本文件蒸馏第四十七篇·论杂格、第四十八篇(附)·论杂格取运。从财从煞之临界判定(双轨并推)见 R-杂-38。 -->
## 1. 格之定义 ## 1. 格之定义
@@ -142,6 +142,12 @@
- **出处**:《子平真诠》第四十七篇·论杂格 - **出处**:《子平真诠》第四十七篇·论杂格
- **原文**:「若命是有子字,则丑与子合而不遥,有丙丁戊已,则辛癸之官煞已透,而无待于遥,另有取用,非此格矣。」 - **原文**:「若命是有子字,则丑与子合而不遥,有丙丁戊已,则辛癸之官煞已透,而无待于遥,另有取用,非此格矣。」
### R-杂-38 从格临界双轨:两轨并推,不凭单一要件退回正格
- **条件**:从财(R-杂-10)、从煞(R-杂-11)之判定落于临界——日主仅余一微根(藏干余气、墓库微根、遥隔无援之根);或破法存疑(印被合化与否两可,参 R-杂-17 但书;比劫无根虚浮,参 R-杂-18 但书;食伤藏而不透、煞不透干之类,闸门要件疑似不备而非确证不备);或透干不稳(透而被合、透而坐下无根)。
- **判定**:**两轨并推**——按从格(喜忌取运依 R-杂-32、R-杂-33)与按正格身弱(扶抑帮身为喜)各推一遍结论。两轨喜忌方向相反,行运喜忌须对照呈现,并注明临界因素(微根所在、合化之疑、透干之状态);取舍以证据较强一轨为主答案,另一轨降为备选(依 R-运-32 降级保留之科),直答置信度按不足「高」处理,存疑与边界段声明临界因素。**不得**因某一闸门要件疑似不备即一票退回正格——临界未清之前,退回正格与判为从格同是一轨之见;退回正格之后,从格轨之结论仍须留档为备选,不得删除。
- **出处**:综括——据 R-杂-10/11/17/18 闸门要件、89_旺衰扶抑.md R-旺-37/38(假从假化之极端力量警示,存疑备参)综括
- **原文**:(综括,无单一原文;参《三命通会》卷五·弃命从煞「如遇运扶身旺,与煞为敌,从煞不专,故为祸患」——从之不真者两轨皆有其验,故临界并推)
--- ---
## 4. 败中有救(救应) ## 4. 败中有救(救应)
+26 -8
View File
@@ -2,7 +2,7 @@
<!-- rules_version: 1.0 --> <!-- rules_version: 1.0 -->
<!-- 蒸馏自 sources/子平真诠/26_论行运.md(第二十五篇·论行运)、sources/子平真诠/27_论行运成格变格.md(第二十六篇·论行运成格变格)、sources/子平真诠/28_论喜忌干支有别.md(第二十七篇·论喜忌干支有别)、sources/子平真诠/29_论支中喜忌逢运透清.md(第二十八篇·论支中喜忌逢运透清)。 --> <!-- 蒸馏自 sources/子平真诠/26_论行运.md(第二十五篇·论行运)、sources/子平真诠/27_论行运成格变格.md(第二十六篇·论行运成格变格)、sources/子平真诠/28_论喜忌干支有别.md(第二十七篇·论喜忌干支有别)、sources/子平真诠/29_论支中喜忌逢运透清.md(第二十八篇·论支中喜忌逢运透清)。 -->
<!-- 本文件为横切通论:各格局具体的行运喜忌见分格文件「取运」节;本文件给出行运的总原则、成格变格、干支分殊与透清会局四组横切规则,断运时用于校正分格条目(见 §5);§7 为断运操作序列,§8 为事类落地(由引动合成现实事件候选),§9 为断年核对回路(落笔前强制重新查表)。 --> <!-- 本文件为横切通论:各格局具体的行运喜忌见分格文件「取运」节;本文件给出行运的总原则、成格变格、干支分殊与透清会局四组横切规则,断运时用于校正分格条目(见 §5);§7 为断运操作序列,§8 为事类落地(由引动合成现实事件候选),§9 为断年核对回路(落笔前强制重新查表);§10 为童限,§11 为应期细则补(透清方向、多年同引动之收敛,【拓展】综括条)。 -->
## 1. 行运总原则 ## 1. 行运总原则
@@ -354,19 +354,19 @@
- **判定**:每个关键流年**必须给出 2–3 个具体事件候选**,按以下程序合成与落笔—— - **判定**:每个关键流年**必须给出 2–3 个具体事件候选**,按以下程序合成与落笔——
0. **前提挑战**:凡用户之问预设某事已发生(如「什么时候做过手术」「哪年发的财」),先核盘上有无该事类之硬信号(相应十神、宫位、神煞之引动结构);无硬信号者直答「盘上看不出必见此事」,再给倾向窗口——不顺其预设铺年份。 0. **前提挑战**:凡用户之问预设某事已发生(如「什么时候做过手术」「哪年发的财」),先核盘上有无该事类之硬信号(相应十神、宫位、神煞之引动结构);无硬信号者直答「盘上看不出必见此事」,再给倾向窗口——不顺其预设铺年份。
1. **合成**:取该年诸引动所涉之「十神 × 宫位」(R-运-31),叠加神煞事类(94),组合成现实事件。例:流年巳填实空亡、冲年支亥,巳为驿马、又逢印星透清 → 「离开原生之地(冲年支)+住所与文书变动(驿马、印)」→ 候选:升学离家、迁居异地、入职外派。三线一视同仁:问感情、婚姻时同样给到事件级候选(如「确定关系/分手/见家长」),不得只给「起变化」「被牵动」这类方向词。 1. **合成**:取该年诸引动所涉之「十神 × 宫位」(R-运-31),叠加神煞事类(94),组合成现实事件。例:流年巳填实空亡、冲年支亥,巳为驿马、又逢印星透清 → 「离开原生之地(冲年支)+住所与文书变动(驿马、印)」→ 候选:升学离家、迁居异地、入职外派。三线一视同仁:问感情、婚姻时同样给到事件级候选(如「确定关系/分手/见家长」),不得只给「起变化」「被牵动」这类方向词。
2. **排序**:候选按可能性从大到小排列。排序依据三事:引动之喜忌方向(喜取顺象、忌取逆象)、组数多寡、人生阶段窗口(学龄、婚龄、育龄等自然节点)——阶段与引动吻合者排前。阶段窗口未问实前按常规学制等假设落笔的,须在候选处就地声明(如「若你 2013 年上大学」),不得拖到存疑段才统一交代。 2. **排序**:候选按证据强度(与盘面信号之吻合度)从大到小排列;路径分先后——细分规则合成路径之候选居先,直白取象(不经细分规则、由五行/十神/宫位直读可达)之候选一律居后,不与细分规则候选同等竞争;直白取象候选不因此删除,其出路为第 3 步之降级保留。排序依据三事:引动之喜忌方向(喜取顺象、忌取逆象;冲刑引动之吉凶方向先依 `91_何知事类.md` §3 冲刑方向判别 R-事-10~13 判定,不得以「逢冲」直落凶断或直落吉断)、组数多寡、人生阶段窗口(学龄、婚龄、育龄等自然节点)——阶段与引动吻合者排前。阶段窗口未问实前按常规学制等假设落笔的,须在候选处就地声明(如「若你 2013 年上大学」),不得拖到存疑段才统一交代。**排除句校验**:排除一个候选必须写出排除它的具体规则编号;写不出编号的排除不成立,该候选降为备选、不得删除。
3. **落笔**:候选以「这一年常见于……」句式平列,不用「一定」「必然」。**直答收敛**:用户面直答只落一个主答案,至多带一个备选,并给置信度(能定到年/只能定到窗口/定不了);全量候选与排序依据收在分析推理段,不得以与主答案并列的语气再列年份。覆盖多个流年的批量断运,先经 R-运-33 核对前置分流,不一次性倾倒全部年份。 3. **落笔**:候选以「这一年常见于……」句式平列,不用「一定」「必然」。**直答收敛**:用户面直答只落一个主答案,至多带一个备选,并给置信度(能定到年/只能定到窗口/定不了);全量候选与排序依据收在分析推理段,不得以与主答案并列的语气再列年份。**降级保留**:依编号规则被排除、但直白取象路径(五行/十神/宫位直读)仍有支撑的候选不得删除,降为备选并在分析推理段留档(写明据何条排除、其取象路径为何);主答案置信度不足「高」(只能定到窗口、定不了,或两路径结论相分歧)时,直答必须带出备选。覆盖多个流年的批量断运,先经 R-运-33 核对前置分流,不一次性倾倒全部年份。
4. **收敛**:用户核对后,以已证实之候选反推该组引动的事类权重;后续相邻年份同型引动的候选随之收窄(同型引动多应同类事),不得年年重新发散。**同机制年份其一证伪,共享该机制之其余候选年随之降权**(数年同以一组冲合填实为据者,一伪俱弱),不得以另一机制之名原样保留。候选全部落空(证伪)时按 R-运-33 第 4 步回查,不得硬铺。 4. **收敛**:用户核对后,以已证实之候选反推该组引动的事类权重;后续相邻年份同型引动的候选随之收窄(同型引动多应同类事),不得年年重新发散。**同机制年份其一证伪,共享该机制之其余候选年随之降权**(数年同以一组冲合填实为据者,一伪俱弱),不得以另一机制之名原样保留。候选全部落空(证伪)时按 R-运-33 第 4 步回查,不得硬铺。
5. **豁免**:仅当用户明确只要喜忌方向、不要事件推测时,本条可不执行。 5. **豁免**:仅当用户明确只要喜忌方向、不要事件推测时,本条可不执行。
- **理由**:R-运-28 禁的是「断具体事件之必然」,不是禁给候选。只给事类词不给候选,等于把翻译工作推回给用户——用户不对号,断语便无意义。排序与收敛使候选逐年变准,而非逐年放空。 - **理由**:R-运-28 禁的是「断具体事件之必然」,不是禁给候选。只给事类词不给候选,等于把翻译工作推回给用户——用户不对号,断语便无意义。排序以细分规则路径居先、直白取象居后,防无规则锚定之直读取象压过有编号支撑之合成结论;直白取象不失出路,由降级保留兜底为备选,防细分规则误杀正解;排除须凭编号(与 R-禁-23 相衔),防自造否决误删正解;收敛使候选逐年变准,而非逐年放空。
- **出处**:综括——操作程序据 R-运-22/23(透清会局之事类所在)、R-运-29(组数)、94_神煞细节.md(神煞事类)综括而成 - **出处**:综括——操作程序据 R-运-22/23(透清会局之事类所在)、R-运-29(组数)、94_神煞细节.md(神煞事类)综括而成
- **原文**:(综括,无单一原文) - **原文**:(综括,无单一原文)
### R-运-33 核对前置:先定场景,再定断运路径 ### R-运-33 核对前置:先定场景,再定断运路径
- **条件**:断运输出覆盖五年以上、或多个流年候选需要用户核对时。**核对一律在铺开断语之前完成**——不得先输出一大段再回头提问。agent 环境具备询问工具时**必须用询问工具**,无询问工具时以正文编号选项代替。 - **条件**:断运输出覆盖五年以上、或多个流年候选需要用户核对时。**核对一律在铺开断语之前完成**——不得先输出一大段再回头提问。核对提问一律走对话式询问(见 SKILL.md「Intake 对话式询问」):以普通对话消息进行,禁用结构化问卷/点选工具,也不在正文罗列编号问题清单让用户勾选;一次最多问 1~2 个,答完再定下一个。
- **判定**: - **判定**:
1. **一问定场景(并入 intake)**:「这盘是您本人,还是替别人看?本人或知情人在场、能核对以往的事吗?」此问与缺项追问合成一次提问(见 SKILL.md「Intake 追问话术」),不单独多占一轮。 1. **一问定场景(并入 intake)**:「这盘是您本人,还是替别人看?本人或知情人在场、能核对以往的事吗?」此问与缺项追问合成一次提问(见 SKILL.md「Intake 对话式询问」),不单独多占一轮。
2. **可核对 → 锚点核对**:从全部候选年中挑出 3 个左右**锚点年**请用户核对。锚点年选取规则:引动组数最多者优先;落在人生阶段窗口(升学、毕业、婚育、换工作)者优先;用户所问之线每条至少占一个。每个锚点年给 2–3 个候选事件(R-运-32)。**核对用结构化选项**:每个锚点年一个问题,选项为按可能性排序的候选事件、外加「都对不上」(证伪入口);几个锚点年合成一次提问,不逐条单独打断用户。核对结果按 R-运-32 第 4 步收敛后,一次性输出完整断运。 2. **可核对 → 锚点核对**:从全部候选年中挑出 3 个左右**锚点年**请用户核对。锚点年选取规则:引动组数最多者优先;落在人生阶段窗口(升学、毕业、婚育、换工作)者优先;用户所问之线每条至少占一个。每个锚点年给 2–3 个候选事件(R-运-32)。**核对走对话式询问**:一次最多问一两个锚点年,每问先以该年盘上一两句显著信号作铺垫,再自然带出按可能性排序的候选事件,并留「都对不上」的证伪入口;用户答完再挑下一个锚点,不逐条单独打断、也不合成清单一次抛出。核对结果按 R-运-32 第 4 步收敛后,一次性输出完整断运。
3. **不可核对 → 直推**:命主不在场、不知情,或用户明言测试、「不用问、直接说」时,跳过核对,一次性输出最佳推断;直答按 R-运-32 落笔纪律给主答案与置信度,全量候选收在分析推理段。 3. **不可核对 → 直推**:命主不在场、不知情,或用户明言测试、「不用问、直接说」时,跳过核对,一次性输出最佳推断;直答按 R-运-32 落笔纪律给主答案与置信度,全量候选收在分析推理段。
4. **证伪回查**:锚点全部落空时不得硬铺——先回头检查:组数判定是否偏重、学制等阶段假设是否错位、出生时刻是否跨时辰或跨日界(晚子时)、是否临近节气边界(命盘带 ⚠️ 节气边界提示者,重排另一月令之盘对照);修正后重新给锚点。 4. **证伪回查**:锚点全部落空时不得硬铺——先回头检查:组数判定是否偏重、学制等阶段假设是否错位、出生时刻是否跨时辰或跨日界(晚子时)、是否临近节气边界(命盘带 ⚠️ 节气边界提示者,重排另一月令之盘对照);修正后重新给锚点。
5. **学制锚点**:断语涉及学业年份时,把一个学制锚点(哪年上大学/哪年毕业、有无复读休学)并入第 2 步那次提问,不单独多问一轮。 5. **学制锚点**:断语涉及学业年份时,把一个学制锚点(哪年上大学/哪年毕业、有无复读休学)并入第 2 步那次提问,不单独多问一轮。
@@ -386,7 +386,7 @@
1. 重读本文件 §7 断运操作序列(R-运-27~30),确认程序未被跳过; 1. 重读本文件 §7 断运操作序列(R-运-27~30),确认程序未被跳过;
2. 重读本格局分格文件的「取运」节,取该步大运的喜忌基线;该年属童限者改按 §10(R-运-36~39); 2. 重读本格局分格文件的「取运」节,取该步大运的喜忌基线;该年属童限者改按 §10(R-运-36~39);
3. 按 R-运-29 五组清单**逐组**核查该年:A 透清查命盘 `## 地支藏干`、B 会局查命支与运支的组合(童限段以小运代大运位)、C 刑冲害逐支比对、D 空亡查 `## 四柱空亡`、E 伏吟反吟逐柱比对——每组写明查了什么、命中与否,不得跳组、不得合并;**并回查救应**:流年干被命中之干合住、或流年支逢会合解冲(R-运-12)者,该组引动力度折减,候选排序时写下折减,不得以组数相埒为由并列; 3. 按 R-运-29 五组清单**逐组**核查该年:A 透清查命盘 `## 地支藏干`、B 会局查命支与运支的组合(童限段以小运代大运位)、C 刑冲害逐支比对、D 空亡查 `## 四柱空亡`、E 伏吟反吟逐柱比对——每组写明查了什么、命中与否,不得跳组、不得合并;**并回查救应**:流年干被命中之干合住、或流年支逢会合解冲(R-运-12)者,该组引动力度折减,候选排序时写下折减,不得以组数相埒为由并列;
4. 合成事件候选时重读 R-运-31 映射表逐项对照取象;用及神煞空亡时重读 `94_神煞细节.md` 对应条目的查法表逐项重查,不默写查法; 4. 合成事件候选时重读 R-运-31 映射表逐项对照取象;用及神煞空亡时重读 `94_神煞细节.md` 对应条目的查法表逐项重查,不默写查法;该年 C 组(刑冲)命中时,先重读 `91_何知事类.md` §3 冲刑方向判别(R-事-10~13)定其吉凶方向,再合成候选;
5. 涉及六亲、婚姻、子息时重读 `96_六亲.md` / `97_女命.md` 对应条。 5. 涉及六亲、婚姻、子息时重读 `96_六亲.md` / `97_女命.md` 对应条。
- **理由**:规则文件是外置记忆;会话内的规则印象随对话漂移,断年不准的主因是没查表,不是表里没有。五步核对把「推断」变成「查表+合成」,候选的可对号率才有保障。 - **理由**:规则文件是外置记忆;会话内的规则印象随对话漂移,断年不准的主因是没查表,不是表里没有。五步核对把「推断」变成「查表+合成」,候选的可对号率才有保障。
- **出处**:综括——据 R-运-27~32 的执行要求综括为强制回路 - **出处**:综括——据 R-运-27~32 的执行要求综括为强制回路
@@ -430,4 +430,22 @@
- **出处**:综括——R-运-29/34 程序向童限段之扩展;小运代位据 R-运-36/37 - **出处**:综括——R-运-29/34 程序向童限段之扩展;小运代位据 R-运-36/37
- **原文**:(综括,无单一原文) - **原文**:(综括,无单一原文)
---
## 11. 应期细则补(取象增补)
本节补应期框架之二漏口:透清之吉凶方向细则(R-运-40)、多年同引动之收敛(R-运-41)。皆【拓展】综括条——程序上挂载于 §4(透清)与 §8(候选收敛)之下,不替代原条。
### R-运-40 透清方向细则:透清定「事之显现」,格局处置定「事之吉凶」
- **条件**:支中所藏逢运透清(R-运-22),而所透者为格局所处置之忌神(杀有食制、伤有印制、劫有官制、枭有财制之类),或所透喜神逢原局克破。
- **判定**:R-运-22「藏喜吉应、藏忌凶应」之补——忌神透清不以「忌」字直落凶断:原局对该忌神有制有化者,透清之年应「所处置之事显现」——杀透应威权压力之任事、伤透应表达出品之事、劫透应分夺竞争之事,方向可为吉或中性;忌神透清而原局无制无化者,方作凶应。喜神透清而逢原局克破者(喜透逢伤),应喜中之疵。一言以蔽:透清只定何事显现,吉凶方向仍由格局对该神之处置与喜忌定(与 R-事-10/11 冲刑方向之判同科)。
- **出处**:【拓展】据 R-运-22 与分格救应诸条(R-杀-03、R-伤-06 等)综括推导
- **原文**:(拓展条,无原文)
### R-运-41 多年同引动之收敛
- **条件**:所问事类在多个流年同见引动(如连续数年皆冲合所问之宫、所问之星),需收敛至具体年份时。
- **判定**:不得以「多年皆有引动」合报「以上皆是」——按四序收敛至一至二年:①组数最多者优先(R-运-29 组数);②透清、填实(A/D 组,正神到位)者优先于遥冲遥合(C 组之远引);③与所问事类之十神、宫位直接相关者优先(问婚则冲合日支、夫妻星之年优先于冲他宫之年);④人生阶段窗口吻合者优先(R-运-32 排序三事同科)。四序尽而仍并列者,按 R-运-32 落笔纪律给主答加备选,不并列为「皆是」。
- **出处**:【拓展】据 R-运-29、R-运-32 之程序综括推导
- **原文**:(拓展条,无原文)
<!-- 副本 LY-20261007-AC63 · 授权对象 normal --> <!-- 副本 LY-20261007-AC63 · 授权对象 normal -->
+161 -5
View File
@@ -1,13 +1,13 @@
# 滴天髓阐微 · 何知事类(旺衰断语·细节参看层) # 滴天髓阐微 · 何知事类(旺衰断语·细节参看层)
<!-- rules_version: 1.0 --> <!-- rules_version: 1.0 -->
<!-- 蒸馏自 sources/滴天髓阐微/39_下篇·何知.md(《滴天髓阐微》下篇·何知,含原注与任氏曰),收「何知其人富/贵/贫/贱/吉/凶/寿/夭」八组事类断语。 --> <!-- 蒸馏自 sources/滴天髓阐微/39_下篇·何知.md(《滴天髓阐微》下篇·何知,含原注与任氏曰),收「何知其人富/贵/贫/贱/吉/凶/寿/夭」八组事类断语。§3 冲刑方向判别为 3.7 新增(书证同上篇·地支,附综括条)。§4~§7 为取象增补层(2026-10-13):§4 职业取象(自建映射,全节【拓展】)、§5 学业取象(综括推导,【拓展】)、§6 健康部位取象(书证《三命通会》卷七·论疾病先知五脏六腑所属干支、卷十一·消息赋;宫位粗架【拓展】)、§7 事类数量级(【拓展】)——皆细节参看层,不回改格局。 -->
<!-- 分层定位:本篇八组断语皆滴天髓旺衰扶抑视角之事类断语(财官之通塞、喜忌之力势),与真诠月令格局法不同源——富贵贫贱吉凶寿夭之大纲,在真诠体系一断于格局四层(取格、成败、用神相神、高低)与行运;本篇只作格局定论之后的细节参看与事类联想,绝不回改格局结论,不得据本篇断语另立格局或改判贵贱。凡滴天髓另立取格之章(八格、从象、化象、假从假化、顺局反局等)不属本篇范围。 --> <!-- 分层定位:本篇八组断语皆滴天髓旺衰扶抑视角之事类断语(财官之通塞、喜忌之力势),与真诠月令格局法不同源——富贵贫贱吉凶寿夭之大纲,在真诠体系一断于格局四层(取格、成败、用神相神、高低)与行运;本篇只作格局定论之后的细节参看与事类联想,绝不回改格局结论,不得据本篇断语另立格局或改判贵贱。凡滴天髓另立取格之章(八格、从象、化象、假从假化、顺局反局等)不属本篇范围。 -->
<!-- 加载时机:用户问及富贵贫贱、吉凶寿夭等事类细节时方加载;不问不加载。 --> <!-- 加载时机:用户问及富贵贫贱、吉凶寿夭等事类细节时方加载;不问不加载。§3 冲刑方向判别另随断运加载——断年核对(R-运-34)C 组(刑冲)命中时必读。§4~§7 随所问事类加载:问职业行业/就业形态加载 §4,问学历学业加载 §5,问健康部位加载 §6,问财富收入量级加载 §7。 -->
<!-- 出处标注:【原书】指《滴天髓阐微》原文(含原注、任氏曰);真诠无「何知」篇,本篇无真诠原文。 --> <!-- 出处标注:【原书】指《滴天髓阐微》原文(含原注、任氏曰);真诠无「何知」篇,本篇无真诠原文。§6 之【原书】指《三命通会》原文。 -->
<!-- 命例基准:tests/golden/91_何知事类.yaml(30 例,下篇·何知自带命例全收;库版本 3.1 第三轮验证 30 match)。 --> <!-- 命例基准:tests/golden/91_何知事类.yaml(30 例,下篇·何知自带命例全收;库版本 3.1 第三轮验证 30 match)。§3 新增条无原书命例基准。§4~§7 增补条无原书命例基准。 -->
**分层声明:本篇为细节参看层。八组「何知」断语皆旺衰视角断语,只用于格局定论(取格、成败、用神相神、高低)之后的事类参看,不回改格局结论。** **分层声明:本篇为细节参看层。八组「何知」断语皆旺衰视角断语,只用于格局定论(取格、成败、用神相神、高低)之后的事类参看,不回改格局结论。§3 冲刑方向判别同属细节参看层:方向判别据格局喜忌作出,不回改喜忌本身。**
--- ---
@@ -76,4 +76,160 @@
- **原文**:「何知其人夭?气浊神枯了。」「印绶太旺,日主无着落,财杀太旺,日主无依倚,忌神与喜神杂而虞,四柱与用神反而绝,冲而不和,旺而无制,湿而滞,燥而郁,精流气泄,月悖时脱,此皆无寿之人也。」「气浊者……虽不寿而有子。神枯者……皆夭而无子也。」 - **原文**:「何知其人夭?气浊神枯了。」「印绶太旺,日主无着落,财杀太旺,日主无依倚,忌神与喜神杂而虞,四柱与用神反而绝,冲而不和,旺而无制,湿而滞,燥而郁,精流气泄,月悖时脱,此皆无寿之人也。」「气浊者……虽不寿而有子。神枯者……皆夭而无子也。」
> 存疑:「忌神与喜神杂而虞」之「虞」疑为「糅/杂揉」义之讹字;原文照引。 > 存疑:「忌神与喜神杂而虞」之「虞」疑为「糅/杂揉」义之讹字;原文照引。
---
## 3. 冲刑方向判别(3.7 新增)
本节补「冲/刑只表『动』、不表吉凶」之方向判别——冲刑之本义为引动(`90_行运.md` R-运-29 C 组),动而向上向下,由下列判别因子定。与 R-运-10~13 分工:彼论冲之有无、逢冲不冲与力之缓急轻重,此论冲刑之吉凶方向。断年核对(R-运-34)C 组命中时,先经本节定方向,再按 R-运-32 合成事件候选。
### R-事-10 冲刑为动,不自带吉凶
- **条件**:命局或岁运逢冲、逢刑(R-运-29 C 组命中),需判其事之吉凶方向时。
- **判定**:冲刑只表「动」——关系、处境、状态之被激起与变更;动本身无吉凶,吉凶视所冲所刑者为何神、其力之衰旺、有无解救而定(R-事-11)。不得以「逢冲」「逢刑」直落凶断,亦不得以「冲动成事」直落吉断。例:流年午冲日支子——只可读作「己身/配偶之处境被激起而动」,成婚与婚变两向皆开,方向待 R-事-11、R-事-13 判别。
- **出处**:【原书】《滴天髓阐微》上篇·地支(冲之吉凶以衰旺喜忌验之旨)
- **原文**:「必先察其衰旺,四柱有无解救,或抑冲,或助泄,观其大势,究其喜忌,则吉凶自验矣。」
### R-事-11 方向主判:喜用受冲刑则凶向,忌神受冲刑则吉向
- **条件**:承 R-事-10,辨所冲所刑之神的喜忌与衰旺。
- **判定**:两轴定方向。①喜忌轴:用神、喜神受冲刑而动 → 凶向(失去、变动向下——得之复失、成而复败之类);忌神受冲刑而动 → 吉向(解除、变动向上——病去、缚解之类)。②衰旺轴:旺者冲衰则衰者拔(连根去之),衰神冲旺则旺者发(激之)——冲之者有力则能去之,去凶神则利、去吉神则不利;冲之者无力则反激之,激凶神则为祸、激吉神不为祸亦不获福。两轴交参:喜神旺而受衰神之冲,动而无伤、或激之反发;忌神衰而受旺者之冲,连根拔去,为解为除。例:庚寅、壬午、丁卯、癸卯造,财官虚露无根、枭比当权,运至甲申乙酉,金旺冲去寅卯之木(忌神),所谓「衰神冲旺旺神发」,骤然发财巨万——忌神被冲,吉向。
- **出处**:【原书】《滴天髓阐微》上篇·地支
- **原文**:「旺者冲衰衰者拔,衰神冲旺旺神发。」「冲之者有力,则能去之,去凶神则利,去吉神则不利;冲之者无力,则反激之,激凶神则为祸,激吉神虽不为祸,亦不能获福也。」
### R-事-12 冲合互见之转化:冲中带合、刑后逢合
- **条件**:冲刑与合同见于一处——冲中带合(逢冲之同时另有合牵引)、刑后逢合(刑冲之后岁运续逢合)、合处逢冲(原局之合被岁运冲开)。
- **判定**:冲合互见,事有先后转化——冲中带合、刑后逢合者,先凶后吉、先分后合(动而起波澜,继而复合:先争执后和解、先离后聚之类);合处逢冲者,先合后分(原聚而被拆开)。子午卯酉四败之地有逢合而喜冲者、有逢冲而喜合者,须合全局喜忌细辨,不执一端。例:原局日支午与月支未相合(夫妻宫有合),流年子来冲午——合处逢冲,主婚姻先生动荡;若原局无合,流年子冲午而大运逢丑合子(或逢未合午),冲中带合,主先争执而后复合。
- **出处**:【原书】《滴天髓阐微》上篇·地支(逢合喜冲、逢冲喜合之旨)+综括
- **原文**:「子、午、卯、酉四败也,有逢合而喜冲者,不若生地之必不可冲也;有逢冲而喜合者,不若库地之必不可闲也。」
### R-事-13 宫位×十神之方向细化:婚姻宫、子女宫、官禄受冲刑
- **条件**:冲刑落于特定宫位(宫位事类见 R-运-31)时,定其双向候选之取舍。
- **判定**:宫定何事、星定何向——宫位给出事类领域,吉凶方向看该宫所主之星(十神)之喜忌、透藏、强弱:
- **婚姻宫(日支)受冲**:成婚与婚变两向——夫/妻星为喜用而透清得地者,冲动多应成婚、定亲(动而成);夫/妻星为忌、或星藏受冲无制、或星被冲伤者,多应婚变、争执、分居(动而散)。参 R-女-24 三途交会:夫星透清或夫宫逢合会之岁运多应婚缘之成,夫星被伤、夫宫逢冲而无解之岁运多应婚缘之变。
- **子女宫(时柱)受冲**:得子与流产两向——子星(男命官煞、女命食伤)强而得地、为喜用者,冲动多应得子、子女之事有成;子星弱而受制、不得地、或为忌而被冲激者,多应流产、子息之恙。
- **官禄(官星与月令、年柱平台)受冲**:升迁与官非两向——官星清纯、为喜用得地者,冲动多应升迁、调动、职事之变而上;官星浊杂(官煞混杂而无去留)、或为忌、或伤官见官之局被冲激者,多应官非、口舌、降级。
双向皆开时按 R-运-32 合成 2–3 个候选并排序;方向未判明前不得只落单向。
- **出处**:【拓展】综括——宫位事类据 R-运-31;宫星喜忌据 96_六亲.md/97_女命.md(婚姻应期参 R-女-24);官星清浊据 `15_偏官格.md` 取清诸条;方向判别之理承 R-事-11
- **原文**:(拓展条,无单一原文)
---
## 4. 职业取象(自建映射层)
本节为取象自建层——古籍无现代职业名目,诸条皆按十神本义(R-运-31 十神事类与各分格文件)、五行性向(《三命通会》卷七·论性情相貌、`92_调候.md` R-候-02)、宫位事类(R-运-31)之取象原理推导,逐条标注依据,全节【拓展】(非古籍明文)。只在格局定论之后供 R-运-32 候选合成之用——职业为事类取象,贵贱成败一断于格局四层,不得以职业取象反推格局高低、不回改格局结论。加载时机:问职业、行业、岗位、就业形态时加载本节。本节无原书命例基准。
### R-事-14 职业取象总序:格神定角色、五行定行业、宫位定领域、透藏定显隐
- **条件**:已定格、判成败、定用相之后,需把格局信号翻译为现代职业候选时;参 `## 四柱` 天干十神、`## 地支藏干`、`## 节令` 月令。
- **判定**:四步取象——①格神(月令用神)定角色主线:财格从商管财、官格从政管理、印格从文教学术、食伤格从技艺输出、煞格从威权高压(映射表见 R-事-15);②相神与透出有力之喜神定岗位环节:财格透官则企业管理、官格透印则行政文职、印格透食则讲授输出;③五行定行业领域:十神定「做什么角色」、五行定「在哪个行业」(R-事-16)——伤官(技术输出)配金主机械编程、配火主电子传媒;财配水主贸易物流与资金流转;④宫位定领域远近:月令为单位平台之性质、日支为日常贴身所做、年柱为大环境大类、时柱为晚来之方向或副业。多信号竞争之取舍顺序:成格之格神 > 相神 > 透出有力之十神 > 五行旺气 > 藏支不透之神——藏不透者不主外显职业形态、仍留作候选(R-禁-23 藏不透非无,不得排除);同层相竞以透干通根有力者先,皆无力以月令五行定。本节取象只供候选合成,不回改格局。
- **出处**:【拓展】据 R-运-31 十神/宫位事类、《三命通会》卷七·论性情相貌五行性向、R-禁-23 综括推导
- **原文**:(拓展条,无原文)
### R-事-15 十神→现代职业大类映射表
- **条件**:R-事-14 第①②步;取 `## 四柱` 透干十神(尤格神、相神)之角色取象。
- **判定**:十神角色→职业大类(各行末注取象依据):
| 十神 | 职业大类 | 取象依据 |
|---|---|---|
| 正官 | 公务员、行政管理、事业单位文职、企业管理岗 | 官为克我之正神,主规章、职分、名器(R-运-31:职务、上级、规章考核);官格佩印偏文职、带财偏管理 |
| 偏官(七煞) | 军警法检、外科医护、竞技体育、安保、高压行业 | 煞主威权、压力、险地(R-性-29 兵权獬豸——掌生杀兵刑);煞有制化则以技艺或学术掌威权 |
| 正财 | 实业、商贸、财务、固定薪资经营 | 财为我克之资源与营生;正财主稳定、份内、固定之财(财格用食生→实业生意) |
| 偏财 | 投资、销售业务、流通金融、自由业、偏门收入 | 偏财为流动之财、众人之财——不固定而向外取(与正财之稳定相对) |
| 正印 | 教育、学术、文化、出版、编制内、文印档案 | 印主文书、学业、单位平台、庇护(R-运-31);正印为正当之文教 |
| 偏印 | 玄学命理、心理、医药、研发、冷门偏门专业 | 偏印为生我之偏门——非正途之学;与华盖(向学孤处,R-煞-08)、太极贵人(R-煞-22)同参 |
| 食神 | 餐饮、演艺、服务、创作输出、手艺 | 食为我生之泄秀——饮食享受、表达输出(R-运-31:表达输出、口才、饮食享受) |
| 伤官 | 技术工程、艺术、批评评论、律师、自媒体 | 伤官主才华外发而傲上批驳(R-性-14 清浊);伤官见官→对抗规则(律师、评论);伤官生财→技术变现 |
| 比肩 | 合伙经营、同业连锁、体力劳务、工程协作 | 比劫为同辈之分夺与协作(R-运-31:同辈、合伙人、竞争者);身旺无依以比劫为业者主劳力 |
| 劫财 | 投机、风险行业、中介抽成、博彩 | 劫财主分夺争夺(参 R-亲-23 比劫与财之理);与偏财并见主风险取财 |
表为开放清单、非穷举(同 R-运-31 之科);表外取象须与十神本义相洽,且只在分析推理段注明。
- **出处**:【拓展】据十神生克本义(R-运-31、R-亲-02、R-性-14、R-性-29)推导,无古籍明文
- **原文**:(拓展条,无原文)
### R-事-16 五行→行业细化表
- **条件**:R-事-14 第③步;取格神、相神或透出有力之十神之五行,或全局最旺一行(R-旺-22 源流之源头)。
- **判定**:五行性向→行业领域(各行末注取象依据):
| 五行 | 行业领域 | 取象依据 |
|---|---|---|
| 木 | 文教出版、林业园艺、纺织服装、家具木材、中医药 | 木曰曲直,主生发条达、五常主仁——生发之物与文教之化育 |
| 火 | 能源电力、电子光电、传媒影视、餐饮烹饪、美容 | 火曰炎上,主明丽外显、五常主礼——光、热、影像、烹饪皆炎上之用 |
| 土 | 地产建筑、农业种植、仓储、矿产陶瓷、中介担保 | 土曰稼穑,主承载化育、五常主信——地产种植皆承载之用,中介担保取信义 |
| 金 | 机械制造、金融货币、五金、司法军警、医疗器械 | 金曰从革,主肃杀断制、五常主义——金为货币财货、为器械,肃杀为法纪 |
| 水 | 物流运输、贸易、旅游、水产、饮品、资金流转、信息网络 | 水曰润下,主流动不息、五常主智——货流、人流、资金流、信息流皆流动之用 |
行业取象以「十神角色 × 五行领域」合成:伤官配金→机械/编程(技术输出于金之器械),伤官配火→电子/影视(技术输出于火之光影),财配水→贸易/金融(财于水之流通),食神配火→餐饮(饮食于火之烹饪)。五行只细化行业领域,不定角色贵贱。
- **出处**:【拓展】据五行性向(《三命通会》卷七·论性情相貌:木名曰曲直、火炎上、土稼穑、金从革、水润下,五常仁礼信义智)推导,无古籍明文
- **原文**:(拓展条,无原文)
### R-事-17 就业形态判读:受薪/自营/专业技术/自由偏门/居家不就业
- **条件**:问职业之形态(受雇或自营、稳定或迁徙、就业或居家)时;参 `## 四柱` 透干十神之配置与格局成败。
- **判定**:形态五辨——①受薪管理:官印相生、财官双美、禄格用官者依托平台(官=组织规章、印=单位文书);②自营经商:财格用食生、偏财透而有根、财食并透者自创营生(财=资源、食=生计手段);③专业技术:食伤吐秀为格为用、伤官佩印者以一技立身;④自由偏门:偏财、偏印、劫财用事而无官者无组织约束(官=规章约束);⑤居家不就业:格局成败定富贵层次、不定就业形态——财官成格、身旺者亦可居家不就业,不得以「成格」「身旺」排除居家候选;形态信号:财官印食皆藏支不透、或透而虚浮无生克通道者,事业不向外显;女命夫子星成局而己身财官不透者,多应家庭主妇形态(参 R-女-30——身旺无官、财星得令得局亦为上格,格高不必任职)。稳定度:格神单一清纯、坐实月令无冲者主一业到底;用神多而杂者(R-性-15)、岁运屡引变格者(R-运-16)主职业多迁。
- **出处**:【拓展】据格局四层与事类之分工(R-事-01)、R-禁-23(藏不透非无、无路径非反证)、R-女-30 综括推导
- **原文**:(拓展条,无原文)
### R-事-18 易混职业对照判例(五组)
- **条件**:职业候选落于相邻取象、难以取舍时;对照 R-事-15/16 合成之候选。
- **判定**:五组易混对照——①管财文职(会计、出纳、财务)vs 应酬交际(销售、公关、业务):同为财星取象,正财配印→管财文职(正财主份内钱粮、印主账册文书),偏财配食伤→应酬交际(偏财主流动众财、食伤主口才接人);②餐饮 vs 金融:食神配火→餐饮(食主饮食、火主烹饪),财配金水→金融(金为货币、水主流通——资金之流转);③玄学命理风水咨询:偏印为主、华盖或太极贵人同见(R-煞-08、R-煞-22),以偏门学术为业;④教师:印与食伤并透而清者(印=教育平台、食伤=讲授输出),单印无食者偏学术研究或行政静态岗;⑤冷门职业表无对应者:先拆取象元件(十神角色×五行领域×宫位)再重组,不得以「表无此项」排除(R-禁-23 无路径非反证)。
- **出处**:【拓展】据 R-事-15/16 映射之交参推导
- **原文**:(拓展条,无原文)
---
## 5. 学业取象(学历判读之双向)
本节补「学历高低」事类之取象程序——科第贵贱之格局判定在 `93_性情.md` 出身章(R-性-24~27),文昌之细节参看在 `94_神煞细节.md`(R-煞-18);本节只作学历判读之通道补充与反向判例,全节【拓展】。加载时机:问学历、学业成败时加载本节。本节无原书命例基准。
### R-事-19 学历判读多通道:印为主星而非单轨
- **条件**:问学历、学业成败时;参 `## 四柱` 印与食伤之透藏根气、`## 节令` 五行旺气、学龄段(约 6–25 岁)之 `## 大运`/`## 流年`。
- **判定**:印为学历主星而非唯一通道,判读四序——①正印通道:印透清有根、为格局喜用,主与文书学业有缘;②秀气旁路:印藏不透、印弱受冲者不据此断无学(R-禁-23 藏不透非无)——转查食伤吐秀(泄秀主文气,R-印-05 印格用伤食泄秀、R-煞-18 之科)与五行气势:水旺主智(《三命通会》卷七「水……五常主智……旺相则机关深远,足智多谋,学识过人」),金白水清、木火通明(R-伤-18/20 之科)皆秀气通道;③行运扶抑:学历定于学龄段大运流年对印食秀气之扶抑——学龄段行运帮扶秀气者学历上抬,破印坏食者下压(R-性-26「运途不济、破其清气」之科);④格局清浊定档:科第贵贱终以格局清浊为断(R-性-25 清得尽发黄榜),印食只定「与学之缘」。
- **出处**:【拓展】据 R-煞-18(学业成败一断于格局印食)、R-印-05、R-性-25/26、《三命通会》卷七·论性情相貌(水主智)综括推导
- **原文**:「水属北方,名曰润下,五常主智……旺相则机关深远,足智多谋,学识过人。」(《三命通会》卷七·论性情相貌——本条判读程序为拓展综括,此引句为其五行气势一翼之书证)
### R-事-20 印透未必为学:印星之反向判例
- **条件**:`## 四柱` 印透干,而见下列情形之一:印重身旺无所泄;贪财坏印(R-印-12);印夺食(R-食-09);印为格局之忌。
- **判定**:印透只表「与文书有缘」,不保证学历向上——印重身旺无所泄者窒而不秀;贪财坏印、印夺食者主学业中断或学历受损;印为忌神者,印透反主为文书所累、学历不扬。双向判读之要:印旺为学、印弱未必无学(R-事-19 秀气旁路)、印透未必为学——三义并存,单向直读皆误。
- **出处**:【拓展】据 R-印-12(贪财破印)、R-食-09(枭印夺食)、R-煞-18 之科综括推导
- **原文**:(拓展条,无原文)
---
## 6. 健康部位取象
本节补健康问之部位定位——五脏虚实、病之轻重在 `93_性情.md` 疾病章(R-性-32~39),本节只作「病在何部位」之定位取象:干支脏腑部位书证《三命通会》卷七·论疾病先知五脏六腑所属干支,宫位粗架为【拓展】推导。加载时机:问健康、疾病部位时加载本节。本节无原书命例基准。
### R-事-21 天干配脏腑外躯歌
- **条件**:健康问需定位病位时;以 `## 四柱` 中受克、受刑冲、临死绝之天干定位。
- **判定**:天干脏腑——甲胆、乙肝、丙小肠、丁心、戊胃、己脾、庚大肠、辛肺、壬膀胱(三焦同寄)、癸肾(包络同归);天干外躯——甲头、乙顶、丙肩、丁心(胸)、戊肋、己腹、庚脐、辛股、壬胫、癸足。凡某干受克、受刑冲、临死绝而成疾者,先查本表定脏腑与外躯;「凡十干受病属六腑,十二支受病属五脏」——干病多在腑与外躯,支病多在脏(与 `93_性情.md` R-性-34 忌神入五脏之科互参)。
- **出处**:【原书】《三命通会》卷七·论疾病先知五脏六腑所属干支
- **原文**:「甲胆乙肝丙小肠,丁心戊胃己脾乡;庚是大肠辛属肺,壬系膀胱癸肾藏;三焦亦向壬中寄,包络同归入癸乡。」「甲头乙顶丙肩求,丁心戊肋己属腹;庚是脐轮辛属股,壬胫癸足一身由。」「六腑通于九窍,凡十干受病属六腑,十二支受病属五脏。」
### R-事-22 地支配脏腑部位歌与病之上下左右
- **条件**:同上,以受克、受刑冲之支定位;并参五行方位定病位之上下左右。
- **判定**:地支脏腑部位——子膀胱水道耳、丑胞肚及脾、寅胆与两手、卯十指内肝、辰皮肩胸、巳面咽齿、午眼目精神、未胃脘脊梁、申大肠经络肺、酉精血小肠、戌命门腿踝足、亥头及肾囊。五行方位定病位:火局(丙丁巳午)主病在上,水局(壬癸亥子)主病在下,木(甲乙寅卯)主左,金(庚辛申酉)主右,土(戊己辰戌丑未)主脾胃及中脘。头、脑、目之疾取象:甲头乙顶、亥为头、午火司眼目精神、火局在上——甲乙木受庚辛申酉之克者外主头目眩晕,火遭水克者主眼目暗昏。
- **出处**:【原书】《三命通会》卷七·论疾病先知五脏六腑所属干支
- **原文**:「子属膀胱水道耳,丑为胞肚及脾乡;寅胆发脉并两手,卯本十指内肝方;辰土为皮肩胸类,已面咽齿下宾肛;午火精神司眼目,未土胃腕隔脊梁;申金大肠经络肺,酉中精血小肠藏;戌土命门腿踝足,亥水为头及肾囊。」「丙丁己午火局南离,主病在上;壬癸亥子水局北坎,主病在下;甲乙寅卯属震,主病在左;庚辛申酉属兑,主病在右;戊己辰戌丑未属坤艮,主病在脾胃及中脘。」「眼目暗昏,必是火遭水克。」
> 存疑:「已面咽齿」之「已」当作「巳」,「胃腕」当作「胃脘」,「丙丁己午」之「己」疑为「巳」之讹;原文照引,判定已从正字。
### R-事-23 死绝成疾与相克成疾之部位细则
- **条件**:某五行于 `## 节令` 失时、于 `## 四柱` 无气临死绝,或两五行相克而无通关(R-旺-23)。
- **判定**:死绝成疾——水死绝主肾气腰足、滑泄便溺;火死绝主肠气结塞、惊悸健忘、精神不安;木死绝主虚风目涩眩晕、筋急爪枯;金死绝主气虚喘急咳嗽、皮毛焦燥、大肠泄痢便血;土死绝主面黄减食、肢体怠惰、嗜睡神浊。相克成疾——金火相克:生旺主疡疮瘫肿、死绝主痨瘵呕血;金木相克:生旺主肢足骨节不完与眼目之疾、死绝主气虚精脱瘫痪;土木相克:主疲闷昏眩、吐食症块;水土相克:主脾湿泄泻、中满痰嗽。太过与不及皆主疾——执「只取不及为疾」者必有一偏之失(与 R-性-34 有余不足之参同科)。
- **出处**:【原书】《三命通会》卷七·论疾病先知五脏六腑所属干支
- **原文**:「是以五行太过不及,皆主疾也……若只取不及为疾,必有一偏之失。」「水死绝,多肾气腰足攻注,滑泄便溺不利之疾;火死绝,主肠气结塞、惊悸健忘,精神不安之疾;木死绝虚风目涩眩晕,筋急、爪甲桔悴……金死绝,主气虚喘急、咳嗽、皮毛焦燥干啬、骨节疼痛……大肠泄痢、便血之疾;土死绝,主面黄、减食、隔噻吐逆、肢体怠惰、喜卧嗜睡……」「金火相克,生旺则疡疮瘫肿,死绝则痨瘵呕血;土木相克,生旺主疲闷昏眩……金木相克,生旺主肢足骨节不完、眼目之疾,死绝主气虚精脱、痨疾瘫痪之疾;水土相克,主脾湿泄泻、中满痰嗽不利之疾。」
### R-事-24 宫位×部位粗架(年头月胸日腹时足)与受刑冲为触发
- **条件**:部位定位需参宫位时;`## 四柱` 某柱干支受刑冲克(R-运-29 C 组)而无解、或临死绝。
- **判定**:宫位配部位之粗架——年柱主头面上部、月柱主胸背上部躯干、日柱主腰腹、时柱主下肢腿足:由宫位长幼上下之序(R-运-31 宫位事类:年上为根、时日递下)与《三命通会》「干为天元,以象元首」「支犹人之肢节」推得。某柱之干支受刑冲克而无解者,其柱所配之部位为病位触发区;与 R-事-21/22 互参——柱位定大段、干支定细部。本条为粗架参看,不与 R-事-21/22 之细表争位。
- **出处**:【拓展】据《三命通会》卷十一·消息赋与 R-运-31 宫位事类推导
- **原文**:「干推两重,防灾於元首之间;支折三轻,慎祸於股肱之内。」(《三命通会》卷十一·消息赋——宫位四段之配为拓展推导,此引句为其干头支肢之书证)
---
## 7. 事类数量级之锚定
本节一条,补数量级(收入档位、资产量级)之锚定程序,【拓展】。加载时机:问财富收入量级、档位时加载。本节无原书命例基准。
### R-事-25 数量级问以格局高低与行运扶抑为锚,不由十神直读
- **条件**:问财富、收入、价格等数量级或档位时;已定格、评高低(R-纲-13)。
- **判定**:数量级两锚——①原局定大档:以格局高低(R-纲-13 有情有力)、财气通塞(本篇 R-事-02/04)、力量度量(`89_旺衰扶抑.md`)定富贵/小康/温饱/贫寒之大档;②行运定档内浮动:以所问时段运年之扶抑(R-运-02/03)定档内升降。十神旺衰直读不出档位——财旺不即大富、财弱不即赤贫;身财两停、财气通门户者方论富档,财重身轻者反主为财所累(R-事-04 之科)。不得以单一财星之旺衰多寡直断金额档位。
- **出处**:【拓展】据 R-纲-13、本篇 R-事-02/04、R-运-02/03 综括推导
- **原文**:(拓展条,无原文)
<!-- 副本 LY-20261007-AC63 · 授权对象 normal --> <!-- 副本 LY-20261007-AC63 · 授权对象 normal -->
+35 -4
View File
@@ -1,11 +1,11 @@
# 滴天髓阐微 · 性情境遇疾病(旺衰视角·细节参看层) # 滴天髓阐微 · 性情境遇疾病(旺衰视角·细节参看层)
<!-- rules_version: 1.0 --> <!-- rules_version: 1.0 -->
<!-- 蒸馏自 sources/滴天髓阐微/58_下篇·性情.md、42_下篇·才德.md、43_下篇·奋郁.md、44_下篇·恩怨.md、60_下篇·出身.md、61_下篇·地位.md、59_下篇·疾病.md(《滴天髓阐微》下篇七章,含原注与任氏曰)。 --> <!-- 蒸馏自 sources/滴天髓阐微/58_下篇·性情.md、42_下篇·才德.md、43_下篇·奋郁.md、44_下篇·恩怨.md、60_下篇·出身.md、61_下篇·地位.md、59_下篇·疾病.md(《滴天髓阐微》下篇七章,含原注与任氏曰)。§9 形貌与内外向为 2026-10-13 增补——R-性-40~42 书证《三命通会》卷七·论性情相貌,R-性-43 为取象拓展;只作对人细节参看。 -->
<!-- 分层定位:滴天髓为旺衰(扶抑顺逆)体系,与真诠月令格局法不同源。本篇一切条目为「对人」之细节参看(性情、才德、奋郁、恩怨、出身、地位、疾病),只在 00_总纲_取格.md 定格、分格文件判成败定用相评高低之后叠加,绝不回改格局四层结论。篇中「用神」「喜神」「忌神」皆滴天髓旺衰扶抑口径,与真诠月令用神名同实异,引用时按命局气势之强弱顺逆理解,仅与格局喜忌作方向对照。凡涉及另立取格者(滴天髓八格、从象、化象、假从假化、顺局反局等章)一律不取,偶见于本篇七章行文中的从旺从弱之理,只取其性情参看之义。 --> <!-- 分层定位:滴天髓为旺衰(扶抑顺逆)体系,与真诠月令格局法不同源。本篇一切条目为「对人」之细节参看(性情、才德、奋郁、恩怨、出身、地位、疾病),只在 00_总纲_取格.md 定格、分格文件判成败定用相评高低之后叠加,绝不回改格局四层结论。篇中「用神」「喜神」「忌神」皆滴天髓旺衰扶抑口径,与真诠月令用神名同实异,引用时按命局气势之强弱顺逆理解,仅与格局喜忌作方向对照。凡涉及另立取格者(滴天髓八格、从象、化象、假从假化、顺局反局等章)一律不取,偶见于本篇七章行文中的从旺从弱之理,只取其性情参看之义。 -->
<!-- 加载时机:用户问及性情、才性、德行、境遇(奋发郁困、出身、地位)、健康等细节时方加载;不问不加载。 --> <!-- 加载时机:用户问及性情、才性、德行、境遇(奋发郁困、出身、地位)、健康等细节时方加载;不问不加载。问身材形貌、外向内向时加载 §9。 -->
<!-- 出处标注:【原书】指《滴天髓阐微》原文(含原注、任氏曰);真诠无性情疾病专篇,本篇无真诠原文。 --> <!-- 出处标注:【原书】指《滴天髓阐微》原文(含原注、任氏曰);真诠无性情疾病专篇,本篇无真诠原文。§9 之【原书】指《三命通会》原文。 -->
<!-- 命例基准:tests/golden/93_性情.yaml(116 例,下篇·性情/才德/奋郁/恩怨/出身/地位/疾病七章自带命例全收;库版本 3.1 第三轮验证 115 match / 1 unverifiable)。 --> <!-- 命例基准:tests/golden/93_性情.yaml(116 例,下篇·性情/才德/奋郁/恩怨/出身/地位/疾病七章自带命例全收;库版本 3.1 第三轮验证 115 match / 1 unverifiable)。§9 增补条无原书命例基准。 -->
**分层声明:本篇为细节参看层。真诠格局法不论性情疾病之细,滴天髓此七章系旺衰扶抑顺逆视角之断语。本篇内容只用于格局定论(取格、成败、用神相神、高低)之后对「人」的细节参看,不回改格局结论,不另立格局。** **分层声明:本篇为细节参看层。真诠格局法不论性情疾病之细,滴天髓此七章系旺衰扶抑顺逆视角之断语。本篇内容只用于格局定论(取格、成败、用神相神、高低)之后对「人」的细节参看,不回改格局结论,不另立格局。**
@@ -289,4 +289,35 @@
- **出处**:【原书】《滴天髓阐微》下篇·疾病 - **出处**:【原书】《滴天髓阐微》下篇·疾病
- **原文**:「如木之病何如,又看木是日主之何神,若木是财而能发土病,则断其财之衰旺,妻之美恶,父之兴衰。」「然与人事可相通也,不可专执而论……宜仔细推详,不可执一而论也。」 - **原文**:「如木之病何如,又看木是日主之何神,若木是财而能发土病,则断其财之衰旺,妻之美恶,父之兴衰。」「然与人事可相通也,不可专执而论……宜仔细推详,不可执一而论也。」
---
## 9. 形貌与内外向(《三命通会》卷七补 + 取象拓展)
本节补形貌(身材面貌)与内外向之判——本篇 §2 原有诸条论五行之「性」,本节补其未备之「形」与「向」:五行旺衰×形貌、格局×生旺死绝×内外向书证《三命通会》卷七·论性情相貌;十神×内外向一条为取象拓展。只作对人细节参看,不回改格局(同 R-性-01)。加载时机:问身材、面貌、体态、外向内向时加载本节。本节无原书命例基准。
### R-性-40 五行旺相×身形形貌表
- **条件**:问身材、面貌、体态时;取 `## 四柱` 中最旺之五行(`## 节令` 参旺度)为主,兼看日主之五行。
- **判定**:五行旺相者之形貌——木:丰姿秀丽、骨格修长、手足纤腻、口尖发美、面色青白;火:面貌上尖下阔、形体头小脚长、眉浓、精神闪烁、语言急速;土:背圆腰阔、鼻大口方、面肥色黄、度量宽厚;金:骨肉相应、体健神清、面方白净、眉高眼深、声音清亮;水:面黑光彩、语言清和。总则:生旺者主长大,死绝者主矮小;有煞临者不在此限,又从煞上断。形貌取象以命中「最旺之行」为主,不独看日主。
- **出处**:【原书】《三命通会》卷七·论性情相貌
- **原文**:「丰姿秀丽,骨格修长,手足纤腻,口尖发美,面色青白,语句轩昂,此则木盛多仁之义。」「面貌上尖下阔,形体头小脚长,印堂窄而眉浓,鼻准露而耳小;精神闪烁,语言急速。」「背圆腰阔,鼻大口方,眉清目秀,面肥色黄;度量宽厚,处事有方。」「骨肉相应,体健神清,面方白净,眉高眼深,鼻直耳红,声音清亮,刚毅果决。」「面黑光彩,语言清和。」「大抵生旺者主长大,死绝者主矮小。若有煞临,不在此限,又从煞上断。」
### R-性-41 五行休囚太过不及×形貌变格
- **条件**:同上,而所取之五行休囚、死绝,或太过、不及。
- **判定**:形貌变格——木休囚:瘦长发少;木死绝:眉眼不正、肌肉干燥、项长喉结、行坐不稳、身多欹侧。火太过:声焦面赤、摇膝好动;火不及:黄瘦尖楞。土不及:颜色忧滞、面偏鼻低、声音重浊。金不及:身材瘦小。水不及:人物矮小。旺衰之断依 R-旺-07(以进退定,非以长生死绝定);形貌之「瘦长 vs 健壮」由此旺衰两档分——生旺主长大健硕,死绝不及时主瘦小。
- **出处**:【原书】《三命通会》卷七·论性情相貌
- **原文**:「休囚主瘦长发少……死绝则眉眼不正,悭吝鄙啬,肌肉干燥,项长喉结,行坐不稳,身多欹侧。」「太过则声焦面赤,摇膝好动。不及则黄瘦尖楞。」「不及则颜色忧滞,面偏鼻低,声音重浊。」「不及则悭吝贪酷,事多挫忘……身材瘦小。」「不及则人物矮小,行事反复。」
### R-性-42 格局×生旺死绝×外向内向
- **条件**:问性情之外向内向、开朗沉郁;已定格(`00_总纲_取格.md`),参格神或日主于 `## 节令` 之生旺死绝。
- **判定**:命入格而逢生旺者主外向——天性明白、言语声高、临事能断、好施与、多情尚义;命入贵格而逢死绝者主内向——性寡合、机深意密、多疑多忌、动拘礼节、谨顾行止、常自检约。入贱局而逢生旺者性无常、不自检束、好斗恃强;入贱局而逢死绝者性执伪、临事无断。内外向由「格局×旺绝」十字取象,不以单一十神直断。
- **出处**:【原书】《三命通会》卷七·论性情相貌
- **原文**:「命若入格而逢生旺,主天性明白,遇物不逆,动必应机,言语声高……临事能断,公平不疑,犯难不畏,平生不以财物为吝,好施与不私己……多情尚义。」「若命入贵格而逢死绝者,主为性寡合,机深意密,多疑多忌,动拘礼节,谨顾行止,修饰仪貌,常自检约,不妄设施。」「若小人之命已入贱局而逢生旺者,主性无常,不自检束,为事不顾危亡,好斗争,恃强压弱……死绝则为性淫邪,动必巧伪,畜缩执拗……临事无断,少是多非。」
> 存疑:原文「言语声高」下有「突破口大度」四字,文气不属,疑有传抄之讹;引文以省略号略去,不强解。
### R-性-43 十神主导×外向内倾向(取象拓展)
- **条件**:R-性-42 之外,以 `## 四柱` 透干有力之主导十神细参内外向与风格。
- **判定**:食伤透清有力者偏外向——我生者泄秀于外,表达欲外发;印绶重者偏内向——生我者收敛涵藏;官杀清而有力者自律拘谨——克我者约身;财星透而有力者务实外拓——我克者向外取;比劫众者合群好竞——同我者结党。多神并透以最有力者为主、余者参杂;与 R-性-42 相左时,以格局生旺死绝为主、本条为细参。各向皆取象推导(生我者敛、我生者发、克我者束、我克者取、同我者争),非古籍明文。
- **出处**:【拓展】据十神生克向背之理推导
- **原文**:(拓展条,无原文)
<!-- 副本 LY-20261007-AC63 · 授权对象 normal --> <!-- 副本 LY-20261007-AC63 · 授权对象 normal -->
+11 -1
View File
@@ -1,7 +1,7 @@
# 子平真诠 · 禁则(不得为之事) # 子平真诠 · 禁则(不得为之事)
<!-- rules_version: 1.0 --> <!-- rules_version: 1.0 -->
<!-- 本篇蒸馏批谬三篇(第二十一篇·论星辰无关格局、第二十九篇·论时说拘泥格局、第三十篇·论时说以讹传讹),为解释全程之约束:取格、成败、救应、高低、行运皆不得违。条目字段用「禁止 / 理由 / 出处 / 原文」,异于分格之「条件 / 判定」。神煞、纳音、空亡之流年流月细节参看另见 94_神煞细节.md(体系拓展层),只叠加于格局定论之后,受本篇 R-禁-01 分层约束。第四节(R-禁-20、R-禁-21)为滴天髓旺衰扶抑层之接口约束,与 89_旺衰扶抑.md 配套。文末 R-禁-22 为声明式偏离之元规则(与输出契约第 5 段联动)。 --> <!-- 本篇蒸馏批谬三篇(第二十一篇·论星辰无关格局、第二十九篇·论时说拘泥格局、第三十篇·论时说以讹传讹),为解释全程之约束:取格、成败、救应、高低、行运皆不得违。条目字段用「禁止 / 理由 / 出处 / 原文」,异于分格之「条件 / 判定」。神煞、纳音、空亡之流年流月细节参看另见 94_神煞细节.md(体系拓展层),只叠加于格局定论之后,受本篇 R-禁-01 分层约束。第四节(R-禁-20、R-禁-21)为滴天髓旺衰扶抑层之接口约束,与 89_旺衰扶抑.md 配套。R-禁-22 为声明式偏离之元规则(与输出契约第 5 段联动)。文末第五节 R-禁-23 为推理层自造必要条件之禁,与 R-运-32 排除句校验相衔。 -->
## 一、神煞星辰之禁(第二十一篇·论星辰无关格局) ## 一、神煞星辰之禁(第二十一篇·论星辰无关格局)
@@ -158,4 +158,14 @@
- **出处**:综括,无单一原文 - **出处**:综括,无单一原文
- **原文**:(综括,无单一原文) - **原文**:(综括,无单一原文)
---
## 五、自造必要条件之禁(推理层收敛纪律)
### R-禁-23 充分非必要、无路径非反证、藏不透非无
- **禁止**:①把充分条件当必要条件——有某象则某事成立,不等于无某象即排除某事:有驿马主迁动(R-煞-06),不等于无驿马排除搬迁(冲年支+印透不经驿马同样合成迁动,见 R-运-32 合成示例);②以「无某规则路径」为排除依据——规则库未载通往某候选之路,只表明本库不论此事,不构成反证:纵库中无身材专条,亦不得据此排除任何身材候选(身材取象已补入 R-性-40/41);③以藏干不透、不现论「无」——藏干静以待用(R-运-19),逢透清、会局则发(R-运-22/23):官藏不透不排除公职、财藏不透不排除经商。
- **理由**:排除须凭编号规则之正面禁断(排除句校验见 R-运-32 第 2 步),写不出编号之排除皆自造否决。充分条件不可逆用,库之未载非事之必无,藏者待用而非无。
- **出处**:(综括,无单一原文;干支动静、透清会局之论据 R-运-19/22/23)
- **原文**:(综括,无单一原文)
<!-- 副本 LY-20261007-AC63 · 授权对象 normal --> <!-- 副本 LY-20261007-AC63 · 授权对象 normal -->
+19
View File
@@ -4,6 +4,7 @@
<!-- 蒸馏自 sources/子平真诠/24_论宫分用神配六亲.md(第二十三篇·论宫分用神配六亲)、sources/子平真诠/25_论妻子.md(第二十四篇·论妻子);兼收 sources/子平真诠/05_论十干配合性情.md(第四篇·论十干配合性情)末段论六亲向背之文(附录蒸馏时按「属六亲论」移存于此,见 R-亲-19)。 --> <!-- 蒸馏自 sources/子平真诠/24_论宫分用神配六亲.md(第二十三篇·论宫分用神配六亲)、sources/子平真诠/25_论妻子.md(第二十四篇·论妻子);兼收 sources/子平真诠/05_论十干配合性情.md(第四篇·论十干配合性情)末段论六亲向背之文(附录蒸馏时按「属六亲论」移存于此,见 R-亲-19)。 -->
<!-- 用法:六亲论断在格局成败判定之后叠加(见 §7 R-亲-20);凡涉及格局喜忌处,回引 00_总纲与各分格文件。 --> <!-- 用法:六亲论断在格局成败判定之后叠加(见 §7 R-亲-20);凡涉及格局喜忌处,回引 00_总纲与各分格文件。 -->
<!-- 增补(2026-10-07):文末「## 滴天髓阐微补」节蒸馏自 sources/滴天髓阐微/35_下篇·夫妻.md、36_下篇·子女.md、37_下篇·父母.md、38_下篇·兄弟.md、41_下篇·小儿.md(R-亲-21 至 R-亲-39),属六亲应用层,不回改格局四层;与真诠系条目冲突处以真诠为准并于条内注明。 --> <!-- 增补(2026-10-07):文末「## 滴天髓阐微补」节蒸馏自 sources/滴天髓阐微/35_下篇·夫妻.md、36_下篇·子女.md、37_下篇·父母.md、38_下篇·兄弟.md、41_下篇·小儿.md(R-亲-21 至 R-亲-39),属六亲应用层,不回改格局四层;与真诠系条目冲突处以真诠为准并于条内注明。 -->
<!-- 增补(2026-10-13,取象增补层):文末「## 应期细则补」节二条(R-亲-40 六亲星入墓临死绝之岁运、R-亲-41 引动≠事成存在性先于应期)——六亲应期漏口补强;书证《三命通会》卷十二·金玉赋、卷六·附论墓运;无原书命例基准。 -->
## 1. 宫分定位 ## 1. 宫分定位
@@ -299,4 +300,22 @@
- **出处**:《滴天髓阐微》下篇·小儿 - **出处**:《滴天髓阐微》下篇·小儿
- **原文**:「其余关杀多端,尽皆谬妄,欲以何等惑人,则造何等神杀,必宜一切扫除,以绝将来之谬。」 - **原文**:「其余关杀多端,尽皆谬妄,欲以何等惑人,则造何等神杀,必宜一切扫除,以绝将来之谬。」
---
## 应期细则补(取象增补)
本节补六亲应期之二漏口:六亲星入墓、临死绝之岁运通则(R-亲-40),引动与事成之先后(R-亲-41)。书证《三命通会》卷十二·金玉赋、卷六·附论墓运;程序部分为【拓展】综括。本节无原书命例基准。
### R-亲-40 六亲星入墓、临死绝之岁运:主困顿,不即断丧
- **条件**:论六亲吉凶应期;某亲之星(父=偏财、母=正印、妻=正财、子=官煞,配属依 R-亲-02)于 `## 大运`/`## 流年` 逢其墓库之地,或临病、死、绝之宫。
- **判定**:六亲之星于岁运入墓,主该亲困顿、病弱、藏伏、远行不见——「财星入墓,必定刑妻」(刑者困顿刑伤之谓)、「旺官旺印与旺财,入墓有祸」之科;临病、死、绝之地者,主该亲力衰气弱之事类。然入墓临死绝不即断丧亡——丧亡之断仍以 R-亲-34(岁月财印斩丧于时干时支)与格局喜忌为据;墓库逢生扶、或库中藏干透清(R-运-22)者解。岁运入墓而原宫(父母看月柱、妻看日支、子看时柱,R-亲-01)同逢刑冲者,凶向加重,方向按 `91_何知事类.md` §3(R-事-10~13)定。
- **出处**:《三命通会》卷十二·金玉赋、卷六·附论墓运(书证);【拓展】综括(应期程序与「不即断丧」之限)
- **原文**:「财星入墓,必定刑妻。」(卷十二·金玉赋)「旺官旺印与旺财,入墓有祸;伤官食神并身旺,遇库兴灾。」「旺煞入墓,寿算难延。」(卷六·附论墓运)
### R-亲-41 引动≠事成:存在性先于应期
- **条件**:论婚缘、得子、六亲离合之应期;某年夫妻星、子星或相应宫位被引动(R-运-29 五组)。
- **判定**:引动只答「何时动」,不证「事之有无」——先定存在性,再论应期:①存在性看原局——婚缘之有无看夫妻星与婚姻宫(男命 R-亲-05~13、女命 R-女-04~19),得子之有无看子星与子息宫(R-亲-14~18、R-女-20~23);②原局支持其事者,引动之年方应事成(有婚缘之局逢引动,应婚恋推进、成家);③原局不支持者(夫星不现且夫宫无喜用可依、子星死绝无救之类),引动之年只应波动——感情起落、人际聚散、同居分合、相关之思虑筹划,不落「成婚」「得子」之断。本条为 R-女-25「引动但言其应」之科的先后补充:存在性不立者,纵三途交会亦不直断成婚生子。
- **出处**:【拓展】据 R-女-25、R-运-32 前提挑战之科综括推导
- **原文**:(拓展条,无原文)
<!-- 副本 LY-20261007-AC63 · 授权对象 normal --> <!-- 副本 LY-20261007-AC63 · 授权对象 normal -->
+42 -3
View File
@@ -12,7 +12,7 @@ rules/
├── 1x_正官格.md … 18_杂格.md # 分格规则,一格一文件 ├── 1x_正官格.md … 18_杂格.md # 分格规则,一格一文件
├── 89_旺衰扶抑.md # 力量度量衡与扶抑剂量(滴天髓阐微上篇;细节参看层,挂载 R-纲-13 / R-附-16~19) ├── 89_旺衰扶抑.md # 力量度量衡与扶抑剂量(滴天髓阐微上篇;细节参看层,挂载 R-纲-13 / R-附-16~19)
├── 90_行运.md # 行运通论(横切所有格局) ├── 90_行运.md # 行运通论(横切所有格局)
├── 91_何知事类.md # 何知章事类断语:富贵贫贱吉凶寿夭(滴天髓阐微,细节参看层) ├── 91_何知事类.md # 何知章事类断语:富贵贫贱吉凶寿夭(滴天髓阐微,细节参看层);§3 冲刑方向判别
├── 92_调候.md # 十干十二月调候用神(穷通宝鉴;格局高低「气候」之细化) ├── 92_调候.md # 十干十二月调候用神(穷通宝鉴;格局高低「气候」之细化)
├── 93_性情.md # 性情/才德/境遇/健康(滴天髓阐微下篇,细节参看层) ├── 93_性情.md # 性情/才德/境遇/健康(滴天髓阐微下篇,细节参看层)
├── 94_神煞细节.md # 神煞/空亡/纳音细节参看(查法书证见《命理探源》卷三、《三命通会》卷三/卷六) ├── 94_神煞细节.md # 神煞/空亡/纳音细节参看(查法书证见《命理探源》卷三、《三命通会》卷三/卷六)
@@ -92,7 +92,7 @@ rules/
→ 命中后加载对应分格文件:判成败、定用神相神、评高低 → 命中后加载对应分格文件:判成败、定用神相神、评高低
→ 需要断运时加载 90_行运.md + 分格文件「取运」节 → 需要断运时加载 90_行运.md + 分格文件「取运」节
→ 用户追问流年流月细节时加载 94_神煞细节.md(体系拓展层,只叠加、不回改格局结论) → 用户追问流年流月细节时加载 94_神煞细节.md(体系拓展层,只叠加、不回改格局结论)
→ 问性情/境遇/健康等对人细节时加载 93_性情.md;问富贵贫贱吉凶寿夭等对事断语时加载 91_何知事类.md(皆滴天髓旺衰视角,细节参看层) → 问性情/境遇/健康等对人细节时加载 93_性情.md;问富贵贫贱吉凶寿夭等对事断语时加载 91_何知事类.md(皆滴天髓旺衰视角,细节参看层);91 之 §3 冲刑方向判别另随断运加载(断年核对 R-运-34 C 组刑冲命中时必读)
→ 评高低之「气候」或行运寒暖燥湿参看时加载 92_调候.md(穷通宝鉴,只细化气候、不取代月令取格) → 评高低之「气候」或行运寒暖燥湿参看时加载 92_调候.md(穷通宝鉴,只细化气候、不取代月令取格)
→ 评高低之「有力无力」、或断运需定扶抑剂量时加载 89_旺衰扶抑.md(滴天髓阐微上篇,细节参看层;扶抑药神与月令用神同名异实,只出程度词与行运词,受 R-禁-20/21 约束) → 评高低之「有力无力」、或断运需定扶抑剂量时加载 89_旺衰扶抑.md(滴天髓阐微上篇,细节参看层;扶抑药神与月令用神同名异实,只出程度词与行运词,受 R-禁-20/21 约束)
→ 全程受 95_禁则.md 约束 → 全程受 95_禁则.md 约束
@@ -102,7 +102,46 @@ rules/
## 6. 版本与溯源 ## 6. 版本与溯源
- 规则库版本: - 规则库版本:
- **3.5**(2026-10-09)。文件头注释的 `rules_version` 标记该文件的**格式版本**;库版本以本文件为准。 - **3.9.0**(2026-10-13)。文件头注释的 `rules_version` 标记该文件的**格式版本**;库版本以本文件为准。
### 3.9.0 相对 3.8.1:
- E3 规则补强(548 → 568 条,20 文件不变)——错题反查指向取象覆盖缺口,事类/性情/行运/六亲四线补条入库:
- `91_何知事类.md` 新增 §4 职业取象五条(R-事-14 总序:格神定角色、五行定行业、宫位定领域、透藏定显隐;R-事-15 十神→现代职业大类映射表;R-事-16 五行→行业细化表;R-事-17 就业形态判读:受薪/自营/专业技术/自由偏门/居家不就业;R-事-18 易混职业对照判例五组);
- `91_何知事类.md` 新增 §5 学业取象两条(R-事-19 学历判读多通道:印为主星而非单轨;R-事-20 印透未必为学:印星之反向判例);
- `91_何知事类.md` 新增 §6 健康部位四条(R-事-21 天干配脏腑外躯歌;R-事-22 地支配脏腑部位歌与病之上下左右;R-事-23 死绝成疾与相克成疾之部位细则;R-事-24 宫位×部位粗架与受刑冲为触发);
- `91_何知事类.md` 新增 §7 数量级锚定一条(R-事-25 数量级问以格局高低与行运扶抑为锚,不由十神直读);
- `93_性情.md` 新增 §9 形貌四条(R-性-40 五行旺相×身形形貌表;R-性-41 五行休囚太过不及×形貌变格;R-性-42 格局×生旺死绝×外向内向;R-性-43 十神主导×外向内倾向【拓展】);
- `90_行运.md` 新增 R-运-40 透清方向细则(透清定「事之显现」,格局处置定「事之吉凶」)、R-运-41 多年同引动之收敛;
- `96_六亲.md` 新增 R-亲-40 六亲星入墓临死绝之岁运主困顿不即断丧、R-亲-41 引动≠事成(存在性先于应期);
- `95_禁则.md` R-禁-23 示例回修——「库中无身材专条」之反例随 R-性-40/41 入库改写(身材取象已补入),禁条本体不动;
- SKILL.md 同步——库版本引用 3.9.0、条数 568;
- 评测验证口径——3.8.1 全量基线 + 3.9 补强合并重跑 17 位命主:净 +2(翻正确认落在职业/学业/健康/形貌等目标题型);BaziQA 200 题重跑 81/200 = 40.5%(vs 官方基线 34.5%),事业维度 40%→48%、性格维度 50%→60%。
### 3.8.1 相对 3.8:
- 收敛层部分回滚(规则条数不变,548 条、20 文件)——3.8 三处收敛层修订经针对性重测(19 命主 92 题:翻正 11、翻错 14、净 −3)验证为净负增益;逐条拆解后回滚发散源、保留见效项:
- `90_行运.md` R-运-32 第 2 步排序回滚至 3.7 形态——恢复细分规则路径优先于直白取象:直白取象(五行/十神/宫位直读)不与细分规则候选同等竞争、一律居后,其出路仍为第 3 步降级保留;3.8「按证据强度排序、两路径同等竞争、细分规则仅信号相当时优先」之排序权重改写经评测认定为发散源,回滚;理由段同步修正;
- 保留——R-运-32 第 2 步末尾排除句校验(排除候选必须写出规则编号,写不出则降备选不删除)与 `95_禁则.md` R-禁-23 自造必要条件之禁,二者经评测认定为见效项;R-杂-38、R-事-10~13 及 R-运-32 其余步骤不动;
- SKILL.md 同步——库版本引用 3.8.1、条数 548 不变;直答契约第 2 段降级保留措辞(「依编号规则被排除」)与保留之排除句校验相衔,不随排序回滚改动。
### 3.8 相对 3.7:
- 收敛层修订(547 → 548 条,20 文件不变)——错题反查(备选命中 27 题、排除反噬约 17 题、自造必要条件 10 题)指向收敛层,三处改进入库:
- `90_行运.md` R-运-32 排序改写——候选按证据强度(与盘面信号之吻合度)排序,不按规则层级分先后:直白取象(五行/十神/宫位直读)与细分规则合成路径同等竞争,细分规则仅在信号强度相当时优先;3.7 所加降级保留随之整合——「被规则路径排除」改为「依编号规则被排除」,直白取象不再一律居下;
- R-运-32 第 2 步新增排除句校验——排除候选必须写出具体规则编号,写不出编号的排除不成立,该候选降为备选、不得删除;
- `95_禁则.md` 新增第五节 R-禁-23 自造必要条件之禁(充分非必要、无路径非反证、藏不透非无,各配反例),与排除句校验相衔;
- SKILL.md 同步——库版本引用 3.8、条数 548;直答契约第 2 段降级保留措辞随 R-运-32 同步。
### 3.7 相对 3.6:
- 规则推理层「剪枝上锁」(542 → 547 条,20 文件不变)——对照评测发现规则推理层存在「强制剪枝误杀」(正解信号出现在推理留档却被规则显式排除),三条改进入库:
- `90_行运.md` R-运-32 修订——「一个主答案+置信度」之直答收敛保留,新增**降级保留**:被规则路径排除、但存在直白取象路径支撑(五行/十神/宫位直接取象可达)的候选不得删除,只能降级为备选并在分析推理段留档;主答案置信度不足「高」(只能定到窗口、定不了,或规则结论与直白取象相分歧)时直答必须带备选。R-运-32 排序依据与 R-运-34 五步核对第 4 步同步接入冲刑方向判别;
- `19_杂格.md` 新增 R-杂-38 从格临界双轨——从财从煞判定落于临界(日主仅一微根、合化存疑、透干不稳)时两轨并推:按从格与按正格身弱各给结论,行运喜忌两轨对照呈现并注明临界因素;不得凭单一闸门要件疑似不备即一票退回正格,退回后从格轨仍留档为备选。`00_总纲_取格.md` §1 第六步同步指向(路由器文,不增条数);
- `91_何知事类.md` 新增 §3 冲刑方向判别四条(R-事-10 冲刑为动不自带吉凶、R-事-11 喜用受冲刑凶向忌神受冲刑吉向兼衰旺冲拔、R-事-12 冲合互见之转化先凶后吉先分后合、R-事-13 宫位×十神方向细化:婚姻宫/子女宫/官禄受冲之双向判别)——书证《滴天髓阐微》上篇·地支「旺者冲衰衰者拔,衰神冲旺旺神发」及任氏曰「去凶神则利,去吉神则不利」,R-事-13 为【拓展】综括条;本节随断年核对(R-运-34 C 组命中)加载;
- 全库强制剪枝措辞排查(「不得/绝不/排除/必不/剪除/不予考虑」)——纪律类(95 禁则全篇、89/91/92/93/94 分层定位条、R-纲-00/16 体系闸门、96/97 表述纪律、90 程序纪律)不动;判断类中辨谬防直断条(R-杂-04、R-纲-11、R-附-02/06/19 等辨谬条、96「不得一见比劫阳刃即断克妻」、97「不得一见女命伤官即直断克夫」等,本身即反误杀)不动;判断类之收敛/闸门条按上三条改进补降级保留或双轨机制;
- SKILL.md 同步——库版本引用 3.7、条数 547;直答契约补「降级保留」(置信度非高必带备选);阶段纪律增「从格/正格临界两轨并推」之声明项。
### 3.6 相对 3.5:
- 询问契约改对话式(规则条数不变,542 条、20 文件)——SKILL.md Intake 节改「对话式询问(强制)」(禁用结构化问卷/点选工具与正文编号选项清单,一次最多 1~2 问、先铺垫再问),断运交互节同步;
- `90_行运.md` R-运-33 措辞随之修订——原「具备询问工具时必须用询问工具,否则以正文编号选项代替」「核对用结构化选项、多锚点年合成一次提问」改为对话式口径(普通对话消息、一次最多一两个锚点、先铺垫再问、答完再定下一个);
- 核对前置的内部程序(场景分流、锚点选取、候选排序、证伪回查、收敛后一次性输出)不变。
### 3.5 相对 3.4: ### 3.5 相对 3.4:
- description 改写为按问题域与使用场景触发;新增 R-禁-22 声明式偏离通道;R-运-31 事类映射表改开放清单措辞;规则计数相应更新(541 → 542 条,20 文件不变)。 - description 改写为按问题域与使用场景触发;新增 R-禁-22 声明式偏离通道;R-运-31 事类映射表改开放清单措辞;规则计数相应更新(541 → 542 条,20 文件不变)。
+9
View File
@@ -18,12 +18,17 @@ from __future__ import annotations
import hashlib import hashlib
import json import json
import os
import secrets import secrets
from datetime import date from datetime import date
from pathlib import Path from pathlib import Path
_ENABLED = True # 软锁总开关:False = 完全放行 _ENABLED = True # 软锁总开关:False = 完全放行
# 评测豁免:环境变量 ZIPEC_EVAL=1 时 check/consume 直接放行——
# 跑测试集复测不签发、不扣次、不创建任何文件(见 评测/测试规则.md)。
_EVAL_ENV = "ZIPEC_EVAL"
_SALT = "lingyao-miaojie-ziping-eightchar" _SALT = "lingyao-miaojie-ziping-eightchar"
_COMPANY = "四川灵爻妙解文化传播有限公司" _COMPANY = "四川灵爻妙解文化传播有限公司"
STATE_REL = Path("data") / ".license.json" STATE_REL = Path("data") / ".license.json"
@@ -78,6 +83,8 @@ def check(root: Path) -> str | None:
"""返回 None 表示放行;返回字符串表示拒跑原因(由调用方打印到 stderr,退出码 4)。""" """返回 None 表示放行;返回字符串表示拒跑原因(由调用方打印到 stderr,退出码 4)。"""
if not _ENABLED: if not _ENABLED:
return None return None
if os.environ.get(_EVAL_ENV) == "1":
return None # 评测豁免:不签发、不扣次、不创建任何文件
st = _load(root) st = _load(root)
if st is None: if st is None:
if (root / PUBLIC_MARKER_REL).is_file(): if (root / PUBLIC_MARKER_REL).is_file():
@@ -101,6 +108,8 @@ def consume(root: Path) -> None:
"""成功排盘一次后扣减一次。仅在 check 放行后调用。""" """成功排盘一次后扣减一次。仅在 check 放行后调用。"""
if not _ENABLED: if not _ENABLED:
return return
if os.environ.get(_EVAL_ENV) == "1":
return # 评测豁免:不扣次、不写状态文件
st = _load(root) st = _load(root)
if st is None: if st is None:
return return
+32
View File
@@ -0,0 +1,32 @@
"""运行环境守卫:本技能脚本需要 Python ≥ 3.10。
各入口脚本在 sys.path 引导后立即 import 本模块(import 即检查,无其他调用):
解释器低于 3.10 时在 stderr 打印中文提示并以退出码 3 结束,
避免用户看到库深处难以理解的报错(运行期 `X | None` 注解在 3.9 及以下
求值即 TypeError,报错位置离真正原因很远)。
本模块自身只用 Python 3.6 兼容语法,保证在旧解释器上也能正常执行检查。
"""
from __future__ import annotations
import sys
MIN_PYTHON = (3, 10)
def version_error(version_info=None) -> str | None:
"""版本达标返回 None;不足时返回中文报错文案。可注入 version_info 便于测试。"""
vi = sys.version_info if version_info is None else version_info
if tuple(vi[:2]) >= MIN_PYTHON:
return None
return (f"运行环境不可用:本技能脚本需要 Python {MIN_PYTHON[0]}.{MIN_PYTHON[1]} "
f"或更高版本,当前解释器为 Python {vi[0]}.{vi[1]}.{vi[2]}"
f"({sys.executable})。请改用更新版本的 Python 运行"
"(macOS 系统自带 python3 为 3.9,不可用;可用 python3.11/3.12/3.13 "
"或项目自带虚拟环境)。")
_msg = version_error()
if _msg is not None:
print(f"ERROR: {_msg}", file=sys.stderr)
raise SystemExit(3)
+128
View File
@@ -0,0 +1,128 @@
"""纯 Python ed25519(RFC 8032)签名与验签,零依赖,仅用标准库。
self_update.py --apply 用其中的 verify() 校验 manifest.json 签名;
tools/sign_manifest.py 用 sign() 生成签名。验签性能不在关键路径上
(每次更新只验一次),实现取教科书式的扩展坐标点运算,求正确不求快。
密钥编码:私钥 = 32 字节种子(hex/base64 存储);公钥 = 32 字节 RFC 8032
标准压缩编码;签名 = 64 字节 R‖S。
"""
import hashlib
# 域参数:GF(2^255 - 19),曲线 -x² + y² = 1 + d·x²·y²
_P = 2 ** 255 - 19
_Q = 2 ** 252 + 27742317777372353535851937790883648493 # 群的阶
_D = (-121665 * pow(121666, _P - 2, _P)) % _P
_I = pow(2, (_P - 1) // 4, _P) # sqrt(-1)
def _xrecover(y: int) -> int:
xx = (y * y - 1) * pow(_D * y * y + 1, _P - 2, _P) % _P
x = pow(xx, (_P + 3) // 8, _P)
if (x * x - xx) % _P != 0:
x = x * _I % _P
if x & 1:
x = _P - x
return x
_BY = (4 * pow(5, _P - 2, _P)) % _P
_BX = _xrecover(_BY)
# 基点(扩展坐标 x, y, z, t,x=X/Z, y=Y/Z, t=XY/Z)
_B = (_BX, _BY, 1, _BX * _BY % _P)
_IDENTITY = (0, 1, 1, 0)
def _point_add(P, Q):
x1, y1, z1, t1 = P
x2, y2, z2, t2 = Q
a = (y1 - x1) * (y2 - x2) % _P
b = (y1 + x1) * (y2 + x2) % _P
c = 2 * _D * t1 * t2 % _P
d = 2 * z1 * z2 % _P
e, f, g, h = b - a, d - c, d + c, b + a
return (e * f % _P, g * h % _P, f * g % _P, e * h % _P)
def _scalarmult(P, e: int):
Q = _IDENTITY
while e > 0:
if e & 1:
Q = _point_add(Q, P)
P = _point_add(P, P)
e >>= 1
return Q
def _encode_point(P) -> bytes:
x, y, z, _t = P
zi = pow(z, _P - 2, _P)
x, y = x * zi % _P, y * zi % _P
return (y | ((x & 1) << 255)).to_bytes(32, "little")
def _decode_point(s: bytes):
if len(s) != 32:
raise ValueError("点编码长度须为 32 字节")
y = int.from_bytes(s, "little") & ((1 << 255) - 1)
if y >= _P:
raise ValueError("点编码 y 坐标越界")
x = _xrecover(y)
if (x & 1) != (s[31] >> 7):
x = _P - x
if (-x * x + y * y - 1 - _D * x * x * y * y) % _P != 0:
raise ValueError("点不在曲线上")
return (x, y, 1, x * y % _P)
def _hint(m: bytes) -> int:
return int.from_bytes(hashlib.sha512(m).digest(), "little")
def _secret_expand(seed: bytes):
if len(seed) != 32:
raise ValueError("私钥种子须为 32 字节")
h = hashlib.sha512(seed).digest()
a = int.from_bytes(h[:32], "little")
a &= (1 << 254) - 8
a |= 1 << 254
return a, h[32:]
def publickey(seed: bytes) -> bytes:
"""32 字节种子 → 32 字节公钥。"""
a, _prefix = _secret_expand(seed)
return _encode_point(_scalarmult(_B, a))
def sign(seed: bytes, msg: bytes) -> bytes:
"""RFC 8032 确定性签名:64 字节 R‖S。仅发版工具(tools/)使用。"""
a, prefix = _secret_expand(seed)
A = publickey(seed)
r = _hint(prefix + msg) % _Q
R = _encode_point(_scalarmult(_B, r))
S = (r + _hint(R + A + msg) * a) % _Q
return R + S.to_bytes(32, "little")
def verify(pk: bytes, msg: bytes, sig: bytes) -> bool:
"""验签:通过返回 True;任何不符(含畸形输入)返回 False,不抛异常。"""
if len(pk) != 32 or len(sig) != 64:
return False
R, s = sig[:32], int.from_bytes(sig[32:], "little")
if s >= _Q:
return False
try:
A = _decode_point(pk)
Rpt = _decode_point(R)
except ValueError:
return False
h = _hint(R + pk + msg) % _Q
# [S]B == R + [h]A
return _encode_point(_scalarmult(_B, s)) == _encode_point(
_point_add(Rpt, _scalarmult(A, h)))
def fingerprint(pk: bytes) -> str:
"""公钥指纹:SHA256(公钥) 十六进制,用于注释与审计对照。"""
return hashlib.sha256(pk).hexdigest()
+10 -4
View File
@@ -3,9 +3,14 @@ from datetime import datetime, timedelta
ZI_HOUR_START = 23 # 真太阳时 23:00 换日 ZI_HOUR_START = 23 # 真太阳时 23:00 换日
def resolve_calendar_day(tst: datetime) -> tuple[datetime, dict]: def resolve_calendar_day(tst: datetime, rule: str = "子初") -> tuple[datetime, dict]:
""" """
子初换日:真太阳时 23:00–24:00 归入次日。 日界归算与审计:rule="子初"(默认)真太阳时 23:00–24:00 归次日;
rule="子正" 以 0:00 为日界,晚子时不换日。
注意:换日的**实际排盘效果**由 chart.tyme_adapter.cast 的 sect 参数
(tyme4py provider)原生实现;本函数返回的日历日仅供审计与外部参考,
调用方不得把它再拼回时刻传给 cast(会双重换日)。
返回 返回
(日历日 00:00 的 datetime, flag) (日历日 00:00 的 datetime, flag)
@@ -13,11 +18,12 @@ def resolve_calendar_day(tst: datetime) -> tuple[datetime, dict]:
is_late_zi = tst.hour == ZI_HOUR_START is_late_zi = tst.hour == ZI_HOUR_START
day = tst.replace(hour=0, minute=0, second=0, microsecond=0) day = tst.replace(hour=0, minute=0, second=0, microsecond=0)
if is_late_zi: if is_late_zi and rule != "子正":
day += timedelta(days=1) day += timedelta(days=1)
return day, { return day, {
"rule": "子初换日@真太阳时23:00", "rule": ("子正换日@真太阳时00:00" if rule == "子正"
else "子初换日@真太阳时23:00"),
"is_late_zi": is_late_zi, "is_late_zi": is_late_zi,
"tst_time": tst.strftime("%Y-%m-%d %H:%M:%S"), "tst_time": tst.strftime("%Y-%m-%d %H:%M:%S"),
} }
+34 -4
View File
@@ -18,6 +18,8 @@ from pathlib import Path
# 引导:无论从哪个目录调用,scripts/ 下的顶层包(geo/astro/chart/render)都可导入 # 引导:无论从哪个目录调用,scripts/ 下的顶层包(geo/astro/chart/render)都可导入
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
# 免安装:优先使用随包内置的依赖(vendor/,版本锁定 tyme4py==1.5.0 + tzdata) # 免安装:优先使用随包内置的依赖(vendor/,版本锁定 tyme4py==1.5.0 + tzdata)
# vendor 目录不存在时回退到环境中已安装的包(开发模式) # vendor 目录不存在时回退到环境中已安装的包(开发模式)
_VENDOR = Path(__file__).resolve().parents[1] / "vendor" _VENDOR = Path(__file__).resolve().parents[1] / "vendor"
@@ -37,6 +39,11 @@ def main() -> int:
help='出生时刻(当地钟表时间),格式 "YYYY-MM-DD HH:MM",时刻必需') help='出生时刻(当地钟表时间),格式 "YYYY-MM-DD HH:MM",时刻必需')
ap.add_argument("--place", required=True, ap.add_argument("--place", required=True,
help="出生地,精确到地级市一级,如「四川省成都市」") help="出生地,精确到地级市一级,如「四川省成都市」")
ap.add_argument("--html", nargs="?", const="", default=None,
help="可选:同时生成 HTML 盘面图(给路径参数,或省略则写 ./命盘_<姓名>.html)")
ap.add_argument("--shot", action="store_true",
help="可选:生成 HTML 盘面图并截图 PNG,路径打在 stdout 末尾;"
"截图工具不可用时只出 HTML")
a = ap.parse_args() a = ap.parse_args()
# 软授权锁:定制副本(含 data/.license.json)按授权次数/期限放行;母版无状态文件直接放行 # 软授权锁:定制副本(含 data/.license.json)按授权次数/期限放行;母版无状态文件直接放行
@@ -81,11 +88,13 @@ def main() -> int:
# L0-d UTC → 真太阳时(经度修正 + 均时差) # L0-d UTC → 真太阳时(经度修正 + 均时差)
tst, st_audit = to_true_solar_time(utc, loc.lon) tst, st_audit = to_true_solar_time(utc, loc.lon)
# L0-e 子初换日:真太阳时 23:00–24:00 归入次日 # L0-e 日界审计:is_late_zi 警示与口径文案;换日本身由排盘层
day, bd_audit = resolve_calendar_day(tst) # provider 口径实现(见 tyme_adapter.cast 的 sect 参数),此处不再滚日
_day, bd_audit = resolve_calendar_day(tst)
# 排盘时刻 = 换日后的日历日 + 真太阳时的时分秒 # 排盘时刻 = 真太阳时原样(晚子时的日界归算交给 tyme4py provider,
cast_dt = day.replace(hour=tst.hour, minute=tst.minute, second=tst.second) # 预先滚日会造成双重换日)
cast_dt = tst
# L1-a 排盘(tyme4py 唯一接触面) # L1-a 排盘(tyme4py 唯一接触面)
raw = cast(cast_dt, a.gender) raw = cast(cast_dt, a.gender)
@@ -130,6 +139,27 @@ def main() -> int:
print(render(chart)) print(render(chart))
_gate.consume(Path(__file__).resolve().parents[1]) _gate.consume(Path(__file__).resolve().parents[1])
# 可选:同步生成 HTML 盘面图(渲染失败不影响 stdout 契约);--shot 再截图 PNG
if a.html is not None or a.shot:
try:
from render.html import build_html
html_path = (Path(a.html) if a.html
else Path(f"命盘_{a.name}.html"))
html_path.write_text(build_html(chart), encoding="utf-8")
if a.shot:
import chart_shot
png = chart_shot.shoot(html_path)
print(f"\nHTML 盘面:{html_path.resolve()}")
if png:
print(f"盘面截图:{png}")
else:
print("盘面截图:不可用(未检测到 playwright 或 Chrome,"
"可直接打开上面的 HTML 查看盘面)")
else:
print(f"HTML 盘面:{html_path.resolve()}", file=sys.stderr)
except Exception:
print("WARN: HTML 盘面生成失败(命盘不受影响)", file=sys.stderr)
# 自更新提示:只读本地缓存往 stderr 打一行;缓存过期则后台线程刷新, # 自更新提示:只读本地缓存往 stderr 打一行;缓存过期则后台线程刷新,
# 主流程不等它(用当次缓存)。任何异常静默,绝不影响 stdout 命盘契约。 # 主流程不等它(用当次缓存)。任何异常静默,绝不影响 stdout 命盘契约。
try: try:
+68
View File
@@ -0,0 +1,68 @@
"""干支派生纯查表:五行、十神、十二长生(星运)、旬空、六十甲子纳音。
本命四柱的同名信息由 chart/tyme_adapter.py 经 tyme4py 求得;本模块为同口径的
纯 Python 实现,供岁运干支(大运/流年/流月)与渲染层复用,保证 HTML 盘面
与排盘正文口径一致。纯查表,零命理判断(P1)。
"""
GAN = "甲乙丙丁戊己庚辛壬癸"
ZHI = "子丑寅卯辰巳午未申酉戌亥"
WX_GAN = {"甲": "木", "乙": "木", "丙": "火", "丁": "火", "戊": "土",
"己": "土", "庚": "金", "辛": "金", "壬": "水", "癸": "水"}
WX_ZHI = {"子": "水", "丑": "土", "寅": "木", "卯": "木", "辰": "土",
"巳": "火", "午": "火", "未": "土", "申": "金", "酉": "金",
"戌": "土", "亥": "水"}
_YY = {"甲": 1, "丙": 1, "戊": 1, "庚": 1, "壬": 1,
"乙": -1, "丁": -1, "己": -1, "辛": -1, "癸": -1}
_SHENG = {"木": "火", "火": "土", "土": "金", "金": "水", "水": "木"}
_KE = {"木": "土", "土": "水", "水": "火", "火": "金", "金": "木"}
def ten_god(me: str, other: str) -> str:
"""other 天干相对日干 me 的十神(命名与 tyme4py get_ten_star 一致)。"""
wx_m, wx_o = WX_GAN[me], WX_GAN[other]
same = _YY[me] == _YY[other]
if wx_m == wx_o:
return "比肩" if same else "劫财"
if _SHENG[wx_m] == wx_o:
return "食神" if same else "伤官"
if _KE[wx_m] == wx_o:
return "偏财" if same else "正财"
if _KE[wx_o] == wx_m:
return "七杀" if same else "正官"
return "偏印" if same else "正印"
_TERRAIN_ORDER = ["长生", "沐浴", "冠带", "临官", "帝旺", "衰",
"病", "死", "墓", "绝", "胎", "养"]
_TERRAIN_START = {"甲": "亥", "乙": "午", "丙": "寅", "戊": "寅", "庚": "巳",
"壬": "申", "丁": "酉", "己": "酉", "辛": "子", "癸": "卯"}
def terrain(me: str, zhi: str) -> str:
"""日干 me 对地支 zhi 的十二长生(阳顺阴逆,命名与 tyme4py get_terrain 一致)。"""
start = ZHI.index(_TERRAIN_START[me])
zi = ZHI.index(zhi)
off = (zi - start) % 12 if _YY[me] == 1 else (start - zi) % 12
return _TERRAIN_ORDER[off]
def gz_void(gz: str) -> str:
"""一柱干支所在旬的空亡两支(与 tyme4py get_extra_earth_branches 同果)。"""
g, z = GAN.index(gz[0]), ZHI.index(gz[1])
return ZHI[(z - g + 10) % 12] + ZHI[(z - g + 11) % 12]
# 六十甲子纳音( pairwise ),末字即五行
_NAYIN_PAIRS = [
"海中金", "炉中火", "大林木", "路旁土", "剑锋金",
"山头火", "涧下水", "城头土", "白蜡金", "杨柳木",
"泉中水", "屋上土", "霹雳火", "松柏木", "长流水",
"沙中金", "山下火", "平地木", "壁上土", "金箔金",
"覆灯火", "天河水", "大驿土", "钗钏金", "桑柘木",
"大溪水", "沙中土", "天上火", "石榴木", "大海水",
]
_JIAZI = [GAN[i % 10] + ZHI[i % 12] for i in range(60)]
NAYIN = {gz: _NAYIN_PAIRS[i // 2] for i, gz in enumerate(_JIAZI)}
+3 -14
View File
@@ -10,21 +10,9 @@
""" """
from __future__ import annotations from __future__ import annotations
GAN = "甲乙丙丁戊己庚辛壬癸" from .ganzhi import GAN, NAYIN, ZHI
ZHI = "子丑寅卯辰巳午未申酉戌亥"
YANG_GAN = set("甲丙戊庚壬")
# 六十甲子纳音( pairwise ),末字即五行 YANG_GAN = set("甲丙戊庚壬")
_NAYIN_PAIRS = [
"海中金", "炉中火", "大林木", "路旁土", "剑锋金",
"山头火", "涧下水", "城头土", "白蜡金", "杨柳木",
"泉中水", "屋上土", "霹雳火", "松柏木", "长流水",
"沙中金", "山下火", "平地木", "壁上土", "金箔金",
"覆灯火", "天河水", "大驿土", "钗钏金", "桑柘木",
"大溪水", "沙中土", "天上火", "石榴木", "大海水",
]
_JIAZI = [GAN[i % 10] + ZHI[i % 12] for i in range(60)]
NAYIN = {gz: _NAYIN_PAIRS[i // 2] for i, gz in enumerate(_JIAZI)}
# —— 日干查地支 —— # —— 日干查地支 ——
TIANYI = {"甲": "丑未", "戊": "丑未", "庚": "丑未", TIANYI = {"甲": "丑未", "戊": "丑未", "庚": "丑未",
@@ -102,6 +90,7 @@ SANQI = ("乙丙丁", "甲戊庚", "辛壬癸")
# 输出排序(每柱内部按此序) # 输出排序(每柱内部按此序)
STAR_ORDER = [ STAR_ORDER = [
"天德", "天德合", "月德", "月德合", "天乙贵人", "太极贵人", "福星贵人", "天德", "天德合", "月德", "月德合", "天乙贵人", "太极贵人", "福星贵人",
"三奇贵人",
"文昌", "禄神", "羊刃", "金舆", "驿马", "桃花", "红艳", "华盖", "将星", "文昌", "禄神", "羊刃", "金舆", "驿马", "桃花", "红艳", "华盖", "将星",
"劫煞", "灾煞", "亡神", "元辰", "勾煞", "绞煞", "孤辰", "寡宿", "劫煞", "灾煞", "亡神", "元辰", "勾煞", "绞煞", "孤辰", "寡宿",
"天罗", "地网", "童子煞", "天赦", "魁罡", "阴差阳错", "十灵日", "十恶大败", "天罗", "地网", "童子煞", "天赦", "魁罡", "阴差阳错", "十灵日", "十恶大败",
+21 -5
View File
@@ -55,11 +55,27 @@ def _shen_sha(ganzhi: dict, gender: str) -> dict:
} }
def cast(cast_dt: datetime, gender: str) -> dict: def cast(cast_dt: datetime, gender: str, sect: int = 1) -> dict:
"""cast_dt:已完成子初换日调整的真太阳时(naive,北京时间语义)。""" """cast_dt:真太阳时(naive,北京时间语义)。
solar = SolarTime.from_ymd_hms(cast_dt.year, cast_dt.month, cast_dt.day,
cast_dt.hour, cast_dt.minute, cast_dt.second) sect:日界流派。1=子初换日(tyme4py 默认 provider,晚子时 23:xx 日柱归次日);
ec = solar.get_lunar_hour().get_eight_char() 2=子正换日(LunarSect2,晚子时日柱算当天)。晚子时的换日由 provider
原生实现,调用方不得再对 cast_dt 预先滚日(否则双重换日)。
"""
from tyme4py.eightchar.provider.impl import (
DefaultEightCharProvider, LunarSect2EightCharProvider,
)
from tyme4py.lunar import LunarHour
prev_provider = LunarHour.provider
LunarHour.provider = (LunarSect2EightCharProvider() if sect == 2
else DefaultEightCharProvider())
try:
solar = SolarTime.from_ymd_hms(cast_dt.year, cast_dt.month, cast_dt.day,
cast_dt.hour, cast_dt.minute, cast_dt.second)
ec = solar.get_lunar_hour().get_eight_char()
finally:
LunarHour.provider = prev_provider
pillars = {k: getattr(ec, f"get_{k}")() for k in _PILLARS} pillars = {k: getattr(ec, f"get_{k}")() for k in _PILLARS}
me = ec.get_day().get_heaven_stem() me = ec.get_day().get_heaven_stem()
+96
View File
@@ -0,0 +1,96 @@
#!/usr/bin/env python3
"""HTML 盘面 → PNG 截图。
用法:
python chart_shot.py <html路径> [-o 输出png路径]
截图分级回退:环境装有 playwright 则优先(file:// 全页截图,2 倍分辨率);
否则用 macOS Chrome 无头截图(固定窗口,高度按 HTML 内容估算避免截断)。
两者都不可用:退出码 2,stderr 提示直接打开 HTML。截图失败不影响排盘主流程。
"""
import argparse
import subprocess
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
CHROME = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
def _shot_playwright(html: Path, out: Path) -> bool:
try:
from playwright.sync_api import sync_playwright
except ImportError:
return False
try:
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page(device_scale_factor=2)
page.goto(html.resolve().as_uri())
page.screenshot(path=str(out), full_page=True)
browser.close()
except Exception:
return False
return out.is_file() and out.stat().st_size > 0
def _content_height(html: Path) -> int:
"""按 HTML 结构估算整页高度(px):头卡/主表/页脚取固定高,条带按格数折行。"""
text = html.read_text(encoding="utf-8", errors="ignore")
height = (900 + 40 * text.count('class="warn"')
+ 150 * text.count('class="qrcard"'))
for strip in text.split('class="strip"')[1:]:
cells = strip.count('class="cell"')
height += 36 + 132 * -(-cells // 9)
return max(1300, min(height + 120, 4200))
def _shot_chrome(html: Path, out: Path) -> bool:
if not Path(CHROME).is_file():
return False
try:
r = subprocess.run(
[CHROME, "--headless=new", f"--screenshot={out.resolve()}",
f"--window-size=1100,{_content_height(html)}",
"--force-device-scale-factor=2", "--hide-scrollbars",
html.resolve().as_uri()],
capture_output=True, timeout=60)
except Exception:
return False
return r.returncode == 0 and out.is_file() and out.stat().st_size > 0
def shoot(html: Path, out: Path | None = None) -> Path | None:
"""对 HTML 盘面截图,成功返回 PNG 绝对路径,无可用工具或失败返回 None。"""
out = out or html.with_suffix(".png")
if _shot_playwright(html, out) or _shot_chrome(html, out):
return out.resolve()
return None
def main() -> int:
ap = argparse.ArgumentParser(
prog="chart_shot.py",
description="HTML 盘面 → PNG 截图(playwright 优先,Chrome 无头兜底)")
ap.add_argument("html", help="HTML 盘面文件路径")
ap.add_argument("-o", "--out", default=None,
help="输出 PNG 路径(默认与 HTML 同目录同名 .png)")
a = ap.parse_args()
html = Path(a.html)
if not html.is_file():
print(f"ERROR: 找不到 HTML 文件 {html}", file=sys.stderr)
return 2
png = shoot(html, Path(a.out) if a.out else None)
if png:
print(png)
return 0
print("无可用截图工具(未检测到 playwright 或 Chrome),"
"请直接打开 HTML 文件查看盘面。", file=sys.stderr)
return 2
if __name__ == "__main__":
raise SystemExit(main())
+1
View File
@@ -19,6 +19,7 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
import _memory_store as store import _memory_store as store
+223 -83
View File
@@ -4,12 +4,23 @@
用法: 用法:
python memory_save.py --name 张三 --gender 男 \ python memory_save.py --name 张三 --gender 男 \
--birth "1990-05-14 08:30" --place "四川省成都市" --birth "1990-05-14 08:30" --place "四川省成都市"
# 换盘(更新既有档案盘面段):按档案重排并替换「## 盘面」,frontmatter 同步
python memory_save.py --update-chart memory/archives/丙子庚子庚辰丙子-女-2825d1.md \
[--day-boundary 子正] [--birth "校正后时刻"] [--place "校正后出生地"]
输出:档案文件路径到 stdout。 输出:档案文件路径到 stdout。
建档即一次排盘:授权副本照常过软锁、扣减一次(与 cast_chart.py 同一 check/consume 位置)。 建档即一次排盘:授权副本照常过软锁、扣减一次(与 cast_chart.py 同一 check/consume 位置)。
同主键(四柱+性别+hash6)档案已存在时只刷新 frontmatter 与「## 盘面」, 同主键(四柱+性别+hash6)档案已存在时只刷新 frontmatter 与「## 盘面」,
正文其余小节(归纳、反馈与澄清等)原样保留。档案规范见 memory/README.md。 正文其余小节(归纳、反馈与澄清等)原样保留。档案规范见 memory/README.md。
换盘模式(--update-chart):姓名/性别/出生信息默认读档案 frontmatter,
--birth/--place 用于时辰/地点校正,--day-boundary 子正 切换日界规则(默认子初)。
换盘后「## 盘面」只保留新盘(工作盘唯一),旧盘信息由使用方记入「## 反馈与澄清」;
frontmatter 的 pillars/day_master/true_solar_time 同步为新盘,文件改为新主键名
(目标已存在且非同一文件时报错退出 2,不覆盖)。四柱有变动时 stderr 列出变动柱,
提示使用方把受影响推断条目(归纳、流年大事)标记【待复核】。
退出码:0 成功;2 输入不可用;3 库内部错误;4 授权不可用(软锁,见 LICENSE.md)。 退出码:0 成功;2 输入不可用;3 库内部错误;4 授权不可用(软锁,见 LICENSE.md)。
""" """
import argparse import argparse
@@ -21,6 +32,8 @@ from pathlib import Path
# 引导:无论从哪个目录调用,scripts/ 下的顶层包(geo/astro/chart/render)都可导入 # 引导:无论从哪个目录调用,scripts/ 下的顶层包(geo/astro/chart/render)都可导入
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
# 免安装:优先使用随包内置的依赖(vendor/,版本锁定 tyme4py==1.5.0 + tzdata) # 免安装:优先使用随包内置的依赖(vendor/,版本锁定 tyme4py==1.5.0 + tzdata)
_VENDOR = Path(__file__).resolve().parents[1] / "vendor" _VENDOR = Path(__file__).resolve().parents[1] / "vendor"
if _VENDOR.is_dir(): if _VENDOR.is_dir():
@@ -28,24 +41,216 @@ if _VENDOR.is_dir():
import _memory_store as store import _memory_store as store
_PILLAR_LABELS = ("年柱", "月柱", "日柱", "时柱")
# render 层日界文案写定(scripts/render/ 不在此处改动),换盘子正时改写这两行
_AUDIT_ZICHU = "- 日界规则:子初换日(真太阳时 23:00)"
_AUDIT_ZIZHENG = "- 日界规则:子正换日(真太阳时 00:00)"
_WARN_ZICHU = ("- ⚠️ 晚子时:本造落于真太阳时 23:00–24:00,"
"已按「子初换日」归入次日。另存「子正换日」一派,"
"日柱与时柱将不同,结论需谨慎。")
_WARN_ZIZHENG = ("- ⚠️ 晚子时:本造落于真太阳时 23:00–24:00,"
"已按「子正换日」定盘(日界 0:00,不换日)。"
"另存「子初换日」一派,日柱与时柱将不同,结论需谨慎。")
def _cast_chart(name: str, gender: str, birth: str, place: str,
day_boundary: str = "子初"):
"""排盘管线(geo → astro → chart → render),与 cast_chart.py 同一调用序列。
返回 (命盘 Markdown, 四柱 list, 日主, 真太阳时 str);地点/时刻不可用抛
LocationError/ValueError(由调用方映射退出码 2)。
"""
from geo.cities import resolve_location
from astro.timezone_resolve import to_utc
from astro.solar_time import to_true_solar_time
from astro.day_boundary import resolve_calendar_day
from chart.tyme_adapter import cast
from chart.luck import (
childhood_luck, compute_luck, decade_pillars, flow_months,
flow_years, is_forward, luck_label_for_year,
)
from chart.model import build_chart_data
from render.markdown import render
# L0-a 地点解析(失败抛 LocationError → 退出码 2)
loc = resolve_location(place)
# L0-b 出生时刻解析
clock = datetime.strptime(birth.strip(), "%Y-%m-%d %H:%M")
# L0-c 当地钟表时间 → UTC(含历史时区/夏令时审计)
utc, tz_audit = to_utc(clock, loc)
# L0-d UTC → 真太阳时(经度修正 + 均时差)
tst, st_audit = to_true_solar_time(utc, loc.lon)
# L0-e 日界审计:is_late_zi 警示与口径文案;换日由排盘层 provider
# 口径实现(sect 参数),此处不再对时刻预先滚日(避免双重换日)
_day, bd_audit = resolve_calendar_day(tst, rule=day_boundary)
cast_dt = tst
# L1-a 排盘(tyme4py 唯一接触面);子正口径走 sect=2(晚子时日柱算当天)
raw = cast(cast_dt, gender, sect=2 if day_boundary == "子正" else 1)
# L1-b 起运、大运、流年、流月、小运
forward = is_forward(gender, raw["year"]["gan"])
luck = compute_luck(
birth_tst=tst,
prev_jie_time=raw["prev_jie"]["time"],
next_jie_time=raw["next_jie"]["time"],
forward=forward,
)
this_year = datetime.now().year
n_pillars = max(
8,
int((this_year + 9 - cast_dt.year - luck["start_age_years"]) / 10) + 2,
)
decade = decade_pillars(
raw["month"]["gan"], raw["month"]["zhi"], forward,
luck["start_age_years"], cast_dt.year, n=n_pillars,
)
years = [
(y, gz, luck_label_for_year(y, decade))
for y, gz in flow_years(cast_dt.year, this_year, 10)
]
months = flow_months(this_year)
childhood = childhood_luck(
raw["hour"]["gan"], raw["hour"]["zhi"], forward,
luck["start_age_years"], cast_dt.year,
)
# L1-c 组装 ChartData
chart = build_chart_data(
name=name, gender=gender, place=place, clock=birth,
loc=loc, tz_audit=tz_audit, st_audit=st_audit, bd_audit=bd_audit,
raw=raw, luck=luck, luck_pillars=decade,
flow_years=years, flow_months=months, childhood_luck=childhood,
)
# L2 渲染命盘 Markdown(嵌入档案「## 盘面」,不直接打印)
chart_md = render(chart)
if day_boundary == "子正":
# render 层日界文案固定为子初口径,换盘子正时改写警示条与审计行
chart_md = chart_md.replace(_WARN_ZICHU, _WARN_ZIZHENG)
chart_md = chart_md.replace(_AUDIT_ZICHU, _AUDIT_ZIZHENG)
pillars = [f"{chart.year.gan}{chart.year.zhi}",
f"{chart.month.gan}{chart.month.zhi}",
f"{chart.day.gan}{chart.day.zhi}",
f"{chart.hour.gan}{chart.hour.zhi}"]
return chart_md, pillars, chart.day_master, chart.true_solar_time
def _update_chart(a) -> int:
"""换盘模式:重排并替换既有档案的「## 盘面」段,frontmatter 与主键名同步。"""
path = Path(a.update_chart).expanduser().resolve()
if not path.is_file():
print(f"ERROR: 档案不存在:{path}", file=sys.stderr)
return 2
meta, body = store.parse_frontmatter(path.read_text(encoding="utf-8"))
if not meta:
print("ERROR: 档案无 frontmatter,无法换盘;请检查文件或用完整建档。",
file=sys.stderr)
return 2
name = str(meta.get("name", "")).strip()
gender = str(meta.get("gender", "")).strip()
birth = (a.birth or str(meta.get("birth_clock", ""))).strip()
place = (a.place or str(meta.get("birthplace", ""))).strip()
if not name or gender not in ("男", "女") or not birth or not place:
print("ERROR: 档案 frontmatter 缺 name/gender/birth_clock/birthplace,"
"无法重排;请补全档案或改用完整建档。", file=sys.stderr)
return 2
from geo.cities import LocationError
try:
chart_md, pillars, day_master, tst_str = _cast_chart(
name, gender, birth, place, a.day_boundary)
except LocationError as e:
print(f"ERROR: {e}", file=sys.stderr)
return 2
except ValueError:
print("ERROR: 出生时间格式应为 YYYY-MM-DD HH:MM;"
"若用户只给了日期,请追问具体时刻。", file=sys.stderr)
return 2
now = datetime.now().strftime("%Y-%m-%d %H:%M")
old_pillars = meta.get("pillars", [])
if isinstance(old_pillars, str):
old_pillars = old_pillars.split()
meta.update({
"name": name, "gender": gender, "birth_clock": birth, "birthplace": place,
"true_solar_time": tst_str, "pillars": pillars, "day_master": day_master,
"created_at": meta.get("created_at") or now, "updated_at": now,
})
body = store.replace_section(body, "盘面", chart_md)
# 四柱/hash6 变动时改为新主键名;目标已存在则拒绝覆盖
new_path = path.with_name(store.archive_name(
pillars, gender, store.key_hash(birth, place, gender)))
if new_path != path:
if new_path.exists():
print(f"ERROR: 新盘主键档案已存在:{new_path};"
f"为避免覆盖,本次未写入。请先核对两份档案。", file=sys.stderr)
return 2
new_path.write_text(store.dump_frontmatter(meta) + body, encoding="utf-8")
path.unlink()
else:
path.write_text(store.dump_frontmatter(meta) + body, encoding="utf-8")
changed = [f"{_PILLAR_LABELS[i]} {old_pillars[i]}→{pillars[i]}"
for i in range(min(len(old_pillars), 4))
if old_pillars[i] != pillars[i]]
if changed:
print(f"注意:{'、'.join(changed)} 已变。受变动柱影响的已有推断条目"
f"(归纳、流年大事)须复核并标【待复核】,复核前不得继续引用;"
f"旧盘四柱与换盘原因请记入「## 反馈与澄清」。", file=sys.stderr)
print(new_path)
return 0
def main() -> int: def main() -> int:
ap = argparse.ArgumentParser( ap = argparse.ArgumentParser(
prog="memory_save.py", prog="memory_save.py",
description="命主档案建档/更新:排盘一次并写入 memory/archives/(stdout 打印档案路径)", description="命主档案建档/更新:排盘一次并写入 memory/archives/(stdout 打印档案路径)",
) )
ap.add_argument("--name", required=True, help="姓名") ap.add_argument("--name", default=None, help="姓名")
ap.add_argument("--gender", required=True, choices=["男", "女"], ap.add_argument("--gender", default=None, choices=["男", "女"],
help="性别:男 或 女") help="性别:男 或 女")
ap.add_argument("--birth", required=True, ap.add_argument("--birth", default=None,
help='出生时刻(当地钟表时间),格式 "YYYY-MM-DD HH:MM",时刻必需') help='出生时刻(当地钟表时间),格式 "YYYY-MM-DD HH:MM",时刻必需;'
ap.add_argument("--place", required=True, "换盘模式下为时辰校正覆盖值")
help="出生地,精确到地级市一级,如「四川省成都市」") ap.add_argument("--place", default=None,
help="出生地,精确到地级市一级,如「四川省成都市」;"
"换盘模式下为地点校正覆盖值")
ap.add_argument("--update-chart", default=None, metavar="档案路径",
help="换盘模式:按档案重排并替换其「## 盘面」段,"
"frontmatter 与文件名同步为新盘")
ap.add_argument("--day-boundary", default="子初", choices=["子初", "子正"],
help="日界规则:子初(默认,真太阳时 23:00 换日)或 子正(0:00 换日);"
"仅换盘模式可用")
ap.add_argument("--memory-root", default=None, ap.add_argument("--memory-root", default=None,
help=f"档案根目录(默认技能根 memory/;亦可用环境变量 {store.ENV_VAR})") help=f"档案根目录(默认技能根 memory/;亦可用环境变量 {store.ENV_VAR})")
a = ap.parse_args() a = ap.parse_args()
# 软授权锁:与 cast_chart.py 同位置——建档即一次排盘,先 check,成功后 consume if a.update_chart is None:
missing = [k for k in ("name", "gender", "birth", "place")
if getattr(a, k) is None]
if missing:
print(f"ERROR: 建档缺参数:{'、'.join('--' + k for k in missing)}。"
f"(换盘请用 --update-chart <档案路径>)", file=sys.stderr)
return 2
if a.day_boundary != "子初":
print("ERROR: --day-boundary 仅换盘模式(--update-chart)可用;"
"建档固定子初换日。", file=sys.stderr)
return 2
elif a.name is not None or a.gender is not None:
print("ERROR: 换盘模式不支持 --name/--gender(姓名、性别以档案为准)。",
file=sys.stderr)
return 2
# 软授权锁:与 cast_chart.py 同位置——建档/换盘即一次排盘,先 check,成功后 consume
import _license_gate as _gate import _license_gate as _gate
_deny = _gate.check(Path(__file__).resolve().parents[1]) _deny = _gate.check(Path(__file__).resolve().parents[1])
if _deny: if _deny:
@@ -53,91 +258,26 @@ def main() -> int:
return 4 return 4
try: try:
# 排盘管线与 cast_chart.py 同一调用序列(geo → astro → chart → render) if a.update_chart is not None:
from geo.cities import resolve_location, LocationError rc = _update_chart(a)
from astro.timezone_resolve import to_utc if rc == 0:
from astro.solar_time import to_true_solar_time _gate.consume(Path(__file__).resolve().parents[1])
from astro.day_boundary import resolve_calendar_day return rc
from chart.tyme_adapter import cast
from chart.luck import (
childhood_luck, compute_luck, decade_pillars, flow_months,
flow_years, is_forward, luck_label_for_year,
)
from chart.model import build_chart_data
from render.markdown import render
# L0-a 地点解析(失败抛 LocationError → 退出码 2) # L0/L1/L2 排盘管线(地点/时刻不可用 → 退出码 2)
from geo.cities import LocationError
try: try:
loc = resolve_location(a.place) chart_md, pillars, day_master, tst_str = _cast_chart(
a.name, a.gender, a.birth, a.place)
except LocationError as e: except LocationError as e:
print(f"ERROR: {e}", file=sys.stderr) print(f"ERROR: {e}", file=sys.stderr)
return 2 return 2
# L0-b 出生时刻解析
try:
clock = datetime.strptime(a.birth.strip(), "%Y-%m-%d %H:%M")
except ValueError: except ValueError:
print("ERROR: 出生时间格式应为 YYYY-MM-DD HH:MM;" print("ERROR: 出生时间格式应为 YYYY-MM-DD HH:MM;"
"若用户只给了日期,请追问具体时刻。", file=sys.stderr) "若用户只给了日期,请追问具体时刻。", file=sys.stderr)
return 2 return 2
# L0-c 当地钟表时间 → UTC(含历史时区/夏令时审计)
utc, tz_audit = to_utc(clock, loc)
# L0-d UTC → 真太阳时(经度修正 + 均时差)
tst, st_audit = to_true_solar_time(utc, loc.lon)
# L0-e 子初换日:真太阳时 23:00–24:00 归入次日
day, bd_audit = resolve_calendar_day(tst)
cast_dt = day.replace(hour=tst.hour, minute=tst.minute, second=tst.second)
# L1-a 排盘(tyme4py 唯一接触面)
raw = cast(cast_dt, a.gender)
# L1-b 起运、大运、流年、流月、小运
forward = is_forward(a.gender, raw["year"]["gan"])
luck = compute_luck(
birth_tst=tst,
prev_jie_time=raw["prev_jie"]["time"],
next_jie_time=raw["next_jie"]["time"],
forward=forward,
)
this_year = datetime.now().year
n_pillars = max(
8,
int((this_year + 9 - cast_dt.year - luck["start_age_years"]) / 10) + 2,
)
decade = decade_pillars(
raw["month"]["gan"], raw["month"]["zhi"], forward,
luck["start_age_years"], cast_dt.year, n=n_pillars,
)
years = [
(y, gz, luck_label_for_year(y, decade))
for y, gz in flow_years(cast_dt.year, this_year, 10)
]
months = flow_months(this_year)
childhood = childhood_luck(
raw["hour"]["gan"], raw["hour"]["zhi"], forward,
luck["start_age_years"], cast_dt.year,
)
# L1-c 组装 ChartData
chart = build_chart_data(
name=a.name, gender=a.gender, place=a.place, clock=a.birth,
loc=loc, tz_audit=tz_audit, st_audit=st_audit, bd_audit=bd_audit,
raw=raw, luck=luck, luck_pillars=decade,
flow_years=years, flow_months=months, childhood_luck=childhood,
)
# L2 渲染命盘 Markdown(嵌入档案「## 盘面」,不直接打印)
chart_md = render(chart)
# —— 建档/更新 —— # —— 建档/更新 ——
pillars = [f"{chart.year.gan}{chart.year.zhi}",
f"{chart.month.gan}{chart.month.zhi}",
f"{chart.day.gan}{chart.day.zhi}",
f"{chart.hour.gan}{chart.hour.zhi}"]
root = store.resolve_root(a.memory_root, __file__) root = store.resolve_root(a.memory_root, __file__)
arch_dir = root / "archives" arch_dir = root / "archives"
arch_dir.mkdir(parents=True, exist_ok=True) arch_dir.mkdir(parents=True, exist_ok=True)
@@ -147,8 +287,8 @@ def main() -> int:
now = datetime.now().strftime("%Y-%m-%d %H:%M") now = datetime.now().strftime("%Y-%m-%d %H:%M")
meta = { meta = {
"name": a.name, "gender": a.gender, "birth_clock": a.birth.strip(), "name": a.name, "gender": a.gender, "birth_clock": a.birth.strip(),
"birthplace": a.place.strip(), "true_solar_time": chart.true_solar_time, "birthplace": a.place.strip(), "true_solar_time": tst_str,
"pillars": pillars, "day_master": chart.day_master, "pillars": pillars, "day_master": day_master,
"created_at": now, "updated_at": now, "created_at": now, "updated_at": now,
} }
if path.is_file(): if path.is_file():
+166
View File
@@ -0,0 +1,166 @@
#!/usr/bin/env python3
"""规则条款检索 —— 按关键词查 rules/ 条款全文,模型按需取规则。
用法:
python query_rules.py 从格 破格 [--limit 8] [--and]
python query_rules.py --id R-运-32
python query_rules.py --list
规则库(rules/[0-9]*.md)为单一事实源:启动时现解析条款索引,无缓存文件。
条款体例:`### R-运-32 标题` 起头,正文到下一个 `##`/`###` 标题或文件尾。
关键词空格分隔,中文按子串匹配(不分词)。默认排序:全部关键词都命中的
条款排前,部分命中按命中词数 + 相关度分排序(罕见词加权威力更大,
标题命中加权、正文命中位置靠前加权);--and 只保留全部关键词都命中的条款。
退出码:0 检索完成;1 无命中条款;2 输入不可用;3 内部错误。
"""
import argparse
import math
import re
import sys
import traceback
from dataclasses import dataclass
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
RULES_DIR = Path(__file__).resolve().parents[1] / "rules"
CLAUSE_RE = re.compile(r"^### (R-\S+)\s+(.+?)\s*$")
HEADING_RE = re.compile(r"^##+ ")
@dataclass
class Clause:
rid: str # 条款编号,如 R-运-32
title: str # 标题
body: str # 正文(不含头部行,尾部空行与 --- 分隔线已剥除)
file: str # 所属文件名
line: int # 头部行号(1 起)
order: int # 解析序,排序兜底
def load_index(rules_dir: Path = RULES_DIR) -> list[Clause]:
clauses: list[Clause] = []
for path in sorted(rules_dir.glob("[0-9]*.md")):
lines = path.read_text(encoding="utf-8").splitlines()
starts = [(i, CLAUSE_RE.match(ln)) for i, ln in enumerate(lines)]
heads = [(i, m) for i, m in starts if m]
for k, (i, m) in enumerate(heads):
end = len(lines)
for j in range(i + 1, len(lines)):
if HEADING_RE.match(lines[j]):
end = j
break
body = lines[i + 1:end]
while body and (not body[-1].strip() or body[-1].strip() == "---"):
body.pop()
clauses.append(Clause(rid=m.group(1), title=m.group(2),
body="\n".join(body), file=path.name,
line=i + 1, order=len(clauses)))
return clauses
def score_clause(c: Clause, keywords: list[str],
idf: dict[str, float]) -> tuple[int, float]:
"""返回 (命中关键词数, 相关度分);一个关键词未命中则 hits 少一。"""
hits, total = 0, 0.0
text = c.title + "\n" + c.body
for kw in keywords:
n_title, n_body = c.title.count(kw), c.body.count(kw)
if n_title + n_body == 0:
continue
hits += 1
pos = text.find(kw)
total += idf[kw] * (5.0 * n_title + n_body + (1.0 - pos / len(text)))
return hits, total
def search(clauses: list[Clause], keywords: list[str],
strict_and: bool = False) -> list[Clause]:
idf = {}
for kw in keywords:
df = sum(1 for c in clauses if kw in c.title or kw in c.body)
idf[kw] = math.log(1 + len(clauses) / (1 + df))
scored = []
for c in clauses:
hits, score = score_clause(c, keywords, idf)
if hits == 0 or (strict_and and hits < len(keywords)):
continue
scored.append((hits, score, c))
scored.sort(key=lambda t: (-t[0], -t[1], t[2].order))
return [c for _, _, c in scored]
def print_clause(c: Clause) -> None:
print(f"## {c.rid} {c.title}")
print(f"{c.file}:{c.line}")
print()
print(c.body)
print()
def main(argv: list[str] | None = None) -> int:
ap = argparse.ArgumentParser(
prog="query_rules.py",
description="规则条款检索:按关键词查 rules/ 条款全文(编号 R-XX-NN)",
)
ap.add_argument("keywords", nargs="*", help="检索关键词,空格分隔,子串匹配")
ap.add_argument("--limit", type=int, default=8, help="最多输出条款数(默认 8,0 为不限)")
ap.add_argument("--and", dest="strict_and", action="store_true",
help="严格 AND:只保留全部关键词都命中的条款")
ap.add_argument("--id", default=None, help="按编号精确取单条,如 R-运-32")
ap.add_argument("--list", action="store_true", help="列出全部条款标题")
a = ap.parse_args(argv)
keywords = [kw for kw in (kw.strip() for kw in a.keywords) if kw]
if not keywords and a.id is None and not a.list:
print("ERROR: 至少给一个关键词,或用 --id / --list。", file=sys.stderr)
return 2
try:
clauses = load_index()
if not clauses:
print(f"ERROR: 未解析到任何条款({RULES_DIR})。", file=sys.stderr)
return 3
if a.list:
print(f"# 全部条款({len(clauses)} 条)")
print()
cur = None
for c in clauses:
if c.file != cur:
cur = c.file
print(f"## {cur}")
print(f"- {c.rid} {c.title}")
return 0
if a.id is not None:
for c in clauses:
if c.rid == a.id:
print_clause(c)
return 0
print(f"无命中条款:{a.id}", file=sys.stderr)
return 1
hits = search(clauses, keywords, strict_and=a.strict_and)
if not hits:
print(f"无命中条款:{' '.join(keywords)}", file=sys.stderr)
return 1
shown = hits if a.limit <= 0 else hits[:a.limit]
mode = "AND 全命中" if a.strict_and else "相关度"
print(f"# 规则检索:{' '.join(keywords)}({mode},命中 {len(hits)} 条,示 {len(shown)} 条)")
print()
for c in shown:
print_clause(c)
return 0
except Exception:
print("ERROR: 检索内部错误。", file=sys.stderr)
traceback.print_exc(file=sys.stderr)
return 3
if __name__ == "__main__":
raise SystemExit(main())
+2
View File
@@ -19,6 +19,8 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
def main() -> int: def main() -> int:
ap = argparse.ArgumentParser( ap = argparse.ArgumentParser(
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

+255
View File
@@ -0,0 +1,255 @@
# scripts/render/html.py
"""ChartData → 单文件 HTML 盘面(模板 render/templates/paipan.html)。
与 Markdown 输出同为纯计算渲染:十神/藏干/空亡/纳音/十二长生/月令旺衰
均为固定查表,不含任何命理判断(P1)。岁运干支(大运/流年格)的十神/
星运/空亡/纳音复用 chart/ganzhi.py,神煞复用 chart/shensha.py 的岁运
求值器 evaluate_target(与 query_shensha.py 同一口径),不在渲染层
另造规则。
logo 与品牌字体(render/assets/)以 base64 内嵌,保证 HTML 单文件便携;
神煞条目的查法注释(全角/半角括号)仅在本装配层剔除,Markdown 输出保持原样。
"""
import base64
import re
from datetime import datetime
from html import escape as _escape
from pathlib import Path
from chart.ganzhi import NAYIN, WX_GAN, WX_ZHI, gz_void, ten_god, terrain
from chart.shensha import evaluate_target
_WX_CLASS = {"木": "wx-mu", "火": "wx-huo", "土": "wx-tu",
"金": "wx-jin", "水": "wx-shui"}
_SEASON = {"寅": ("木", "火", "水", "金", "土"), "卯": ("木", "火", "水", "金", "土"),
"巳": ("火", "土", "木", "水", "金"), "午": ("火", "土", "木", "水", "金"),
"申": ("金", "水", "土", "火", "木"), "酉": ("金", "水", "土", "火", "木"),
"亥": ("水", "木", "金", "土", "火"), "子": ("水", "木", "金", "土", "火"),
"辰": ("土", "金", "火", "木", "水"), "戌": ("土", "金", "火", "木", "水"),
"丑": ("土", "金", "火", "木", "水"), "未": ("土", "金", "火", "木", "水")}
_SEASON_LABEL = ("旺", "相", "休", "囚", "死")
_ASSETS_DIR = Path(__file__).resolve().parent / "assets"
_SHA_NOTE_RE = re.compile(r"[((][^))]*[))]")
# 结构性占位符:值本身是装配层渲染出的 HTML 片段或 base64 资源,
# 填充时原样注入;其余占位符均为文本字段,一律 HTML 转义防注入。
_STRUCTURAL_KEYS = frozenset({
"LOGO_B64", "FONT_B64", "QRCODE_B64",
"WARNINGS", "MAIN_TABLE", "LUCK_STRIP", "CHILDHOOD_BLOCK",
"FLOW_YEARS", "FLOW_MONTHS",
})
def _strip_sha_note(entry: str) -> str:
"""神煞条目剔除查法括号注释:`将星(以年支子查,见于月支子)` → `将星`。"""
return _SHA_NOTE_RE.sub("", entry).strip()
def _asset_b64(name: str) -> str:
return base64.b64encode((_ASSETS_DIR / name).read_bytes()).decode("ascii")
def _wx(ch: str) -> str:
wx = WX_GAN.get(ch) or WX_ZHI.get(ch)
return _WX_CLASS.get(wx, "")
def _z(zhi: str, voids: str) -> str:
cls = "voidz" if zhi in voids else ""
return f'<span class="{_wx(zhi)} {cls}">{zhi}</span>'
def _pillar_col(chart, key: str, label: str, cur: bool = False) -> dict:
"""四柱之一 → 各行的 HTML 单元格内容。"""
p = getattr(chart, key)
voids = chart.void.get("day", "") + chart.void.get("hour", "")
return {
"label": label, "cur": cur,
"god": p.gan_ten_god or ("日主" if key == "day" else ""),
"gan": p.gan, "zhi": p.zhi,
"hidden": list(zip(p.hidden_stems, p.hidden_ten_gods)),
"terrain": chart.terrain.get(key, ""),
"void": gz_void(p.gan + p.zhi),
"nayin": p.na_yin or "",
"shensha": [_strip_sha_note(s) for s in chart.shen_sha.get(key, [])],
"voids": voids,
}
def _render_table(cols: list) -> str:
"""干支列列表 → 排盘表格(主星/天干/地支/藏干/星运/空亡/纳音/神煞)。"""
def th(c):
tag = '<span class="curtag">当前</span>' if c["cur"] else ""
return f'<th class="{"cur" if c["cur"] else ""}">{c["label"]}{tag}</th>'
def row(label, fn):
tds = "".join(
f'<td class="{"cur" if c["cur"] else ""}">{fn(c)}</td>' for c in cols)
return f'<tr><td class="rowlabel">{label}</td>{tds}</tr>'
rows = [
"<tr>" + '<td class="rowlabel"></td>'
+ "".join(th(c) for c in cols) + "</tr>",
row("主星", lambda c: f'<span class="god{" day" if c["god"] == "日主" else ""}">{c["god"]}</span>'),
row("天干", lambda c: f'<span class="gz {_wx(c["gan"])}">{c["gan"]}</span>'),
row("地支", lambda c: f'<span class="gz">{_z(c["zhi"], c["voids"])}</span>'),
row("藏干", lambda c: '<div class="hidden">'
+ "<br>".join(f'<span class="hg {_wx(h)}">{h}</span> <span class="god">{g}</span>'
for h, g in c["hidden"]) + "</div>"),
row("星运", lambda c: f'<span class="small">{c["terrain"]}</span>'),
row("空亡", lambda c: f'<span class="small">{c["void"]}</span>'),
row("纳音", lambda c: f'<span class="small">{c["nayin"]}</span>'),
row("神煞", lambda c: '<div class="small">'
+ ("<br>".join(c["shensha"]) if c["shensha"] else "—") + "</div>"),
]
return '<table class="pan">' + "".join(rows) + "</table>"
def _main_table(chart) -> str:
"""排盘卡:仅年月日时四柱。"""
cols = [_pillar_col(chart, key, label, cur=(key == "day"))
for key, label in (("year", "年柱"), ("month", "月柱"),
("day", "日柱"), ("hour", "时柱"))]
return _render_table(cols)
def _target_shensha(chart, gz: str) -> list[str]:
"""岁运干支相对本命锚点所逢的神煞(与 query_shensha.py 同一求值器)。"""
pillars = {k: getattr(chart, k).gan + getattr(chart, k).zhi
for k in ("year", "month", "day", "hour")}
return [star for star, _ in evaluate_target(pillars, chart.gender, gz)["anchored"]]
def _gz_sub(chart, gz: str) -> str:
"""岁运小卡的干支附属行:十神·星运 / 空亡 / 纳音 / 神煞(无标签,值本身说话)。"""
lines = [
f"{ten_god(chart.day_master, gz[0])} · {terrain(chart.day_master, gz[1])}",
gz_void(gz),
NAYIN[gz],
]
sha = _target_shensha(chart, gz)
if sha:
lines.append(" · ".join(sha))
return "".join(f'<div class="cs">{line}</div>' for line in lines)
def _luck_strip(chart) -> str:
this_year = datetime.now().year
cells = []
for lp in chart.luck_pillars:
gz = lp.gan + lp.zhi
cur = lp.start_year <= this_year < lp.start_year + 10
cells.append(
f'<div class="cell{" cur" if cur else ""}">'
f'<div class="cy">{lp.start_year} · {lp.start_age:.0f} 岁起</div>'
f'<div class="cg"><span class="{_wx(lp.gan)}">{lp.gan}</span>'
f'<span class="{_wx(lp.zhi)}">{lp.zhi}</span></div>'
f'{_gz_sub(chart, gz)}</div>')
return '<div class="strip">' + "".join(cells) + "</div>"
def _childhood_block(chart) -> str:
if not chart.childhood_luck:
return ""
cells = "".join(
f'<div class="cell"><div class="cy">{age} 岁 · {year}</div>'
f'<div class="cg"><span class="{_wx(gz[0])}">{gz[0]}</span>'
f'<span class="{_wx(gz[1])}">{gz[1]}</span></div></div>'
for age, year, gz in chart.childhood_luck)
return ('<div class="sect" style="margin-top:14px">小运'
'<span class="note">童限(未交大运)各虚岁</span></div>'
f'<div class="strip">{cells}</div>')
def _flow_years(chart) -> str:
this_year = datetime.now().year
cells = []
for year, gz, label in chart.flow_years:
cls = "cell"
if year == this_year:
cls += " cur"
if label.startswith("交运年"):
cls += " jiao"
cells.append(f'<div class="{cls}"><div class="cy">{year}</div>'
f'<div class="cg"><span class="{_wx(gz[0])}">{gz[0]}</span>'
f'<span class="{_wx(gz[1])}">{gz[1]}</span></div>'
f'{_gz_sub(chart, gz)}</div>')
return '<div class="strip">' + "".join(cells) + "</div>"
def _flow_months(chart) -> str:
cells = []
for label, gz in chart.flow_months:
cells.append(f'<div class="cell"><div class="cy">{label}</div>'
f'<div class="cg"><span class="{_wx(gz[0])}">{gz[0]}</span>'
f'<span class="{_wx(gz[1])}">{gz[1]}</span></div></div>')
return '<div class="strip">' + "".join(cells) + "</div>"
def _season_bar(chart) -> str:
seq = _SEASON.get(chart.month_ling)
if not seq:
return ""
parts = " ".join(f"{wx}{lab}" for wx, lab in zip(seq, _SEASON_LABEL))
return f"月令 {chart.month_ling}:{parts}"
def build_html(chart) -> str:
"""ChartData → 完整 HTML 文档。"""
tpl = (Path(__file__).resolve().parent
/ "templates" / "paipan.html").read_text(encoding="utf-8")
warns = []
if chart.is_late_zi:
warns.append("⚠️ 晚子时:本造按子初换日归入次日;子正换日一派日柱、时柱不同。")
if chart.jie_gap_warning:
warns.append(chart.jie_gap_warning)
warnings = "".join(f'<div class="warn">{w}</div>' for w in warns)
qiyun = ""
if chart.luck_pillars:
qiyun = (f"起运:{chart.start_age_text}"
f"({'顺行' if chart.luck_is_forward else '逆行'})")
audit = (f"时区 {chart.tz_used}(夏令时:{'是' if chart.is_dst else '否'})· "
f"经度修正 {chart.lon_correction_min:+.2f} 分 · 均时差 {chart.eot_minutes:+.2f} 分 · "
f"日界 子初换日(23:00)")
audit_full = (f"{audit}· tyme4py {chart.library_version} · "
f"schema {chart.schema_version}")
mapping = {
"TITLE": f"命盘:{chart.name}",
"LOGO_B64": _asset_b64("lingyao-logo.png"),
"FONT_B64": _asset_b64("logo-font.ttf"),
"QRCODE_B64": _asset_b64("qun-qrcode.jpg"),
"NAME": chart.name,
"GENDER_LABEL": "乾造" if chart.gender == "男" else "坤造",
"DAY_MASTER": f"{chart.day_master}{WX_GAN[chart.day_master]}",
"BIRTHPLACE": chart.birthplace,
"BIRTH_CLOCK": chart.birth_clock,
"TRUE_SOLAR": chart.true_solar_time,
"MONTH_LING": chart.month_ling,
"TAI_YUAN": chart.tai_yuan,
"MING_GONG": chart.ming_gong,
"QIYUN": qiyun,
"WARNINGS": warnings,
"MAIN_TABLE": _main_table(chart),
"LUCK_NOTE": f"{chart.start_age_text}起运,当前一步高亮",
"LUCK_STRIP": _luck_strip(chart),
"CHILDHOOD_BLOCK": _childhood_block(chart),
"FLOW_YEARS": _flow_years(chart),
"FLOW_MONTHS": _flow_months(chart),
"SEASON_BAR": _season_bar(chart),
"AUDIT": audit,
"AUDIT_FULL": audit_full,
}
out = tpl
for k, v in mapping.items():
v = str(v)
if k not in _STRUCTURAL_KEYS:
v = _escape(v, quote=True)
out = out.replace("{{" + k + "}}", v)
return out
+205
View File
@@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:; base-uri 'none'; form-action 'none'">
<title>{{TITLE}}</title>
<style>
@font-face {
font-family: 'LogoFont';
src: url("data:font/ttf;base64,{{FONT_B64}}") format("truetype");
font-weight: normal; font-style: normal; font-display: swap;
}
:root {
/* 灵爻妙解网站浅色主题(root.css :root.light + paipan_base.css) */
--ink: #222831;
--muted: rgba(27, 27, 27, .52);
--soft: rgba(27, 27, 27, .68);
--line: rgba(193, 188, 235, .55);
--card-line: rgba(193, 188, 235, .45);
--accent: #dc7b28; /* 网站浅色 primary-color-1 */
--accent-2: #f97316; /* 网站浅色 primary-color-3 */
--wx-mu: #2e7d32; --wx-huo: #c62828; --wx-tu: #8d6e63;
--wx-jin: #af8c2c; --wx-shui: #1565c0;
}
* { box-sizing: border-box; }
body {
margin: 0; padding: 28px 24px 32px; color: var(--ink);
font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
background:
radial-gradient(ellipse 72% 58% at 78% 20%, rgba(150, 125, 245, .18), transparent 68%),
radial-gradient(ellipse 66% 48% at 20% 18%, rgba(112, 174, 255, .18), transparent 70%),
radial-gradient(ellipse 82% 52% at 52% 92%, rgba(84, 210, 200, .11), transparent 72%),
linear-gradient(135deg, #fbfcff 0%, #f5f8ff 42%, #f2edff 100%);
background-attachment: fixed;
}
.page { max-width: 1100px; margin: 0 auto; }
/* 顶部品牌区:base.html 抽屉顶部 .drawer-brand 的居中放大版 */
.brand-head {
display: flex; align-items: center; justify-content: center;
gap: 14px; margin: 2px 0 20px;
}
.brand-logo { width: 52px; height: 52px; display: block; }
.brand-name {
font-family: 'LogoFont', 'Kaiti SC', 'STKaiti', 'KaiTi', serif;
font-weight: 500; font-size: 30px; line-height: 1.25;
color: var(--ink); letter-spacing: 1px;
}
.brand-slogan {
margin-top: 3px; font-size: 11px; letter-spacing: 3.5px;
color: var(--muted);
}
/* 大卡片:网站左 panel(.panel)亮色风格 */
.panel {
border: 1px solid var(--line);
border-radius: 12px;
background: linear-gradient(135deg, rgba(255, 255, 255, 1), rgba(250, 252, 255, 1));
box-shadow: 0 16px 38px rgba(48, 56, 96, .12);
padding: 16px;
}
/* 面板内子卡 */
.card {
background: #fff; border: 1px solid var(--card-line);
border-radius: 8px; padding: 16px 18px; margin-bottom: 14px;
box-shadow: 0 2px 8px rgba(48, 56, 96, .05);
}
.card:last-child { margin-bottom: 0; }
/* 用户信息 */
.head { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.name { font-size: 28px; font-weight: 700; font-family: "Kaiti SC", "STKaiti", "KaiTi", serif; }
.chip {
display: inline-block; padding: 2px 10px; border-radius: 999px;
border: 1px solid var(--accent); color: var(--accent); font-size: 13px;
}
.meta { color: var(--muted); font-size: 13px; line-height: 1.9; }
.meta b { color: var(--ink); font-weight: 600; }
.meta.tech {
margin-top: 8px; padding-top: 8px; font-size: 12.5px;
border-top: 1px dashed var(--card-line);
}
.warn {
margin-top: 6px; padding: 6px 10px; border-radius: 8px;
background: #fdf3e3; border: 1px solid #ecd9ae; color: #8a6d1d; font-size: 12.5px;
}
/* 主排盘表 */
table.pan { width: 100%; border-collapse: collapse; table-layout: fixed; }
.pan th, .pan td {
border: 1px solid var(--card-line); text-align: center;
padding: 6px 4px; vertical-align: middle; font-size: 14px;
}
.pan th { background: rgba(193, 188, 235, .18); color: var(--soft); font-weight: 600; }
.pan td.rowlabel { background: rgba(193, 188, 235, .14); color: var(--soft); font-size: 13px; width: 64px; }
.gz { font-family: "Kaiti SC", "STKaiti", "KaiTi", serif; font-size: 34px; line-height: 1.25; }
.god { font-size: 12.5px; color: var(--muted); }
.god.day { color: var(--accent); font-weight: 600; }
.hidden { font-size: 12.5px; line-height: 1.7; color: var(--soft); }
.hidden .hg { font-weight: 600; }
.small { font-size: 12.5px; color: var(--soft); line-height: 1.7; }
.voidz { border-bottom: 2px dashed #c0392b; padding-bottom: 1px; }
.cur { background: rgba(220, 123, 40, .07); }
.curtag { display: block; font-size: 11px; color: var(--accent); }
.wx-mu { color: var(--wx-mu); } .wx-huo { color: var(--wx-huo); }
.wx-tu { color: var(--wx-tu); } .wx-jin { color: var(--wx-jin); }
.wx-shui { color: var(--wx-shui); }
/* 条带 */
.sect { font-size: 15px; font-weight: 700; margin: 2px 0 10px;
font-family: "Kaiti SC", "STKaiti", "KaiTi", serif; }
.sect .note { font-size: 12px; color: var(--muted); font-weight: 400; margin-left: 8px; }
.strip { display: flex; flex-wrap: wrap; gap: 6px; }
.cell {
border: 1px solid var(--card-line); border-radius: 8px; background: #fff;
padding: 6px 8px; text-align: center; min-width: 64px; max-width: 96px;
}
.cell .cy { font-size: 11px; color: var(--muted); }
.cell .cg { font-family: "Kaiti SC", "STKaiti", "KaiTi", serif; font-size: 20px; }
.cell .cs { font-size: 11px; color: var(--muted); line-height: 1.55; margin-top: 1px; }
.cell.cur { border-color: var(--accent); background: rgba(220, 123, 40, .07); box-shadow: 0 0 0 1px var(--accent) inset; }
.cell.jiao .cy { color: #c0392b; }
/* 尾部交流群卡:左图右文 */
.qrcard { display: flex; align-items: center; gap: 16px; }
.qrimg { width: 108px; height: 108px; border-radius: 6px; display: block; }
.qrtitle { font-size: 15px; font-weight: 700;
font-family: "Kaiti SC", "STKaiti", "KaiTi", serif; }
.qrdesc { margin-top: 4px; font-size: 12.5px; color: var(--soft); line-height: 1.8; }
/* 页脚 */
.foot {
text-align: center; color: var(--muted); font-size: 12px;
line-height: 1.9; margin-top: 16px;
}
</style>
</head>
<body>
<div class="page">
<div class="brand-head">
<img class="brand-logo" src="data:image/png;base64,{{LOGO_B64}}" alt="灵爻妙解">
<div class="brand-text">
<div class="brand-name">灵爻妙解</div>
<div class="brand-slogan">传承易学智慧</div>
</div>
</div>
<div class="panel">
<div class="card">
<div class="head">
<span class="name">{{NAME}}</span>
<span class="chip">{{GENDER_LABEL}}</span>
<span class="chip">日主 {{DAY_MASTER}}</span>
</div>
<div class="meta" style="margin-top:8px">
出生地:<b>{{BIRTHPLACE}}</b> 钟表时间:<b>{{BIRTH_CLOCK}}</b> 真太阳时:<b>{{TRUE_SOLAR}}</b><br>
月令:{{MONTH_LING}} 胎元:{{TAI_YUAN}} 命宫:{{MING_GONG}} {{QIYUN}}
</div>
{{WARNINGS}}
<div class="meta tech">
{{SEASON_BAR}}<br>
{{AUDIT}}
</div>
<!-- 排盘审计原文(开发溯源,含版本信息):{{AUDIT_FULL}} -->
</div>
<div class="card">
<div class="sect">排盘<span class="note">四柱 · 藏干 · 空亡 · 纳音 · 神煞</span></div>
{{MAIN_TABLE}}
</div>
<div class="card">
<div class="sect">大运<span class="note">{{LUCK_NOTE}}</span></div>
{{LUCK_STRIP}}
{{CHILDHOOD_BLOCK}}
</div>
<div class="card">
<div class="sect">流年<span class="note">出生年至今后十年,今年高亮,红字年份为交运年</span></div>
{{FLOW_YEARS}}
</div>
<div class="card">
<div class="sect">流月<span class="note">本年节气月</span></div>
{{FLOW_MONTHS}}
</div>
<div class="card qrcard">
<img class="qrimg" src="data:image/jpeg;base64,{{QRCODE_B64}}" alt="微信群二维码">
<div class="qrtext">
<div class="qrtitle">灵爻妙解 · 传统文化交流群</div>
<div class="qrdesc">扫码加入微信群:反馈解读偏差、交流文化心得、参与档案共建,版本更新动态第一时间同步。</div>
</div>
</div>
</div>
<div class="foot">灵爻妙解 · 传承易学智慧 · 本盘面由 AI 生成,仅供娱乐参考</div>
</div>
</body>
</html>
+137 -10
View File
@@ -4,20 +4,38 @@
用法: 用法:
python scripts/self_update.py --check 检查更新(24 小时缓存,重复检查不拉网络) python scripts/self_update.py --check 检查更新(24 小时缓存,重复检查不拉网络)
python scripts/self_update.py --notify 只读缓存打印提示,绝不碰网络(供 cast_chart 调用) python scripts/self_update.py --notify 只读缓存打印提示,绝不碰网络(供 cast_chart 调用)
python scripts/self_update.py --apply 下载 zipball → 按 manifest 逐文件校验 → 同步本地 python scripts/self_update.py --apply 下载 zipball → 验签 → 按 manifest 逐文件校验 → 同步本地
退出码(--apply):0 成功;2 无需更新或配置缺失;3 失败(本地原样不动)。 退出码(--apply):0 成功;2 无需更新或配置缺失;3 失败(本地原样不动)。
信任模型(三道防线,各防一层):
1. 签名信任锚:manifest.json 附带 ed25519 签名 manifest.json.sig,
公钥内置于本文件(UPDATE_PUBLIC_KEY_HEX),私钥仅作者持有
(~/.zipec/signing.key,不进任何仓库)。仓库(GitHub/Gitea)或
下载链路被攻破时,攻击者改 manifest 即验签失败——防「源头投毒」。
2. 双源交叉验证:--apply 从 GitHub 与 Gitea 各拉一份 manifest.json,
与 zip 内字节逐一比对,任一不一致即中止——防「单一源被篡改/
劫持后单独口径」。
3. 逐文件 SHA256:manifest 通过前两关后,逐文件核对清单哈希——
防「zip 内文件与清单不符」(传输损坏、打包错误、部分篡改)。
manifest.json.sig 本身不进 manifest 清单(自指),随仓库提交分发。
远端双线路 failover:GitHub 优先,Gitea 兜底。HTTPS_PROXY/HTTP_PROXY 等 远端双线路 failover:GitHub 优先,Gitea 兜底。HTTPS_PROXY/HTTP_PROXY 等
代理环境变量由 urllib 默认读取、自动生效。测试或自建场景可用环境变量 代理环境变量由 urllib 默认读取、自动生效。测试或自建场景可用环境变量
ZIPEC_VERSION_URLS / ZIPEC_ZIPBALL_URLS(逗号分隔)整体覆盖远端地址, ZIPEC_VERSION_URLS / ZIPEC_ZIPBALL_URLS / ZIPEC_MANIFEST_URLS(逗号分隔)
支持 file:// 形式。 整体覆盖远端地址,支持 file:// 形式。
抓取通道:urllib 优先;macOS 框架版 Python 常见的根证书缺失
(SSL CERTIFICATE_VERIFY_FAILED)时自动回退到系统 curl(curl 自带
系统信任库且自带代理环境变量支持)。manifest 与 .sig 的抓取同走此通道。
""" """
import argparse import argparse
import base64
import hashlib import hashlib
import json import json
import os import os
import shutil import shutil
import subprocess
import sys import sys
import tempfile import tempfile
import threading import threading
@@ -26,11 +44,24 @@ import urllib.request
import zipfile import zipfile
from pathlib import Path from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
import _update_sig # 纯 Python ed25519(RFC 8032),零依赖验签
# ---- 远端配置(GitHub 优先,Gitea 兜底)---- # ---- 远端配置(GitHub 优先,Gitea 兜底)----
GITHUB_VERSION_URL = "https://raw.githubusercontent.com/mxiaonian/ZiPingEightChar/main/VERSION" GITHUB_VERSION_URL = "https://raw.githubusercontent.com/mxiaonian/ZiPingEightChar/main/VERSION"
GITHUB_ZIPBALL_URL = "https://codeload.github.com/mxiaonian/ZiPingEightChar/zip/refs/heads/main" GITHUB_ZIPBALL_URL = "https://codeload.github.com/mxiaonian/ZiPingEightChar/zip/refs/heads/main"
GITHUB_MANIFEST_URL = "https://raw.githubusercontent.com/mxiaonian/ZiPingEightChar/main/manifest.json"
GITEA_VERSION_URL = "https://git.lingyaomiaojie.com/moxiaonian/ZiPingEightChar/raw/branch/main/VERSION" GITEA_VERSION_URL = "https://git.lingyaomiaojie.com/moxiaonian/ZiPingEightChar/raw/branch/main/VERSION"
GITEA_ZIPBALL_URL = "https://git.lingyaomiaojie.com/moxiaonian/ZiPingEightChar/archive/main.zip" GITEA_ZIPBALL_URL = "https://git.lingyaomiaojie.com/moxiaonian/ZiPingEightChar/archive/main.zip"
GITEA_MANIFEST_URL = "https://git.lingyaomiaojie.com/moxiaonian/ZiPingEightChar/raw/branch/main/manifest.json"
# 更新签名信任锚:ed25519 公钥(32 字节,十六进制),作者 2026-10-10 生成。
# 指纹 SHA256(公钥) = 3089bc1cc9a453e5be66a36574635da6b2ad9797c57af11164111faca157411c
# 用途:--apply 校验 manifest.json.sig。私钥仅作者持有(~/.zipec/signing.key),
# 不进任何仓库;公钥更换 = 信任锚更换,须随版本说明明确公告。
UPDATE_PUBLIC_KEY_HEX = "49103c13cad0d9c67207945b4e4f6ff81d1261339eb0de4a60c2a1cf949d7852"
CACHE_REL = "data/.update_check.json" CACHE_REL = "data/.update_check.json"
CACHE_TTL_SECONDS = 24 * 3600 CACHE_TTL_SECONDS = 24 * 3600
@@ -62,15 +93,36 @@ def _zipball_urls() -> list:
return [GITHUB_ZIPBALL_URL, GITEA_ZIPBALL_URL] return [GITHUB_ZIPBALL_URL, GITEA_ZIPBALL_URL]
def _manifest_urls() -> list:
"""双源交叉验证用:各源的 manifest.json 直链(.sig 直链 = 本地址 + '.sig')。"""
env = os.environ.get("ZIPEC_MANIFEST_URLS")
if env:
return [u.strip() for u in env.split(",") if u.strip()]
return [GITHUB_MANIFEST_URL, GITEA_MANIFEST_URL]
def _fetch_bytes(url: str, timeout: int) -> bytes:
"""urllib 优先;SSL 证书缺失等失败时回退系统 curl(macOS 框架版 Python 常见)。"""
try:
with urllib.request.urlopen(url, timeout=timeout) as r:
return r.read()
except Exception:
curl = shutil.which("curl")
if not curl:
raise
r = subprocess.run([curl, "-fsSL", "-m", str(timeout), url],
capture_output=True)
if r.returncode != 0:
raise RuntimeError(f"curl 抓取失败({r.returncode}):{url}")
return r.stdout
def _fetch_text(url: str, timeout: int = NETWORK_TIMEOUT) -> str: def _fetch_text(url: str, timeout: int = NETWORK_TIMEOUT) -> str:
with urllib.request.urlopen(url, timeout=timeout) as r: return _fetch_bytes(url, timeout).decode("utf-8")
return r.read().decode("utf-8")
def _download(url: str, dest: Path, timeout: int = NETWORK_TIMEOUT) -> None: def _download(url: str, dest: Path, timeout: int = NETWORK_TIMEOUT) -> None:
with urllib.request.urlopen(url, timeout=timeout) as r: dest.write_bytes(_fetch_bytes(url, timeout))
with open(dest, "wb") as fh:
shutil.copyfileobj(r, fh)
def parse_version(text: str) -> tuple: def parse_version(text: str) -> tuple:
@@ -266,8 +318,58 @@ def _verify_manifest(src: Path, files: dict):
return errors return errors
def _cross_check_manifest(manifest_bytes: bytes):
"""从全部配置源各拉一份 manifest.json,与 zip 内字节逐一比对。
返回 None = 各源与 zip 完全一致;否则返回错误信息(任一源不可达也
视为失败:无法交叉确认时宁可中止)。
"""
urls = _manifest_urls()
if not urls:
return "未配置任何 manifest 源"
for url in urls:
try:
data = _fetch_bytes(url, NETWORK_TIMEOUT)
except Exception as e:
return f"{url} 不可达({e}),无法完成双源交叉验证"
if data != manifest_bytes:
return f"{url} 的 manifest.json 与下载包内字节不一致,两源口径分歧"
return None
def _load_manifest_sig(src: Path):
"""优先取 zip 内 manifest.json.sig;缺失则按 manifest 源单独拉 .sig(curl 回退同路)。
返回签名文本(base64)或 None。
"""
p = src / "manifest.json.sig"
if p.is_file():
try:
return p.read_text(encoding="utf-8")
except OSError:
return None
for url in _manifest_urls():
try:
return _fetch_text(url + ".sig")
except Exception:
continue
return None
def _signature_valid(manifest_bytes: bytes, sig_text: str) -> bool:
try:
sig = base64.b64decode(sig_text.strip(), validate=True)
except Exception:
return False
try:
pk = bytes.fromhex(UPDATE_PUBLIC_KEY_HEX)
except ValueError:
return False
return _update_sig.verify(pk, manifest_bytes, sig)
def _sync(root: Path, src: Path, files: dict) -> None: def _sync(root: Path, src: Path, files: dict) -> None:
managed = set(files) | {"manifest.json", "VERSION"} managed = set(files) | {"manifest.json", "manifest.json.sig", "VERSION"}
copied = deleted = 0 copied = deleted = 0
for rel in sorted(managed - {"VERSION"}): # VERSION 最后写 for rel in sorted(managed - {"VERSION"}): # VERSION 最后写
s = src / rel s = src / rel
@@ -342,7 +444,32 @@ def cmd_apply(root: Path) -> int:
print("失败:远端包内找不到 manifest.json(本地未改动)", file=sys.stderr) print("失败:远端包内找不到 manifest.json(本地未改动)", file=sys.stderr)
return 3 return 3
try: try:
manifest = json.loads((src / "manifest.json").read_text(encoding="utf-8")) manifest_bytes = (src / "manifest.json").read_bytes()
except OSError as e:
print(f"失败:manifest.json 读取异常({e})(本地未改动)", file=sys.stderr)
return 3
# 防线 1:双源交叉验证(各源 manifest 与 zip 内字节一致)
err = _cross_check_manifest(manifest_bytes)
if err:
print(f"失败:{err},已中止(本地未改动)", file=sys.stderr)
return 3
print(f"双源交叉验证通过({len(_manifest_urls())} 个源口径一致)")
# 防线 2:内置公钥验签 manifest(缺 sig 视同验签失败)
sig_text = _load_manifest_sig(src)
if sig_text is None:
print("失败:包未带 manifest.json.sig 签名,可能为旧版或被篡改,"
"已中止(本地未改动)", file=sys.stderr)
return 3
if not _signature_valid(manifest_bytes, sig_text):
print("失败:manifest.json 签名校验不符,包可能被篡改,"
"已中止(本地未改动)", file=sys.stderr)
return 3
print("manifest 签名校验通过")
try:
manifest = json.loads(manifest_bytes.decode("utf-8"))
files = manifest["files"] files = manifest["files"]
except Exception as e: except Exception as e:
print(f"失败:manifest.json 无法解析({e})(本地未改动)", file=sys.stderr) print(f"失败:manifest.json 无法解析({e})(本地未改动)", file=sys.stderr)
+125 -17
View File
@@ -6,11 +6,18 @@
python share_export.py --birth "1990-05-14 08:30" --place "四川省成都市" --gender 男 python share_export.py --birth "1990-05-14 08:30" --place "四川省成都市" --gender 男
脱敏规格(见 share/README.md):不含姓名;出生信息只保留年月日与时辰(不留分钟 脱敏规格(见 share/README.md):不含姓名;出生信息只保留年月日与时辰(不留分钟
与钟表时间);地域只保留到省级;事件一律类目化;正文自由文本(归纳、盘面细节、 与钟表时间);地域保留到城市级(省+地级市,区县及以下删除);事件带类目与简介
反馈原文)不入包。盘 hash = sha1(四柱+出生地) 前 8 位,用于去重与撤回。 (note),简介中城市级地名保留(规则蒸馏要用方位信息),姓名、详细住址
(小区/门牌/街道号)、身份证/电话等直接定位信息一律删除;归纳、盘面细节等
正文自由文本不入包。盘 hash = sha1(四柱+出生地) 前 8 位,用于去重与撤回。
完整度门槛:性别/四柱/大运齐全 + 至少一条反馈事件(任意核实状态); 完整度门槛:性别/四柱/大运齐全 + 至少一条反馈事件(任意核实状态);
不满足拒绝导出,退出码 2 并说明缺什么。退出码:0 成功;2 不可用/不完整;3 内部错误。 不满足拒绝导出,退出码 2 并说明缺什么。事件简介缺失(档案未写事件内容)
不挡导出,JSON 中如实反映(events 为空或 note 为 null)。
换盘残留提示:导出时若 pending/ 中已有同出生日、同性别但盘 hash 不同的
旧包(多为换盘/信息更正后的孤儿包),stderr 打 WARN 列出路径,提醒人工清理
(只提示,不自动删)。
退出码:0 成功;2 不可用/不完整;3 内部错误。
""" """
from __future__ import annotations from __future__ import annotations
@@ -25,6 +32,7 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
import _memory_store as store import _memory_store as store
SCHEMA = "share/v1" SCHEMA = "share/v1"
@@ -37,7 +45,7 @@ CATEGORIES: list[tuple[str, tuple[str, ...]]] = [
("事业", ("事业", "工作", "升职", "跳槽", "调动", "失业", "创业", "辞职", "职务", "官非")), ("事业", ("事业", "工作", "升职", "跳槽", "调动", "失业", "创业", "辞职", "职务", "官非")),
("财运", ("财运", "破财", "投资", "收入", "赚钱", "欠债", "债务", "置业", "买房")), ("财运", ("财运", "破财", "投资", "收入", "赚钱", "欠债", "债务", "置业", "买房")),
("健康", ("健康", "生病", "手术", "伤病", "身体", "住院", "疾病", "意外")), ("健康", ("健康", "生病", "手术", "伤病", "身体", "住院", "疾病", "意外")),
("学业", ("学业", "考试", "升学", "考研", "高考", "留学", "读书")), ("学业", ("学业", "考试", "升学", "考研", "高考", "留学", "读书", "大学")),
("六亲", ("父亲", "母亲", "父母", "子女", "孩子", "兄弟", "姐妹", "六亲", "亲人", "丧")), ("六亲", ("父亲", "母亲", "父母", "子女", "孩子", "兄弟", "姐妹", "六亲", "亲人", "丧")),
("流年运势", ("流年", "运势", "大运", "运程")), ("流年运势", ("流年", "运势", "大运", "运程")),
] ]
@@ -60,6 +68,9 @@ _PROVINCE_SHORT = {
_STATUS_TAGS = {"【已核实】": "已核实", "【已证伪】": "已证伪", "【未核实】": "未核实"} _STATUS_TAGS = {"【已核实】": "已核实", "【已证伪】": "已证伪", "【未核实】": "未核实"}
_GZ_RE = re.compile(r"[甲乙丙丁戊己庚辛壬癸][子丑寅卯辰巳午未申酉戌亥]")
_YEAR_RE = re.compile(r"(?:19|20)\d{2}")
def _categorize_all(text: str) -> list[str]: def _categorize_all(text: str) -> list[str]:
return [cat for cat, keywords in CATEGORIES if any(k in text for k in keywords)] return [cat for cat, keywords in CATEGORIES if any(k in text for k in keywords)]
@@ -71,7 +82,7 @@ def _categorize(text: str) -> str:
def _province_of(birthplace: str) -> str | None: def _province_of(birthplace: str) -> str | None:
"""地域脱敏:只保留到省级;识别不出省级则舍弃(宁缺毋滥)。""" """地域脱敏:省级;识别不出省级则舍弃(宁缺毋滥)。"""
for p in _PROVINCES: for p in _PROVINCES:
if p in birthplace: if p in birthplace:
return p return p
@@ -82,6 +93,42 @@ def _province_of(birthplace: str) -> str | None:
return m.group(1) if m else None return m.group(1) if m else None
def _city_of(birthplace: str) -> str | None:
"""地域脱敏:城市级(地级市/州/盟;直辖市即省级本身)。识别不出则舍弃。"""
province = _province_of(birthplace)
if province in ("北京市", "天津市", "上海市", "重庆市",
"香港特别行政区", "澳门特别行政区"):
return province
rest = birthplace
if province and rest.startswith(province):
rest = rest[len(province):]
m = re.match(r"^(.{2,10}?(?:市|州|盟))", rest)
return m.group(1) if m else None
def _sanitize_note(text: str, name: str) -> str:
"""事件简介脱敏:姓名、身份证/电话、详细住址(小区/门牌/街道号)一律删除;
城市级地名保留(规则蒸馏要用方位信息)。"""
t = text
if name and name not in PLACEHOLDERS:
t = t.replace(name, "命主")
t = re.sub(r"\d{17}[\dXx]", "(已删)", t) # 身份证
t = re.sub(r"1[3-9]\d{9}", "(已删)", t) # 手机号
t = re.sub(r"\d{3,4}-\d{7,8}", "(已删)", t) # 座机号
t = re.sub(r"[^\s,。;:、()]*(?:小区|公寓|花园|山庄|新村|苑|大院)"
r"[^\s,。;:、()]*", "(已删)", t) # 小区/楼盘名
t = re.sub(r"\d+\s*(?:号楼|栋|单元|室|号院|层|户)", "(已删)", t) # 楼栋门牌
t = re.sub(r"(?:街|路|巷|大道|道)\s*\d+\s*号(?:\s*\d+\s*室)?",
"(已删)", t) # 街道号
return t.strip()
def _strip_tags(text: str) -> str:
for tag in _STATUS_TAGS:
text = text.replace(tag, "")
return text.strip()
def _section_lines(body: str, heading: str) -> list[str]: def _section_lines(body: str, heading: str) -> list[str]:
"""取档案正文某固定小节(SECTIONS 内)的行,到下一个固定小节或文末。""" """取档案正文某固定小节(SECTIONS 内)的行,到下一个固定小节或文末。"""
lines = body.splitlines() lines = body.splitlines()
@@ -129,22 +176,59 @@ def _parse_focus(body: str) -> list[str]:
return cats return cats
def _parse_feedback(body: str) -> list[dict]: def _status_of(t: str) -> str:
"""反馈事件:只取年份、类目、核实状态——反馈原文不入包。""" for tag, name in _STATUS_TAGS.items():
if tag in t:
return name
return "未核实"
def _parse_feedback(body: str, name: str) -> list[dict]:
"""反馈事件:年份、类目、核实状态 + 事件简介(note,脱敏后;无实质内容则为 None)。"""
events = [] events = []
for ln in _section_lines(body, "反馈与澄清"): for ln in _section_lines(body, "反馈与澄清"):
t = ln.strip().lstrip("-•· ").strip() t = ln.strip().lstrip("-•· ").strip()
if not t or t in PLACEHOLDERS: if not t or t in PLACEHOLDERS:
continue continue
status = "未核实" m = _YEAR_RE.search(t)
for tag, name in _STATUS_TAGS.items(): note = _sanitize_note(_strip_tags(t), name)
if tag in t:
status = name
break
m = re.search(r"(?:19|20)\d{2}", t)
events.append({"year": int(m.group(0)) if m else None, events.append({"year": int(m.group(0)) if m else None,
"category": _categorize(t), "category": _categorize(t),
"status": status}) "status": _status_of(t),
"note": note or None})
return events
def _parse_events(body: str, name: str) -> list[dict]:
"""流年大事:年份(区间取首年)、干支、标签、核实状态 + 事件简介(脱敏后)。
行形如「- 2016(丙申·交运年,入丁酉运):【已核实】离乡,自四川乐山赴厦门读大学。」;
无括号标签或缺事件内容时对应字段为 None(如实反映,不挡导出)。
"""
events = []
for ln in _section_lines(body, "流年大事"):
t = ln.strip().lstrip("-•· ").strip()
if not t or t in PLACEHOLDERS:
continue
m = re.match(r"^((?:19|20)\d{2})(?:[–—\-]\d{2,4})?"
r"(?:(([^)]*)))?\s*[::]\s*(.+)$", t)
if m:
year = int(m.group(1))
label = m.group(2) or None
note = m.group(3)
else:
ym = _YEAR_RE.search(t)
year = int(ym.group(0)) if ym else None
label = None
note = t
ganzhi = None
if label:
gz = _GZ_RE.search(label)
ganzhi = gz.group(0) if gz else None
note = _sanitize_note(_strip_tags(note), name)
events.append({"year": year, "ganzhi": ganzhi, "label": label,
"note": note or None, "status": _status_of(t),
"category": _categorize(t)})
return events return events
@@ -154,13 +238,18 @@ def chart_hash(pillars: list[str], birthplace: str) -> str:
def build_package(meta: dict, body: str) -> tuple[dict, list[str]]: def build_package(meta: dict, body: str) -> tuple[dict, list[str]]:
"""组装脱敏包;返回 (package, 缺失项列表)。package 保证不含姓名/分钟/省以下地域。""" """组装脱敏包;返回 (package, 缺失项列表)。
保证不含姓名、出生分钟/钟表时间、区县及以下地域;事件简介中城市级地名保留,
直接定位信息(详细住址、证件、电话)已删除。
"""
pillars = meta.get("pillars", []) pillars = meta.get("pillars", [])
if isinstance(pillars, str): if isinstance(pillars, str):
pillars = pillars.split() pillars = pillars.split()
pillars = [str(p) for p in pillars] pillars = [str(p) for p in pillars]
birthplace = str(meta.get("birthplace", "")) birthplace = str(meta.get("birthplace", ""))
gender = str(meta.get("gender", "")) gender = str(meta.get("gender", ""))
name = str(meta.get("name", ""))
pkg: dict = {"schema": SCHEMA, pkg: dict = {"schema": SCHEMA,
"exported_at": datetime.now().strftime("%Y-%m-%d %H:%M"), "exported_at": datetime.now().strftime("%Y-%m-%d %H:%M"),
@@ -169,7 +258,8 @@ def build_package(meta: dict, body: str) -> tuple[dict, list[str]]:
"pillars": pillars, "pillars": pillars,
"luck_pillars": _parse_luck(body), "luck_pillars": _parse_luck(body),
"focus_categories": _parse_focus(body), "focus_categories": _parse_focus(body),
"feedback": _parse_feedback(body)} "events": _parse_events(body, name),
"feedback": _parse_feedback(body, name)}
# 出生信息脱敏:只保留年月日与时辰(时支),不留分钟与钟表时间 # 出生信息脱敏:只保留年月日与时辰(时支),不留分钟与钟表时间
m = re.match(r"^(\d{4})-(\d{2})-(\d{2})", str(meta.get("birth_clock", "")).strip()) m = re.match(r"^(\d{4})-(\d{2})-(\d{2})", str(meta.get("birth_clock", "")).strip())
@@ -180,6 +270,9 @@ def build_package(meta: dict, body: str) -> tuple[dict, list[str]]:
province = _province_of(birthplace) province = _province_of(birthplace)
if province: if province:
pkg["region_province"] = province pkg["region_province"] = province
city = _city_of(birthplace)
if city:
pkg["region_city"] = city
missing = [] missing = []
if not gender: if not gender:
@@ -210,7 +303,7 @@ def _find_archive(args) -> Path | None:
def main() -> int: def main() -> int:
ap = argparse.ArgumentParser( ap = argparse.ArgumentParser(
prog="share_export.py", prog="share_export.py",
description="从 memory 档案导出结构化脱敏包(JSON)到 share/pending/;不含姓名、分钟、省以下地域") description="从 memory 档案导出结构化脱敏包(JSON)到 share/pending/;不含姓名、分钟、区县及以下地域")
ap.add_argument("--archive", default=None, help="档案文件路径(直接指定)") ap.add_argument("--archive", default=None, help="档案文件路径(直接指定)")
ap.add_argument("--name", default=None, help="姓名(检索条件)") ap.add_argument("--name", default=None, help="姓名(检索条件)")
ap.add_argument("--gender", default=None, choices=["男", "女"], help="性别(检索条件)") ap.add_argument("--gender", default=None, choices=["男", "女"], help="性别(检索条件)")
@@ -249,6 +342,21 @@ def main() -> int:
pending = share_root / "pending" pending = share_root / "pending"
pending.mkdir(parents=True, exist_ok=True) pending.mkdir(parents=True, exist_ok=True)
out = pending / f"{pkg['chart_hash']}.json" out = pending / f"{pkg['chart_hash']}.json"
# 换盘孤儿包提示:pending 中同出生日、同性别但盘 hash 不同的旧包,
# 多为换盘/信息更正后的残留,提醒人工清理(只提示,不自动删)
for old in sorted(pending.glob("*.json")):
if old.name == out.name:
continue
try:
opkg = json.loads(old.read_text(encoding="utf-8"))
except (OSError, json.JSONDecodeError):
continue
if (opkg.get("birth_date") == pkg.get("birth_date")
and opkg.get("gender") == pkg.get("gender")
and opkg.get("chart_hash") != pkg["chart_hash"]):
print(f"WARN: pending 中已有同出生日同性别的旧包(盘 hash 不同),"
f"疑似换盘残留:{old};确认后请手动删除,避免误推。",
file=sys.stderr)
out.write_text(json.dumps(pkg, ensure_ascii=False, indent=2) + "\n", out.write_text(json.dumps(pkg, ensure_ascii=False, indent=2) + "\n",
encoding="utf-8") encoding="utf-8")
print(out) print(out)
+48 -24
View File
@@ -9,7 +9,8 @@ ZIPING_SHARE_GITEA_REMOTE 覆盖)。两个远端逐个尝试,至少一个成
推送成功后:调 _license_gate.grant_uses(root, 10, 盘hash) 计励(同一盘只计一次), 推送成功后:调 _license_gate.grant_uses(root, 10, 盘hash) 计励(同一盘只计一次),
并把该包移入 share/pushed/。推送失败保留 pending,退出码 3。 并把该包移入 share/pushed/。推送失败保留 pending,退出码 3。
无 git 或无网络安静失败(不打栈)。 无 git 或无网络安静失败(不打栈);远端推送失败时在 stderr 带该远端
git 报错的末几行摘要,GitHub 线失败另附 HTTPS_PROXY 代理提示。
退出码:0 至少一包推送成功或无包可推;2 输入不可用;3 推送失败。 退出码:0 至少一包推送成功或无包可推;2 输入不可用;3 推送失败。
""" """
@@ -26,6 +27,7 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
import _runtime_guard # noqa: F401 import 即检查:Python < 3.10 时中文报错退出(码 3)
import _license_gate as gate import _license_gate as gate
GRANT_USES = 10 # 每盘推送成功的计励次数 GRANT_USES = 10 # 每盘推送成功的计励次数
@@ -39,24 +41,38 @@ def _git(*args: str, cwd: str | None = None) -> subprocess.CompletedProcess:
capture_output=True, text=True, timeout=60) capture_output=True, text=True, timeout=60)
def _push_to_remote(remote: str, pkg: Path, workdir: str) -> bool: def _err_tail(cp: subprocess.CompletedProcess, n: int = 2) -> str:
"""克隆远端 → 放入脱敏包 → commit+push。任一步失败返回 False(安静)。""" """取 git 命令报错的末几行(stderr 优先,退而 stdout)。"""
for text in (cp.stderr, cp.stdout):
lines = [ln.strip() for ln in (text or "").splitlines() if ln.strip()]
if lines:
return " / ".join(lines[-n:])
return f"退出码 {cp.returncode}"
def _push_to_remote(remote: str, pkg: Path, workdir: str) -> tuple[bool, str]:
"""克隆远端 → 放入脱敏包 → commit+push。返回 (成功与否, 失败摘要)。"""
try: try:
if _git("clone", "--depth", "50", remote, workdir).returncode != 0: r = _git("clone", "--depth", "50", remote, workdir)
return False if r.returncode != 0:
return False, f"clone 失败:{_err_tail(r)}"
dst = Path(workdir) / pkg.name dst = Path(workdir) / pkg.name
shutil.copy2(pkg, dst) shutil.copy2(pkg, dst)
if _git("add", pkg.name, cwd=workdir).returncode != 0: r = _git("add", pkg.name, cwd=workdir)
return False if r.returncode != 0:
commit = _git("-c", "user.name=ziping-share", return False, f"add 失败:{_err_tail(r)}"
"-c", "user.email=ziping-share@localhost", r = _git("-c", "user.name=ziping-share",
"commit", "--allow-empty", "-m", f"share: {pkg.stem}", "-c", "user.email=ziping-share@localhost",
cwd=workdir) "commit", "--allow-empty", "-m", f"share: {pkg.stem}",
if commit.returncode != 0: cwd=workdir)
return False if r.returncode != 0:
return _git("push", "origin", "HEAD:main", cwd=workdir).returncode == 0 return False, f"commit 失败:{_err_tail(r)}"
except (OSError, subprocess.SubprocessError): r = _git("push", "origin", "HEAD:main", cwd=workdir)
return False if r.returncode != 0:
return False, f"push 失败:{_err_tail(r)}"
return True, ""
except (OSError, subprocess.SubprocessError) as e:
return False, f"{type(e).__name__}: {e}"
def _remotes(root: Path) -> list[tuple[str, str]]: def _remotes(root: Path) -> list[tuple[str, str]]:
@@ -105,21 +121,29 @@ def main() -> int:
n_ok = 0 n_ok = 0
for pkg in packages: for pkg in packages:
chart_hash = pkg.stem chart_hash = pkg.stem
ok_remote = None ok_remotes = []
failures = []
for name, remote in remotes: for name, remote in remotes:
with tempfile.TemporaryDirectory(prefix="ziping-share-") as td: with tempfile.TemporaryDirectory(prefix="ziping-share-") as td:
if _push_to_remote(remote, pkg, td): ok, why = _push_to_remote(remote, pkg, td)
ok_remote = name if ok:
break ok_remotes.append(name)
if ok_remote is None: else:
print(f"FAIL {pkg.name}:所有远端推送失败(无网络或远端不可达)," if name == "github_remote":
f"pending 保留。", file=sys.stderr) why += (";若本机直连 GitHub 不通,可通过 HTTPS_PROXY "
"环境变量配置代理")
failures.append(f"{name}:{why}")
for f in failures:
print(f"WARN {pkg.name} {f}", file=sys.stderr)
if not ok_remotes:
print(f"FAIL {pkg.name}:所有远端推送失败,pending 保留。",
file=sys.stderr)
continue continue
granted = gate.grant_uses(root, GRANT_USES, chart_hash) granted = gate.grant_uses(root, GRANT_USES, chart_hash)
shutil.move(str(pkg), str(pushed / pkg.name)) shutil.move(str(pkg), str(pushed / pkg.name))
note = (f"+{GRANT_USES} 次(新增计励)" if granted note = (f"+{GRANT_USES} 次(新增计励)" if granted
else "该盘已计励过,本次不重复加次") else "该盘已计励过,本次不重复加次")
print(f"OK {pkg.name} → {ok_remote};{note}") print(f"OK {pkg.name} → {'、'.join(ok_remotes)};{note}")
n_ok += 1 n_ok += 1
return 0 if n_ok else 3 return 0 if n_ok else 3
+4 -4
View File
@@ -15,11 +15,11 @@
| 项目 | 处理 | | 项目 | 处理 |
|---|---| |---|---|
| 姓名 | 一律删除,不入包 | | 姓名 | 一律删除,不入包(事件简介中出现的姓名替换为「命主」) |
| 出生信息 | 只保留年月日与时辰(时辰以时支表示),不留分钟与钟表时间 | | 出生信息 | 只保留年月日与时辰(时辰以时支表示),不留分钟与钟表时间 |
| 地域 | 只保留到省级,省以下(市、县、区县)一律删除 | | 地域 | 保留到城市级(省+地级市),区县及以下一律删除 |
| 事件 | 一律类目化(婚姻/感情/事业/财运/健康/学业/六亲/流年运势/其他),不写细节 | | 事件 | 类目化(婚姻/感情/事业/财运/健康/学业/六亲/流年运势/其他)+ 事件简介(note);简介中**城市级地名保留**(规则蒸馏要用方位信息),详细住址(小区/门牌/街道号)、身份证/电话等直接定位信息一律删除;书写事件简介时只写到城市级 |
| 正文自由文本 | 不入包(归纳、盘面细节、反馈原文均不导出) | | 正文自由文本 | 归纳、盘面细节不入包;入包的事件简介按上行规格脱敏 |
| 标识 | 仅以盘 hash(四柱+出生地 sha1 前 8 位)标识,用于去重与撤回 | | 标识 | 仅以盘 hash(四柱+出生地 sha1 前 8 位)标识,用于去重与撤回 |
## 用途与许可 ## 用途与许可
+2 -2
View File
@@ -1,5 +1,5 @@
{ {
"github_remote": "https://github.com/mxiaonian/ZiPingEightChar-archives.git", "github_remote": "https://github.com/mxiaonian/ZiPingEightChar-archives.git",
"gitea_remote": "https://git.lingyaomiaojie.com/moxiaonian/ZiPingEightChar-archives.git", "gitea_remote": "https://archives-uploader:df6be7f4a974bf65d796cd24e850e014a7faa8fc@git.lingyaomiaojie.com/ziping-eightchar/ZiPingEightChar-archives.git",
"_note": "脱敏包接收远端。推送时优先用本机 git 凭证;公开用户的免登录推送令牌待授权方签发受限账号后另行下发(勿在此写入管理员令牌)。亦可用环境变量 ZIPING_SHARE_GITHUB_REMOTE / ZIPING_SHARE_GITEA_REMOTE 覆盖(可在 URL 中内嵌凭证)。" "_note": "脱敏包接收远端。gitea_remote 内嵌的是 archives-uploader 受限账号令牌(仅数据仓可写,泄漏也只影响数据仓);GitHub 线路依赖本机 git 凭证。环境变量 ZIPING_SHARE_GITHUB_REMOTE / ZIPING_SHARE_GITEA_REMOTE 可覆盖。"
} }
+113
View File
@@ -0,0 +1,113 @@
"""chart_shot.py 与 cast_chart --shot:HTML → PNG 截图的分级回退与优雅失败。"""
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
from unittest import mock
SKILL_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(SKILL_ROOT / "scripts"))
import chart_shot # noqa: E402
CHROME_OK = Path(chart_shot.CHROME).is_file()
try:
import playwright # noqa: F401
PLAYWRIGHT_OK = True
except ImportError:
PLAYWRIGHT_OK = False
SHOT_OK = CHROME_OK or PLAYWRIGHT_OK
HTML = "<!DOCTYPE html><html><body><h1>命盘</h1></body></html>"
class ShootUnitTest(unittest.TestCase):
def test_missing_html_exit_2(self):
r = subprocess.run(
[sys.executable, str(SKILL_ROOT / "scripts" / "chart_shot.py"),
"/nonexistent/x.html"], capture_output=True, text=True, timeout=30)
self.assertEqual(r.returncode, 2)
self.assertIn("ERROR", r.stderr)
def test_no_tools_fails_gracefully(self):
"""playwright 与 Chrome 都不可用时:shoot 返回 None,CLI 退出码 2 并给提示。"""
with tempfile.TemporaryDirectory() as td:
html = Path(td) / "p.html"
html.write_text(HTML, encoding="utf-8")
with mock.patch.object(chart_shot, "_shot_playwright",
return_value=False), \
mock.patch.object(chart_shot, "_shot_chrome",
return_value=False):
self.assertIsNone(chart_shot.shoot(html))
self.assertFalse(html.with_suffix(".png").exists())
with mock.patch.object(sys, "argv",
["chart_shot.py", str(html)]):
with mock.patch("sys.stderr") as err:
self.assertEqual(chart_shot.main(), 2)
err.write.assert_called()
def test_content_height_bounds(self):
"""高度估算不越界:空页夹到下限,超长页夹到上限。"""
with tempfile.TemporaryDirectory() as td:
empty = Path(td) / "e.html"
empty.write_text(HTML, encoding="utf-8")
self.assertEqual(chart_shot._content_height(empty), 1300)
big = Path(td) / "b.html"
big.write_text(
'<div class="strip">' + '<div class="cell"></div>' * 5000
+ "</div>", encoding="utf-8")
self.assertEqual(chart_shot._content_height(big), 4200)
@unittest.skipUnless(SHOT_OK, "环境无 playwright 与 Chrome,跳过真实截图")
class ShootRealTest(unittest.TestCase):
def test_real_png(self):
"""真实截图:PNG 非空、宽 2200(1100 窗口 × 2 倍分辨率)。"""
import struct
with tempfile.TemporaryDirectory() as td:
html = Path(td) / "p.html"
html.write_text(HTML, encoding="utf-8")
png = chart_shot.shoot(html)
self.assertIsNotNone(png)
data = png.read_bytes()
self.assertGreater(len(data), 1000)
self.assertEqual(data[:8], b"\x89PNG\r\n\x1a\n")
w, _h = struct.unpack(">II", data[16:24])
self.assertEqual(w, 2200)
def test_cli_success(self):
with tempfile.TemporaryDirectory() as td:
html = Path(td) / "p.html"
html.write_text(HTML, encoding="utf-8")
out = Path(td) / "o.png"
r = subprocess.run(
[sys.executable, str(SKILL_ROOT / "scripts" / "chart_shot.py"),
str(html), "-o", str(out)],
capture_output=True, text=True, timeout=120)
self.assertEqual(r.returncode, 0, r.stderr)
self.assertIn(str(out), r.stdout)
self.assertGreater(out.stat().st_size, 0)
@unittest.skipUnless(SHOT_OK, "环境无 playwright 与 Chrome,跳过 --shot 端到端")
class CastShotE2ETest(unittest.TestCase):
def test_shot_flag_outputs_paths(self):
with tempfile.TemporaryDirectory() as td:
html = Path(td) / "p.html"
r = subprocess.run(
[sys.executable, str(SKILL_ROOT / "scripts" / "cast_chart.py"),
"--name", "张三", "--gender", "男", "--birth", "1990-05-14 08:30",
"--place", "四川省成都市", "--html", str(html), "--shot"],
capture_output=True, text=True, timeout=120,
cwd=str(SKILL_ROOT / "scripts"))
self.assertEqual(r.returncode, 0, r.stderr)
self.assertTrue(r.stdout.startswith("# 命盘:张三"))
self.assertIn(f"HTML 盘面:{html.resolve()}", r.stdout)
png = html.with_suffix(".png")
self.assertIn(f"盘面截图:{png.resolve()}", r.stdout)
self.assertGreater(png.stat().st_size, 0)
if __name__ == "__main__":
unittest.main()
+37
View File
@@ -17,6 +17,9 @@ SCRIPTS_DIR = SKILL_ROOT / "scripts"
GOLDEN_DIR = Path(__file__).resolve().parent / "golden" GOLDEN_DIR = Path(__file__).resolve().parent / "golden"
if str(SCRIPTS_DIR) not in sys.path: if str(SCRIPTS_DIR) not in sys.path:
sys.path.insert(0, str(SCRIPTS_DIR)) sys.path.insert(0, str(SCRIPTS_DIR))
_VENDOR = SKILL_ROOT / "vendor"
if str(_VENDOR) not in sys.path:
sys.path.insert(0, str(_VENDOR))
from astro.day_boundary import resolve_calendar_day # noqa: E402 from astro.day_boundary import resolve_calendar_day # noqa: E402
from astro.solar_time import to_true_solar_time # noqa: E402 from astro.solar_time import to_true_solar_time # noqa: E402
@@ -65,5 +68,39 @@ class LateZiGoldenTest(unittest.TestCase):
self.assertIs(flag["is_late_zi"], s["expect"]["is_late_zi"]) self.assertIs(flag["is_late_zi"], s["expect"]["is_late_zi"])
class LateZiSectPillarsTest(unittest.TestCase):
"""晚子时双滚回归:换日由 tyme4py provider 口径实现(sect 参数),
调用方不再预滚日。锚点:1973-08-23 23:32 真太阳时。
子初 → 壬辰日庚子时(滚一日);子正 → 辛卯日庚子时(不滚,晚子时时柱仍次日起)。
"""
def test_sect1_rolls_once(self):
from chart.tyme_adapter import cast
r = cast(datetime(1973, 8, 23, 23, 32), "男", sect=1)
self.assertEqual(r["day"]["gan"] + r["day"]["zhi"], "壬辰")
self.assertEqual(r["hour"]["gan"] + r["hour"]["zhi"], "庚子")
def test_sect2_no_roll(self):
from chart.tyme_adapter import cast
r = cast(datetime(1973, 8, 23, 23, 32), "男", sect=2)
self.assertEqual(r["day"]["gan"] + r["day"]["zhi"], "辛卯")
self.assertEqual(r["hour"]["gan"] + r["hour"]["zhi"], "庚子")
def test_provider_restored(self):
from chart.tyme_adapter import cast
from tyme4py.eightchar.provider.impl import DefaultEightCharProvider
from tyme4py.lunar import LunarHour
cast(datetime(1973, 8, 23, 23, 32), "男", sect=2)
self.assertIsInstance(LunarHour.provider, DefaultEightCharProvider)
def test_non_late_zi_unaffected(self):
from chart.tyme_adapter import cast
for sect in (1, 2):
with self.subTest(sect=sect):
r = cast(datetime(1973, 8, 23, 12, 0), "男", sect=sect)
self.assertEqual(r["day"]["gan"] + r["day"]["zhi"], "辛卯")
self.assertEqual(r["hour"]["gan"] + r["hour"]["zhi"], "甲午")
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
+267
View File
@@ -0,0 +1,267 @@
"""HTML 盘面渲染测试(render/html.py + cast_chart --html)。"""
import re
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
SKILL_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(SKILL_ROOT / "scripts"))
def _chart(name="张三", place="四川省成都市"):
"""用真实排盘管线造一份 ChartData(成都 1990 男盘)。"""
from datetime import datetime
from astro.solar_time import to_true_solar_time
from astro.timezone_resolve import to_utc
from astro.day_boundary import resolve_calendar_day
from chart.tyme_adapter import cast
from chart.luck import (childhood_luck, compute_luck, decade_pillars,
flow_months, flow_years, is_forward,
luck_label_for_year)
from chart.model import build_chart_data
from geo.cities import resolve_location
loc = resolve_location("四川省成都市")
clock = datetime(1990, 5, 14, 8, 30)
utc, tz_audit = to_utc(clock, loc)
tst, st_audit = to_true_solar_time(utc, loc.lon)
day, bd_audit = resolve_calendar_day(tst)
cast_dt = day.replace(hour=tst.hour, minute=tst.minute, second=tst.second)
raw = cast(cast_dt, "男")
forward = is_forward("男", raw["year"]["gan"])
luck = compute_luck(birth_tst=tst, prev_jie_time=raw["prev_jie"]["time"],
next_jie_time=raw["next_jie"]["time"], forward=forward)
this_year = datetime.now().year
decade = decade_pillars(raw["month"]["gan"], raw["month"]["zhi"], forward,
luck["start_age_years"], cast_dt.year)
years = [(y, gz, luck_label_for_year(y, decade))
for y, gz in flow_years(cast_dt.year, this_year, 10)]
return build_chart_data(
name=name, gender="男", place=place,
clock="1990-05-14 08:30", loc=loc, tz_audit=tz_audit,
st_audit=st_audit, bd_audit=bd_audit, raw=raw, luck=luck,
luck_pillars=decade, flow_years=years,
flow_months=flow_months(this_year),
childhood_luck=childhood_luck(raw["hour"]["gan"], raw["hour"]["zhi"],
forward, luck["start_age_years"],
cast_dt.year),
)
class HtmlRenderTest(unittest.TestCase):
def test_render_complete(self):
from render.html import build_html
html = build_html(_chart())
self.assertFalse(re.findall(r"\{\{[A-Z_]+\}\}", html), "存在未填充占位符")
for ch in ("庚", "午", "辛", "巳", "己", "卯", "丁"):
self.assertIn(ch, html)
for sect in ("排盘", "大运", "流年", "流月", "空亡", "神煞", "纳音"):
self.assertIn(sect, html)
def test_brand_head_embedded(self):
"""顶部品牌区:logo 与 LogoFont 均 base64 内嵌,口号在。"""
from render.html import build_html
html = build_html(_chart())
self.assertIn("灵爻妙解", html)
self.assertIn("传承易学智慧", html)
self.assertIn('class="brand-head"', html)
self.assertIn("data:image/png;base64,", html)
self.assertIn("@font-face", html)
self.assertIn("data:font/ttf;base64,", html)
def test_qrcode_card(self):
"""尾部交流群卡:二维码 jpeg base64 内嵌,标题与正文文案各出现一次。"""
from render.html import build_html
html = build_html(_chart())
self.assertIn('class="card qrcard"', html)
self.assertIn("data:image/jpeg;base64,", html)
self.assertEqual(html.count("灵爻妙解 · 传统文化交流群"), 1)
self.assertEqual(
html.count("扫码加入微信群:反馈解读偏差、交流文化心得、"
"参与档案共建,版本更新动态第一时间同步。"), 1)
def test_audit_versions_only_in_comment(self):
"""技术信息并入用户信息卡:展示行删版本段,完整原文留在 HTML 注释。"""
from render.html import build_html
html = build_html(_chart())
self.assertEqual(html.count("tyme4py"), 1)
self.assertEqual(html.count("schema"), 1)
m = re.search(r"<!--[^>]*tyme4py[^>]*-->", html)
self.assertIsNotNone(m, "注释中应保留含 tyme4py/schema 的完整审计原文")
self.assertIn("schema", m.group(0))
self.assertIn("时区", m.group(0))
self.assertIn("月令", html)
self.assertIn("日界 子初换日(23:00)", html)
def test_shensha_notes_stripped(self):
"""神煞括号注释在装配层剔除(全角/半角),Markdown 侧不受影响。"""
from render.html import _strip_sha_note, build_html
self.assertEqual(_strip_sha_note("将星(以年支子查,见于月支子)"), "将星")
self.assertEqual(_strip_sha_note("天乙贵人(以日干查)"), "天乙贵人")
self.assertEqual(_strip_sha_note("驿马"), "驿马")
html = build_html(_chart())
self.assertNotIn("(以", html)
def test_luck_flow_card_removed(self):
"""「大运 · 流年」对照卡已整张删除;排盘卡仍只含四柱。"""
from render.html import build_html
html = build_html(_chart())
self.assertNotIn("大运 · 流年", html)
self.assertNotIn("当前一步大运与本年流年对照", html)
self.assertNotIn("LUCK_FLOW_TABLE", html)
pan_seg = html[html.find("排盘<span"):html.find('class="sect">大运')]
self.assertIn("年柱", pan_seg)
self.assertNotIn("大运", pan_seg)
self.assertNotIn("流年", pan_seg)
def test_luck_strip_enriched(self):
"""大运格:起运年+干支之外带十神·星运/空亡/纳音/神煞(2018 甲申运对拍)。"""
from render.html import build_html
html = build_html(_chart())
seg = html[html.find('class="sect">大运'):html.find('class="sect">流年')]
self.assertIn("2018 · 28 岁起", seg)
self.assertIn("正官 · 沐浴", seg) # 甲对日干己 / 己对申
self.assertIn("午未", seg) # 甲申旬空
self.assertIn("泉中水", seg) # 甲申纳音
self.assertIn("天乙贵人 · 金舆 · 驿马 · 劫煞 · 孤辰", seg) # 甲申岁运神煞
self.assertIn('class="cell cur"', seg) # 当前一步高亮
def test_flow_year_strip_enriched(self):
"""流年格:年份+干支之外带主星/星运/空亡/纳音/神煞(2026 丙午对拍)。"""
from render.html import build_html
html = build_html(_chart())
seg = html[html.find('class="sect">流年'):html.find('class="sect">流月')]
self.assertIn("正印 · 临官", seg) # 丙对日干己 / 己对午
self.assertIn("寅卯", seg) # 丙午旬空(甲辰旬)
self.assertIn("天河水", seg) # 丙午纳音
self.assertIn("天德合 · 禄神 · 将星", seg) # 丙午岁运神煞
self.assertIn('class="cell cur"', seg) # 本年高亮
def test_strips_have_no_field_labels(self):
"""条带小卡只排值:不出现「主星/星运/空亡/纳音/神煞」字段标签。"""
from render.html import build_html
html = build_html(_chart())
segs = [html[html.find('class="sect">大运'):html.find('class="sect">流年')],
html[html.find('class="sect">流年'):html.find('class="sect">流月')]]
for seg in segs:
for label in ("主星", "星运", "空亡", "纳音", "神煞"):
self.assertNotIn(label, seg)
def test_ten_god_table(self):
from chart.ganzhi import ten_god
self.assertEqual(ten_god("庚", "丁"), "正官")
self.assertEqual(ten_god("庚", "丙"), "七杀")
self.assertEqual(ten_god("庚", "辛"), "劫财")
self.assertEqual(ten_god("庚", "壬"), "食神")
def test_void_and_terrain(self):
from chart.ganzhi import gz_void, terrain
self.assertEqual(gz_void("庚子"), "辰巳")
self.assertEqual(gz_void("甲子"), "戌亥")
self.assertEqual(terrain("庚", "巳"), "长生")
self.assertEqual(terrain("庚", "子"), "死")
def test_nayin_shared_with_shensha_module(self):
"""纳音表集中于 chart/ganzhi.py,chart/shensha.py 复用同一份。"""
from chart.ganzhi import NAYIN
from chart.shensha import NAYIN as SHA_NAYIN
self.assertIs(NAYIN, SHA_NAYIN)
self.assertEqual(NAYIN["甲辰"], "覆灯火")
self.assertEqual(NAYIN["丙午"], "天河水")
class HtmlXssTest(unittest.TestCase):
"""XSS 防护:用户可控字段(姓名/出生地)一律转义,模板带 CSP,无脚本。"""
PAYLOADS = (
"<script>alert(1)</script>",
"<img src=x onerror=alert(1)>",
'" autofocus onfocus=alert(1) x="',
"javascript:alert(1)",
'山西晋城 "><svg onload=alert(1)>',
)
# 活跃标签(真实 < 起首、未被 &lt; 转义)携带事件属性或 javascript: 协议
_LIVE_HANDLER = re.compile(r"<[a-zA-Z][^<>]*\son\w+\s*=")
_LIVE_JS_URL = re.compile(r"<[a-zA-Z][^<>]*javascript:")
def _render(self, name, place):
from render.html import build_html
return build_html(_chart(name=name, place=place))
def test_payloads_escaped(self):
"""注入向量在输出中只以转义形态存在,裸形态消失。"""
from html import escape
for payload in self.PAYLOADS:
for field in ("name", "place"):
kw = {"name": "张三", "place": "四川省成都市", field: payload}
html = self._render(**kw)
esc = escape(payload, quote=True)
if esc != payload: # 含 & < > " ' 的载荷:转义形态在、裸形态不在
self.assertIn(esc, html, f"{field}={payload!r} 未转义")
self.assertNotIn(payload, html, f"{field}={payload!r} 裸注入")
def test_no_live_markup_in_document(self):
"""注入打到 name/place 后检查整份文档(含结构性占位符区域):
无 <script> 标签、无活跃事件处理属性、无 javascript: 属性值。"""
html = self._render("<img src=x onerror=alert(1)>",
'" autofocus onfocus=alert(1) x="')
self.assertNotIn("<script", html.lower())
self.assertIsNone(self._LIVE_HANDLER.search(html),
"存在活跃 on* 事件处理属性")
self.assertIsNone(self._LIVE_JS_URL.search(html),
"存在 javascript: 属性值")
def test_javascript_scheme_inert(self):
"""javascript:alert(1) 无特殊字符、转义前后同形——只能作为纯文本出现。"""
html = self._render("javascript:alert(1)", "javascript:alert(1)")
self.assertIsNone(self._LIVE_JS_URL.search(html))
def test_csp_meta_present(self):
"""CSP meta 存在且按模板实际资源类型收紧:default-src 'none',
仅放行 data: 图片/字体与 inline 样式。"""
from render.html import build_html
html = build_html(_chart())
m = re.search(
r'<meta http-equiv="Content-Security-Policy" content="([^"]+)"', html)
self.assertIsNotNone(m, "缺少 CSP meta")
csp = m.group(1)
self.assertIn("default-src 'none'", csp)
self.assertIn("img-src data:", csp)
self.assertIn("style-src 'unsafe-inline'", csp)
self.assertIn("font-src data:", csp)
def test_no_script_tag(self):
"""盘面为纯静态页:输出不含任何 <script>。"""
from render.html import build_html
self.assertNotIn("<script", build_html(_chart()).lower())
def test_structural_placeholders_intact(self):
"""转义不误伤结构性占位符:表格/条带 HTML 片段原样保留。"""
html = self._render("<b>x</b>", '<i>y</i>')
self.assertIn('<table class="pan">', html)
self.assertIn('<div class="strip">', html)
self.assertIn('data:image/png;base64,', html)
class CastHtmlE2ETest(unittest.TestCase):
def test_html_flag_writes_file(self):
with tempfile.TemporaryDirectory() as td:
out = Path(td) / "p.html"
r = subprocess.run(
[sys.executable, str(SKILL_ROOT / "scripts" / "cast_chart.py"),
"--name", "张三", "--gender", "男", "--birth", "1990-05-14 08:30",
"--place", "四川省成都市", "--html", str(out)],
capture_output=True, text=True, timeout=120,
cwd=str(SKILL_ROOT / "scripts"))
self.assertEqual(r.returncode, 0, r.stderr)
self.assertTrue(r.stdout.startswith("# 命盘:张三"))
self.assertIn("HTML 盘面:", r.stderr)
html = out.read_text(encoding="utf-8")
self.assertIn("<table", html)
if __name__ == "__main__":
unittest.main()
+48
View File
@@ -10,6 +10,12 @@ sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts"))
import _license_gate as gate import _license_gate as gate
@pytest.fixture(autouse=True)
def _no_eval_env(monkeypatch):
"""默认清掉评测豁免变量,保证既有用例覆盖的是未豁免口径。"""
monkeypatch.delenv("ZIPEC_EVAL", raising=False)
@pytest.fixture @pytest.fixture
def root(tmp_path): def root(tmp_path):
return tmp_path return tmp_path
@@ -161,3 +167,45 @@ class TestGrantUses:
st = json.loads((root / "data" / ".license.json").read_text("utf-8")) st = json.loads((root / "data" / ".license.json").read_text("utf-8"))
assert st["remaining_uses"] == 12 assert st["remaining_uses"] == 12
assert gate.check(root) is None assert gate.check(root) is None
class TestEvalExemption:
"""ZIPEC_EVAL=1:评测复测豁免——直接放行,不签发、不扣次、不创建任何文件。"""
def test_no_license_passes_and_creates_nothing(self, root, monkeypatch):
monkeypatch.setenv("ZIPEC_EVAL", "1")
assert gate.check(root) is None
gate.consume(root)
assert not (root / "data").exists()
def test_public_marker_not_issued(self, root, monkeypatch):
make_public_marker(root)
monkeypatch.setenv("ZIPEC_EVAL", "1")
assert gate.check(root) is None
assert not (root / "data" / ".license.json").exists() # 不就地签发
def test_licensed_copy_not_decremented(self, root, monkeypatch):
make_state(root)
before = (root / "data" / ".license.json").read_text("utf-8")
monkeypatch.setenv("ZIPEC_EVAL", "1")
assert gate.check(root) is None
gate.consume(root)
st = json.loads((root / "data" / ".license.json").read_text("utf-8"))
assert st["remaining_uses"] == 2 # 不扣次
assert (root / "data" / ".license.json").read_text("utf-8") == before
def test_exhausted_copy_passes_under_eval(self, root, monkeypatch):
make_state(root, max_uses=0)
monkeypatch.setenv("ZIPEC_EVAL", "1")
assert gate.check(root) is None
def test_env_unset_keeps_original_behavior(self, root, monkeypatch):
monkeypatch.setenv("ZIPEC_EVAL", "0") # 仅认 "1",其他值不豁免
make_public_marker(root)
assert gate.check(root) is None
assert (root / "data" / ".license.json").exists() # 公众版仍首启签发
def test_env_unset_exhausted_copy_still_denied(self, root, monkeypatch):
monkeypatch.setenv("ZIPEC_EVAL", "0")
make_state(root, max_uses=0)
assert "次数已用尽" in gate.check(root)
+98
View File
@@ -16,6 +16,10 @@ LOOKUP = SCRIPTS_DIR / "memory_lookup.py"
ZHANGSAN = ["--name", "张三", "--gender", "男", ZHANGSAN = ["--name", "张三", "--gender", "男",
"--birth", "1990-05-14 08:30", "--place", "四川省成都市"] "--birth", "1990-05-14 08:30", "--place", "四川省成都市"]
# 晚子时案例:真太阳时落于 23:00–24:00,子初/子正换日四柱不同
WANZI = ["--name", "李四", "--gender", "女",
"--birth", "1996-12-08 00:30", "--place", "四川省乐山市"]
def run(script, mem_root, *args, use_env=False): def run(script, mem_root, *args, use_env=False):
env = dict(os.environ) env = dict(os.environ)
@@ -117,3 +121,97 @@ class TestLookupNoMatch:
def test_no_condition_exit_2(self, tmp_path): def test_no_condition_exit_2(self, tmp_path):
r = run(LOOKUP, tmp_path) r = run(LOOKUP, tmp_path)
assert r.returncode == 2 assert r.returncode == 2
class TestUpdateChart:
"""换盘(--update-chart):工作盘唯一——盘面段整体替换为新盘,frontmatter
与文件名同步,其余小节保留;旧盘信息由使用方记入反馈与澄清。"""
def test_zizheng_replaces_chart_and_renames(self, tmp_path):
r1 = run(SAVE, tmp_path, *WANZI)
assert r1.returncode == 0, f"stderr:\n{r1.stderr}"
path = Path(r1.stdout.strip())
assert "丙子庚子己卯甲子" in path.name # 默认子初换日盘(晚子时归次日)
# 模拟核对后的回写 + 固定 created_at
text = path.read_text(encoding="utf-8")
text = text.replace("(无)", "- 【已核实】2016 年离乡赴厦门读大学。")
text = re.sub(r'^created_at:.*$', 'created_at: "2000-01-01 00:00"',
text, count=1, flags=re.M)
path.write_text(text, encoding="utf-8")
# 用户确认子正换日:重排替换盘面段,日柱变(时柱同为晚子时起法,不变)→ 改新主键名
r2 = run(SAVE, tmp_path, "--update-chart", str(path),
"--day-boundary", "子正")
assert r2.returncode == 0, f"stderr:\n{r2.stderr}"
assert "日柱 己卯→戊寅" in r2.stderr
assert "待复核" in r2.stderr # 变动柱影响条目提示复核
new_path = Path(r2.stdout.strip())
assert new_path != path and not path.exists()
assert "丙子庚子戊寅甲子" in new_path.name
assert list((tmp_path / "archives").glob("*.md")) == [new_path]
text = new_path.read_text(encoding="utf-8")
meta = read_meta(text)
assert meta["pillars"] == '["丙子", "庚子", "戊寅", "甲子"]'
assert meta["day_master"] == "戊"
assert meta["created_at"] == "2000-01-01 00:00" # 保留
# 盘面段只剩新盘:日界审计与晚子时警示均为子正口径,无旧盘残留
assert "- 日界规则:子正换日(真太阳时 00:00)" in text
assert "已按「子正换日」定盘" in text
assert text.count("# 命盘") == 1
chart_section = text.split("## 盘面")[1].split("## 主要关注方向")[0]
assert "日柱:戊寅" in chart_section and "日柱:己卯" not in chart_section
# 其余小节保留
assert "- 【已核实】2016 年离乡赴厦门读大学。" in text
def test_birth_correction_updates_meta(self, tmp_path):
r1 = run(SAVE, tmp_path, *ZHANGSAN)
assert r1.returncode == 0, f"stderr:\n{r1.stderr}"
path = Path(r1.stdout.strip())
r2 = run(SAVE, tmp_path, "--update-chart", str(path),
"--birth", "1990-05-14 10:30")
assert r2.returncode == 0, f"stderr:\n{r2.stderr}"
assert "时柱" in r2.stderr and "待复核" in r2.stderr
new_path = Path(r2.stdout.strip())
assert new_path != path and not path.exists() # hash6 随 birth 变
meta = read_meta(new_path.read_text(encoding="utf-8"))
assert meta["birth_clock"] == "1990-05-14 10:30"
def test_same_chart_keeps_filename(self, tmp_path):
r1 = run(SAVE, tmp_path, *ZHANGSAN)
assert r1.returncode == 0, f"stderr:\n{r1.stderr}"
path = Path(r1.stdout.strip())
r2 = run(SAVE, tmp_path, "--update-chart", str(path))
assert r2.returncode == 0, f"stderr:\n{r2.stderr}"
assert Path(r2.stdout.strip()) == path # 四柱未变,文件名不动
assert "待复核" not in r2.stderr
def test_conflict_refuses_overwrite(self, tmp_path):
run(SAVE, tmp_path, *WANZI)
olds = list((tmp_path / "archives").glob("*.md"))
assert len(olds) == 1
old = olds[0]
r = run(SAVE, tmp_path, "--update-chart", str(old),
"--day-boundary", "子正")
assert r.returncode == 0, f"stderr:\n{r.stderr}"
# 重新建子初盘档案,再换子正 → 目标已存在,拒绝覆盖
run(SAVE, tmp_path, *WANZI)
r = run(SAVE, tmp_path, "--update-chart", str(old),
"--day-boundary", "子正")
assert r.returncode == 2
assert "已存在" in r.stderr
assert len(list((tmp_path / "archives").glob("*.md"))) == 2
def test_missing_archive_exit_2(self, tmp_path):
r = run(SAVE, tmp_path, "--update-chart",
str(tmp_path / "archives" / "nope.md"))
assert r.returncode == 2
def test_rejects_name_gender_overrides(self, tmp_path):
r1 = run(SAVE, tmp_path, *ZHANGSAN)
assert r1.returncode == 0, f"stderr:\n{r1.stderr}"
path = r1.stdout.strip()
r = run(SAVE, tmp_path, "--update-chart", path, "--name", "王五")
assert r.returncode == 2
+130
View File
@@ -0,0 +1,130 @@
"""规则条款检索(scripts/query_rules.py):索引完整性、关键词命中、
多关键词排序、--id 精确取、--list、退出码。
索引规模基准:rules/[0-9]*.md 共 20 个文件、568 条 `### R-XX-NN` 条款
(2026-10-13 复核,与 grep -c '^### R-' 对拍)。
"""
import re
import sys
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "scripts"))
import query_rules as qr # noqa: E402
CLAUSES = qr.load_index()
BY_ID = {c.rid: c for c in CLAUSES}
class TestIndexCompleteness:
def test_clause_count_568(self):
assert len(CLAUSES) == 568
def test_ids_unique(self):
assert len(BY_ID) == len(CLAUSES)
def test_twenty_files_covered(self):
files = {c.file for c in CLAUSES}
assert len(files) == 20
assert all(re.match(r"^[0-9].*\.md$", f) for f in files)
def test_every_clause_has_title_body_line(self):
for c in CLAUSES:
assert c.title and c.body and c.line >= 1, c.rid
def test_line_points_at_header(self):
"""抽样核对:条款行号精确指向源文件的 ### 头部行。"""
for rid in ("R-纲-00", "R-运-32", "R-煞-04", "R-附-24"):
c = BY_ID[rid]
src = (ROOT / "rules" / c.file).read_text(encoding="utf-8").splitlines()
assert src[c.line - 1].startswith(f"### {rid} ")
def test_body_excludes_next_heading_and_separator(self):
"""正文截断于下一个 ##/### 标题,尾部 --- 分隔线剥除。"""
c = BY_ID["R-纲-03"]
assert "R-纲-04" not in c.body and "## 3." not in c.body
assert not c.body.rstrip().endswith("---")
last = BY_ID["R-运-39"] # 文件尾条款:截到 EOF
assert "五组引动清单照常逐组核查" in last.body
assert last.body.rstrip().endswith("(综括,无单一原文)")
class TestSearch:
def test_single_keyword_hit(self):
hits = qr.search(CLAUSES, ["天乙贵人"])
assert hits and hits[0].rid == "R-煞-04"
assert hits[0].file == "94_神煞细节.md"
def test_no_match_returns_empty(self):
assert qr.search(CLAUSES, ["不存在词xyz"]) == []
def test_multi_keyword_all_hits_rank_first(self):
"""全命中条款一律排在部分命中之前。"""
hits = qr.search(CLAUSES, ["冲", "婚姻宫"])
n_kw = 2
seq = [sum(1 for kw in ("冲", "婚姻宫") if kw in c.title or kw in c.body)
for c in hits]
assert seq == sorted(seq, reverse=True)
assert seq[0] == n_kw and hits[0].rid == "R-事-13"
assert n_kw in seq # 确有全命中条款
def test_rare_keyword_outranks_common(self):
"""IDF:罕见词(从格)的强命中应压过常见词(破格)的弱命中。"""
hits = qr.search(CLAUSES, ["从格", "破格"])
assert hits[0].rid == "R-杂-38"
def test_title_match_weighted(self):
"""标题命中加权:标题含「墓库」的两条排在仅正文提及者之前。"""
hits = qr.search(CLAUSES, ["墓库"])
assert {h.rid for h in hits[:2]} == {"R-附-18", "R-纲-11"}
assert all("墓库" in h.title for h in hits[:2])
def test_strict_and(self):
hits = qr.search(CLAUSES, ["冲", "婚姻宫"], strict_and=True)
assert hits and all("冲" in c.title + c.body and "婚姻宫" in c.title + c.body
for c in hits)
assert qr.search(CLAUSES, ["从格", "破格"], strict_and=True) == []
class TestMainCLI:
def test_search_exit0_and_output(self, capsys):
assert qr.main(["天乙贵人", "--limit", "3"]) == 0
out = capsys.readouterr().out
assert "## R-煞-04 天乙贵人" in out
assert "94_神煞细节.md:" in out
def test_id_exact(self, capsys):
assert qr.main(["--id", "R-运-32"]) == 0
out = capsys.readouterr().out
assert "## R-运-32 落地义务与候选收敛" in out
assert "90_行运.md:352" in out
def test_id_unknown_exit1(self, capsys):
assert qr.main(["--id", "R-运-99"]) == 1
assert "无命中" in capsys.readouterr().err
def test_no_result_exit1(self, capsys):
assert qr.main(["不存在词xyz"]) == 1
capsys.readouterr()
def test_no_input_exit2(self, capsys):
assert qr.main([]) == 2
assert "ERROR" in capsys.readouterr().err
def test_list(self, capsys):
assert qr.main(["--list"]) == 0
out = capsys.readouterr().out
assert "(568 条)" in out
assert len(re.findall(r"^- R-\S+ ", out, re.M)) == 568
def test_limit(self, capsys):
assert qr.main(["冲", "--limit", "2"]) == 0
out = capsys.readouterr().out
assert len(re.findall(r"^## R-", out, re.M)) == 2
if __name__ == "__main__":
sys.exit(pytest.main([__file__, "-v"]))
+74
View File
@@ -0,0 +1,74 @@
"""运行环境守卫(scripts/_runtime_guard.py):版本判定文案、import 时拦截、入口脚本接线。
import 时拦截用子进程模拟:伪造 sys.version_info = (3, 9, 6) 后再 import,
守卫应打印中文报错并以退出码 3 结束进程。
"""
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SCRIPTS = ROOT / "scripts"
sys.path.insert(0, str(SCRIPTS))
import _runtime_guard as guard
ENTRY_SCRIPTS = ("cast_chart.py", "chart_shot.py", "memory_lookup.py",
"memory_save.py", "query_rules.py", "query_shensha.py",
"self_update.py", "share_export.py", "share_push.py")
def run_with_fake_py39(code: str) -> subprocess.CompletedProcess:
"""在子进程中把 sys.version_info 伪造成 3.9.6 后执行 code。"""
prefix = "import sys, runpy; sys.version_info = (3, 9, 6); "
return subprocess.run([sys.executable, "-c", prefix + code],
capture_output=True, text=True, timeout=60)
class TestVersionError:
def test_current_interpreter_passes(self):
assert guard.version_error() is None
def test_py39_denied_with_chinese_message(self):
msg = guard.version_error((3, 9, 6))
assert msg is not None
assert "Python 3.10" in msg
assert "3.9.6" in msg
assert sys.executable in msg
def test_boundary_versions(self):
assert guard.version_error((3, 10, 0)) is None
assert guard.version_error((4, 0, 0)) is None
assert guard.version_error((3, 8, 10)) is not None
assert guard.version_error((2, 7, 18)) is not None
class TestImportTimeGuard:
def test_import_denied_exits_3(self):
cp = run_with_fake_py39(
f"sys.path.insert(0, {str(SCRIPTS)!r}); import _runtime_guard")
assert cp.returncode == 3
assert "Python 3.10" in cp.stderr
def test_import_allowed_is_silent(self):
cp = subprocess.run(
[sys.executable, "-c",
f"import sys; sys.path.insert(0, {str(SCRIPTS)!r}); import _runtime_guard"],
capture_output=True, text=True, timeout=60)
assert cp.returncode == 0
assert cp.stderr == ""
def test_entry_script_intercepts_before_deep_error(self):
"""chart_shot.py 在 3.9 下原本 def 期即 TypeError;接线后守卫先拦截,报错清晰。"""
cp = run_with_fake_py39(
f"sys.argv = ['chart_shot.py', 'x.html']; "
f"runpy.run_path({str(SCRIPTS / 'chart_shot.py')!r}, run_name='__main__')")
assert cp.returncode == 3
assert "Python 3.10" in cp.stderr
assert "TypeError" not in cp.stderr
class TestEntryScriptsWired:
def test_every_entry_script_imports_guard(self):
for name in ENTRY_SCRIPTS:
src = (SCRIPTS / name).read_text(encoding="utf-8")
assert "import _runtime_guard" in src, f"{name} 未接入 _runtime_guard"
+193 -20
View File
@@ -1,8 +1,11 @@
"""自更新:版本比较、24h 缓存、manifest 校验拦截、apply 同步与保留区、退出码。 """自更新:版本比较、24h 缓存、manifest 校验拦截、apply 同步与保留区、退出码。
远端用本地临时目录伪造:VERSION / zipball 均以 file:// 地址经 远端用本地临时目录伪造:VERSION / zipball / manifest 直链均以 file://
ZIPEC_VERSION_URLS / ZIPEC_ZIPBALL_URLS 注入,不碰真实网络。 地址经 ZIPEC_VERSION_URLS / ZIPEC_ZIPBALL_URLS / ZIPEC_MANIFEST_URLS
注入,不碰真实网络。manifest 一律用测试密钥签名,UPDATE_PUBLIC_KEY_HEX
由 autouse fixture 替换为测试公钥。
""" """
import base64
import hashlib import hashlib
import json import json
import subprocess import subprocess
@@ -14,8 +17,19 @@ from pathlib import Path
import pytest import pytest
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts"))
import _update_sig
import self_update as su import self_update as su
# 测试专用密钥(与正式私钥无关)
TEST_SEED = bytes(range(32))
TEST_PK_HEX = _update_sig.publickey(TEST_SEED).hex()
OTHER_SEED = bytes(range(32, 64))
@pytest.fixture(autouse=True)
def _test_public_key(monkeypatch):
monkeypatch.setattr(su, "UPDATE_PUBLIC_KEY_HEX", TEST_PK_HEX)
# ---- 造本地副本与伪造远端 ---- # ---- 造本地副本与伪造远端 ----
@@ -38,10 +52,19 @@ def make_local(tmp_path, version="3.5.0"):
return root return root
def make_remote(tmp_path, version="3.6.0", files=None, tamper=None): def make_remote(tmp_path, version="3.6.0", files=None, tamper=None,
"""造远端 zipball(带一层顶层目录,模拟 GitHub codeload 结构)+ 远端 VERSION。 sign_seed=TEST_SEED, zip_sig=True, sig_message=None,
diverge_source=False):
"""造远端:zipball(带一层顶层目录,模拟 GitHub codeload)+ 远端 VERSION
+ 两个"源"目录(src_a/src_b,各存 manifest.json 与 manifest.json.sig
直链文件,供双源交叉验证)。
tamper=<相对路径>:先按原内容算清单哈希,再篡改该文件,用于触发校验拦截。 tamper=<相对路径>:先按原内容算清单哈希并签名,再篡改该文件 → 触发逐文件
SHA256 拦截。sign_seed 控制签名密钥(换 OTHER_SEED 模拟错误私钥)。
zip_sig=False:zip 内不放 manifest.json.sig(源目录仍放,可测单独拉取;
配合 source_sig=False 则彻底无签名)。sig_message:改签别的内容,
模拟 manifest 与签名不符。diverge_source=True:src_b 的 manifest 改一字节,
模拟两源不一致。
""" """
src = tmp_path / "zipcontent" / "ZiPingEightChar-main" src = tmp_path / "zipcontent" / "ZiPingEightChar-main"
src.mkdir(parents=True) src.mkdir(parents=True)
@@ -54,25 +77,43 @@ def make_remote(tmp_path, version="3.6.0", files=None, tamper=None):
rel: hashlib.sha256((src / rel).read_bytes()).hexdigest() rel: hashlib.sha256((src / rel).read_bytes()).hexdigest()
for rel in all_files for rel in all_files
} }
(src / "manifest.json").write_text( manifest_bytes = (json.dumps({"version": version, "files": hashes}, indent=2)
json.dumps({"version": version, "files": hashes}, indent=2) + "\n", + "\n").encode("utf-8")
encoding="utf-8", (src / "manifest.json").write_bytes(manifest_bytes)
) sig_b64 = base64.b64encode(
_update_sig.sign(sign_seed, sig_message if sig_message is not None
else manifest_bytes)).decode("ascii") + "\n"
if tamper: if tamper:
(src / tamper).write_text("# tampered\n", encoding="utf-8") (src / tamper).write_text("# tampered\n", encoding="utf-8")
if zip_sig:
(src / "manifest.json.sig").write_text(sig_b64, encoding="utf-8")
zip_path = tmp_path / "remote.zip" zip_path = tmp_path / "remote.zip"
with zipfile.ZipFile(zip_path, "w") as zf: with zipfile.ZipFile(zip_path, "w") as zf:
for f in sorted(src.parent.rglob("*")): for f in sorted(src.parent.rglob("*")):
zf.write(f, f.relative_to(src.parent)) zf.write(f, f.relative_to(src.parent))
# 双源直链文件
source_dirs = []
for name in ("src_a", "src_b"):
d = tmp_path / name
d.mkdir()
m = manifest_bytes
if diverge_source and name == "src_b":
m = m.replace(b'"files"', b'"filez"', 1)
(d / "manifest.json").write_bytes(m)
(d / "manifest.json.sig").write_text(sig_b64, encoding="utf-8")
source_dirs.append(d)
version_file = tmp_path / "REMOTE_VERSION" version_file = tmp_path / "REMOTE_VERSION"
version_file.write_text(version + "\n", encoding="utf-8") version_file.write_text(version + "\n", encoding="utf-8")
return version_file, zip_path return version_file, zip_path, source_dirs
def point_at_remote(monkeypatch, version_file, zip_path=None): def point_at_remote(monkeypatch, version_file, zip_path=None, source_dirs=None):
monkeypatch.setenv("ZIPEC_VERSION_URLS", version_file.as_uri()) monkeypatch.setenv("ZIPEC_VERSION_URLS", version_file.as_uri())
if zip_path is not None: if zip_path is not None:
monkeypatch.setenv("ZIPEC_ZIPBALL_URLS", zip_path.as_uri()) monkeypatch.setenv("ZIPEC_ZIPBALL_URLS", zip_path.as_uri())
if source_dirs is not None:
monkeypatch.setenv("ZIPEC_MANIFEST_URLS", ",".join(
(d / "manifest.json").as_uri() for d in source_dirs))
REMOTE_FILES = { REMOTE_FILES = {
@@ -91,7 +132,7 @@ class TestVersionCompare:
def test_newer_remote_marks_update(self, tmp_path, monkeypatch): def test_newer_remote_marks_update(self, tmp_path, monkeypatch):
root = make_local(tmp_path) root = make_local(tmp_path)
vf, _ = make_remote(tmp_path) vf, _, _ = make_remote(tmp_path)
point_at_remote(monkeypatch, vf) point_at_remote(monkeypatch, vf)
assert su.cmd_check(root) == 0 assert su.cmd_check(root) == 0
cache = json.loads((root / "data" / ".update_check.json").read_text()) cache = json.loads((root / "data" / ".update_check.json").read_text())
@@ -100,7 +141,7 @@ class TestVersionCompare:
def test_same_version_no_update(self, tmp_path, monkeypatch): def test_same_version_no_update(self, tmp_path, monkeypatch):
root = make_local(tmp_path) root = make_local(tmp_path)
vf, _ = make_remote(tmp_path, version="3.5.0") vf, _, _ = make_remote(tmp_path, version="3.5.0")
point_at_remote(monkeypatch, vf) point_at_remote(monkeypatch, vf)
assert su.cmd_check(root) == 0 assert su.cmd_check(root) == 0
cache = json.loads((root / "data" / ".update_check.json").read_text()) cache = json.loads((root / "data" / ".update_check.json").read_text())
@@ -167,15 +208,17 @@ class TestCacheFreshness:
class TestApply: class TestApply:
def test_success_syncs_and_preserves(self, tmp_path, monkeypatch, capsys): def test_success_syncs_and_preserves(self, tmp_path, monkeypatch, capsys):
root = make_local(tmp_path) root = make_local(tmp_path)
vf, zp = make_remote(tmp_path, files=REMOTE_FILES) vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES)
point_at_remote(monkeypatch, vf, zp) point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 0 assert su.cmd_apply(root) == 0
assert "更新完成" in capsys.readouterr().out out = capsys.readouterr().out
assert "交叉验证通过" in out and "签名校验通过" in out and "更新完成" in out
# 清单内文件被覆盖/新增 # 清单内文件被覆盖/新增
assert (root / "VERSION").read_text().strip() == "3.6.0" assert (root / "VERSION").read_text().strip() == "3.6.0"
assert (root / "scripts" / "cast_chart.py").read_text() == "# new\n" assert (root / "scripts" / "cast_chart.py").read_text() == "# new\n"
assert (root / "scripts" / "new_feature.py").exists() assert (root / "scripts" / "new_feature.py").exists()
assert (root / "manifest.json").exists() assert (root / "manifest.json").exists()
assert (root / "manifest.json.sig").exists() # 签名随包同步到本地
# 清单不含的本地多余文件被清理 # 清单不含的本地多余文件被清理
assert not (root / "stale_legacy.py").exists() assert not (root / "stale_legacy.py").exists()
assert not (root / "legacy").exists() # 清空后的空目录一并移除 assert not (root / "legacy").exists() # 清空后的空目录一并移除
@@ -187,9 +230,9 @@ class TestApply:
def test_tampered_file_aborts_untouched(self, tmp_path, monkeypatch, capsys): def test_tampered_file_aborts_untouched(self, tmp_path, monkeypatch, capsys):
root = make_local(tmp_path) root = make_local(tmp_path)
vf, zp = make_remote(tmp_path, files=REMOTE_FILES, vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES,
tamper="scripts/cast_chart.py") tamper="scripts/cast_chart.py")
point_at_remote(monkeypatch, vf, zp) point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 3 assert su.cmd_apply(root) == 3
assert "不符" in capsys.readouterr().err assert "不符" in capsys.readouterr().err
# 本地原样不动 # 本地原样不动
@@ -200,7 +243,7 @@ class TestApply:
def test_already_latest_exit_2(self, tmp_path, monkeypatch, capsys): def test_already_latest_exit_2(self, tmp_path, monkeypatch, capsys):
root = make_local(tmp_path) root = make_local(tmp_path)
vf, zp = make_remote(tmp_path, version="3.5.0") vf, zp, _ = make_remote(tmp_path, version="3.5.0")
point_at_remote(monkeypatch, vf, zp) point_at_remote(monkeypatch, vf, zp)
assert su.cmd_apply(root) == 2 assert su.cmd_apply(root) == 2
assert "无需更新" in capsys.readouterr().out assert "无需更新" in capsys.readouterr().out
@@ -218,6 +261,103 @@ class TestApply:
assert (root / "VERSION").read_text().strip() == "3.5.0" assert (root / "VERSION").read_text().strip() == "3.5.0"
class TestApplySigning:
"""--apply 的签名信任锚与双源交叉验证。"""
def _untouched(self, root):
assert (root / "VERSION").read_text().strip() == "3.5.0"
assert (root / "scripts" / "cast_chart.py").read_text() == "# old\n"
assert (root / "stale_legacy.py").exists()
assert not (root / "scripts" / "new_feature.py").exists()
assert not (root / "manifest.json.sig").exists()
def test_sig_fetched_separately_when_not_in_zip(self, tmp_path, monkeypatch):
"""zip 内无 sig、但源直链有:单独拉取并验签通过。"""
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES, zip_sig=False)
point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 0
assert (root / "VERSION").read_text().strip() == "3.6.0"
def test_missing_sig_everywhere_aborts(self, tmp_path, monkeypatch, capsys):
"""zip 与源直链都没有 sig → 视同为旧版或被篡改,拒。"""
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES, zip_sig=False)
for d in dirs:
(d / "manifest.json.sig").unlink()
point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 3
assert "未带" in capsys.readouterr().err
self._untouched(root)
def test_sig_message_mismatch_aborts(self, tmp_path, monkeypatch, capsys):
"""签名签的是别的内容(manifest 被换)→ 验签拒。"""
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES,
sig_message=b"forged manifest")
point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 3
assert "签名校验不符" in capsys.readouterr().err
self._untouched(root)
def test_wrong_signing_key_aborts(self, tmp_path, monkeypatch, capsys):
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES,
sign_seed=OTHER_SEED)
point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 3
assert "签名校验不符" in capsys.readouterr().err
self._untouched(root)
def test_manifest_one_byte_flip_aborts(self, tmp_path, monkeypatch, capsys):
"""manifest 改一字节(源直链同步改、签名照旧)→ 验签拒。"""
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES)
for d in dirs: # 两源与 zip 保持一致地改,隔离出"验签"这一道
m = d / "manifest.json"
data = bytearray(m.read_bytes())
data[20] ^= 0x01
m.write_bytes(bytes(data))
# zip 内 manifest 也同步改
import zipfile as zf_mod
extract = tmp_path / "repack"
with zf_mod.ZipFile(zp) as z:
z.extractall(extract)
m = extract / "ZiPingEightChar-main" / "manifest.json"
data = bytearray(m.read_bytes())
data[20] ^= 0x01
m.write_bytes(bytes(data))
with zf_mod.ZipFile(zp, "w") as z:
for f in sorted(extract.rglob("*")):
z.write(f, f.relative_to(extract))
point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 3
assert "签名校验不符" in capsys.readouterr().err
self._untouched(root)
def test_divergent_sources_abort(self, tmp_path, monkeypatch, capsys):
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES,
diverge_source=True)
point_at_remote(monkeypatch, vf, zp, dirs)
assert su.cmd_apply(root) == 3
assert "不一致" in capsys.readouterr().err
self._untouched(root)
def test_source_unreachable_aborts(self, tmp_path, monkeypatch, capsys):
"""交叉验证时一个源不可达 → 宁可中止。"""
root = make_local(tmp_path)
vf, zp, dirs = make_remote(tmp_path, files=REMOTE_FILES)
monkeypatch.setenv("ZIPEC_VERSION_URLS", vf.as_uri())
monkeypatch.setenv("ZIPEC_ZIPBALL_URLS", zp.as_uri())
monkeypatch.setenv("ZIPEC_MANIFEST_URLS",
(dirs[0] / "manifest.json").as_uri()
+ ",file:///nonexistent/manifest.json")
assert su.cmd_apply(root) == 3
assert "交叉验证" in capsys.readouterr().err
self._untouched(root)
class TestCastChartIntegration: class TestCastChartIntegration:
def test_notice_on_stderr_stdout_clean(self): def test_notice_on_stderr_stdout_clean(self):
"""排盘成功后 stderr 出一行提示;stdout 命盘契约不受影响。""" """排盘成功后 stderr 出一行提示;stdout 命盘契约不受影响。"""
@@ -245,3 +385,36 @@ class TestCastChartIntegration:
cache_path.unlink(missing_ok=True) cache_path.unlink(missing_ok=True)
else: else:
cache_path.write_bytes(old_bytes) cache_path.write_bytes(old_bytes)
class TestFetchFallback:
def test_curl_fallback_when_urllib_ssl_fails(self, tmp_path, monkeypatch):
"""urllib 证书校验失败时回退系统 curl(macOS 框架版 Python 场景)。"""
import urllib.request
def _boom(*a, **k):
raise urllib.request.URLError("CERTIFICATE_VERIFY_FAILED")
monkeypatch.setattr(urllib.request, "urlopen", _boom)
fake_curl = tmp_path / "curl"
fake_curl.write_text("#!/bin/sh\ncat \"$3\" | sed 's|^file://||' | xargs cat\n",
encoding="utf-8")
src = tmp_path / "VERSION"
src.write_text("9.9.9\n", encoding="utf-8")
fake_curl.write_text(f'#!/bin/sh\ncat "{src}"\n', encoding="utf-8")
fake_curl.chmod(0o755)
monkeypatch.setattr(su.shutil, "which", lambda name: str(fake_curl))
assert su._fetch_text("https://example.invalid/VERSION") == "9.9.9\n"
def test_no_curl_no_urllib_raises(self, monkeypatch):
import urllib.request
def _boom(*a, **k):
raise urllib.request.URLError("SSL")
monkeypatch.setattr(urllib.request, "urlopen", _boom)
monkeypatch.setattr(su.shutil, "which", lambda name: None)
with pytest.raises(Exception):
su._fetch_text("https://example.invalid/VERSION")
+85 -9
View File
@@ -19,7 +19,7 @@ import _memory_store as store
PILLARS = ["庚午", "辛巳", "己卯", "戊辰"] PILLARS = ["庚午", "辛巳", "己卯", "戊辰"]
BIRTH = "1990-05-14 08:30" BIRTH = "1990-05-14 08:30"
PLACE = "四川省成都市" PLACE = "四川省成都市武侯区"
git = pytest.mark.skipif(shutil.which("git") is None, reason="无 git") git = pytest.mark.skipif(shutil.which("git") is None, reason="无 git")
@@ -31,11 +31,14 @@ def run(script, *args):
capture_output=True, text=True, timeout=120, env=env) capture_output=True, text=True, timeout=120, env=env)
def make_archive(mem_root: Path, feedback: str | None = None) -> Path: def make_archive(mem_root: Path, feedback: str | None = None,
"""造一份手工档案:四柱/大运/关注方向齐全,反馈小节可定制。""" events: str | None = None,
pillars: list[str] | None = None) -> Path:
"""造一份手工档案:四柱/大运/关注方向齐全,流年大事与反馈小节可定制。"""
pillars = pillars or PILLARS
meta = {"name": "张三", "gender": "男", "birth_clock": BIRTH, meta = {"name": "张三", "gender": "男", "birth_clock": BIRTH,
"birthplace": PLACE, "true_solar_time": "1990-05-14 08:23", "birthplace": PLACE, "true_solar_time": "1990-05-14 08:23",
"pillars": PILLARS, "day_master": "己", "pillars": pillars, "day_master": "己",
"created_at": "2026-10-01 10:00", "updated_at": "2026-10-08 15:00"} "created_at": "2026-10-01 10:00", "updated_at": "2026-10-08 15:00"}
body = ( body = (
"# 档案:张三(男)\n\n" "# 档案:张三(男)\n\n"
@@ -49,15 +52,19 @@ def make_archive(mem_root: Path, feedback: str | None = None) -> Path:
"## 小运\n\n(无)\n\n" "## 小运\n\n(无)\n\n"
"## 主要关注方向\n\n- 婚姻与事业走向\n\n" "## 主要关注方向\n\n- 婚姻与事业走向\n\n"
"## 归纳\n\n- 性格:未断\n- 身体:未断\n- 事业:未断\n- 感情:未断\n- 婚姻:未断\n\n" "## 归纳\n\n- 性格:未断\n- 身体:未断\n- 事业:未断\n- 感情:未断\n- 婚姻:未断\n\n"
"## 流年大事\n\n(未记录)\n\n" "## 流年大事\n\n"
"## 反馈与澄清\n\n" + (events if events is not None else
"- 2018(戊戌):【已核实】升职,自成都赴北京工作。\n"
"- 2021(辛丑):【已核实】张三搬家,新居在幸福小区3栋2单元501室,"
"电话 13812345678。\n")
+ "\n## 反馈与澄清\n\n"
+ (feedback if feedback is not None else + (feedback if feedback is not None else
"- 【已核实】2018 年升职,跳槽到外企\n- 【未核实】2020 年感情波动\n") "- 【已核实】2018 年升职,跳槽到外企\n- 【未核实】2020 年感情波动\n")
) )
arch_dir = mem_root / "archives" arch_dir = mem_root / "archives"
arch_dir.mkdir(parents=True, exist_ok=True) arch_dir.mkdir(parents=True, exist_ok=True)
path = arch_dir / store.archive_name( path = arch_dir / store.archive_name(
PILLARS, "男", store.key_hash(BIRTH, PLACE, "男")) pillars, "男", store.key_hash(BIRTH, PLACE, "男"))
path.write_text(store.dump_frontmatter(meta) + body, encoding="utf-8") path.write_text(store.dump_frontmatter(meta) + body, encoding="utf-8")
return path return path
@@ -77,11 +84,13 @@ class TestExport:
text = out.read_text("utf-8") text = out.read_text("utf-8")
pkg = json.loads(text) pkg = json.loads(text)
# 脱敏:不含姓名、出生分钟/钟表时间、省以下地域 # 脱敏:不含姓名、出生分钟/钟表时间、区县及以下地域、直接定位信息
assert "name" not in pkg assert "name" not in pkg
assert "张三" not in text assert "张三" not in text
assert "08:30" not in text and "08:23" not in text assert "08:30" not in text and "08:23" not in text
assert "成都市" not in text assert "武侯区" not in text
assert "幸福小区" not in text and "501" not in text
assert "13812345678" not in text
assert "birth_clock" not in pkg and "birthplace" not in pkg assert "birth_clock" not in pkg and "birthplace" not in pkg
# 结构字段 # 结构字段
@@ -90,17 +99,50 @@ class TestExport:
assert pkg["pillars"] == PILLARS assert pkg["pillars"] == PILLARS
assert pkg["birth_date"] == "1990-05-14" assert pkg["birth_date"] == "1990-05-14"
assert pkg["birth_shichen"] == "辰" assert pkg["birth_shichen"] == "辰"
# 地域放宽到城市级:省+地级市保留
assert pkg["region_province"] == "四川省" assert pkg["region_province"] == "四川省"
assert pkg["region_city"] == "成都市"
assert [l["pillar"] for l in pkg["luck_pillars"]] == ["壬午", "癸未", "甲申"] assert [l["pillar"] for l in pkg["luck_pillars"]] == ["壬午", "癸未", "甲申"]
assert pkg["luck_pillars"][0]["start_year"] == 1998 assert pkg["luck_pillars"][0]["start_year"] == 1998
assert pkg["focus_categories"] == ["婚姻", "事业"] assert pkg["focus_categories"] == ["婚姻", "事业"]
assert {f["year"] for f in pkg["feedback"]} == {2018, 2020} assert {f["year"] for f in pkg["feedback"]} == {2018, 2020}
assert {f["status"] for f in pkg["feedback"]} == {"已核实", "未核实"} assert {f["status"] for f in pkg["feedback"]} == {"已核实", "未核实"}
assert all(f["category"] for f in pkg["feedback"]) assert all(f["category"] for f in pkg["feedback"])
# 反馈带事件简介(状态标签已剥离)
fb = {f["year"]: f for f in pkg["feedback"]}
assert fb[2018]["note"] == "2018 年升职,跳槽到外企"
assert fb[2020]["note"] == "2020 年感情波动"
# 盘 hash = sha1(四柱+出生地) 前 8,文件名即 hash # 盘 hash = sha1(四柱+出生地) 前 8,文件名即 hash
assert out.stem == pkg["chart_hash"] assert out.stem == pkg["chart_hash"]
assert len(pkg["chart_hash"]) == 8 assert len(pkg["chart_hash"]) == 8
def test_events_carry_notes_with_city_kept(self, tmp_path, share_root):
arch = make_archive(tmp_path / "memory")
r = run(EXPORT, "--archive", str(arch), "--share-root", str(share_root))
assert r.returncode == 0, r.stderr
pkg = json.loads(Path(r.stdout.strip()).read_text("utf-8"))
ev = pkg["events"]
assert len(ev) == 2
# 目标格式:2018(戊戌):升职,自成都赴北京工作。——城市级地名保留
assert ev[0]["year"] == 2018 and ev[0]["ganzhi"] == "戊戌"
assert ev[0]["label"] == "戊戌"
assert ev[0]["note"] == "升职,自成都赴北京工作。"
assert ev[0]["status"] == "已核实" and ev[0]["category"] == "事业"
# 姓名替换为「命主」,详细住址与电话删除,事件内容保留
assert ev[1]["year"] == 2021 and ev[1]["ganzhi"] == "辛丑"
assert "搬家" in ev[1]["note"] and "命主" in ev[1]["note"]
assert "(已删)" in ev[1]["note"]
def test_events_missing_still_exports(self, tmp_path, share_root):
# 流年大事为空不挡导出,events 如实为空
arch = make_archive(tmp_path / "memory", events="(未记录)\n")
r = run(EXPORT, "--archive", str(arch), "--share-root", str(share_root))
assert r.returncode == 0, r.stderr
pkg = json.loads(Path(r.stdout.strip()).read_text("utf-8"))
assert pkg["events"] == []
assert len(pkg["feedback"]) == 2
def test_lookup_by_birth_place_gender(self, tmp_path, share_root): def test_lookup_by_birth_place_gender(self, tmp_path, share_root):
make_archive(tmp_path / "memory") make_archive(tmp_path / "memory")
r = run(EXPORT, "--birth", BIRTH, "--place", PLACE, "--gender", "男", r = run(EXPORT, "--birth", BIRTH, "--place", PLACE, "--gender", "男",
@@ -121,6 +163,20 @@ class TestExport:
"--share-root", str(share_root)) "--share-root", str(share_root))
assert r.returncode == 2 assert r.returncode == 2
def test_export_warns_orphan_pending_after_recast(self, tmp_path, share_root):
# 先导出原盘,再导出同出生日同性别但时柱不同的换盘 → WARN 提示残留,不自动删
arch = make_archive(tmp_path / "memory")
r = run(EXPORT, "--archive", str(arch), "--share-root", str(share_root))
assert r.returncode == 0, r.stderr
arch2 = make_archive(tmp_path / "memory2",
pillars=["庚午", "辛巳", "己卯", "己巳"])
r2 = run(EXPORT, "--archive", str(arch2), "--share-root", str(share_root))
assert r2.returncode == 0, r2.stderr
assert r.stdout.strip() != r2.stdout.strip() # hash 确实变了
assert "WARN" in r2.stderr and "残留" in r2.stderr
assert r.stdout.strip().split("/")[-1] in r2.stderr # 列出了旧包文件名
assert len(list((share_root / "pending").glob("*.json"))) == 2 # 不自动删
@git @git
class TestPush: class TestPush:
@@ -190,6 +246,26 @@ class TestPush:
assert pkg.is_file() # 失败保留 pending assert pkg.is_file() # 失败保留 pending
st = json.loads((skill / "data" / ".license.json").read_text("utf-8")) st = json.loads((skill / "data" / ".license.json").read_text("utf-8"))
assert st["remaining_uses"] == 5 # 未计励 assert st["remaining_uses"] == 5 # 未计励
# 失败诊断:带该远端 git 报错末行;GitHub 线附 HTTPS_PROXY 提示
assert "FAIL" in r.stderr and "no-such-repo" in r.stderr
assert "HTTPS_PROXY" in r.stderr
def test_push_partial_failure_warns_but_succeeds(self, skill, tmp_path):
# github 坏、gitea 好:整体成功,但 stderr 带 github 线的失败摘要
(skill / "share" / "config.json").write_text(json.dumps(
{"github_remote": str(skill / "no-such-repo.git"),
"gitea_remote": str(tmp_path / "gitea.git")}, ensure_ascii=False),
"utf-8")
pkg = skill / "share" / "pending" / "baddcafe.json"
pkg.write_text(json.dumps({"schema": "share/v1",
"chart_hash": "baddcafe"}), "utf-8")
r = run(PUSH, "--root", str(skill))
assert r.returncode == 0, r.stderr
assert (skill / "share" / "pushed" / "baddcafe.json").is_file()
assert "WARN" in r.stderr and "github_remote" in r.stderr
assert "no-such-repo" in r.stderr and "HTTPS_PROXY" in r.stderr
st = json.loads((skill / "data" / ".license.json").read_text("utf-8"))
assert st["remaining_uses"] == 15 # gitea 成功,正常计励
def test_no_remote_configured(self, tmp_path): def test_no_remote_configured(self, tmp_path):
root = tmp_path / "skill" root = tmp_path / "skill"
+66 -1
View File
@@ -9,7 +9,16 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts"))
from chart.shensha import evaluate_natal, evaluate_target # noqa: E402 from chart.ganzhi import GAN, ZHI # noqa: E402
from chart.shensha import STAR_ORDER, evaluate_natal, evaluate_target # noqa: E402
_VENDOR = Path(__file__).resolve().parents[1] / "vendor"
if _VENDOR.is_dir():
sys.path.insert(0, str(_VENDOR))
try: # 排盘适配层(含排序逻辑);无 tyme4py 的环境跳过其回归测试
from chart.tyme_adapter import _shen_sha
except ImportError: # pragma: no cover
_shen_sha = None
def natal(year, month, day, hour, gender="男"): def natal(year, month, day, hour, gender="男"):
@@ -267,5 +276,61 @@ class TargetQueryTest(unittest.TestCase):
self.assertEqual(own, {"十恶大败"}) self.assertEqual(own, {"十恶大败"})
def _jiazi60() -> list[str]:
return [GAN[i % 10] + ZHI[i % 12] for i in range(60)]
# 甲子…乙亥:12 个干支覆盖全部 10 天干与 12 地支(月、时柱扫面用)
_SPREAD12 = _jiazi60()[:12]
class StarOrderExhaustiveTest(unittest.TestCase):
"""根治校验:求值器一切可能产出的神煞名都必须落在 STAR_ORDER 键集内。
3.6.0 事故:三奇贵人漏录排序表,排盘排序 KeyError。此处穷举求值器
全部输入维度(年柱 60 × 月柱 12 全干支行 × 日柱 60 × 时柱 12 全干支行
× 男女),收集实际产出的星名集合,断言与 STAR_ORDER 完全一致——
新增神煞忘补排序表、或排序表残留死项,都会被本测试当场抓住。
"""
def test_star_order_no_duplicates(self):
self.assertEqual(len(STAR_ORDER), len(set(STAR_ORDER)))
def test_natal_outputs_exactly_star_order(self):
produced: set[str] = set()
for year in _jiazi60():
for month in _SPREAD12:
for day in _jiazi60():
for hour in _SPREAD12:
for gender in ("男", "女"):
r = evaluate_natal(
{"year": year, "month": month,
"day": day, "hour": hour}, gender)
for entries in r.values():
produced.update(s for s, _ in entries)
self.assertEqual(produced, set(STAR_ORDER))
def test_target_outputs_subset_of_star_order(self):
"""岁运查询同理:年 60 × 月 4(四季各一)× 日 60 × 目标干支 60。"""
produced: set[str] = set()
for year in _jiazi60():
for month in ("甲寅", "乙巳", "丙申", "丁亥"):
for day in _jiazi60():
p = {"year": year, "month": month, "day": day, "hour": "甲子"}
for target in _jiazi60():
r = evaluate_target(p, "男", target)
produced.update(s for s, _ in r["anchored"])
produced.update(s for s, _ in r["own"])
missing = produced - set(STAR_ORDER)
self.assertEqual(missing, set())
@unittest.skipIf(_shen_sha is None, "tyme4py 不可用")
def test_sanqi_combo_survives_adapter_sort(self):
"""回归:combo 组三奇贵人经 tyme_adapter._shen_sha 排序不再 KeyError。"""
out = _shen_sha({"year": "甲辰", "month": "戊辰",
"day": "庚子", "hour": "辛巳"}, "男")
self.assertTrue(any(s.startswith("三奇贵人") for s in out["combo"]))
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
+152
View File
@@ -0,0 +1,152 @@
"""外层 tools/sync_license_copy.py 的集成测试。
sync/build/sign 工具留在授权方工作区外层 tools/,不随本仓库分发;
副本或 clone 环境下 tools/ 不存在,整个模块 skip。注意 skipif 只跳过测试
**执行**、挡不住模块导入,故下面的模块级 _load_module 也带同一存在性守卫,
否则副本里 `pytest tests/` 会在收集阶段就 FileNotFoundError 并中断全套测试。
测试用微型假母版(monkeypatch 替换模块 SRC)同步进临时授权副本,
不碰真实母版与真实副本;签名用测试私钥,UPDATE_PUBLIC_KEY_HEX 同步造假。
"""
import base64
import importlib.util
import json
import sys
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[1]
TOOLS = ROOT.parent / "tools"
SYNC_TOOL = TOOLS / "sync_license_copy.py"
_HAS_TOOLS = (SYNC_TOOL.is_file()
and (TOOLS / "build_manifest.py").is_file()
and (TOOLS / "sign_manifest.py").is_file())
pytestmark = pytest.mark.skipif(
not _HAS_TOOLS,
reason="外层 tools/ 不随仓库分发,本环境无同步工具",
)
sys.path.insert(0, str(ROOT / "scripts"))
import _update_sig # noqa: E402
TEST_SEED = bytes(range(32))
TEST_PK_HEX = _update_sig.publickey(TEST_SEED).hex()
OTHER_SEED = bytes(range(32, 64)) # 与内置公钥不匹配的错误私钥
STALE_SIG = base64.b64encode(b"\x00" * 64).decode("ascii") + "\n"
def _load_module(name: str, path: Path):
spec = importlib.util.spec_from_file_location(name, path)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
return mod
# 无 tools/ 时置 None:本模块所有测试已被 skipif 跳过,不会触达这两个名字
sync_tool = _load_module("sync_license_copy", SYNC_TOOL) if _HAS_TOOLS else None
build_manifest = (_load_module("build_manifest", TOOLS / "build_manifest.py")
if _HAS_TOOLS else None)
def _make_master(src: Path, pk_hex: str) -> None:
"""微型母版:VERSION/SKILL.md/rules×2/cast_chart.py/self_update.py + 过期 manifest。"""
(src / "rules").mkdir(parents=True)
(src / "scripts").mkdir(parents=True)
(src / "VERSION").write_text("9.9.9-test\n", encoding="utf-8")
(src / "SKILL.md").write_text("---\nname: test\n---\n\n# 母版\n",
encoding="utf-8")
(src / "rules" / "r1.md").write_text("# 规则一\n", encoding="utf-8")
(src / "rules" / "r2.md").write_text("# 规则二\n", encoding="utf-8")
(src / "scripts" / "cast_chart.py").write_text(
"#!/usr/bin/env python3\nprint('chart')\n", encoding="utf-8")
(src / "scripts" / "self_update.py").write_text(
f'UPDATE_PUBLIC_KEY_HEX = "{pk_hex}"\n', encoding="utf-8")
# 母版随仓库分发的旧 manifest/sig:同步进副本后必须被重建/重签或移除
(src / "manifest.json").write_text('{"version": "9.9.9-test", "files": {}}\n',
encoding="utf-8")
(src / "manifest.json.sig").write_text(STALE_SIG, encoding="utf-8")
def _make_copy(dst: Path) -> None:
"""已存在的授权副本:授权状态文件 + 带副本编号水印的 SKILL.md。"""
(dst / "data").mkdir(parents=True)
(dst / "data" / ".license.json").write_text("{}", encoding="utf-8")
(dst / "SKILL.md").write_text(
"---\nname: test\n---\n\n<!-- 副本编号:LY-TEST0000-0000 · 授权对象:测试员 · "
"测试授权 · 禁止商业用途与个人传播 -->\n", encoding="utf-8")
@pytest.fixture
def pair(tmp_path, monkeypatch):
src, dst = tmp_path / "master", tmp_path / "copy"
_make_master(src, TEST_PK_HEX)
_make_copy(dst)
monkeypatch.setattr(sync_tool, "SRC", src)
return src, dst
def _key_file(tmp_path, seed: bytes) -> Path:
p = tmp_path / "signing.key"
p.write_text("# 测试私钥\n" + seed.hex() + "\n", encoding="utf-8")
return p
def _manifest_on_disk(dst: Path) -> dict:
return json.loads((dst / "manifest.json").read_text(encoding="utf-8"))
def test_sync_rebuilds_manifest_and_signs(pair, tmp_path, capsys):
"""同步后 manifest 与水印后文件逐哈希一致,sig 用内置公钥验签通过。"""
_src, dst = pair
key = _key_file(tmp_path, TEST_SEED)
assert sync_tool.main(["--key", str(key), str(dst)]) == 0
manifest = _manifest_on_disk(dst)
# 与 build_manifest 对水印后磁盘文件重新计算的结果完全一致
assert manifest == build_manifest.build_manifest(dst)
for rel in ("SKILL.md", "rules/r1.md", "rules/r2.md", "scripts/cast_chart.py"):
assert rel in manifest["files"]
# 水印确实落在文件里(哈希对应的是水印后内容)
assert "LY-TEST0000-0000" in (dst / "SKILL.md").read_text(encoding="utf-8")
sig_text = (dst / "manifest.json.sig").read_text(encoding="utf-8")
assert sig_text != STALE_SIG # 过期 sig 被新签名覆盖而非原样保留
sig = base64.b64decode(sig_text.strip(), validate=True)
assert _update_sig.verify(bytes.fromhex(TEST_PK_HEX),
(dst / "manifest.json").read_bytes(), sig)
out = capsys.readouterr().out
assert f"公钥指纹 {_update_sig.fingerprint(bytes.fromhex(TEST_PK_HEX))[:16]}" in out
assert f"{len(manifest['files'])} 个文件" in out
def test_sync_no_sign_removes_stale_sig(pair, capsys):
"""--no-sign:manifest 重建、过期 sig 移除、WARN、退出码 0。"""
_src, dst = pair
assert sync_tool.main(["--no-sign", str(dst)]) == 0
assert _manifest_on_disk(dst) == build_manifest.build_manifest(dst)
assert not (dst / "manifest.json.sig").exists()
assert "WARN" in capsys.readouterr().err
def test_sync_missing_key_fails_closed(pair, tmp_path, capsys):
"""私钥缺失:manifest 已重建、过期 sig 移除、报错、退出码非 0。"""
_src, dst = pair
missing = tmp_path / "no-such.key"
assert sync_tool.main(["--key", str(missing), str(dst)]) == 1
assert _manifest_on_disk(dst) == build_manifest.build_manifest(dst)
assert not (dst / "manifest.json.sig").exists()
err = capsys.readouterr().err
assert "私钥不存在" in err and "未签名" in err
def test_sync_wrong_key_fails_closed(pair, tmp_path, capsys):
"""签名私钥与副本内置公钥不匹配:独立验签拦截,sig 移除,退出码非 0。"""
_src, dst = pair
key = _key_file(tmp_path, OTHER_SEED)
assert sync_tool.main(["--key", str(key), str(dst)]) == 1
assert _manifest_on_disk(dst) == build_manifest.build_manifest(dst)
assert not (dst / "manifest.json.sig").exists()
assert "验签" in capsys.readouterr().err
+31
View File
@@ -50,5 +50,36 @@ class HistoryTzGoldenTest(unittest.TestCase):
) )
class HkMoDstTest(unittest.TestCase):
"""香港/澳门时区回归:1986–1991 中国大陆实行夏令时,港澳 1979 年后无;
cities.json 港澳条目必须为 Asia/Hong_Kong / Asia/Macau,不得随大陆拨快。"""
def test_hongkong_1987_no_dst(self):
loc = resolve_location("香港")
_utc, audit = to_utc(datetime(1987, 7, 5, 5, 0), loc)
self.assertEqual(loc.tz, "Asia/Hong_Kong")
self.assertIs(audit["is_dst"], False)
def test_macau_1987_no_dst(self):
loc = resolve_location("澳门")
_utc, audit = to_utc(datetime(1987, 7, 5, 5, 0), loc)
self.assertEqual(loc.tz, "Asia/Macau")
self.assertIs(audit["is_dst"], False)
def test_mainland_1987_dst_kept(self):
# 回归保护:大陆 1987 年夏令时仍应拨快
loc = resolve_location("北京")
_utc, audit = to_utc(datetime(1987, 7, 5, 5, 0), loc)
self.assertIs(audit["is_dst"], True)
def test_hongkong_1970_historical_dst(self):
# 香港 1949 后的历史夏令时(如 1970 年)应被 IANA 库正确处理
# (1949 前走民国五时区历史表分支,不在此断言范围)
loc = resolve_location("香港")
_utc, audit = to_utc(datetime(1970, 7, 15, 12, 0), loc)
self.assertEqual(audit["tz_used"], "Asia/Hong_Kong")
self.assertIs(audit["is_dst"], True)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
+152
View File
@@ -0,0 +1,152 @@
"""ed25519(RFC 8032)纯 Python 实现与 manifest 签名工具的测试。
TEST 1/2/3 为 RFC 8032 §7.1 官方测试向量(空消息/1 字节/2 字节)。
"""
import base64
import json
import os
import stat
import subprocess
import sys
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "scripts"))
import _update_sig as ed
# RFC 8032 §7.1:(SECRET KEY, PUBLIC KEY, MESSAGE, SIGNATURE)
RFC8032_VECTORS = [
("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60",
"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a",
"",
"e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e06522490155"
"5fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b"),
("4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb",
"3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c",
"72",
"92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da"
"085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00"),
("c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7",
"fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025",
"af82",
"6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac"
"18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a"),
]
class TestRFC8032Vectors:
@pytest.mark.parametrize("i", range(len(RFC8032_VECTORS)))
def test_vector(self, i):
seed, pk, msg, sig = (bytes.fromhex(x) for x in RFC8032_VECTORS[i])
assert ed.publickey(seed) == pk # 公钥推导
assert ed.sign(seed, msg) == sig # 确定性签名逐字节一致
assert ed.verify(pk, msg, sig) is True # 验签通过
class TestSignVerifyRoundtrip:
def test_roundtrip_random_key(self):
seed = os.urandom(32)
msg = '{"version": "9.9.9", "files": {}}'.encode()
assert ed.verify(ed.publickey(seed), msg, ed.sign(seed, msg)) is True
def test_message_one_byte_flip_fails(self):
seed = os.urandom(32)
pk = ed.publickey(seed)
msg = b'{"files": {"a.py": "abc"}}'
sig = ed.sign(seed, msg)
bad = bytearray(msg)
bad[3] ^= 0x01
assert ed.verify(pk, bytes(bad), sig) is False
def test_wrong_public_key_fails(self):
msg = b"manifest"
sig = ed.sign(os.urandom(32), msg)
assert ed.verify(ed.publickey(os.urandom(32)), msg, sig) is False
def test_forged_signature_fails(self):
seed = os.urandom(32)
pk, msg = ed.publickey(seed), b"manifest"
sig = bytearray(ed.sign(seed, msg))
sig[10] ^= 0x01 # 伪造:改 R 的一个字节
assert ed.verify(pk, msg, bytes(sig)) is False
assert ed.verify(pk, msg, os.urandom(64)) is False # 全随机签名
def test_malformed_inputs_return_false_not_raise(self):
pk = ed.publickey(os.urandom(32))
assert ed.verify(pk, b"m", b"") is False # 长度不足
assert ed.verify(pk, b"m", b"\xff" * 64) is False # S 越界
assert ed.verify(b"\xff" * 32, b"m", ed.sign(os.urandom(32), b"m")) is False
assert ed.verify(b"short", b"m", b"x" * 64) is False # 公钥长度错
sig = bytearray(ed.sign(os.urandom(32), b"m"))
sig[31] |= 0x80 # R 的 y 坐标 >= 2^255-19 界外/非法点
sig[0:32] = b"\xff" * 32
assert ed.verify(pk, b"m", bytes(sig)) is False
SIGN_TOOL = ROOT.parent / "tools" / "sign_manifest.py"
class TestSignManifestTool:
def _repo(self, tmp_path):
root = tmp_path / "repo"
root.mkdir()
(root / "manifest.json").write_text(
json.dumps({"version": "9.9.9", "files": {"a.py": "0" * 64}},
indent=2) + "\n", encoding="utf-8")
seed = os.urandom(32)
key = tmp_path / "signing.key"
key.write_text("# 测试私钥\n# 生成日期:2026-10-10\n" + seed.hex() + "\n",
encoding="utf-8")
return root, key, seed
def test_sign_and_verify(self, tmp_path):
root, key, seed = self._repo(tmp_path)
r = subprocess.run(
[sys.executable, str(SIGN_TOOL), "--repo-root", str(root),
"--key", str(key)],
capture_output=True, text=True, timeout=60)
assert r.returncode == 0, r.stderr
sig_text = (root / "manifest.json.sig").read_text(encoding="utf-8")
assert sig_text.strip() == sig_text.rstrip("\n") and "\n" not in sig_text.strip()
sig = base64.b64decode(sig_text.strip(), validate=True)
assert len(sig) == 64
manifest_bytes = (root / "manifest.json").read_bytes()
assert ed.verify(ed.publickey(seed), manifest_bytes, sig) is True
# manifest 改一字节 → 该签名不再有效
bad = bytearray(manifest_bytes)
bad[10] ^= 0x01
assert ed.verify(ed.publickey(seed), bytes(bad), sig) is False
def test_missing_manifest_exit_2(self, tmp_path):
root, key, _ = self._repo(tmp_path)
(root / "manifest.json").unlink()
r = subprocess.run(
[sys.executable, str(SIGN_TOOL), "--repo-root", str(root),
"--key", str(key)],
capture_output=True, text=True, timeout=60)
assert r.returncode == 2
assert "manifest.json" in r.stderr
class TestRealKeySetup:
"""作者侧私钥落盘状态:存在、权限 600、绝不进 git 仓库。"""
def test_key_file_perms_and_not_in_repo(self):
key = Path.home() / ".zipec" / "signing.key"
if not key.exists():
pytest.skip("作者机上才有私钥")
assert stat.S_IMODE(key.stat().st_mode) == 0o600
assert stat.S_IMODE(key.parent.stat().st_mode) == 0o700
r = subprocess.run(["git", "-C", str(ROOT), "status", "--porcelain"],
capture_output=True, text=True)
assert "signing.key" not in r.stdout
# 私钥对应的公钥 == self_update 内置信任锚
import self_update as su
seed = bytes.fromhex(
[ln for ln in key.read_text().splitlines()
if ln.strip() and not ln.startswith("#")][0])
assert ed.publickey(seed).hex() == su.UPDATE_PUBLIC_KEY_HEX
assert ed.fingerprint(ed.publickey(seed)) == (
"3089bc1cc9a453e5be66a36574635da6b2ad9797c57af11164111faca157411c")
+151
View File
@@ -0,0 +1,151 @@
# 评测体系说明
本目录是子平八字技能的内置评测体系,随技能包发布。目标:用**盲测 + 脚本判分**
客观回答一个问题——加载本技能后,AI 的八字断验准确率是多少。
当前收录三个模型(同一题集、同一答案键、同一判分脚本,各含 with-skill 与
without-skill 两组):
- **kimi-k3**:加载技能 81/200 = 40.5%(规则库 3.9・568 条,2026-10-13 收录),
裸答对照 82/200 = 41.0%;
- **qoder-agent**:加载技能 79/200 = 39.5%,裸答对照 78/200 = 39.0%
(规则库 3.7,2026-10-12 起跑 / 2026-10-13 收录);
- **deepseek-v4-flash**:加载技能 74/200 = 37.0%,裸答对照 71/200 = 35.5%
(2026-10-13 收录;`得分.json` 的 `skill_version` 只记到 `3.6.2`、未标规则库小版本,
与上两组的 3.7 是否严格同版待核)。
官方基线(Gemini,论文口径)34.5%。逐维度/逐届明细见
`ai模型纬度得分/<模型>/<模式>/得分.md` 与 `得分.html`
(品牌记分卡,浏览器直接打开),每个得分目录三件(json/md/html)。
## 跨模型对照(200 题)
| 模型 | with-skill(加载技能) | without-skill(裸答对照) | 组内差 |
|---|---|---|---|
| kimi-k3 | 81/200 = 40.5% | 82/200 = 41.0% | −0.5pp |
| qoder-agent | 79/200 = 39.5% | 78/200 = 39.0% | +0.5pp |
| deepseek-v4-flash | 74/200 = 37.0% | 71/200 = 35.5% | +1.5pp |
| 官方基线(Gemini) | 69/200 = 34.5% | — | — |
如实呈现:**三个模型上,加载技能都没有跑出可检出的增益。** kimi-k3 裸答反而高
0.5pp;qoder-agent 加载技能只高 1 题(+0.5pp);deepseek-v4-flash 高 3 题(+1.5pp),
方向为正但幅度同样在噪声内。qoder-agent 两组做过题级配对检验——
两组都对 53 题、只 with-skill 对 26 题、只裸答对 25 题、都错 96 题;
两臂选中同一字母 118/200(59%);McNemar 不一致对 51 组且 26:25 几乎对半,
校正 χ² = 0.00,p ≈ 1.0,配对 z = 0.10。
六组成绩全落在 71–82 题(35.5%–41.0%)的窄带里;
相对官方基线 +1.0~+6.5pp,配对 z = 0.21–1.34(单组标准误约 ±3.4~3.5pp),
**均未过 p<0.05 门槛**。同模型组内差最大只有 3 题。
结论口径:200 题规模的这套基准**尚不足以区分「加载技能」与「裸答」**;
本目录仍按同一题目集、同一判分脚本、同一答案键收录全部留档,供复测核对。
分维度上两组各有胜负(如 qoder-agent 性格 +10.0pp、事业 +8.0pp,
但学业 −16.6pp、财富 −15.3pp),这些维度题数只有 12–25 题,
一题就是 4–8 个百分点,摆动同样在噪声内,不宜单点解读。
## 迭代轨迹(kimi-k3・with-skill)
| 版本 | 评测日期 | 正确/总题数 | 准确率 | 主要变更 |
|---|---|---|---|---|
| v3.6.1+排盘修复(规则库 3.6) | 2026-10-12 | 76/200 | 38.0% | 修复排盘时区/边界口径 bug 后按规则库 3.6 全量盲测,首轮正式收录 |
| 3.6.2-未发版(规则库 3.7) | 2026-10-13 | 79/200 | 39.5% | 规则推理层「剪枝上锁」(542→547 条:R-运-32 降级保留、R-杂-38 从格临界双轨、91 新增冲刑方向判别四条),同题集同判分脚本重跑 |
| 3.9.0-未发版(规则库 568 条) | 2026-10-13 | 81/200 | 40.5% | E3 规则补强——职业/形貌/健康/学业/六亲应期映射 +20 条,3.7 全量 + 3.9 补强重跑 17 位命主合并收录 |
| without-skill 裸答对照 | 2026-10-12 | 82/200 | 41.0% | 同模型不加载技能,仅凭模型自身知识手排四柱作答 |
| 官方基线(Gemini,论文口径) | — | 69/200 | 34.5% | BaziQA 论文跑分口径,见 试题/BaziQA-全球算命师大赛/SOURCE.md |
中性口径:3.7 相对 3.6 总分 +1.5pp,在 200 题规模噪声边界内
(单组标准误约 ±3.5pp),不构成显著结论;结构性维度改善明显——
流年运势/感情/事业/性格/学业五维度回升约 5–10pp,财富/健康/其他小幅回落。
3.9 相对 3.7 总分 +1.0pp(79→81),同样在噪声边界内;
职业映射等目标题型翻正确认(事业 40.0%→48.0%、性格 50.0%→60.0%)。
3.6 版求解留档存档于 `ai答案/kimi-k3/with-skill-v3.6/`;
历史留档目录命名规范:`<模式>-v<规则库大版本>/`(如 `with-skill-v3.6/`),
当前成绩固定收录于 `<模式>/`。
qoder-agent 为首轮收录,两组均跑在 3.6.2-未发版(规则库 3.7)上,无历史轨迹。
## 目录结构
```
评测/
├── 试题/
│ └── BaziQA-全球算命师大赛/ # 一个赛事一个目录,可陆续收集更多
│ ├── SOURCE.md # 来源、届次、题数、官方基线
│ ├── questions/ # 盲版题面(剥离 answer,求解端只准读这里)
│ └── answers/ # 答案键(person_id+题序+答案字母+维度,求解端禁读)
├── ai模型纬度得分/
│ └── <模型名>/ # 已收录:kimi-k3、qoder-agent、deepseek-v4-flash
│ ├── with-skill/ # 得分.json + 得分.md + 得分.html(三件齐全才算收录)
│ └── without-skill/ # 同模型裸答对照组,同样三件
├── ai答案/
│ └── <模型名>/
│ ├── with-skill/ # 41 位命主的完整求解留档(含推理过程)
│ ├── without-skill/ # 对照组 41 位命主留档(模型手排四柱 + 作答)
│ └── <模式>-v<规则库版本>/ # 可选:历史留档存档(如 kimi-k3/with-skill-v3.6/)
├── 工具/
│ ├── make_blind.py # 试题原始包 → questions/+answers/ 分离(含校验)
│ ├── run_eval.py # 判分:submissions vs 答案键 → 统计 + 报告
│ ├── extend_cities.py # 评测用地点扩展(境外/模糊地名 → 代理城市)
│ ├── render_scorecard.py # 得分.json → 单文件 HTML 品牌记分卡
│ └── scorecard_template.html # 记分卡模板(与盘面图同一套亮色卡片风)
├── 测试规则.md # 评测纪律定稿(盲测红线/输出契约/收录规范)
└── README.md # 本文件
```
## 判分口径
- 每题四选一,答对得 1 分;标 `N` 记未答(不计对);准确率 = 对/总题数。
- 答案从求解留档 md 末尾的 `Q1: A` … `Q5: X` 五行正则抽取(每题取首次出现)。
- 分维度标签(流年运势/感情/六亲/事业/性格/学业/财富/健康/其他)随答案键收录。
- 官方基线 34.5% 为论文跑分口径,内嵌于 `run_eval.py` 并在报告逐届/逐维度对照。
## 如何复测(你也可以跑)
前置:Python ≥ 3.10;技能自身依赖(排盘用)见技能根目录 requirements.txt。
```bash
# 0. 准备技能副本并做地点扩展(不改母版)
cp -R <技能根目录> /tmp/skill_bench
python 评测/工具/extend_cities.py \
--cities /tmp/skill_bench/data/cities.json --scripts /tmp/skill_bench/scripts
# 1. 盲测求解:对每个命主新开无上下文的子代理,只读
# 试题/BaziQA-全球算命师大赛/questions/,用副本 scripts/cast_chart.py 排盘,
# 按 测试规则.md 的双盘纪律与输出契约写答案 md 到某个 submissions 目录。
# (求解提示词可参考首次评测的求解契约;红线:禁触 answers/ 与得分目录。)
# 排盘命令前加 ZIPEC_EVAL=1,示例:
ZIPEC_EVAL=1 python /tmp/skill_bench/scripts/cast_chart.py \
--name 张三 --gender 男 --birth "1990-05-14 08:30" --place "四川省成都市"
# 2. 脚本判分(非模型裁判)
python 评测/工具/run_eval.py --submissions <你的答案目录> \
--out-json /tmp/result.json --out-md /tmp/report.md
# 3. 收录(满足 测试规则.md §7 后)
# 把答案 md 放进 ai答案/<模型>/<with-skill|without-skill>/,
# 由 result.json 汇总出 得分.json,再渲染记分卡:
python 评测/工具/render_scorecard.py --score <得分.json>
```
`run_eval.py` 不带参数时默认判分 `ai答案/kimi-k3/with-skill/`——
应输出 **81/200 = 40.5%**,这是本目录出厂状态的自检点。
> **额度豁免**:评测/复测全程在命令前加 `ZIPEC_EVAL=1`(示例见上),授权门直接放行,
> 不签发、不扣次、不创建任何授权文件——跑测试集不会消耗授权副本的使用次数。
> `评测/工具/` 下脚本内部调排盘时环境变量随子进程继承,同样适用(详见 测试规则.md §1.1)。
## 收录新模型 / 新赛事
- **新模型**:建 `ai答案/<模型>/<模式>/` 与 `ai模型纬度得分/<模型>/<模式>/`,
按 测试规则.md 完成盲测求解与判分,收录 得分.json/得分.md/得分.html 三件;
`without-skill` 对照组为同一模型裸答(不给排盘不给规则,只给出生信息+题目)。
- **新赛事**:`python 评测/工具/make_blind.py --src <含答案的原始包目录>
--out 试题/<赛事名> [--scores <官方跑分目录>]` 一键分离 questions/answers/
并自校验;随后在赛事目录补一份 SOURCE.md(来源/届次/题数/基线)。
## 注意
- `questions/` 可公开分发;`answers/` 仅作判分用,求解端任何时候禁读。
- 判分输出(eval_result.json 等临时产物)默认写在评测根目录,
收录时只保留 `ai模型纬度得分/` 下的三件,临时文件不要提交。
File diff suppressed because one or more lines are too long
@@ -0,0 +1,48 @@
{
"model": "deepseek-v4-flash",
"skill_mode": "with-skill",
"skill_version": "3.6.2",
"eval_date": "2026-10-13",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {"total": 200, "correct": 74, "accuracy": 37.0, "no_answer": 0},
"baseline": {
"name": "官方基线(Gemini)",
"overall": {"total": 200, "correct": 69, "accuracy": 34.5},
"per_contest": {
"contest8_2021": 27.5,
"contest8_2022": 40.0,
"contest8_2023": 27.5,
"contest8_2024": 35.0,
"contest8_2025": 42.5
},
"per_dimension": {
"流年运势": 40.5,
"感情": 36.7,
"六亲": 27.6,
"事业": 24.0,
"性格": 45.0,
"学业": 41.7,
"财富": 30.8,
"健康": 23.1,
"其他": 50.0
}
},
"per_contest": {
"contest8_2021": {"total": 40, "correct": 19, "accuracy": 47.5, "no_answer": 0},
"contest8_2022": {"total": 40, "correct": 16, "accuracy": 40.0, "no_answer": 0},
"contest8_2023": {"total": 40, "correct": 15, "accuracy": 37.5, "no_answer": 0},
"contest8_2024": {"total": 40, "correct": 12, "accuracy": 30.0, "no_answer": 0},
"contest8_2025": {"total": 40, "correct": 12, "accuracy": 30.0, "no_answer": 0}
},
"per_dimension": {
"流年运势": {"total": 37, "correct": 9, "accuracy": 24.3, "no_answer": 0},
"感情": {"total": 49, "correct": 15, "accuracy": 30.6, "no_answer": 0},
"六亲": {"total": 29, "correct": 12, "accuracy": 41.4, "no_answer": 0},
"事业": {"total": 25, "correct": 9, "accuracy": 36.0, "no_answer": 0},
"性格": {"total": 20, "correct": 11, "accuracy": 55.0, "no_answer": 0},
"学业": {"total": 12, "correct": 5, "accuracy": 41.7, "no_answer": 0},
"财富": {"total": 13, "correct": 7, "accuracy": 53.8, "no_answer": 0},
"健康": {"total": 13, "correct": 5, "accuracy": 38.5, "no_answer": 0},
"其他": {"total": 2, "correct": 1, "accuracy": 50.0, "no_answer": 0}
}
}
@@ -0,0 +1,165 @@
# BaziQA 评测报告
## 总览
| 口径 | 正确/总题数 | 准确率 | 未答 |
|---|---|---|---|
| 本次评测 | 74/200 | 37.0% | 0 |
| 官方基线(Gemini) | 69/200 | 34.5% | 0 |
> 基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md。
## 分届准确率
| 届别 | 本次 | 官方 |
|---|---|---|
| contest8_2021 | 19/40 = 47.5%(未答 0) | 27.5% |
| contest8_2022 | 16/40 = 40.0%(未答 0) | 40.0% |
| contest8_2023 | 15/40 = 37.5%(未答 0) | 27.5% |
| contest8_2024 | 12/40 = 30.0%(未答 0) | 35.0% |
| contest8_2025 | 12/40 = 30.0%(未答 0) | 42.5% |
## 分维度准确率
| 维度 | 本次 | 官方 |
|---|---|---|
| 流年运势 | 9/37 = 24.3%(未答 0) | 40.5% |
| 感情 | 15/49 = 30.6%(未答 0) | 36.7% |
| 六亲 | 12/29 = 41.4%(未答 0) | 27.6% |
| 事业 | 9/25 = 36.0%(未答 0) | 24.0% |
| 性格 | 11/20 = 55.0%(未答 0) | 45.0% |
| 学业 | 5/12 = 41.7%(未答 0) | 41.7% |
| 财富 | 7/13 = 53.8%(未答 0) | 30.8% |
| 健康 | 5/13 = 38.5%(未答 0) | 23.1% |
| 其他 | 1/2 = 50.0%(未答 0) | 50.0% |
## 错题清单(错因留空,待人工/后续填写)
| 届别 | 命主 | 题序 | 维度 | 我答 | 正解 | 错因 |
|---|---|---|---|---|---|---|
| contest8_2021 | male_19540318_P025 | Q2 | 六亲 | B | A | |
| contest8_2021 | male_19540318_P025 | Q3 | 流年运势 | D | C | |
| contest8_2021 | male_19831019_P026 | Q1 | 事业 | B | C | |
| contest8_2021 | male_19831019_P026 | Q2 | 感情 | C | D | |
| contest8_2021 | male_19831019_P026 | Q3 | 六亲 | C | D | |
| contest8_2021 | male_19831019_P026 | Q4 | 流年运势 | C | B | |
| contest8_2021 | female_19841220_P027 | Q2 | 事业 | C | A | |
| contest8_2021 | female_19841220_P027 | Q3 | 感情 | D | C | |
| contest8_2021 | female_19841220_P027 | Q4 | 流年运势 | B | D | |
| contest8_2021 | male_19770706_P028 | Q3 | 流年运势 | C | D | |
| contest8_2021 | male_19770706_P028 | Q4 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q1 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q2 | 事业 | B | D | |
| contest8_2021 | female_19750107_P030 | Q2 | 感情 | B | D | |
| contest8_2021 | female_19750107_P030 | Q4 | 事业 | D | A | |
| contest8_2021 | female_19750107_P030 | Q5 | 流年运势 | C | A | |
| contest8_2021 | male_19530127_P031 | Q4 | 流年运势 | D | A | |
| contest8_2021 | male_19530127_P031 | Q5 | 六亲 | B | D | |
| contest8_2021 | male_19710910_P033 | Q3 | 流年运势 | A | D | |
| contest8_2021 | female_19670827_P034 | Q1 | 感情 | B | D | |
| contest8_2021 | female_19670827_P034 | Q2 | 事业 | B | C | |
| contest8_2022 | male_19740428_P017 | Q1 | 流年运势 | B | A | |
| contest8_2022 | male_19740428_P017 | Q2 | 感情 | B | C | |
| contest8_2022 | male_19740428_P017 | Q3 | 流年运势 | B | C | |
| contest8_2022 | female_19810526_P018 | Q2 | 感情 | A | B | |
| contest8_2022 | female_19810526_P018 | Q4 | 性格 | A | D | |
| contest8_2022 | female_19810526_P018 | Q5 | 六亲 | A | B | |
| contest8_2022 | female_19900523_P019 | Q1 | 六亲 | B | D | |
| contest8_2022 | female_19900523_P019 | Q2 | 事业 | A | C | |
| contest8_2022 | female_19900523_P019 | Q3 | 感情 | C | D | |
| contest8_2022 | female_19900523_P019 | Q4 | 流年运势 | D | C | |
| contest8_2022 | female_19900523_P019 | Q5 | 性格 | C | B | |
| contest8_2022 | female_19771026_P020 | Q1 | 事业 | C | A | |
| contest8_2022 | female_19771026_P020 | Q3 | 感情 | D | B | |
| contest8_2022 | female_19771026_P020 | Q4 | 财富 | C | A | |
| contest8_2022 | female_19771026_P020 | Q5 | 健康 | B | D | |
| contest8_2022 | male_19850629_P021 | Q4 | 流年运势 | B | C | |
| contest8_2022 | male_19831101_P022 | Q1 | 感情 | C | A | |
| contest8_2022 | male_19831101_P022 | Q2 | 学业 | C | D | |
| contest8_2022 | male_19831101_P022 | Q3 | 流年运势 | C | D | |
| contest8_2022 | male_19831101_P022 | Q5 | 财富 | D | B | |
| contest8_2022 | female_19841209_P023 | Q3 | 流年运势 | B | A | |
| contest8_2022 | male_19810617_P024 | Q2 | 感情 | D | C | |
| contest8_2022 | male_19810617_P024 | Q3 | 健康 | A | B | |
| contest8_2022 | male_19810617_P024 | Q5 | 财富 | C | B | |
| contest8_2023 | female_19661018_P009 | Q1 | 性格 | D | B | |
| contest8_2023 | female_19661018_P009 | Q2 | 事业 | D | C | |
| contest8_2023 | female_19661018_P009 | Q3 | 六亲 | D | B | |
| contest8_2023 | female_19661018_P009 | Q4 | 感情 | B | A | |
| contest8_2023 | female_19661018_P009 | Q5 | 流年运势 | A | D | |
| contest8_2023 | male_19620806_P010 | Q3 | 感情 | A | B | |
| contest8_2023 | male_19620806_P010 | Q5 | 其他 | B | D | |
| contest8_2023 | male_19860424_P011 | Q1 | 感情 | B | D | |
| contest8_2023 | male_19860424_P011 | Q2 | 六亲 | B | D | |
| contest8_2023 | male_19860424_P011 | Q4 | 感情 | A | C | |
| contest8_2023 | male_19560311_P012 | Q2 | 学业 | C | A | |
| contest8_2023 | male_19560311_P012 | Q3 | 感情 | C | A | |
| contest8_2023 | male_19560311_P012 | Q4 | 流年运势 | D | C | |
| contest8_2023 | female_19780405_P013 | Q1 | 流年运势 | A | B | |
| contest8_2023 | female_19780405_P013 | Q2 | 流年运势 | B | C | |
| contest8_2023 | female_19780405_P013 | Q4 | 六亲 | A | B | |
| contest8_2023 | female_19581027_P014 | Q1 | 事业 | B | C | |
| contest8_2023 | female_19581027_P014 | Q5 | 健康 | B | D | |
| contest8_2023 | female_20020601_P015 | Q1 | 财富 | C | B | |
| contest8_2023 | female_20020601_P015 | Q2 | 学业 | A | D | |
| contest8_2023 | female_20020601_P015 | Q3 | 感情 | A | C | |
| contest8_2023 | female_20020601_P015 | Q5 | 六亲 | D | A | |
| contest8_2023 | male_19800711_P016 | Q1 | 感情 | A | C | |
| contest8_2023 | male_19800711_P016 | Q2 | 感情 | B | C | |
| contest8_2023 | male_19800711_P016 | Q4 | 性格 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q1 | 六亲 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q2 | 学业 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q3 | 感情 | B | D | |
| contest8_2024 | guangdong_female_19800824_P001 | Q4 | 六亲 | B | C | |
| contest8_2024 | guangdong_female_19800824_P001 | Q5 | 感情 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q1 | 性格 | B | D | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q3 | 事业 | B | D | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q4 | 六亲 | A | C | |
| contest8_2024 | male_19611230_P003 | Q1 | 流年运势 | D | B | |
| contest8_2024 | male_19611230_P003 | Q3 | 流年运势 | C | B | |
| contest8_2024 | male_19611230_P003 | Q4 | 流年运势 | D | A | |
| contest8_2024 | male_19611230_P003 | Q5 | 财富 | A | C | |
| contest8_2024 | female_19831028_P004 | Q2 | 感情 | B | A | |
| contest8_2024 | female_19831028_P004 | Q4 | 感情 | C | D | |
| contest8_2024 | female_19831028_P004 | Q5 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q3 | 财富 | B | C | |
| contest8_2024 | male_19710412_P005 | Q5 | 健康 | C | B | |
| contest8_2024 | female_19830326_P006 | Q1 | 感情 | A | B | |
| contest8_2024 | female_19830326_P006 | Q2 | 感情 | D | A | |
| contest8_2024 | female_19830326_P006 | Q3 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q4 | 流年运势 | A | D | |
| contest8_2024 | female_19800921_P007 | Q2 | 感情 | B | D | |
| contest8_2024 | female_19800921_P007 | Q3 | 流年运势 | A | D | |
| contest8_2024 | female_19800921_P007 | Q4 | 六亲 | C | D | |
| contest8_2024 | male_20070131_P008 | Q1 | 健康 | D | B | |
| contest8_2024 | male_20070131_P008 | Q2 | 六亲 | B | C | |
| contest8_2024 | male_20070131_P008 | Q4 | 流年运势 | C | D | |
| contest8_2025 | guangdong_female_19511114_P001 | Q4 | 流年运势 | D | A | |
| contest8_2025 | hongkong_female_19870705_P002 | Q1 | 健康 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q3 | 事业 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q4 | 感情 | C | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q1 | 六亲 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q2 | 性格 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q3 | 学业 | B | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q4 | 感情 | A | C | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q5 | 流年运势 | D | A | |
| contest8_2025 | singapore_male_19930408_P004 | Q3 | 事业 | C | B | |
| contest8_2025 | singapore_male_19930408_P004 | Q4 | 感情 | B | A | |
| contest8_2025 | malaysia_male_19880110_P005 | Q1 | 事业 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q2 | 流年运势 | B | A | |
| contest8_2025 | malaysia_male_19880110_P005 | Q3 | 感情 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q4 | 六亲 | C | A | |
| contest8_2025 | malaysia_male_19880110_P005 | Q5 | 性格 | D | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q2 | 性格 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q3 | 事业 | D | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q4 | 流年运势 | A | D | |
| contest8_2025 | malaysia_male_19730824_P006 | Q5 | 健康 | A | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q1 | 六亲 | D | A | |
| contest8_2025 | taiwan_female_19880215_P007 | Q2 | 学业 | A | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q4 | 事业 | A | D | |
| contest8_2025 | taiwan_female_19880215_P007 | Q5 | 性格 | A | B | |
| contest8_2025 | beijing_male_19700722_P008 | Q1 | 学业 | D | C | |
| contest8_2025 | beijing_male_19700722_P008 | Q2 | 事业 | C | A | |
| contest8_2025 | beijing_male_19700722_P008 | Q3 | 流年运势 | A | D | |
| contest8_2025 | beijing_male_19700722_P008 | Q4 | 健康 | A | C | |
File diff suppressed because one or more lines are too long
@@ -0,0 +1,48 @@
{
"model": "deepseek-v4-flash",
"skill_mode": "without-skill",
"skill_version": "3.6.2",
"eval_date": "2026-10-13",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {"total": 200, "correct": 71, "accuracy": 35.5, "no_answer": 0},
"baseline": {
"name": "官方基线(Gemini)",
"overall": {"total": 200, "correct": 69, "accuracy": 34.5},
"per_contest": {
"contest8_2021": 27.5,
"contest8_2022": 40.0,
"contest8_2023": 27.5,
"contest8_2024": 35.0,
"contest8_2025": 42.5
},
"per_dimension": {
"流年运势": 40.5,
"感情": 36.7,
"六亲": 27.6,
"事业": 24.0,
"性格": 45.0,
"学业": 41.7,
"财富": 30.8,
"健康": 23.1,
"其他": 50.0
}
},
"per_contest": {
"contest8_2021": {"total": 40, "correct": 17, "accuracy": 42.5, "no_answer": 0},
"contest8_2022": {"total": 40, "correct": 18, "accuracy": 45.0, "no_answer": 0},
"contest8_2023": {"total": 40, "correct": 6, "accuracy": 15.0, "no_answer": 0},
"contest8_2024": {"total": 40, "correct": 19, "accuracy": 47.5, "no_answer": 0},
"contest8_2025": {"total": 40, "correct": 11, "accuracy": 27.5, "no_answer": 0}
},
"per_dimension": {
"流年运势": {"total": 37, "correct": 11, "accuracy": 29.7, "no_answer": 0},
"感情": {"total": 49, "correct": 13, "accuracy": 26.5, "no_answer": 0},
"六亲": {"total": 29, "correct": 12, "accuracy": 41.4, "no_answer": 0},
"事业": {"total": 25, "correct": 10, "accuracy": 40.0, "no_answer": 0},
"性格": {"total": 20, "correct": 11, "accuracy": 55.0, "no_answer": 0},
"学业": {"total": 12, "correct": 5, "accuracy": 41.7, "no_answer": 0},
"财富": {"total": 13, "correct": 3, "accuracy": 23.1, "no_answer": 0},
"健康": {"total": 13, "correct": 5, "accuracy": 38.5, "no_answer": 0},
"其他": {"total": 2, "correct": 1, "accuracy": 50.0, "no_answer": 0}
}
}
@@ -0,0 +1,168 @@
# BaziQA 评测报告
## 总览
| 口径 | 正确/总题数 | 准确率 | 未答 |
|---|---|---|---|
| 本次评测 | 71/200 | 35.5% | 0 |
| 官方基线(Gemini) | 69/200 | 34.5% | 0 |
> 基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md。
## 分届准确率
| 届别 | 本次 | 官方 |
|---|---|---|
| contest8_2021 | 17/40 = 42.5%(未答 0) | 27.5% |
| contest8_2022 | 18/40 = 45.0%(未答 0) | 40.0% |
| contest8_2023 | 6/40 = 15.0%(未答 0) | 27.5% |
| contest8_2024 | 19/40 = 47.5%(未答 0) | 35.0% |
| contest8_2025 | 11/40 = 27.5%(未答 0) | 42.5% |
## 分维度准确率
| 维度 | 本次 | 官方 |
|---|---|---|
| 流年运势 | 11/37 = 29.7%(未答 0) | 40.5% |
| 感情 | 13/49 = 26.5%(未答 0) | 36.7% |
| 六亲 | 12/29 = 41.4%(未答 0) | 27.6% |
| 事业 | 10/25 = 40.0%(未答 0) | 24.0% |
| 性格 | 11/20 = 55.0%(未答 0) | 45.0% |
| 学业 | 5/12 = 41.7%(未答 0) | 41.7% |
| 财富 | 3/13 = 23.1%(未答 0) | 30.8% |
| 健康 | 5/13 = 38.5%(未答 0) | 23.1% |
| 其他 | 1/2 = 50.0%(未答 0) | 50.0% |
## 错题清单(错因留空,待人工/后续填写)
| 届别 | 命主 | 题序 | 维度 | 我答 | 正解 | 错因 |
|---|---|---|---|---|---|---|
| contest8_2021 | male_19540318_P025 | Q2 | 六亲 | B | A | |
| contest8_2021 | male_19831019_P026 | Q1 | 事业 | B | C | |
| contest8_2021 | male_19831019_P026 | Q2 | 感情 | A | D | |
| contest8_2021 | male_19831019_P026 | Q3 | 六亲 | A | D | |
| contest8_2021 | male_19831019_P026 | Q4 | 流年运势 | D | B | |
| contest8_2021 | male_19831019_P026 | Q5 | 性格 | D | A | |
| contest8_2021 | female_19841220_P027 | Q2 | 事业 | C | A | |
| contest8_2021 | female_19841220_P027 | Q3 | 感情 | B | C | |
| contest8_2021 | female_19841220_P027 | Q4 | 流年运势 | C | D | |
| contest8_2021 | female_19841220_P027 | Q5 | 流年运势 | B | A | |
| contest8_2021 | male_19770706_P028 | Q3 | 流年运势 | C | D | |
| contest8_2021 | male_19770706_P028 | Q4 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q1 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q4 | 流年运势 | C | B | |
| contest8_2021 | female_19750107_P030 | Q2 | 感情 | B | D | |
| contest8_2021 | female_19750107_P030 | Q3 | 感情 | B | D | |
| contest8_2021 | female_19750107_P030 | Q4 | 事业 | B | A | |
| contest8_2021 | male_19530127_P031 | Q2 | 六亲 | A | B | |
| contest8_2021 | male_19530127_P031 | Q4 | 流年运势 | D | A | |
| contest8_2021 | male_19530127_P031 | Q5 | 六亲 | A | D | |
| contest8_2021 | male_19710910_P033 | Q3 | 流年运势 | A | D | |
| contest8_2021 | female_19670827_P034 | Q1 | 感情 | B | D | |
| contest8_2021 | female_19670827_P034 | Q2 | 事业 | A | C | |
| contest8_2022 | male_19740428_P017 | Q1 | 流年运势 | B | A | |
| contest8_2022 | male_19740428_P017 | Q2 | 感情 | A | C | |
| contest8_2022 | female_19810526_P018 | Q2 | 感情 | A | B | |
| contest8_2022 | female_19810526_P018 | Q4 | 性格 | A | D | |
| contest8_2022 | female_19900523_P019 | Q1 | 六亲 | B | D | |
| contest8_2022 | female_19900523_P019 | Q3 | 感情 | C | D | |
| contest8_2022 | female_19900523_P019 | Q4 | 流年运势 | B | C | |
| contest8_2022 | female_19900523_P019 | Q5 | 性格 | C | B | |
| contest8_2022 | female_19771026_P020 | Q1 | 事业 | C | A | |
| contest8_2022 | female_19771026_P020 | Q3 | 感情 | D | B | |
| contest8_2022 | female_19771026_P020 | Q4 | 财富 | C | A | |
| contest8_2022 | female_19771026_P020 | Q5 | 健康 | B | D | |
| contest8_2022 | male_19850629_P021 | Q4 | 流年运势 | D | C | |
| contest8_2022 | male_19850629_P021 | Q5 | 学业 | A | B | |
| contest8_2022 | male_19831101_P022 | Q1 | 感情 | C | A | |
| contest8_2022 | male_19831101_P022 | Q2 | 学业 | B | D | |
| contest8_2022 | male_19831101_P022 | Q3 | 流年运势 | C | D | |
| contest8_2022 | male_19831101_P022 | Q5 | 财富 | D | B | |
| contest8_2022 | female_19841209_P023 | Q2 | 财富 | B | C | |
| contest8_2022 | female_19841209_P023 | Q5 | 感情 | C | B | |
| contest8_2022 | male_19810617_P024 | Q3 | 健康 | A | B | |
| contest8_2022 | male_19810617_P024 | Q5 | 财富 | C | B | |
| contest8_2023 | female_19661018_P009 | Q1 | 性格 | D | B | |
| contest8_2023 | female_19661018_P009 | Q2 | 事业 | D | C | |
| contest8_2023 | female_19661018_P009 | Q3 | 六亲 | C | B | |
| contest8_2023 | female_19661018_P009 | Q4 | 感情 | B | A | |
| contest8_2023 | female_19661018_P009 | Q5 | 流年运势 | A | D | |
| contest8_2023 | male_19620806_P010 | Q3 | 感情 | A | B | |
| contest8_2023 | male_19620806_P010 | Q4 | 流年运势 | A | D | |
| contest8_2023 | male_19620806_P010 | Q5 | 其他 | B | D | |
| contest8_2023 | male_19860424_P011 | Q1 | 感情 | A | D | |
| contest8_2023 | male_19860424_P011 | Q2 | 六亲 | A | D | |
| contest8_2023 | male_19860424_P011 | Q3 | 财富 | A | C | |
| contest8_2023 | male_19860424_P011 | Q4 | 感情 | B | C | |
| contest8_2023 | male_19860424_P011 | Q5 | 事业 | C | D | |
| contest8_2023 | male_19560311_P012 | Q1 | 性格 | D | C | |
| contest8_2023 | male_19560311_P012 | Q2 | 学业 | C | A | |
| contest8_2023 | male_19560311_P012 | Q3 | 感情 | B | A | |
| contest8_2023 | male_19560311_P012 | Q4 | 流年运势 | D | C | |
| contest8_2023 | male_19560311_P012 | Q5 | 健康 | B | C | |
| contest8_2023 | female_19780405_P013 | Q1 | 流年运势 | C | B | |
| contest8_2023 | female_19780405_P013 | Q2 | 流年运势 | A | C | |
| contest8_2023 | female_19780405_P013 | Q3 | 感情 | D | C | |
| contest8_2023 | female_19780405_P013 | Q4 | 六亲 | A | B | |
| contest8_2023 | female_19780405_P013 | Q5 | 六亲 | A | B | |
| contest8_2023 | female_19581027_P014 | Q1 | 事业 | D | C | |
| contest8_2023 | female_19581027_P014 | Q3 | 事业 | A | C | |
| contest8_2023 | female_19581027_P014 | Q5 | 健康 | B | D | |
| contest8_2023 | female_20020601_P015 | Q1 | 财富 | C | B | |
| contest8_2023 | female_20020601_P015 | Q2 | 学业 | A | D | |
| contest8_2023 | female_20020601_P015 | Q5 | 六亲 | C | A | |
| contest8_2023 | male_19800711_P016 | Q1 | 感情 | A | C | |
| contest8_2023 | male_19800711_P016 | Q2 | 感情 | B | C | |
| contest8_2023 | male_19800711_P016 | Q3 | 事业 | A | B | |
| contest8_2023 | male_19800711_P016 | Q4 | 性格 | A | B | |
| contest8_2023 | male_19800711_P016 | Q5 | 财富 | C | D | |
| contest8_2024 | guangdong_female_19800824_P001 | Q3 | 感情 | A | D | |
| contest8_2024 | guangdong_female_19800824_P001 | Q4 | 六亲 | D | C | |
| contest8_2024 | guangdong_female_19800824_P001 | Q5 | 感情 | B | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q4 | 六亲 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q5 | 财富 | C | A | |
| contest8_2024 | male_19611230_P003 | Q1 | 流年运势 | D | B | |
| contest8_2024 | male_19611230_P003 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19611230_P003 | Q4 | 流年运势 | C | A | |
| contest8_2024 | male_19611230_P003 | Q5 | 财富 | B | C | |
| contest8_2024 | female_19831028_P004 | Q2 | 感情 | B | A | |
| contest8_2024 | female_19831028_P004 | Q4 | 感情 | C | D | |
| contest8_2024 | female_19831028_P004 | Q5 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q1 | 感情 | A | B | |
| contest8_2024 | male_19710412_P005 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q3 | 财富 | B | C | |
| contest8_2024 | female_19830326_P006 | Q1 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q2 | 感情 | C | A | |
| contest8_2024 | female_19800921_P007 | Q3 | 流年运势 | B | D | |
| contest8_2024 | male_20070131_P008 | Q1 | 健康 | A | B | |
| contest8_2024 | male_20070131_P008 | Q2 | 六亲 | B | C | |
| contest8_2024 | male_20070131_P008 | Q4 | 流年运势 | C | D | |
| contest8_2025 | guangdong_female_19511114_P001 | Q2 | 感情 | A | D | |
| contest8_2025 | guangdong_female_19511114_P001 | Q4 | 流年运势 | D | A | |
| contest8_2025 | hongkong_female_19870705_P002 | Q1 | 健康 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q2 | 性格 | D | B | |
| contest8_2025 | hongkong_female_19870705_P002 | Q3 | 事业 | B | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q4 | 感情 | C | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q5 | 六亲 | A | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q1 | 六亲 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q3 | 学业 | B | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q4 | 感情 | B | C | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q5 | 流年运势 | C | A | |
| contest8_2025 | singapore_male_19930408_P004 | Q2 | 流年运势 | A | D | |
| contest8_2025 | singapore_male_19930408_P004 | Q3 | 事业 | C | B | |
| contest8_2025 | singapore_male_19930408_P004 | Q5 | 健康 | C | B | |
| contest8_2025 | malaysia_male_19880110_P005 | Q2 | 流年运势 | B | A | |
| contest8_2025 | malaysia_male_19880110_P005 | Q3 | 感情 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q4 | 六亲 | C | A | |
| contest8_2025 | malaysia_male_19730824_P006 | Q2 | 性格 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q3 | 事业 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q4 | 流年运势 | A | D | |
| contest8_2025 | malaysia_male_19730824_P006 | Q5 | 健康 | D | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q1 | 六亲 | B | A | |
| contest8_2025 | taiwan_female_19880215_P007 | Q2 | 学业 | A | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q3 | 感情 | A | B | |
| contest8_2025 | taiwan_female_19880215_P007 | Q4 | 事业 | A | D | |
| contest8_2025 | taiwan_female_19880215_P007 | Q5 | 性格 | D | B | |
| contest8_2025 | beijing_male_19700722_P008 | Q1 | 学业 | D | C | |
| contest8_2025 | beijing_male_19700722_P008 | Q2 | 事业 | C | A | |
| contest8_2025 | beijing_male_19700722_P008 | Q3 | 流年运势 | C | D | |
File diff suppressed because one or more lines are too long
@@ -0,0 +1,128 @@
{
"model": "kimi-k3",
"skill_mode": "with-skill",
"skill_version": "3.9.0-未发版(规则库 568 条)",
"eval_date": "2026-10-13",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {
"total": 200,
"correct": 81,
"accuracy": 40.5,
"no_answer": 0
},
"baseline": {
"name": "官方基线(Gemini)",
"overall": {
"total": 200,
"correct": 69,
"accuracy": 34.5
},
"per_contest": {
"contest8_2021": 27.5,
"contest8_2022": 40.0,
"contest8_2023": 27.5,
"contest8_2024": 35.0,
"contest8_2025": 42.5
},
"per_dimension": {
"流年运势": 40.5,
"感情": 36.7,
"六亲": 27.6,
"事业": 24.0,
"性格": 45.0,
"学业": 41.7,
"财富": 30.8,
"健康": 23.1,
"其他": 50.0
}
},
"per_contest": {
"contest8_2021": {
"total": 40,
"correct": 19,
"no_answer": 0,
"accuracy": 47.5
},
"contest8_2022": {
"total": 40,
"correct": 14,
"no_answer": 0,
"accuracy": 35.0
},
"contest8_2023": {
"total": 40,
"correct": 17,
"no_answer": 0,
"accuracy": 42.5
},
"contest8_2024": {
"total": 40,
"correct": 17,
"no_answer": 0,
"accuracy": 42.5
},
"contest8_2025": {
"total": 40,
"correct": 14,
"no_answer": 0,
"accuracy": 35.0
}
},
"per_dimension": {
"流年运势": {
"total": 37,
"correct": 16,
"no_answer": 0,
"accuracy": 43.2
},
"感情": {
"total": 49,
"correct": 17,
"no_answer": 0,
"accuracy": 34.7
},
"六亲": {
"total": 29,
"correct": 12,
"no_answer": 0,
"accuracy": 41.4
},
"事业": {
"total": 25,
"correct": 12,
"no_answer": 0,
"accuracy": 48.0
},
"性格": {
"total": 20,
"correct": 12,
"no_answer": 0,
"accuracy": 60.0
},
"学业": {
"total": 12,
"correct": 5,
"no_answer": 0,
"accuracy": 41.7
},
"财富": {
"total": 13,
"correct": 3,
"no_answer": 0,
"accuracy": 23.1
},
"健康": {
"total": 13,
"correct": 4,
"no_answer": 0,
"accuracy": 30.8
},
"其他": {
"total": 2,
"correct": 0,
"no_answer": 0,
"accuracy": 0.0
}
},
"notes": "判分:评测/工具/run_eval.py;求解留档:评测/ai答案/kimi-k3/with-skill/(41 位命主:规则库 3.7 全量 + 3.9 补强重跑 17 位命主的合并集,2026-10-13 收录;3.6 版留档存档于 with-skill-v3.6/);官方基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md"
}
@@ -0,0 +1,167 @@
# BaziQA 评测得分 — kimi-k3(with-skill)
- 模型:**kimi-k3**
- 模式:**with-skill**(加载子平八字技能排盘 + 规则库推理)
- 技能版本:3.9.0-未发版(规则库 568 条)
- 评测日期:2026-10-13
- 赛事:BaziQA-全球算命师大赛(2021–2025 五届 × 40 题,共 200 题)
- 判分:`评测/工具/run_eval.py`(脚本判分,非模型裁判)
- 求解留档:`评测/ai答案/kimi-k3/with-skill/`(41 位命主,含完整推理过程;本轮为规则库 3.7 全量 + 3.9 补强重跑 17 位命主的合并集,3.6 版留档存档于 `with-skill-v3.6/`)
- 错因分类:本轮重跑暂未归并(错题清单错因列留空,待后续人工/脚本补录)
## 总览
| 口径 | 正确/总题数 | 准确率 | 未答 |
|---|---|---|---|
| 本次评测 | 81/200 | 40.5% | 0 |
| 官方基线(Gemini) | 69/200 | 34.5% | 0 |
> 基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md。
## 分届准确率
| 届别 | 本次 | 官方 |
|---|---|---|
| contest8_2021 | 19/40 = 47.5%(未答 0) | 27.5% |
| contest8_2022 | 14/40 = 35.0%(未答 0) | 40.0% |
| contest8_2023 | 17/40 = 42.5%(未答 0) | 27.5% |
| contest8_2024 | 17/40 = 42.5%(未答 0) | 35.0% |
| contest8_2025 | 14/40 = 35.0%(未答 0) | 42.5% |
## 分维度准确率
| 维度 | 本次 | 官方 |
|---|---|---|
| 流年运势 | 16/37 = 43.2%(未答 0) | 40.5% |
| 感情 | 17/49 = 34.7%(未答 0) | 36.7% |
| 六亲 | 12/29 = 41.4%(未答 0) | 27.6% |
| 事业 | 12/25 = 48.0%(未答 0) | 24.0% |
| 性格 | 12/20 = 60.0%(未答 0) | 45.0% |
| 学业 | 5/12 = 41.7%(未答 0) | 41.7% |
| 财富 | 3/13 = 23.1%(未答 0) | 30.8% |
| 健康 | 4/13 = 30.8%(未答 0) | 23.1% |
| 其他 | 0/2 = 0.0%(未答 0) | 50.0% |
## 错题清单(错因留空,待人工/后续填写)
| 届别 | 命主 | 题序 | 维度 | 我答 | 正解 | 错因 |
|---|---|---|---|---|---|---|
| contest8_2021 | male_19540318_P025 | Q2 | 六亲 | B | A | |
| contest8_2021 | male_19540318_P025 | Q3 | 流年运势 | D | C | |
| contest8_2021 | male_19831019_P026 | Q1 | 事业 | B | C | |
| contest8_2021 | male_19831019_P026 | Q2 | 感情 | A | D | |
| contest8_2021 | male_19831019_P026 | Q3 | 六亲 | B | D | |
| contest8_2021 | male_19831019_P026 | Q4 | 流年运势 | C | B | |
| contest8_2021 | female_19841220_P027 | Q1 | 学业 | B | C | |
| contest8_2021 | female_19841220_P027 | Q3 | 感情 | D | C | |
| contest8_2021 | female_19841220_P027 | Q4 | 流年运势 | C | D | |
| contest8_2021 | male_19770706_P028 | Q1 | 性格 | D | B | |
| contest8_2021 | male_19770706_P028 | Q2 | 事业 | C | A | |
| contest8_2021 | male_19770706_P028 | Q4 | 感情 | C | D | |
| contest8_2021 | female_19750107_P030 | Q2 | 感情 | A | D | |
| contest8_2021 | female_19750107_P030 | Q3 | 感情 | C | D | |
| contest8_2021 | female_19750107_P030 | Q4 | 事业 | B | A | |
| contest8_2021 | male_19530127_P031 | Q4 | 流年运势 | D | A | |
| contest8_2021 | male_19530127_P031 | Q5 | 六亲 | B | D | |
| contest8_2021 | male_19710910_P033 | Q2 | 流年运势 | A | B | |
| contest8_2021 | male_19710910_P033 | Q3 | 流年运势 | A | D | |
| contest8_2021 | female_19670827_P034 | Q1 | 感情 | B | D | |
| contest8_2021 | female_19670827_P034 | Q2 | 事业 | B | C | |
| contest8_2022 | male_19740428_P017 | Q1 | 流年运势 | D | A | |
| contest8_2022 | male_19740428_P017 | Q2 | 感情 | B | C | |
| contest8_2022 | male_19740428_P017 | Q3 | 流年运势 | A | C | |
| contest8_2022 | male_19740428_P017 | Q4 | 六亲 | B | C | |
| contest8_2022 | male_19740428_P017 | Q5 | 流年运势 | A | B | |
| contest8_2022 | female_19810526_P018 | Q1 | 学业 | D | B | |
| contest8_2022 | female_19810526_P018 | Q2 | 感情 | A | B | |
| contest8_2022 | female_19810526_P018 | Q4 | 性格 | A | D | |
| contest8_2022 | female_19810526_P018 | Q5 | 六亲 | C | B | |
| contest8_2022 | female_19900523_P019 | Q1 | 六亲 | C | D | |
| contest8_2022 | female_19900523_P019 | Q3 | 感情 | C | D | |
| contest8_2022 | female_19900523_P019 | Q4 | 流年运势 | B | C | |
| contest8_2022 | female_19771026_P020 | Q1 | 事业 | C | A | |
| contest8_2022 | female_19771026_P020 | Q3 | 感情 | D | B | |
| contest8_2022 | female_19771026_P020 | Q4 | 财富 | B | A | |
| contest8_2022 | female_19771026_P020 | Q5 | 健康 | B | D | |
| contest8_2022 | male_19850629_P021 | Q1 | 性格 | C | A | |
| contest8_2022 | male_19850629_P021 | Q4 | 流年运势 | D | C | |
| contest8_2022 | male_19831101_P022 | Q2 | 学业 | A | D | |
| contest8_2022 | male_19831101_P022 | Q3 | 流年运势 | C | D | |
| contest8_2022 | male_19831101_P022 | Q5 | 财富 | D | B | |
| contest8_2022 | female_19841209_P023 | Q2 | 财富 | B | C | |
| contest8_2022 | female_19841209_P023 | Q5 | 感情 | D | B | |
| contest8_2022 | male_19810617_P024 | Q2 | 感情 | A | C | |
| contest8_2022 | male_19810617_P024 | Q3 | 健康 | A | B | |
| contest8_2022 | male_19810617_P024 | Q5 | 财富 | C | B | |
| contest8_2023 | female_19661018_P009 | Q2 | 事业 | D | C | |
| contest8_2023 | female_19661018_P009 | Q3 | 六亲 | D | B | |
| contest8_2023 | female_19661018_P009 | Q4 | 感情 | B | A | |
| contest8_2023 | female_19661018_P009 | Q5 | 流年运势 | A | D | |
| contest8_2023 | male_19620806_P010 | Q5 | 其他 | B | D | |
| contest8_2023 | male_19860424_P011 | Q1 | 感情 | B | D | |
| contest8_2023 | male_19860424_P011 | Q2 | 六亲 | B | D | |
| contest8_2023 | male_19860424_P011 | Q3 | 财富 | A | C | |
| contest8_2023 | male_19860424_P011 | Q4 | 感情 | B | C | |
| contest8_2023 | male_19560311_P012 | Q2 | 学业 | B | A | |
| contest8_2023 | male_19560311_P012 | Q3 | 感情 | C | A | |
| contest8_2023 | female_19780405_P013 | Q1 | 流年运势 | A | B | |
| contest8_2023 | female_19780405_P013 | Q2 | 流年运势 | A | C | |
| contest8_2023 | female_19780405_P013 | Q4 | 六亲 | A | B | |
| contest8_2023 | female_19581027_P014 | Q1 | 事业 | D | C | |
| contest8_2023 | female_19581027_P014 | Q2 | 其他 | C | A | |
| contest8_2023 | female_19581027_P014 | Q3 | 事业 | D | C | |
| contest8_2023 | female_19581027_P014 | Q5 | 健康 | B | D | |
| contest8_2023 | female_20020601_P015 | Q1 | 财富 | C | B | |
| contest8_2023 | female_20020601_P015 | Q4 | 感情 | B | D | |
| contest8_2023 | male_19800711_P016 | Q1 | 感情 | A | C | |
| contest8_2023 | male_19800711_P016 | Q2 | 感情 | B | C | |
| contest8_2023 | male_19800711_P016 | Q4 | 性格 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q1 | 六亲 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q2 | 学业 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q3 | 感情 | B | D | |
| contest8_2024 | guangdong_female_19800824_P001 | Q4 | 六亲 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q2 | 感情 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q4 | 六亲 | A | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q5 | 财富 | C | A | |
| contest8_2024 | male_19611230_P003 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19611230_P003 | Q3 | 流年运势 | A | B | |
| contest8_2024 | male_19611230_P003 | Q4 | 流年运势 | D | A | |
| contest8_2024 | male_19611230_P003 | Q5 | 财富 | D | C | |
| contest8_2024 | female_19831028_P004 | Q2 | 感情 | B | A | |
| contest8_2024 | female_19831028_P004 | Q4 | 感情 | B | D | |
| contest8_2024 | female_19831028_P004 | Q5 | 感情 | C | A | |
| contest8_2024 | male_19710412_P005 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q3 | 财富 | B | C | |
| contest8_2024 | male_19710412_P005 | Q4 | 财富 | A | B | |
| contest8_2024 | male_19710412_P005 | Q5 | 健康 | C | B | |
| contest8_2024 | female_19830326_P006 | Q1 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q3 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q4 | 流年运势 | A | D | |
| contest8_2024 | male_20070131_P008 | Q1 | 健康 | A | B | |
| contest8_2024 | male_20070131_P008 | Q4 | 流年运势 | C | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q1 | 健康 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q2 | 性格 | D | B | |
| contest8_2025 | hongkong_female_19870705_P002 | Q3 | 事业 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q5 | 六亲 | A | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q1 | 六亲 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q2 | 性格 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q3 | 学业 | B | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q4 | 感情 | B | C | |
| contest8_2025 | singapore_male_19930408_P004 | Q1 | 六亲 | A | C | |
| contest8_2025 | singapore_male_19930408_P004 | Q3 | 事业 | C | B | |
| contest8_2025 | singapore_male_19930408_P004 | Q4 | 感情 | B | A | |
| contest8_2025 | singapore_male_19930408_P004 | Q5 | 健康 | C | B | |
| contest8_2025 | malaysia_male_19880110_P005 | Q1 | 事业 | B | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q3 | 感情 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q4 | 六亲 | C | A | |
| contest8_2025 | malaysia_male_19730824_P006 | Q2 | 性格 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q3 | 事业 | D | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q4 | 流年运势 | A | D | |
| contest8_2025 | malaysia_male_19730824_P006 | Q5 | 健康 | A | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q1 | 六亲 | B | A | |
| contest8_2025 | taiwan_female_19880215_P007 | Q2 | 学业 | B | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q3 | 感情 | A | B | |
| contest8_2025 | taiwan_female_19880215_P007 | Q4 | 事业 | A | D | |
| contest8_2025 | taiwan_female_19880215_P007 | Q5 | 性格 | D | B | |
| contest8_2025 | beijing_male_19700722_P008 | Q3 | 流年运势 | C | D | |
| contest8_2025 | beijing_male_19700722_P008 | Q4 | 健康 | A | C | |
File diff suppressed because one or more lines are too long
@@ -0,0 +1,128 @@
{
"model": "kimi-k3",
"skill_mode": "without-skill",
"skill_version": "无(裸模型对照)",
"eval_date": "2026-10-12",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {
"total": 200,
"correct": 82,
"accuracy": 41.0,
"no_answer": 0
},
"baseline": {
"name": "官方基线(Gemini)",
"overall": {
"total": 200,
"correct": 69,
"accuracy": 34.5
},
"per_contest": {
"contest8_2021": 27.5,
"contest8_2022": 40.0,
"contest8_2023": 27.5,
"contest8_2024": 35.0,
"contest8_2025": 42.5
},
"per_dimension": {
"流年运势": 40.5,
"感情": 36.7,
"六亲": 27.6,
"事业": 24.0,
"性格": 45.0,
"学业": 41.7,
"财富": 30.8,
"健康": 23.1,
"其他": 50.0
}
},
"per_contest": {
"contest8_2021": {
"total": 40,
"correct": 17,
"no_answer": 0,
"accuracy": 42.5
},
"contest8_2022": {
"total": 40,
"correct": 20,
"no_answer": 0,
"accuracy": 50.0
},
"contest8_2023": {
"total": 40,
"correct": 12,
"no_answer": 0,
"accuracy": 30.0
},
"contest8_2024": {
"total": 40,
"correct": 17,
"no_answer": 0,
"accuracy": 42.5
},
"contest8_2025": {
"total": 40,
"correct": 16,
"no_answer": 0,
"accuracy": 40.0
}
},
"per_dimension": {
"流年运势": {
"total": 37,
"correct": 14,
"no_answer": 0,
"accuracy": 37.8
},
"感情": {
"total": 49,
"correct": 17,
"no_answer": 0,
"accuracy": 34.7
},
"六亲": {
"total": 29,
"correct": 9,
"no_answer": 0,
"accuracy": 31.0
},
"事业": {
"total": 25,
"correct": 11,
"no_answer": 0,
"accuracy": 44.0
},
"性格": {
"total": 20,
"correct": 10,
"no_answer": 0,
"accuracy": 50.0
},
"学业": {
"total": 12,
"correct": 7,
"no_answer": 0,
"accuracy": 58.3
},
"财富": {
"total": 13,
"correct": 6,
"no_answer": 0,
"accuracy": 46.2
},
"健康": {
"total": 13,
"correct": 6,
"no_answer": 0,
"accuracy": 46.2
},
"其他": {
"total": 2,
"correct": 2,
"no_answer": 0,
"accuracy": 100.0
}
},
"notes": "对照组:同模型不加载技能,仅凭模型自身知识手排四柱作答;判分:评测/工具/run_eval.py;求解留档:评测/ai答案/kimi-k3/without-skill/(41 位命主)"
}
@@ -0,0 +1,166 @@
# BaziQA 评测得分 — kimi-k3(without-skill)
- 模型:**kimi-k3**
- 模式:**without-skill**(裸答对照:不加载技能、不给排盘与规则库,仅凭模型自身知识手排四柱作答)
- 技能版本:无(裸模型对照)
- 评测日期:2026-10-12
- 赛事:BaziQA-全球算命师大赛(2021–2025 五届 × 40 题,共 200 题)
- 判分:`评测/工具/run_eval.py`(脚本判分,与 with-skill 组同一脚本同一答案键)
- 求解留档:`评测/ai答案/kimi-k3/without-skill/`(41 位命主,含模型手排四柱与作答过程)
- 备注:对照组,仅用于与 with-skill 组对照;裸答无规则推理链,错题不做错因归类
## 总览
| 口径 | 正确/总题数 | 准确率 | 未答 |
|---|---|---|---|
| 本次评测 | 82/200 | 41.0% | 0 |
| 官方基线(Gemini) | 69/200 | 34.5% | 0 |
## 分届准确率
| 届别 | 本次 | 官方 |
|---|---|---|
| contest8_2021 | 17/40 = 42.5%(未答 0) | 27.5% |
| contest8_2022 | 20/40 = 50.0%(未答 0) | 40.0% |
| contest8_2023 | 12/40 = 30.0%(未答 0) | 27.5% |
| contest8_2024 | 17/40 = 42.5%(未答 0) | 35.0% |
| contest8_2025 | 16/40 = 40.0%(未答 0) | 42.5% |
## 分维度准确率
| 维度 | 本次 | 官方 |
|---|---|---|
| 流年运势 | 14/37 = 37.8%(未答 0) | 40.5% |
| 感情 | 17/49 = 34.7%(未答 0) | 36.7% |
| 六亲 | 9/29 = 31.0%(未答 0) | 27.6% |
| 事业 | 11/25 = 44.0%(未答 0) | 24.0% |
| 性格 | 10/20 = 50.0%(未答 0) | 45.0% |
| 学业 | 7/12 = 58.3%(未答 0) | 41.7% |
| 财富 | 6/13 = 46.2%(未答 0) | 30.8% |
| 健康 | 6/13 = 46.2%(未答 0) | 23.1% |
| 其他 | 2/2 = 100.0%(未答 0) | 50.0% |
## 错题清单(裸答组不做错因归类)
| 届别 | 命主 | 题序 | 维度 | 我答→正解 |
|---|---|---|---|---|
| contest8_2021 | male_19540318_P025 | Q2 | 六亲 | B→A |
| contest8_2021 | male_19540318_P025 | Q3 | 流年运势 | B→C |
| contest8_2021 | male_19540318_P025 | Q4 | 健康 | A→C |
| contest8_2021 | male_19831019_P026 | Q1 | 事业 | B→C |
| contest8_2021 | male_19831019_P026 | Q2 | 感情 | B→D |
| contest8_2021 | male_19831019_P026 | Q3 | 六亲 | B→D |
| contest8_2021 | male_19831019_P026 | Q4 | 流年运势 | D→B |
| contest8_2021 | female_19841220_P027 | Q2 | 事业 | C→A |
| contest8_2021 | female_19841220_P027 | Q3 | 感情 | D→C |
| contest8_2021 | female_19841220_P027 | Q4 | 流年运势 | A→D |
| contest8_2021 | female_19841220_P027 | Q5 | 流年运势 | B→A |
| contest8_2021 | male_19770706_P028 | Q2 | 事业 | C→A |
| contest8_2021 | male_19770706_P028 | Q4 | 感情 | C→D |
| contest8_2021 | male_19700723_P029 | Q3 | 性格 | C→A |
| contest8_2021 | female_19750107_P030 | Q2 | 感情 | A→D |
| contest8_2021 | female_19750107_P030 | Q3 | 感情 | C→D |
| contest8_2021 | female_19750107_P030 | Q4 | 事业 | B→A |
| contest8_2021 | male_19530127_P031 | Q2 | 六亲 | C→B |
| contest8_2021 | male_19530127_P031 | Q4 | 流年运势 | D→A |
| contest8_2021 | male_19530127_P031 | Q5 | 六亲 | B→D |
| contest8_2021 | male_19710910_P033 | Q2 | 流年运势 | A→B |
| contest8_2021 | female_19670827_P034 | Q1 | 感情 | B→D |
| contest8_2021 | female_19670827_P034 | Q2 | 事业 | A→C |
| contest8_2022 | male_19740428_P017 | Q1 | 流年运势 | B→A |
| contest8_2022 | male_19740428_P017 | Q2 | 感情 | B→C |
| contest8_2022 | male_19740428_P017 | Q3 | 流年运势 | A→C |
| contest8_2022 | male_19740428_P017 | Q5 | 流年运势 | A→B |
| contest8_2022 | female_19810526_P018 | Q1 | 学业 | C→B |
| contest8_2022 | female_19810526_P018 | Q2 | 感情 | A→B |
| contest8_2022 | female_19810526_P018 | Q3 | 六亲 | B→A |
| contest8_2022 | female_19810526_P018 | Q4 | 性格 | A→D |
| contest8_2022 | female_19900523_P019 | Q1 | 六亲 | B→D |
| contest8_2022 | female_19900523_P019 | Q4 | 流年运势 | D→C |
| contest8_2022 | female_19771026_P020 | Q1 | 事业 | C→A |
| contest8_2022 | female_19771026_P020 | Q3 | 感情 | D→B |
| contest8_2022 | female_19771026_P020 | Q4 | 财富 | C→A |
| contest8_2022 | male_19850629_P021 | Q1 | 性格 | C→A |
| contest8_2022 | male_19850629_P021 | Q2 | 感情 | A→B |
| contest8_2022 | male_19850629_P021 | Q4 | 流年运势 | B→C |
| contest8_2022 | male_19831101_P022 | Q3 | 流年运势 | C→D |
| contest8_2022 | female_19841209_P023 | Q1 | 性格 | A→D |
| contest8_2022 | female_19841209_P023 | Q2 | 财富 | B→C |
| contest8_2022 | male_19810617_P024 | Q3 | 健康 | A→B |
| contest8_2023 | female_19661018_P009 | Q2 | 事业 | B→C |
| contest8_2023 | female_19661018_P009 | Q3 | 六亲 | D→B |
| contest8_2023 | female_19661018_P009 | Q4 | 感情 | D→A |
| contest8_2023 | female_19661018_P009 | Q5 | 流年运势 | B→D |
| contest8_2023 | male_19620806_P010 | Q1 | 六亲 | D→A |
| contest8_2023 | male_19620806_P010 | Q2 | 六亲 | C→B |
| contest8_2023 | male_19620806_P010 | Q3 | 感情 | A→B |
| contest8_2023 | male_19620806_P010 | Q4 | 流年运势 | C→D |
| contest8_2023 | male_19860424_P011 | Q1 | 感情 | B→D |
| contest8_2023 | male_19860424_P011 | Q2 | 六亲 | B→D |
| contest8_2023 | male_19860424_P011 | Q3 | 财富 | A→C |
| contest8_2023 | male_19860424_P011 | Q4 | 感情 | B→C |
| contest8_2023 | male_19860424_P011 | Q5 | 事业 | C→D |
| contest8_2023 | male_19560311_P012 | Q1 | 性格 | D→C |
| contest8_2023 | male_19560311_P012 | Q2 | 学业 | B→A |
| contest8_2023 | male_19560311_P012 | Q3 | 感情 | B→A |
| contest8_2023 | female_19780405_P013 | Q2 | 流年运势 | B→C |
| contest8_2023 | female_19780405_P013 | Q3 | 感情 | D→C |
| contest8_2023 | female_19780405_P013 | Q4 | 六亲 | A→B |
| contest8_2023 | female_19780405_P013 | Q5 | 六亲 | A→B |
| contest8_2023 | female_19581027_P014 | Q1 | 事业 | A→C |
| contest8_2023 | female_19581027_P014 | Q3 | 事业 | A→C |
| contest8_2023 | female_20020601_P015 | Q1 | 财富 | C→B |
| contest8_2023 | female_20020601_P015 | Q3 | 感情 | D→C |
| contest8_2023 | female_20020601_P015 | Q5 | 六亲 | C→A |
| contest8_2023 | male_19800711_P016 | Q1 | 感情 | A→C |
| contest8_2023 | male_19800711_P016 | Q2 | 感情 | B→C |
| contest8_2023 | male_19800711_P016 | Q4 | 性格 | C→B |
| contest8_2024 | guangdong_female_19800824_P001 | Q2 | 学业 | C→B |
| contest8_2024 | guangdong_female_19800824_P001 | Q3 | 感情 | B→D |
| contest8_2024 | guangdong_female_19800824_P001 | Q5 | 感情 | A→C |
| contest8_2024 | chaozhou_male_19720108_P002 | Q1 | 性格 | B→D |
| contest8_2024 | chaozhou_male_19720108_P002 | Q4 | 六亲 | D→C |
| contest8_2024 | male_19611230_P003 | Q3 | 流年运势 | D→B |
| contest8_2024 | male_19611230_P003 | Q4 | 流年运势 | D→A |
| contest8_2024 | male_19611230_P003 | Q5 | 财富 | D→C |
| contest8_2024 | female_19831028_P004 | Q2 | 感情 | B→A |
| contest8_2024 | female_19831028_P004 | Q4 | 感情 | B→D |
| contest8_2024 | male_19710412_P005 | Q1 | 感情 | D→B |
| contest8_2024 | male_19710412_P005 | Q2 | 感情 | B→A |
| contest8_2024 | male_19710412_P005 | Q3 | 财富 | B→C |
| contest8_2024 | male_19710412_P005 | Q4 | 财富 | A→B |
| contest8_2024 | male_19710412_P005 | Q5 | 健康 | C→B |
| contest8_2024 | female_19830326_P006 | Q1 | 感情 | C→B |
| contest8_2024 | female_19830326_P006 | Q2 | 感情 | C→A |
| contest8_2024 | female_19830326_P006 | Q3 | 感情 | C→B |
| contest8_2024 | female_19830326_P006 | Q4 | 流年运势 | A→D |
| contest8_2024 | female_19800921_P007 | Q1 | 学业 | B→C |
| contest8_2024 | female_19800921_P007 | Q2 | 感情 | C→D |
| contest8_2024 | male_20070131_P008 | Q4 | 流年运势 | A→D |
| contest8_2024 | male_20070131_P008 | Q5 | 六亲 | A→C |
| contest8_2025 | guangdong_female_19511114_P001 | Q4 | 流年运势 | B→A |
| contest8_2025 | hongkong_female_19870705_P002 | Q1 | 健康 | A→D |
| contest8_2025 | hongkong_female_19870705_P002 | Q5 | 六亲 | A→B |
| contest8_2025 | miyazaki_male_19830421_P003 | Q1 | 六亲 | C→B |
| contest8_2025 | miyazaki_male_19830421_P003 | Q2 | 性格 | C→B |
| contest8_2025 | miyazaki_male_19830421_P003 | Q3 | 学业 | B→D |
| contest8_2025 | miyazaki_male_19830421_P003 | Q4 | 感情 | B→C |
| contest8_2025 | miyazaki_male_19830421_P003 | Q5 | 流年运势 | C→A |
| contest8_2025 | singapore_male_19930408_P004 | Q1 | 六亲 | D→C |
| contest8_2025 | singapore_male_19930408_P004 | Q3 | 事业 | C→B |
| contest8_2025 | singapore_male_19930408_P004 | Q5 | 健康 | C→B |
| contest8_2025 | malaysia_male_19880110_P005 | Q1 | 事业 | B→D |
| contest8_2025 | malaysia_male_19880110_P005 | Q3 | 感情 | A→D |
| contest8_2025 | malaysia_male_19880110_P005 | Q4 | 六亲 | C→A |
| contest8_2025 | malaysia_male_19730824_P006 | Q2 | 性格 | C→B |
| contest8_2025 | malaysia_male_19730824_P006 | Q3 | 事业 | D→B |
| contest8_2025 | malaysia_male_19730824_P006 | Q4 | 流年运势 | A→D |
| contest8_2025 | malaysia_male_19730824_P006 | Q5 | 健康 | B→C |
| contest8_2025 | taiwan_female_19880215_P007 | Q1 | 六亲 | C→A |
| contest8_2025 | taiwan_female_19880215_P007 | Q3 | 感情 | A→B |
| contest8_2025 | taiwan_female_19880215_P007 | Q4 | 事业 | A→D |
| contest8_2025 | taiwan_female_19880215_P007 | Q5 | 性格 | D→B |
| contest8_2025 | beijing_male_19700722_P008 | Q3 | 流年运势 | A→D |
| contest8_2025 | beijing_male_19700722_P008 | Q4 | 健康 | A→C |
> 共错 118 题(对 82/200)。本组为裸模型对照:模型自行手排四柱并作答,无技能排盘与规则库支持;判分口径与 with-skill 组完全一致。
File diff suppressed because one or more lines are too long
@@ -0,0 +1,128 @@
{
"model": "qoder-agent",
"skill_mode": "with-skill",
"skill_version": "3.6.2-未发版(规则库 3.7)",
"eval_date": "2026-10-13",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {
"total": 200,
"correct": 79,
"accuracy": 39.5,
"no_answer": 0
},
"baseline": {
"name": "官方基线(Gemini)",
"overall": {
"total": 200,
"correct": 69,
"accuracy": 34.5
},
"per_contest": {
"contest8_2021": 27.5,
"contest8_2022": 40.0,
"contest8_2023": 27.5,
"contest8_2024": 35.0,
"contest8_2025": 42.5
},
"per_dimension": {
"流年运势": 40.5,
"感情": 36.7,
"六亲": 27.6,
"事业": 24.0,
"性格": 45.0,
"学业": 41.7,
"财富": 30.8,
"健康": 23.1,
"其他": 50.0
}
},
"per_contest": {
"contest8_2021": {
"total": 40,
"correct": 16,
"no_answer": 0,
"accuracy": 40.0
},
"contest8_2022": {
"total": 40,
"correct": 15,
"no_answer": 0,
"accuracy": 37.5
},
"contest8_2023": {
"total": 40,
"correct": 15,
"no_answer": 0,
"accuracy": 37.5
},
"contest8_2024": {
"total": 40,
"correct": 19,
"no_answer": 0,
"accuracy": 47.5
},
"contest8_2025": {
"total": 40,
"correct": 14,
"no_answer": 0,
"accuracy": 35.0
}
},
"per_dimension": {
"流年运势": {
"total": 37,
"correct": 15,
"no_answer": 0,
"accuracy": 40.5
},
"感情": {
"total": 49,
"correct": 16,
"no_answer": 0,
"accuracy": 32.7
},
"六亲": {
"total": 29,
"correct": 15,
"no_answer": 0,
"accuracy": 51.7
},
"事业": {
"total": 25,
"correct": 10,
"no_answer": 0,
"accuracy": 40.0
},
"性格": {
"total": 20,
"correct": 8,
"no_answer": 0,
"accuracy": 40.0
},
"学业": {
"total": 12,
"correct": 5,
"no_answer": 0,
"accuracy": 41.7
},
"财富": {
"total": 13,
"correct": 5,
"no_answer": 0,
"accuracy": 38.5
},
"健康": {
"total": 13,
"correct": 4,
"no_answer": 0,
"accuracy": 30.8
},
"其他": {
"total": 2,
"correct": 1,
"no_answer": 0,
"accuracy": 50.0
}
},
"notes": "判分:评测/工具/run_eval.py;求解留档:评测/ai答案/qoder-agent/with-skill/(41 位命主,每位新开无上下文子代理,真太阳时主盘 + 双盘纪律);技能副本 /tmp/skill_bench(rsync 自母版,排除 评测/ 与 .git,故物理隔绝答案键)+ extend_cities.py 地点扩展;全程 ZIPEC_EVAL=1,副本 data/ 仅 cities.json、无 .license.json,零额度消耗;官方基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md"
}
@@ -0,0 +1,190 @@
# BaziQA 评测得分 — qoder-agent(with-skill)
- 模型:**qoder-agent**(Qoder 桌面端主代理 + 每位命主一个无上下文子代理)
- 模式:**with-skill**(加载子平八字技能排盘 + 规则库推理)
- 技能版本:3.6.2-未发版(规则库 3.7)
- 评测日期:2026-10-12 起跑,2026-10-13 判分收录
- 赛事:BaziQA-全球算命师大赛(2021–2025 五届 × 40 题,共 200 题)
- 判分:`评测/工具/run_eval.py`(脚本判分,非模型裁判)
- 求解留档:`评测/ai答案/qoder-agent/with-skill/`(41 位命主,含完整推理过程)
- 求解方式:技能副本 `/tmp/skill_bench`(rsync 自母版,**排除 `评测/` 与 `.git/`**,
物理隔绝答案键)+ `extend_cities.py` 地点扩展(追加 23 条,41 位命主 place 全解析);
每命主**新开无上下文子代理**独立排盘 + 独立推理,跨命主不共享上下文;
真太阳时主盘 + 双盘纪律(境外/模糊地名与时辰边界 ±15 分钟内加排 120°E 对照盘)
- 额度:全程 `ZIPEC_EVAL=1` 豁免,副本 `data/` 仅 `cities.json`、无 `.license.json`,
**零授权额度消耗**
- 错因分类:暂未归并(错题清单错因列留空,待后续人工/脚本补录)
## 同模型对照
| 组别 | 正确/总题数 | 准确率 |
|---|---|---|
| **with-skill(本组)** | 79/200 | 39.5% |
| without-skill(裸答对照) | 78/200 | 39.0% |
| 官方基线(Gemini) | 69/200 | 34.5% |
如实呈现:加载技能比同模型裸答只高 **1 题(+0.5pp)**,配对 z = 0.10。
题级配对检验——两组都对 53 题、只 with-skill 对 26 题、只裸答对 25 题、都错 96 题;
McNemar 不一致对 51 组、26:25 几乎对半,校正 χ² = 0.00,p ≈ 1.0。
**技能未带来可检出的增益**。相对官方基线 +5.0pp,配对 z = 1.04(p ≈ 0.30),
单组标准误 ±3.46pp,同样不显著。200 题规模下这套基准尚不足以区分
「加载技能」与「裸答」两种口径。
## 总览
| 口径 | 正确/总题数 | 准确率 | 未答 |
|---|---|---|---|
| 本次评测 | 79/200 | 39.5% | 0 |
| 官方基线(Gemini) | 69/200 | 34.5% | 0 |
> 基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md。
## 分届准确率
| 届别 | 本次 | 官方 |
|---|---|---|
| contest8_2021 | 16/40 = 40.0%(未答 0) | 27.5% |
| contest8_2022 | 15/40 = 37.5%(未答 0) | 40.0% |
| contest8_2023 | 15/40 = 37.5%(未答 0) | 27.5% |
| contest8_2024 | 19/40 = 47.5%(未答 0) | 35.0% |
| contest8_2025 | 14/40 = 35.0%(未答 0) | 42.5% |
## 分维度准确率
| 维度 | 本次 | 官方 |
|---|---|---|
| 流年运势 | 15/37 = 40.5%(未答 0) | 40.5% |
| 感情 | 16/49 = 32.7%(未答 0) | 36.7% |
| 六亲 | 15/29 = 51.7%(未答 0) | 27.6% |
| 事业 | 10/25 = 40.0%(未答 0) | 24.0% |
| 性格 | 8/20 = 40.0%(未答 0) | 45.0% |
| 学业 | 5/12 = 41.7%(未答 0) | 41.7% |
| 财富 | 5/13 = 38.5%(未答 0) | 30.8% |
| 健康 | 4/13 = 30.8%(未答 0) | 23.1% |
| 其他 | 1/2 = 50.0%(未答 0) | 50.0% |
## 错题清单(错因留空,待人工/后续填写)
| 届别 | 命主 | 题序 | 维度 | 我答 | 正解 | 错因 |
|---|---|---|---|---|---|---|
| contest8_2021 | male_19540318_P025 | Q2 | 六亲 | B | A | |
| contest8_2021 | male_19540318_P025 | Q3 | 流年运势 | D | C | |
| contest8_2021 | male_19540318_P025 | Q5 | 六亲 | C | B | |
| contest8_2021 | male_19831019_P026 | Q1 | 事业 | B | C | |
| contest8_2021 | male_19831019_P026 | Q2 | 感情 | A | D | |
| contest8_2021 | male_19831019_P026 | Q3 | 六亲 | A | D | |
| contest8_2021 | male_19831019_P026 | Q4 | 流年运势 | D | B | |
| contest8_2021 | female_19841220_P027 | Q1 | 学业 | B | C | |
| contest8_2021 | female_19841220_P027 | Q2 | 事业 | C | A | |
| contest8_2021 | female_19841220_P027 | Q3 | 感情 | D | C | |
| contest8_2021 | female_19841220_P027 | Q4 | 流年运势 | C | D | |
| contest8_2021 | male_19770706_P028 | Q2 | 事业 | C | A | |
| contest8_2021 | male_19770706_P028 | Q4 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q1 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q3 | 性格 | C | A | |
| contest8_2021 | male_19700723_P029 | Q5 | 健康 | B | C | |
| contest8_2021 | female_19750107_P030 | Q2 | 感情 | A | D | |
| contest8_2021 | female_19750107_P030 | Q3 | 感情 | B | D | |
| contest8_2021 | male_19530127_P031 | Q1 | 事业 | A | C | |
| contest8_2021 | male_19530127_P031 | Q4 | 流年运势 | D | A | |
| contest8_2021 | male_19530127_P031 | Q5 | 六亲 | B | D | |
| contest8_2021 | male_19710910_P033 | Q3 | 流年运势 | A | D | |
| contest8_2021 | female_19670827_P034 | Q1 | 感情 | B | D | |
| contest8_2021 | female_19670827_P034 | Q2 | 事业 | A | C | |
| contest8_2022 | male_19740428_P017 | Q1 | 流年运势 | B | A | |
| contest8_2022 | male_19740428_P017 | Q2 | 感情 | B | C | |
| contest8_2022 | male_19740428_P017 | Q3 | 流年运势 | A | C | |
| contest8_2022 | female_19810526_P018 | Q1 | 学业 | C | B | |
| contest8_2022 | female_19810526_P018 | Q2 | 感情 | A | B | |
| contest8_2022 | female_19810526_P018 | Q4 | 性格 | A | D | |
| contest8_2022 | female_19900523_P019 | Q1 | 六亲 | B | D | |
| contest8_2022 | female_19900523_P019 | Q4 | 流年运势 | B | C | |
| contest8_2022 | female_19771026_P020 | Q1 | 事业 | C | A | |
| contest8_2022 | female_19771026_P020 | Q3 | 感情 | D | B | |
| contest8_2022 | female_19771026_P020 | Q4 | 财富 | C | A | |
| contest8_2022 | male_19850629_P021 | Q1 | 性格 | B | A | |
| contest8_2022 | male_19850629_P021 | Q4 | 流年运势 | B | C | |
| contest8_2022 | male_19850629_P021 | Q5 | 学业 | A | B | |
| contest8_2022 | male_19831101_P022 | Q2 | 学业 | A | D | |
| contest8_2022 | male_19831101_P022 | Q3 | 流年运势 | C | D | |
| contest8_2022 | male_19831101_P022 | Q5 | 财富 | D | B | |
| contest8_2022 | female_19841209_P023 | Q1 | 性格 | A | D | |
| contest8_2022 | female_19841209_P023 | Q2 | 财富 | A | C | |
| contest8_2022 | female_19841209_P023 | Q3 | 流年运势 | B | A | |
| contest8_2022 | female_19841209_P023 | Q4 | 感情 | A | C | |
| contest8_2022 | female_19841209_P023 | Q5 | 感情 | C | B | |
| contest8_2022 | male_19810617_P024 | Q2 | 感情 | D | C | |
| contest8_2022 | male_19810617_P024 | Q3 | 健康 | A | B | |
| contest8_2022 | male_19810617_P024 | Q5 | 财富 | C | B | |
| contest8_2023 | female_19661018_P009 | Q1 | 性格 | D | B | |
| contest8_2023 | female_19661018_P009 | Q2 | 事业 | D | C | |
| contest8_2023 | female_19661018_P009 | Q3 | 六亲 | D | B | |
| contest8_2023 | female_19661018_P009 | Q4 | 感情 | C | A | |
| contest8_2023 | male_19620806_P010 | Q4 | 流年运势 | C | D | |
| contest8_2023 | male_19620806_P010 | Q5 | 其他 | B | D | |
| contest8_2023 | male_19860424_P011 | Q2 | 六亲 | A | D | |
| contest8_2023 | male_19860424_P011 | Q4 | 感情 | D | C | |
| contest8_2023 | male_19560311_P012 | Q2 | 学业 | C | A | |
| contest8_2023 | male_19560311_P012 | Q3 | 感情 | C | A | |
| contest8_2023 | male_19560311_P012 | Q4 | 流年运势 | D | C | |
| contest8_2023 | female_19780405_P013 | Q2 | 流年运势 | A | C | |
| contest8_2023 | female_19780405_P013 | Q3 | 感情 | D | C | |
| contest8_2023 | female_19780405_P013 | Q4 | 六亲 | A | B | |
| contest8_2023 | female_19780405_P013 | Q5 | 六亲 | D | B | |
| contest8_2023 | female_19581027_P014 | Q1 | 事业 | D | C | |
| contest8_2023 | female_19581027_P014 | Q3 | 事业 | A | C | |
| contest8_2023 | female_19581027_P014 | Q5 | 健康 | B | D | |
| contest8_2023 | female_20020601_P015 | Q1 | 财富 | C | B | |
| contest8_2023 | female_20020601_P015 | Q3 | 感情 | D | C | |
| contest8_2023 | female_20020601_P015 | Q5 | 六亲 | C | A | |
| contest8_2023 | male_19800711_P016 | Q1 | 感情 | A | C | |
| contest8_2023 | male_19800711_P016 | Q2 | 感情 | B | C | |
| contest8_2023 | male_19800711_P016 | Q3 | 事业 | A | B | |
| contest8_2023 | male_19800711_P016 | Q4 | 性格 | A | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q2 | 学业 | C | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q3 | 感情 | B | D | |
| contest8_2024 | guangdong_female_19800824_P001 | Q5 | 感情 | B | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q2 | 感情 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q4 | 六亲 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q5 | 财富 | C | A | |
| contest8_2024 | male_19611230_P003 | Q3 | 流年运势 | A | B | |
| contest8_2024 | male_19611230_P003 | Q4 | 流年运势 | D | A | |
| contest8_2024 | male_19611230_P003 | Q5 | 财富 | D | C | |
| contest8_2024 | female_19831028_P004 | Q2 | 感情 | B | A | |
| contest8_2024 | female_19831028_P004 | Q4 | 感情 | B | D | |
| contest8_2024 | female_19831028_P004 | Q5 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q3 | 财富 | B | C | |
| contest8_2024 | male_19710412_P005 | Q5 | 健康 | C | B | |
| contest8_2024 | female_19830326_P006 | Q1 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q2 | 感情 | C | A | |
| contest8_2024 | female_19830326_P006 | Q4 | 流年运势 | A | D | |
| contest8_2024 | male_20070131_P008 | Q1 | 健康 | D | B | |
| contest8_2024 | male_20070131_P008 | Q3 | 性格 | D | A | |
| contest8_2024 | male_20070131_P008 | Q4 | 流年运势 | C | D | |
| contest8_2025 | guangdong_female_19511114_P001 | Q2 | 感情 | B | D | |
| contest8_2025 | guangdong_female_19511114_P001 | Q4 | 流年运势 | C | A | |
| contest8_2025 | hongkong_female_19870705_P002 | Q1 | 健康 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q2 | 性格 | D | B | |
| contest8_2025 | hongkong_female_19870705_P002 | Q3 | 事业 | A | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q1 | 六亲 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q2 | 性格 | D | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q3 | 学业 | C | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q4 | 感情 | B | C | |
| contest8_2025 | singapore_male_19930408_P004 | Q2 | 流年运势 | B | D | |
| contest8_2025 | singapore_male_19930408_P004 | Q3 | 事业 | C | B | |
| contest8_2025 | singapore_male_19930408_P004 | Q5 | 健康 | C | B | |
| contest8_2025 | malaysia_male_19880110_P005 | Q1 | 事业 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q3 | 感情 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q4 | 六亲 | C | A | |
| contest8_2025 | malaysia_male_19730824_P006 | Q1 | 性格 | C | A | |
| contest8_2025 | malaysia_male_19730824_P006 | Q2 | 性格 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q3 | 事业 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q4 | 流年运势 | A | D | |
| contest8_2025 | malaysia_male_19730824_P006 | Q5 | 健康 | D | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q1 | 六亲 | B | A | |
| contest8_2025 | taiwan_female_19880215_P007 | Q3 | 感情 | C | B | |
| contest8_2025 | taiwan_female_19880215_P007 | Q4 | 事业 | A | D | |
| contest8_2025 | taiwan_female_19880215_P007 | Q5 | 性格 | A | B | |
| contest8_2025 | beijing_male_19700722_P008 | Q3 | 流年运势 | A | D | |
| contest8_2025 | beijing_male_19700722_P008 | Q4 | 健康 | A | C | |
File diff suppressed because one or more lines are too long
@@ -0,0 +1,128 @@
{
"model": "qoder-agent",
"skill_mode": "without-skill",
"skill_version": "无(裸模型对照)",
"eval_date": "2026-10-13",
"benchmark": "BaziQA-全球算命师大赛",
"overall": {
"total": 200,
"correct": 78,
"accuracy": 39.0,
"no_answer": 0
},
"baseline": {
"name": "官方基线(Gemini)",
"overall": {
"total": 200,
"correct": 69,
"accuracy": 34.5
},
"per_contest": {
"contest8_2021": 27.5,
"contest8_2022": 40.0,
"contest8_2023": 27.5,
"contest8_2024": 35.0,
"contest8_2025": 42.5
},
"per_dimension": {
"流年运势": 40.5,
"感情": 36.7,
"六亲": 27.6,
"事业": 24.0,
"性格": 45.0,
"学业": 41.7,
"财富": 30.8,
"健康": 23.1,
"其他": 50.0
}
},
"per_contest": {
"contest8_2021": {
"total": 40,
"correct": 18,
"no_answer": 0,
"accuracy": 45.0
},
"contest8_2022": {
"total": 40,
"correct": 17,
"no_answer": 0,
"accuracy": 42.5
},
"contest8_2023": {
"total": 40,
"correct": 13,
"no_answer": 0,
"accuracy": 32.5
},
"contest8_2024": {
"total": 40,
"correct": 14,
"no_answer": 0,
"accuracy": 35.0
},
"contest8_2025": {
"total": 40,
"correct": 16,
"no_answer": 0,
"accuracy": 40.0
}
},
"per_dimension": {
"流年运势": {
"total": 37,
"correct": 14,
"no_answer": 0,
"accuracy": 37.8
},
"感情": {
"total": 49,
"correct": 16,
"no_answer": 0,
"accuracy": 32.7
},
"六亲": {
"total": 29,
"correct": 15,
"no_answer": 0,
"accuracy": 51.7
},
"事业": {
"total": 25,
"correct": 8,
"no_answer": 0,
"accuracy": 32.0
},
"性格": {
"total": 20,
"correct": 6,
"no_answer": 0,
"accuracy": 30.0
},
"学业": {
"total": 12,
"correct": 7,
"no_answer": 0,
"accuracy": 58.3
},
"财富": {
"total": 13,
"correct": 7,
"no_answer": 0,
"accuracy": 53.8
},
"健康": {
"total": 13,
"correct": 4,
"no_answer": 0,
"accuracy": 30.8
},
"其他": {
"total": 2,
"correct": 1,
"no_answer": 0,
"accuracy": 50.0
}
},
"notes": "对照组:同模型不加载技能——无排盘脚本、无规则库、无 SKILL.md,仅给盲版题面的出生信息,模型手排四柱(自行决定时区/真太阳时口径并留档)作答;求解留档:评测/ai答案/qoder-agent/without-skill/(41 位命主);判分:评测/工具/run_eval.py(与实验组同题集、同答案键、同脚本)"
}
@@ -0,0 +1,185 @@
# BaziQA 评测得分 — qoder-agent(without-skill 裸答对照组)
- 模型:**qoder-agent**(同一模型,每位命主一个无上下文子代理)
- 模式:**without-skill**(裸答对照——不给排盘工具、不给规则库、不给 SKILL.md)
- 技能版本:无(裸模型对照)
- 评测日期:2026-10-13
- 赛事:BaziQA-全球算命师大赛(2021–2025 五届 × 40 题,共 200 题)
- 判分:`评测/工具/run_eval.py`(与实验组同题集、同答案键、同脚本)
- 求解留档:`评测/ai答案/qoder-agent/without-skill/`(41 位命主,含手排四柱过程)
- 对照口径(测试规则.md §6):子代理只读盲版题面 `questions/`,禁读禁跑
`/tmp/skill_bench/` 与母版 `SKILL.md`/`rules/`/`scripts/`/`vendor/`、禁调 Skill 工具、
禁联网查万年历、禁跑任何历法/干支换算脚本(含自己写的);四柱全部手排
(立春换年 / 节气换月 / 子初换日),时区与真太阳时口径由子代理自行决定并在留档写明
- 错因分类:暂未归并(错题清单错因列留空,待后续人工/脚本补录)
## 同模型对照
| 组别 | 正确/总题数 | 准确率 |
|---|---|---|
| with-skill(加载技能) | 79/200 | 39.5% |
| **without-skill(本组)** | 78/200 | 39.0% |
| 官方基线(Gemini) | 69/200 | 34.5% |
如实呈现:裸答组比加载技能组只低 **1 题(−0.5pp)**,McNemar 不一致对 51(26:25),
校正 χ² = 0.00。两组在 200 题上几乎完全同分,**本基准未能检出技能带来的增益**。
## 总览
| 口径 | 正确/总题数 | 准确率 | 未答 |
|---|---|---|---|
| 本次评测 | 78/200 | 39.0% | 0 |
| 官方基线(Gemini) | 69/200 | 34.5% | 0 |
> 基线口径见 试题/BaziQA-全球算命师大赛/SOURCE.md。
## 分届准确率
| 届别 | 本次 | 官方 |
|---|---|---|
| contest8_2021 | 18/40 = 45.0%(未答 0) | 27.5% |
| contest8_2022 | 17/40 = 42.5%(未答 0) | 40.0% |
| contest8_2023 | 13/40 = 32.5%(未答 0) | 27.5% |
| contest8_2024 | 14/40 = 35.0%(未答 0) | 35.0% |
| contest8_2025 | 16/40 = 40.0%(未答 0) | 42.5% |
## 分维度准确率
| 维度 | 本次 | 官方 |
|---|---|---|
| 流年运势 | 14/37 = 37.8%(未答 0) | 40.5% |
| 感情 | 16/49 = 32.7%(未答 0) | 36.7% |
| 六亲 | 15/29 = 51.7%(未答 0) | 27.6% |
| 事业 | 8/25 = 32.0%(未答 0) | 24.0% |
| 性格 | 6/20 = 30.0%(未答 0) | 45.0% |
| 学业 | 7/12 = 58.3%(未答 0) | 41.7% |
| 财富 | 7/13 = 53.8%(未答 0) | 30.8% |
| 健康 | 4/13 = 30.8%(未答 0) | 23.1% |
| 其他 | 1/2 = 50.0%(未答 0) | 50.0% |
## 错题清单(错因留空,待人工/后续填写)
| 届别 | 命主 | 题序 | 维度 | 我答 | 正解 | 错因 |
|---|---|---|---|---|---|---|
| contest8_2021 | male_19540318_P025 | Q3 | 流年运势 | B | C | |
| contest8_2021 | male_19540318_P025 | Q4 | 健康 | A | C | |
| contest8_2021 | male_19831019_P026 | Q1 | 事业 | B | C | |
| contest8_2021 | male_19831019_P026 | Q2 | 感情 | A | D | |
| contest8_2021 | male_19831019_P026 | Q3 | 六亲 | A | D | |
| contest8_2021 | male_19831019_P026 | Q4 | 流年运势 | C | B | |
| contest8_2021 | male_19831019_P026 | Q5 | 性格 | D | A | |
| contest8_2021 | female_19841220_P027 | Q2 | 事业 | C | A | |
| contest8_2021 | female_19841220_P027 | Q4 | 流年运势 | B | D | |
| contest8_2021 | male_19770706_P028 | Q2 | 事业 | C | A | |
| contest8_2021 | male_19770706_P028 | Q4 | 感情 | C | D | |
| contest8_2021 | male_19700723_P029 | Q3 | 性格 | B | A | |
| contest8_2021 | female_19750107_P030 | Q2 | 感情 | B | D | |
| contest8_2021 | female_19750107_P030 | Q3 | 感情 | B | D | |
| contest8_2021 | female_19750107_P030 | Q4 | 事业 | D | A | |
| contest8_2021 | male_19530127_P031 | Q1 | 事业 | A | C | |
| contest8_2021 | male_19530127_P031 | Q2 | 六亲 | C | B | |
| contest8_2021 | male_19530127_P031 | Q3 | 流年运势 | B | A | |
| contest8_2021 | male_19530127_P031 | Q4 | 流年运势 | D | A | |
| contest8_2021 | male_19530127_P031 | Q5 | 六亲 | B | D | |
| contest8_2021 | female_19670827_P034 | Q1 | 感情 | B | D | |
| contest8_2021 | female_19670827_P034 | Q2 | 事业 | A | C | |
| contest8_2022 | male_19740428_P017 | Q1 | 流年运势 | B | A | |
| contest8_2022 | male_19740428_P017 | Q2 | 感情 | B | C | |
| contest8_2022 | male_19740428_P017 | Q3 | 流年运势 | A | C | |
| contest8_2022 | female_19810526_P018 | Q1 | 学业 | C | B | |
| contest8_2022 | female_19810526_P018 | Q2 | 感情 | A | B | |
| contest8_2022 | female_19810526_P018 | Q4 | 性格 | A | D | |
| contest8_2022 | female_19900523_P019 | Q4 | 流年运势 | D | C | |
| contest8_2022 | female_19900523_P019 | Q5 | 性格 | C | B | |
| contest8_2022 | female_19771026_P020 | Q1 | 事业 | C | A | |
| contest8_2022 | female_19771026_P020 | Q3 | 感情 | D | B | |
| contest8_2022 | female_19771026_P020 | Q5 | 健康 | B | D | |
| contest8_2022 | male_19850629_P021 | Q1 | 性格 | C | A | |
| contest8_2022 | male_19850629_P021 | Q4 | 流年运势 | B | C | |
| contest8_2022 | male_19831101_P022 | Q2 | 学业 | C | D | |
| contest8_2022 | male_19831101_P022 | Q3 | 流年运势 | C | D | |
| contest8_2022 | male_19831101_P022 | Q5 | 财富 | D | B | |
| contest8_2022 | female_19841209_P023 | Q1 | 性格 | C | D | |
| contest8_2022 | female_19841209_P023 | Q3 | 流年运势 | B | A | |
| contest8_2022 | female_19841209_P023 | Q4 | 感情 | B | C | |
| contest8_2022 | female_19841209_P023 | Q5 | 感情 | C | B | |
| contest8_2022 | male_19810617_P024 | Q2 | 感情 | D | C | |
| contest8_2022 | male_19810617_P024 | Q3 | 健康 | D | B | |
| contest8_2022 | male_19810617_P024 | Q4 | 事业 | D | A | |
| contest8_2023 | female_19661018_P009 | Q1 | 性格 | D | B | |
| contest8_2023 | female_19661018_P009 | Q2 | 事业 | D | C | |
| contest8_2023 | female_19661018_P009 | Q3 | 六亲 | C | B | |
| contest8_2023 | female_19661018_P009 | Q4 | 感情 | D | A | |
| contest8_2023 | male_19620806_P010 | Q4 | 流年运势 | C | D | |
| contest8_2023 | male_19620806_P010 | Q5 | 其他 | B | D | |
| contest8_2023 | male_19860424_P011 | Q1 | 感情 | A | D | |
| contest8_2023 | male_19860424_P011 | Q2 | 六亲 | A | D | |
| contest8_2023 | male_19860424_P011 | Q4 | 感情 | B | C | |
| contest8_2023 | male_19860424_P011 | Q5 | 事业 | C | D | |
| contest8_2023 | male_19560311_P012 | Q1 | 性格 | D | C | |
| contest8_2023 | male_19560311_P012 | Q2 | 学业 | B | A | |
| contest8_2023 | male_19560311_P012 | Q3 | 感情 | B | A | |
| contest8_2023 | male_19560311_P012 | Q4 | 流年运势 | A | C | |
| contest8_2023 | male_19560311_P012 | Q5 | 健康 | B | C | |
| contest8_2023 | female_19780405_P013 | Q2 | 流年运势 | A | C | |
| contest8_2023 | female_19780405_P013 | Q4 | 六亲 | C | B | |
| contest8_2023 | female_19780405_P013 | Q5 | 六亲 | D | B | |
| contest8_2023 | female_19581027_P014 | Q1 | 事业 | D | C | |
| contest8_2023 | female_19581027_P014 | Q3 | 事业 | D | C | |
| contest8_2023 | female_19581027_P014 | Q5 | 健康 | B | D | |
| contest8_2023 | female_20020601_P015 | Q1 | 财富 | C | B | |
| contest8_2023 | female_20020601_P015 | Q3 | 感情 | D | C | |
| contest8_2023 | male_19800711_P016 | Q1 | 感情 | A | C | |
| contest8_2023 | male_19800711_P016 | Q2 | 感情 | B | C | |
| contest8_2023 | male_19800711_P016 | Q3 | 事业 | C | B | |
| contest8_2023 | male_19800711_P016 | Q4 | 性格 | A | B | |
| contest8_2024 | guangdong_female_19800824_P001 | Q3 | 感情 | A | D | |
| contest8_2024 | guangdong_female_19800824_P001 | Q4 | 六亲 | D | C | |
| contest8_2024 | guangdong_female_19800824_P001 | Q5 | 感情 | B | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q1 | 性格 | B | D | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q2 | 感情 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q4 | 六亲 | D | C | |
| contest8_2024 | chaozhou_male_19720108_P002 | Q5 | 财富 | C | A | |
| contest8_2024 | male_19611230_P003 | Q1 | 流年运势 | C | B | |
| contest8_2024 | male_19611230_P003 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19611230_P003 | Q4 | 流年运势 | D | A | |
| contest8_2024 | male_19611230_P003 | Q5 | 财富 | D | C | |
| contest8_2024 | female_19831028_P004 | Q2 | 感情 | B | A | |
| contest8_2024 | female_19831028_P004 | Q4 | 感情 | C | D | |
| contest8_2024 | female_19831028_P004 | Q5 | 感情 | C | A | |
| contest8_2024 | male_19710412_P005 | Q1 | 感情 | C | B | |
| contest8_2024 | male_19710412_P005 | Q2 | 感情 | B | A | |
| contest8_2024 | male_19710412_P005 | Q3 | 财富 | B | C | |
| contest8_2024 | male_19710412_P005 | Q4 | 财富 | A | B | |
| contest8_2024 | female_19830326_P006 | Q1 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q3 | 感情 | C | B | |
| contest8_2024 | female_19830326_P006 | Q4 | 流年运势 | A | D | |
| contest8_2024 | female_19800921_P007 | Q2 | 感情 | B | D | |
| contest8_2024 | female_19800921_P007 | Q3 | 流年运势 | A | D | |
| contest8_2024 | female_19800921_P007 | Q4 | 六亲 | C | D | |
| contest8_2024 | male_20070131_P008 | Q1 | 健康 | A | B | |
| contest8_2024 | male_20070131_P008 | Q4 | 流年运势 | C | D | |
| contest8_2025 | guangdong_female_19511114_P001 | Q3 | 事业 | D | B | |
| contest8_2025 | guangdong_female_19511114_P001 | Q4 | 流年运势 | B | A | |
| contest8_2025 | hongkong_female_19870705_P002 | Q1 | 健康 | A | D | |
| contest8_2025 | hongkong_female_19870705_P002 | Q2 | 性格 | D | B | |
| contest8_2025 | hongkong_female_19870705_P002 | Q5 | 六亲 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q1 | 六亲 | C | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q2 | 性格 | A | B | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q3 | 学业 | B | D | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q4 | 感情 | B | C | |
| contest8_2025 | miyazaki_male_19830421_P003 | Q5 | 流年运势 | C | A | |
| contest8_2025 | singapore_male_19930408_P004 | Q3 | 事业 | C | B | |
| contest8_2025 | singapore_male_19930408_P004 | Q5 | 健康 | C | B | |
| contest8_2025 | malaysia_male_19880110_P005 | Q3 | 感情 | A | D | |
| contest8_2025 | malaysia_male_19880110_P005 | Q4 | 六亲 | C | A | |
| contest8_2025 | malaysia_male_19730824_P006 | Q2 | 性格 | C | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q3 | 事业 | D | B | |
| contest8_2025 | malaysia_male_19730824_P006 | Q4 | 流年运势 | A | D | |
| contest8_2025 | malaysia_male_19730824_P006 | Q5 | 健康 | D | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q1 | 六亲 | D | A | |
| contest8_2025 | taiwan_female_19880215_P007 | Q2 | 学业 | A | C | |
| contest8_2025 | taiwan_female_19880215_P007 | Q3 | 感情 | D | B | |
| contest8_2025 | taiwan_female_19880215_P007 | Q4 | 事业 | A | D | |
| contest8_2025 | taiwan_female_19880215_P007 | Q5 | 性格 | D | B | |
| contest8_2025 | beijing_male_19700722_P008 | Q3 | 流年运势 | A | D | |
@@ -0,0 +1,93 @@
# contest8_2021 · female_19670827_P034 盲测求解
## 一、命主信息
- person_id:female_19670827_P034
- 姓名:1967年出生女性
- 性别:女
- 出生钟表时间:1967-08-27 16:51(题目原文「1967-08-27 下午16:51 香港出生」)
- 出生地:中国香港
- 真太阳时主盘:1967-08-27 15:25(申时)
- 对照盘口径:120°E 不经度修正,`--place "中国大陆"`(杭州代理 120.16E/Asia/Shanghai,钟表时=真太阳时)→ 真太阳时 16:49(申时)
- 是否排对照盘:**是**。触发原因:place 为「中国香港」属境外/模糊地名(任务书双盘纪律第 2 条)。
- **两盘对照结论:四柱完全相同**(主盘 15:25 与对照盘 16:49 同落申时 15:00–17:00;香港 1967-08 行夏令时,钟表 16:51 扣 DST+经度后为 15:25,大陆口径为 16:49,均入申)。故本命**无口径分歧**,两盘答案一致,末尾答案行不加 `口径分歧` 注记。
## 二、命盘要点(真太阳时主盘 = 对照盘,四柱一致)
```
年 丁未(偏财) · 墓
月 戊申(正官) · 死
日 癸亥(日主) · 帝旺
时 庚申(正印) · 死
```
- 藏干:未(己七杀、丁偏财、乙食神)/申(庚正印、壬劫财、戊正官)×2/亥(壬劫财、甲伤官)
- 空亡:子丑(日、时柱)
- 节令:立秋后、白露前,月令申
- 神煞(仅细节参看层,不入格局):日柱 阴差阳错、十恶大败;月/时支 红艳×2、孤辰×2、劫煞、太极贵人、天德合一类;年支 华盖
- 大运:顺行,4 岁起——己酉(1971)→庚戌(1981)→辛亥(1991)→壬子(2001)→癸丑(2011)→甲寅(2021)…
## 三、取格与成败(依 00_总纲 六步 + 13_印绶格)
1. **定月令**:月支申,本气庚金;对日干癸水为**正印**(藏干另有壬劫、戊官)。
2. **取格**:日干配月令本气 = 印 → **印绶格**(R-印-01,正偏同格)。
3. **透干辨主从**:本气庚(正印)透时干,为格之主;余气戊(正官)透月干;年干透丁(偏财)。本气当令且透,**本格不失**,兼论官、财。
4. **定格结论**:**印绶格,透正官**(R-印-03 官印相生),并透偏财生官。
**成败**:
- R-印-03:印格透官,「官不独取其生印,即可以为用……只要官星清纯」。本命官星戊一位独透(未中己土七杀藏支不透,支静不作混论,R-运-20),**官星清纯** → **成格**。
- 天干顺生一路:**丁(偏财)→ 戊(正官)→ 庚(正印)→ 癸(日主)**,财生官、官生印、印生身,顺而有情(R-纲-01 吉神顺用),无刑冲破害。
- **用神**:官(戊)——印格透官,官即可以为用;**相神**:官/财相济(官为成格之所赖,财为官之源)。
- **身旺印强**:癸生申月得印,坐亥(癸之帝旺),双申+时干庚,印重身旺(R-印-03「身旺印强亦不愁太过」)。
**格局高低**(R-印-17):**官星清纯**为高,财官印三全、顺生有情,**有情兼有力** → 定**贵**格,非贫贱之局。气候:秋金生水、金水相涵,无燥烈之弊(R-纲-15 配气候平和)。
- 财(丁)通根年支未(未藏丁),弱而有根,足为官之源,但力不厚 → 贵胜于富(R-事-03 官星有理会主贵;R-事-02 财气未臻「通门户」之富)。
## 四、行运(依 90_行运 R-运-27 断运四步;R-印-19 印格用官取运)
取运基线(R-印-19 印格用官、官露印重):**财运反吉,伤食之方亦最利**;忌再行印比(增身夺财)。
| 大运 | 岁 | 年份 | 干支性质 | 断 |
|---|---|---|---|---|
| 己酉 | 4–14 | 1971–81 | 己(杀)+酉(印) | 杀印增身,童限后段 |
| 庚戌 | 14–24 | 1981–91 | 庚(印)+戌(官库/火土) | **官星得地**(戌为戊官之根),婚缘之运 |
| 辛亥 | 24–34 | 1991–2001 | 辛(偏印)+亥(劫财) | **忌运**:印旺**泄官**(R-女-29⑪)、劫夺财;**运支亥=日支亥夫宫伏吟**(R-运-29 E 组引动),夫宫被激起 |
| 壬子 | 34–44 | 2001–2011 | 壬子比劫大旺 | **重忌运**:比劫夺财,主**破财/争夺** |
| 癸丑 | 44–54 | 2011–2021 | 癸(比)+丑(官库湿土) | 身仍旺,财官微苏 |
| 甲寅 | 54– | 2021– | 甲(伤官)+寅(伤财) | 伤食透清,反为利(R-印-19) |
**女命叠加(97_女命)**:
- 夫星=正官戊,透月干且**官星明顺**(R-女-28「官星明顺,夫贵而吉」);夫星透干而**于格局成局**——官印相生(R-女-07),故**主夫贤得力,即夫宫无用亦然**。
- **日主自合官星**:日干癸与月干戊作**戊癸合**,无别干争合(R-女-10「日主自合官星……夫妻相亲,其情愈密」)——本命层为**婚姻正面**信号。
- 反面:**夫宫(日支亥)坐劫财**,于「印格用官」为**忌神**(劫夺财、财为官之源)→ 夫宫不美(R-女-14 夫宫以格局喜忌断);亥中另藏甲伤官。
- 神煞细节(禁则 R-禁-01/R-女-39:只作参看、不改格局):**阴差阳错**日(R-煞-28 婚事多磨、事与愿违)、**红艳**两见(R-煞-31 异性缘重、风情)、**孤辰**两见(R-煞-32 孤独立身)、**十恶大败**日(R-煞-30 财物大进大出、破耗)。
## 五、逐题推理
### 第 1 题(婚姻感情,截至 2017-09)
考点:军婚龄女性的**婚姻状况**(婚否/婚变否/恋爱史)。参考点 2017 年,命主 50 岁。
推理链:
- **婚否**:夫星戊清纯透且**戊癸合身**(R-女-10)、官印相生成局(R-女-07)→ 命带坚实婚缘,非「从未结婚」(排除 C、D)。
- **婚期**:庚戌运(1981–1991,14–24 岁)运支**戌为戊官之根、官星得地**,且运内 1987 丁卯「卯会亥未木局」引动夫宫、1988 戊辰「戊官透清」,为**婚缘之成**窗口——与选项 A/B 共述的「庚戌运已结婚」相合。
- **婚变否**:辛亥运(1991–2001,24–34 岁)为**忌运**——偏印辛再增印重、**印旺泄官**(R-女-29⑪「满局印绶泄官星之气」),亥劫夺财;且**运支亥与日支亥夫宫支伏吟**(R-运-29 E 组),夫宫于忌运被激起(R-女-25:引动言其应、吉凶由喜忌出 → 忌运引动夫宫为**凶向**)。夫宫本坐劫财忌神(R-女-14),叠此忌运伏吟 → 主**婚缘之变**(R-女-24「夫宫逢冲(动)而无解之岁运,多应婚缘之变」)。
- 命带**阴差阳错**(婚事多磨)+**红艳**(异性缘重、风情)+**孤辰**(孤处)三神煞同向,正应「婚变后散拖不断」之细节(细节参看层,不作格局断)。
- 逐项排除:C「从未结婚,谈过 4 次恋爱」——官清透+戊癸合,主婚缘实成,排除;D 更排除;A「婚姻至今美满」——夫星虽美(得良夫),然**夫宫坐忌劫+辛亥忌运伏吟**,星美而宫动,「得良夫而难偕老」(R-女-19 类断),「至今美满」过强。
- 结论:**B**(庚戌运结婚、辛亥运离婚、之后拍散拖)。此项星/宫信号相左,定 B 属**倾向判定**,标低置信。
### 第 2 题(财政事业,截至 2017-09)
考点:**事业层级与投资财运**。
推理链:
- **事业层级**:格局为印格透官、**官星清纯**、财官印顺生(R-印-03/R-印-17)→ 定**贵**,事业有平台有地位(R-事-03 官星有理会主贵)→ 对应「上市公司」级职务(b 或 d),排除无业靠父母(c)。
- **投资财运**:财星丁一点、弱而仅通根未,**财不厚**(R-事-02 未成「财气通门户」之富);34–54 岁行**壬子、癸丑比劫忌运**,比劫夺财、十恶大败日主「财物大进大出」→ **投资失利、资财耗散** → 排除 d(d 需「投资常大赚、财务自由」,与财弱劫旺相悖)。
- 在 a(普通正职、投资失利负债)与 b(上市公司高层、投资失利剩不多钱)间:命局**官贵清**而**财不真**——贵象明显(有正职/高层平台可倚),富象不足(投资失利、钱不多)。取其**贵而财不聚**之象 → b。
- 结论:**B(对应 b)**。
## 六、末尾答案行(恰好 2 行)
Q1: B # 低置信
Q2: B
@@ -0,0 +1,113 @@
# contest8_2021 · female_19750107_P030
## 命主信息
- person_id:female_19750107_P030(题面名「1975年出生女性」)
- 性别:女
- 出生钟表时间:1975-01-07 09:00(巳时,题面 raw「1975-01-07 巳时 香港出生」)
- 出生地:中国香港(题面 place 原文)
- 真太阳时:1975-01-07 08:31(经度修正 −23.32 分 / 均时差 −5.32 分,合计 −28.64 分;时区 Asia/Hong_Kong,无夏令时)
- 当前年:2021,虚岁 47,行壬申运(40–50)
- 命盘无晚子时提示、无节气边界提示(生于小寒 1975-01-06 07:17 之后约 25 小时)
## 是否排对照盘及原因
**已排对照盘。** 触发条件为「place 为境外/模糊地名」——出生地「中国香港」属境外地名,故按任务书口径加排一盘(`--place "中国大陆"`,120°E 不经度修正,解析为杭州代理 120.16E / UTC+8)。
两盘四柱完全相同:
| 口径 | 真太阳时 | 四柱 | 起运 |
|---|---|---|---|
| 主盘(中国香港,119.6E 经度修正) | 08:31 | 甲寅 丁丑 癸丑 丙辰 | 0 岁 4 月 6 天 |
| 对照盘(中国大陆,120°E 不修正) | 08:55 | 甲寅 丁丑 癸丑 丙辰 | 0 岁 4 月 8 天 |
两盘同柱、仅起运日相差 2 天(可忽略),故**全部题目两盘答案一致,无口径分歧**。下文以真太阳时主盘为准。
## 命盘要点
- 四柱:甲寅(年)· 丁丑(月)· 癸丑(日)· 丙辰(时)
- 日主:癸水,生丑月(腊月,湿寒土旺)
- 十神格局配置:年甲=伤官、月丁=偏财、日癸=日主、时丙=正财;月支丑=七杀(本气己)、日支丑=七杀、年支寅=正官(戊)、时支辰=正官(戊)
- 地支藏干:寅(甲伤官 丙正财 戊正官)、丑(己七杀 癸比肩 辛偏印)×2、辰(戊正官 乙食神 癸比肩)
- 五行粗略力量:水(癸×3 根)与金(辛×2 印)为身党;土(官杀 ×4)最重,火(财 ×3,通根寅)次之,木(伤食 ×3,甲坐寅禄)再之。日主有丑、辰两处通根、得丑中辛金生护,作**身偏弱**论,煞重财旺、克泄交加。
- 调候:癸水腊月寒冻,喜丙火解冻(《穷通宝鉴》癸水十二月「宜丙解冻……名水辅阳光」)。丙透时干、丁透月干,**气候得宜**,非「四海为家一生劳苦」之金寒水冷局。
- 神煞(仅作细节参看,不入格局四层):月支、日支双重**华盖**(孤高、艺文、宗教玄学之缘),**寡宿**(亲缘疏离、独立),时柱**童子煞、地网**,年支**金舆、劫煞**,月/日**福星贵人**。
## 取格(依《子平真诠》取格总纲六步)
1. 月令丑,丑本气为**己土**;己克癸、阴见阴,为日主癸水之**七杀**。
2. 月令本气为煞 → 定格**偏官格(七杀格)**。
3. 藏干变化:丑为杂气(己癸辛),本气己土**不透**;四柱天干所透甲(年)、丁(月)、丙(时)**皆非月令所藏**,系年支寅之甲丙透出,不能改月令之格;月令余气癸仅透于日干(日主自身,不为用)、余气辛藏不透。故依总纲「藏干不及本气当令」,**格仍以月令本气七杀取定**,属**杂气七杀**(参 R-杀-08)。
4. 会支:地支寅丑丑辰之间无三合三会(寅丑不化、丑辰无合),无会支变格。
5. 外格闸门:月令自有用神(七杀),不入杂格。
**格之成败**:七杀为凶神,逆用——宜制之化之(总纲「凶神逆用」)。
- 制:年干**甲木伤官**透、坐寅禄(甲于寅为禄)力健,可制七杀;
- 化:丑中**辛金偏印**与七杀同藏月令(煞印同根),印有情,可化七杀;
- 病:**财星丙丁两透**、通根寅木,财滋七杀、党煞攻身;且丙辛相合、财来坏印。日主身偏弱而官杀四位、财三火,克泄耗重,故依「煞重身轻,用食则身不能当,不若转而就印」之义,**以印化煞为主、伤官制煞为辅**。
**用神 / 相神**:以月令七杀为用(逆用);相神取辛金偏印(化煞,与煞同根有情)与甲木伤官(制煞);忌神为财(丙丁火)。
**格局高低**:有情(煞印同根)而身煞两停、偏于煞重,财透滋煞坏印为病,格成而带忌,属「无情而有情,格亦许贵,但不大耳」——**中等偏下、清贫劳碌中有清气的命**。参《滴天髓·何知》「贫而正者:官杀旺、身弱、财生官杀,有印则一衿易得」之义,即身弱赖印、可取得一份文职/功名而不主大富。
## 行运(喜印比帮身化煞,忌财滋煞坏印,忌官杀混杂攻身;食伤制煞有用但泄身,半喜半忌)
- **乙亥**(10–20,1985–1995):亥为水(比劫)兼甲木长生,乙为食神——帮身兼制煞,**喜**,少女运顺。
- **甲戌**(20–30,1995–2005):甲伤官透而泄身,戌为燥土官杀,且运支戌与日支丑相**刑**、刑动夫宫——**忌运**,感情、事业多波折之十年,婚姻应期若落此段每多不顺。
- **癸酉**(30–40,2005–2015):癸比肩帮身,酉偏印化煞,且酉与日支丑半会金局、暗会夫宫——**喜运**,最安稳之十年。
- **壬申**(40–50,2015–2025):壬劫财帮身、申偏印化煞(申亦冲年支寅),**喜运带冲**,帮身有力而事业环境有动。
- **辛未**(50–60,2025–2035):辛偏印透(喜),未为七杀兼燥土、又冲丑(动夫宫、动华盖库),半吉半动。
## 逐题推理
### 第 1 题(Q26,考点:2018 戊戌年所启动的「技艺/向学」之事)
- 戊戌年(虚岁 43),行壬申运。戌与月支、日支之**丑相刑**(丑戌刑),而丑正是命带**双重华盖**之库;华盖主孤高、艺文、**宗教玄学之缘**(「印逢华盖,翰苑尊居」「华盖逢空,偏宜僧道」),华盖库逢流年刑冲即为「开库引动」。
- 戌中藏辛(偏印),偏印主玄学、术数、冷门学问;命局华盖×2+寡宿孤处之象,一旦被引动,最易落向玄学/术数/宗教类进修,而非普通实用手艺。
- 排除:驾驶(驿马主驾车迁动,命之驿马在亥,2018 戌非驿马)、法文(语言属食伤吐秀,与戌年刑丑开华盖库无对应)、美甲(虽属华盖「辛勤学艺」之列,但华盖×2 叠加偏印与孤处之象,指向上更偏玄学)。
- 结论:**D 玄学**。(中等偏低置信)
### 第 2 题(Q27,考点:初恋/第一次与男生交往之应期)
- 女命夫星为官杀、夫宫为日支(丑)。初恋属「情之始动」,应期取夫星、夫宫之引动。
- 1985–1995 行乙亥喜运(水木帮身、食伤吐秀,少女情窦易开)。选项所在年份中,**1994 甲戌**:甲木伤官透于流年干(伤官主情感之外露与主动表达),戌又与日支丑相刑、动夫宫,落在乙亥喜运之末,虚岁 19。
- 1995 起入甲戌忌运(伤官见官、丑戌刑夫宫),此后十年感情多波折,故「初交」更宜落在入忌运前的 1994;1997(丁丑,月柱全伏吟,主郁结非始)、2002(壬午,午为癸之绝地,非吉始)均不合「初次」之义。
- 结论:**B 1994**。(低置信)
### 第 3 题(Q28,考点:结婚之年)
- 婚姻应期,依女命「夫星透清、夫宫逢合会之岁运多应婚缘之成;夫星被伤、夫宫逢冲无解多应婚变」——即取**夫宫(日支丑)逢合会**之年。
- 丑之合会:子丑六合(子年)、巳酉丑三合(巳/酉年)。选项内:1996 丙子(子丑合)、1993 癸酉与 2005 乙酉(酉丑半合金局)、2003 癸未(丑未冲)。
- 1993(虚岁 18)过早;1996(21)虽为六合,然 1995 已入甲戌忌运、运支戌刑日支丑,夫宫正被刑,成婚之象不纯;**2005 乙酉**:入癸酉喜运(比肩帮身、偏印化煞),流年酉与日支丑半会金局、会动夫宫,且大运支亦酉,酉丑两重会动,虚岁 30,正当婚龄——合于「夫宫逢会而成婚」。
- 结论:**D 2005**。(低置信)
### 第 4 题(Q29,考点:现时职业,2021 辛丑年 / 壬申运)
- 格为七杀身弱、**以印化煞为相神**(辛金偏印);40–60 岁大运(壬申、辛未)皆行**印比之乡**,印星为一生立身之靠。
- 印主文书、学问、教育、证书、平台;2021 辛丑年,辛(偏印)透干发用,丑又伏吟月/日柱,正应「以印为职业、以文教立身」之象。七杀格身弱用印、格成而降等(「贵而不大」),合「贫而正者、有印则一衿易得」之情——落为**文教类职业**。
- 排除:政府工作(正官不透,官星藏支不显,非公职显达之象)、保安员(七杀有伤官制、印化,非全无制化之贱/劳命)、会计师(财旺身弱不任财,且财为命忌、非立身之本)。
- 结论:**D 老师**。(中度置信)
### 第 5 题(Q30,考点:2014 甲午年运势)
- 2014 甲午,在癸酉喜运(2005–2015)之内。流年甲=伤官透(制煞),午=财(丁己),午与年支寅**半合火局**(寅午)——财与伤官并动,火财旺而日主身弱,属耗身滋煞、为财奔忙之局,但大运酉金偏印帮身化煞可为救应。
- 五组引动逐查:A 透清(午中丁己财煞,流年未透干)弱;B 会局(寅午半合火,仅一重);C 刑冲(午与命四支无冲刑害,申酉大运亦不与午相冲);D 空亡(命之空亡为寅卯、子丑,午不填合);E 伏吟反吟(无)。**引动单薄、仅一重会局**,且不为凶冲,故不作人生剧变之年。
- 排 A「先跌后升乘风破浪」(需强动之吉局)、D「人生低谷一无所有」(需凶冲重克)皆不合:无冲无刑、大运助身,非大起大落;B「家境清贫入不敷支」更近一生常态而非本年专象。综合取**平顺无甚波澜**。
- 结论:**C 平平稳稳**。(中度置信)
## 存疑与边界声明
- 命主出生地「中国香港」属境外,已加排对照盘;两盘同柱,答案无口径分歧。
- 本盘属**杂气七杀、煞重身轻转就印**之局,取格结论稳定;但身弱/煞重之「分两」、以及「印化为主抑或伤官制为主」,各家分寸有别,行运喜忌中「印运」两项随此略有摆动(本文取印运为喜)。
- 第 2、3 题(初恋/结婚年份)依赖「夫宫逢合会即应婚」这一应期通例外推,盘上无官杀透干之强信号,两题均属**低置信**;第 1 题(玄学 vs 美甲)为华盖取象之两可,属**低置信**。
- 全篇严守红线:仅读盲版题面,未触碰 answers/、他人答案、fate_benchmark/、评测跑分_qoder-agent/,未联网。题面 JSON 无 `answer` 字段,无泄露。
---
## 答案
Q1: D
Q2: B
Q3: D
Q4: D
Q5: C
@@ -0,0 +1,143 @@
# BaziQA 求解留档 — contest8_2021 / female_19841220_P027
## 一、命主信息与排盘口径
- person_id:female_19841220_P027(题面 name「1984年出生女性」)
- 性别:女
- 出生钟表时间:1984-12-20 17:30(题面 place「中国香港」,酉时)
- 真太阳时(主盘):1984-12-20 **17:08**(经度修正 −23.32 分 + 均时差 +2.22 分 = 合计 −21.10 分;时区 Asia/Hong_Kong,夏令时否)
- 对照盘(120°E 不经度修正,`--place 中国大陆`):真太阳时 1984-12-20 **17:32**
**是否排对照盘:是。触发原因(满足两条,任一即排):**
1. 主盘真太阳时 17:08 距酉时边界(17:00 奇数整点)仅 **8 分钟 < 15 分钟**;
2. place「中国香港」属任务书列明的境外/模糊地名。
**双盘结论:两盘四柱完全相同**——主盘 17:08、对照盘 17:32 均落在酉时(17:00–19:00)之内,故四柱、藏干、神煞、节令、大运、流年全部一致,**本命主全部五题两盘答案相同,无口径分歧**,末尾答案行不附加对照盘标注。
> 说明:题面 JSON 未见任何 `answer` 字段残留,盲测材料无泄露迹象。
## 二、命盘要点
```
四柱:甲子 丙子 戊子 辛酉
十神:七杀 偏印 日主 伤官
藏干:子—癸(正财) ×3;酉—辛(伤官)
空亡:日柱午未;时柱子丑
纳音:海中金 涧下水 霹雳火 石榴木
节令:子月(大雪后、小寒前);月令子
神煞:红艳×3(子)、将星×6(子)、桃花×2(酉)、勾煞(酉)
大运:逆行,4 岁 5 个月 23 天起运(4.48 岁)
乙亥(1988) 甲戌(1998) 癸酉(2008) 壬申(2018) 辛未(2028) 庚午(2038)…
流年(题域内):2011辛卯 2014甲午 2016丙申 2017丁酉 2018戊戌 2019己亥 2020庚子 2021辛丑
```
- **日主戊土,生子月(仲冬严寒)**,地支子子子酉、一片水(财)金(伤),四柱无辰戌丑未,日主无根;天干甲(杀)丙(印)戊(日)辛(伤),**甲→丙→戊→辛 成一条顺生链**,暖气仅系于丙火一点,而丙坐子(胎地)无根。
- 财星(癸水)三见、当令,财极旺;身弱之局。
## 三、取格(依 00_总纲_取格.md §1 六步)
1. 定月令:月柱子,月令**子**,子为专气(藏癸一神)。
2. 月令十神分类:以日干戊对月令本气癸——戊土克癸水,为我克之财(阴阳异,正财)→ **财格**。
3. 藏干变化:子为专气,无余气可透,格不移。
4. 会支变化:无三合三会改月令之气(申子之合在大运、非原局)。格不变。
5. 定格完成:**正财格**。
6. 外格闸门:月令自有用神(财),且干头财官煞食可取(甲煞、辛伤),**无用门不通过**;日干无合化,**从化门不通过**。虽有「财旺身弱、日主无根」之从财临界之疑,但月令自有用神财、且透丙印(透印则身有所赖而不从,R-杂-10/17),依 R-纲-16「月令自有用神者一概不得弃正格就杂格」**定正格财格**,不取从财。
**取格结论:正财格**(月令子、本气癸、专气取用,R-财-01)。
## 四、成败 / 用神相神 / 高低(依 12_财格.md)
**格局细判——财用煞印(R-财-19):**
- 结构:月令财(三子癸水)党七煞(甲木,水生木)为忌;透印(丙火偏印)化煞生身(甲→丙→戊,煞印相生);且**冬土**(戊日生冬月)逢之。
- R-财-19 原文「有财用煞印者,党煞为忌,印以化之,格成富局,若冬土逢之亦贵格……化煞而即以解冻,又不露财以杂其印,所以贵也」——本命**财不透天干**(三子皆藏,天干无壬癸),正合「不露财以杂其印」;丙印化煞并解冬冻。**成格,贵格**。
- 兼看:丙印透而天干无财相攻,财印不相碍(R-财-07 财格佩印之意并通)。
**用神相神:**
- 用神:月令**财**(癸水);相神:**印(丙火)**——化煞(甲)生身、解冻;**煞(甲)**为所化之用(财党煞、印化煞)。辛酉伤官生财,为兼神(生财之源,然身弱非所宜过重)。
**格局高低:**
- **有情**:甲丙戊辛一路顺生,夫星(甲煞)得印化而与日主有情,格局生化顺畅。
- **有力**:日主戊无根、印丙无根,身相俱虚,力不足——高而不厚之象。
- **气候(调候 R-纲-15 / 92_调候)**:戊土十一二月「严寒冰冻,丙火为尊,甲木为佐」,本命丙、甲双透,**调候得用**,格局成色大增。
- 综合:**中间偏上**——成格有调候,但身弱印虚,属「有成而力不全」,非大贵,主中上之局、衣食事业可观而不至大富大贵。
**喜忌:** 喜印比(火土,帮身、暖局);忌财(水,破印耗身)过旺;伤官(金)泄身生财,为身弱之忌而结构所系,中性偏忌。
## 五、行运(依 90_行运.md R-运-27;财格「取运」R-财-19→R-财-30)
- **乙亥(1988–1998,4.5–14.5 岁,童限末段)**:乙为正官(夫星)透,亥为财(水旺)。童年平常,财旺耗身。
- **甲戌(1998–2008,14.5–24.5 岁)**:甲为七杀(夫星)透,**戌为火土库、戊之根**——帮身(喜)。且甲木生丙火(杀印相生),**利学业、长身**。此运覆盖中学至大学,为青年较顺之运。
- **癸酉(2008–2018,24.5–34.5 岁)**:癸为正财(忌,财旺破印)、酉为伤官(忌,泄身生财)。酉又是桃花,且与命时支酉**伏吟自刑**——此运为**财伤忌运**,感情、事业多波折,桃花重、心浮。
- **壬申(2018–2028,34.5–44.5 岁)**:壬为偏财(忌),申为食神、且**申子半合水局**(财局成)——财极旺、身更弱,为**忌运**;2018 为其交运年。
- **辛未(2028–)**:辛为伤官,未为土库(帮身,喜);但未与命中三子**子未相害**——喜忌互见。
**大运喜忌基线:** 喜火土(甲戌之戌、辛未之未,次喜丙火透运);忌水(癸酉之癸、壬申之壬申);金运(伤官)泄身生财,忌中带用。
## 六、逐题推理
### 第 11 题(学历)
考点:格局对学业文凭(印为文书文凭、伤官主聪颖才艺)之配置 + 求学阶段大运。
- 印(丙火)为文凭学历,透月干而**坐子无根、又被三子旺财所耗**——印不厚,学历非顶尖之兆;
- 然伤官辛酉坐禄而旺,**天资聪颖、才艺外露**;
- 求学大运 **甲戌(14.5–24.5 岁)**:甲(杀)生丙(印)为杀印相生,戌土帮身,**助印助身**,学业可成,能至大学;
- 财旺身弱者,务实、重享乐而不喜死读书;伤官旺者,爱玩乐、好表现、不安分。四柱无驿马,但三子水旺(土荡)、伤官外放,行向偏动。
- 排除:A「资质愚笨」与伤官旺(聪颖)不符;D「与书无缘、中学毕业」与印透、杀印相生大运不符。B 与 C 均止于「大学毕业」,区别在「专心学习」与「爱好玩乐、海外」。伤官旺 + 财旺(享乐务实)> 专心苦读,故取 C。
**倾向:C(爱好玩乐,海外读书,大学毕业)。**(低置信:B/C 两选项分野仅在求学态度与是否海外,盘上「海外」硬信号不足。)
### 第 12 题(毕业后的工作类型)
考点:财格取象(财帛、经营、数字)叠加伤官生财之事类。
- 月令**正财**为一格之主,主钱财、经营、可支配资源;
- 时柱辛酉**伤官生财**、伤官坐禄而旺——职业取象为「以才艺、口才、形象变现」,属**交际/销售/服务**之列,非纯文书坐班;
- 桃花红艳三见(子三子红艳、酉桃花),主容貌、魅力、人际场合得利——指往需应酬交际之业。
- 排除:D「运输、文件单据」偏财格之「单据」而无伤官交际之象;A「会计」需印/官(循规细致),与伤官旺(不喜拘束)不合;B「空中服务员」亦合伤官形象服务,但四柱**无驿马**(申子辰驿马在寅,命中无寅),远行服务之信号不显,且航线固定受薪、不显伤官「主动创收」之性。财格 + 伤官生财,以**公关销售**取象为最贴。
**倾向:C(公关行业,需要为公司销售、应酬)。**(低置信:B 空姐同为伤官+桃花之象,仅以无驿马降级为备选。)
### 第 13 题(感情婚姻)
考点:女命夫星(官煞)、夫宫(日支)之喜忌,与夫星夫宫之引动应期(97_女命 R-女-04、07、13、14、16、24)。
- 命中无正官,**七杀甲木透年干为夫星**(R-女-06 煞亦可为夫);
- 夫星甲木坐子得水生,又得月干丙火**化煞**(甲→丙→戊,煞印相生)——**夫星透而于格局成局,主夫贤得力**(R-女-07);
- 夫宫(日支)子为**正财**,乃月令用神、夫宫有用(R-女-13/14);原局夫宫**无刑冲**,夫缘宫位未见破;
- 反面因素:伤官辛酉甚旺(女命伤官旺主口舌、不安于夫)、桃花红艳三见(多情),故**婚姻中口舌吵闹不免**;
- 应期:**2014 甲午年**(大运癸酉)——流年干**甲即夫星透清**,午冲日支子(夫宫被冲而动),且午为戊之刃帮身;夫星透 + 夫宫动,主**成婚**。R-事-13:夫星为喜用而透清得地者,冲动多应成婚。
- 排除:A「女同性恋」与夫星甲木明确透干有情不符;C「2016 婚外情」——2016 丙申无官煞引动,且申为甲木绝地(夫星受挫)而非桃花引动,取证不足;B「2017 结婚、2020 离婚」——2020 庚子虽伏吟夫宫,但原局夫宫无破、夫星有情,未见必离之硬信号。
**倾向:D(已婚人士,2014年结婚,虽时有吵闹但不失恩爱)。**(中低置信:伤官桃花旺,B 之婚变轨降级保留。)
### 第 14 题(家宅搬迁之年)
考点:迁动之应——印(住所房产)、日支(家宫)、驿马之引动(90_行运 R-运-29 五组、R-运-31 宫位事类)。
- 命无驿马;搬迁取印星(住所)与日支(家)之引动。
- 大运 **壬申自 2018 起,壬为偏财克丙(印)——财坏印,印主住所,住所因财而变**;2018 又为**交运年**(癸酉转壬申),交运多应环境之迁徙变更;
- 2018 戊戌:戌为印之墓库、燥土,与命宫之位相激;且此年神煞逢**寡宿**(子见戌),主独处、居所之变。
- 排除:2017 丁酉(桃花+正印透)偏应感情文书之事(若 2014 成婚,2017 主桃花而非迁居);2019 己亥(亥子会水)与 2020 庚子(子伏吟家宫)皆水旺,应财与身之耗,非住所之迁。
**倾向:B(2018)。**(低置信:2019/2020 家宫逢会逢伏吟,备选。)
### 第 15 题(2018 年发生何事及结果)
考点:2018 戊戌(大运壬申交运)之引动合成事件(R-运-31/32;六亲依 R-亲-02 印为母)。
- 大运 **壬(偏财)克丙(偏印)——财坏印**,丙火为母星(印为母)兼主住所与文书;
- 流年 **戊戌**:戌为**丙火之墓库**(丙戊墓在戌)——**母星入墓**,主母亲之恙;
- 救应:流年干**戊土(比肩)克大运壬水**,比劫夺财、制住坏印之财,**印星得救**——故为「幸非末期、存活至今」而非凶终;
- 流年 2018 神煞逢寡宿、十恶大败(自身),亦见该年动荡;
- 排除:B「妇科病」——三子水旺虽为命局薄弱(肾/生殖)之根,但 2018 戌土非直接冲克子水、且交运壬申会水反使水旺,水病信号不若「财坏印、印入墓」之母病信号直捷;C「合伙赚钱」——流年戊克大运壬偏财,比劫夺财主**破耗**而非进财,与此象相反;D「男同事私情」——2018 无官煞(情)引动,戌害酉(桃花)为感情受损而非生发私情。
**倾向:A(母亲发现乳癌,幸非末期,存活至今)。**(低置信:B 妇科病轨降级保留。)
## 七、末尾答案行(恰 5 行)
Q1: C # 低置信
Q2: C # 低置信
Q3: D # 低置信
Q4: B # 低置信
Q5: A # 低置信
@@ -0,0 +1,140 @@
# contest8_2021 · male_19530127_P031 盲测求解
## 一、命主信息与排盘口径
- person_id:male_19530127_P031(题面 name「1953年出生男性」)
- 性别:男
- 出生钟表时间:1953-01-27 05:00(题面 raw 记「卯时」)
- 出生地:马来西亚(题面 place 原文=「马来西亚」)
- 真太阳时(主盘):1953-01-27 04:04(时区 Asia/Kuala_Lumpur,夏令时否;经度修正 −73.24 分、均时差 −12.04 分,合计 −85.28 分)
- 四柱(主盘):壬辰 / 癸丑 / 戊寅 / 甲寅
- **对照盘:已排。触发原因**——place 为境外/模糊地名「马来西亚」,命中双盘纪律第二条,须排 120°E 不经度修正之对照盘。
- 对照盘命令:`--place "中国大陆"`(副本解析为杭州代理),真太阳时 1953-01-27 04:48。
- 对照盘四柱:壬辰 / 癸丑 / 戊寅 / 甲寅 —— **四柱、藏干、空亡、大运干支全同**。
- 结论:**两盘无口径分歧**,下文答案行不标分歧注。主盘真太阳时 04:04 距时辰边界 05:00 为 56 分钟,不触「小于 15 分钟」条款,故盘面唯一不确定项(时柱取寅取卯)已由两盘一致排除——时柱稳定取 **甲寅(寅时)**,非题面 raw 所记「卯时」。
- 排盘审计:日界规则子初换日(23:00);历法库 tyme4py 1.5.0;schema 1.2。无晚子时提示、无节气边界提示。
## 二、命盘要点
- 日主:戊土,生于丑月(季冬冻土,湿寒)。
- 四柱十神:年壬(偏财)辰、月癸(正财)丑、日戊(日主)寅、时甲(七杀)寅。
- 地支藏干:辰(戊乙癸)、丑(己癸辛)、寅(甲丙戊)、寅(甲丙戊)。
- 全局力量粗核——
- 土(日主一方):日主戊+丑本气己+辰本气戊+寅中戊×2,**得月令(丑为土)且通根四支**;
- 财(水):壬、癸两透+辰中癸+丑中癸,**财星两透而根深**;
- 官杀(木):甲透时干+寅中甲×2+辰中乙,**杀透而双禄**;
- 印(火):寅中丙×2(长生有气,**不透**);
- 食伤(金):丑中辛(**不透**,墓库)。
- 关键结构:**财旺生杀(财党煞)**——壬癸财透而生时干甲杀,杀得双寅之禄攻身;唯一制化是藏而不透的丙火(偏印化杀+丑月调候解冻)与丑中辛金(伤官制杀),二者皆埋支中。日主得令有根,但天干无印比相帮,相对财杀成势略微偏弱,全局「财杀两旺、身需扶」。
- 神煞(只作细节参看,不入格局四层):年柱纳音长流水→年支辰为**地网**(主蹇滞、缠缚、官司缠扰);日支、时支双**驿马**(以年支辰查,寅为马);月支**天乙贵人**;年、月支**太极贵人**;年支**华盖**;日柱**阴差阳错**;月支**绞煞、寡宿**。空亡:日柱申酉、时柱子丑。
## 三、取格
依《子平真诠·论用神》「用神专求月令」:
1. 月令为丑(丑月),藏干己、癸、辛(寅申巳亥、辰戌丑未月,参 R-纲-07、R-纲-10 杂气取用)。
2. 月令本气己(劫财)**不透**;中气癸(正财)**透月干**——「本气不透而透余气,以透者取用,格随透干变」;且己(土)与癸(水)相克非相生,不构成「变而不失本格」,故**格随透变**。
3. 取 **正财格(杂气财格)**。年干壬偏财并透,财为同格(正偏财同论,R-财-01)。
**格之成败(带忌与救应)**:财格成格之所喜在「财根深、透一位清用」(R-财-02)——本命财星 **两透(壬癸)已属「露」**,且「透财过多成露」为财格之忌(R-财-20 喜忌总表)。更关键者:财旺而生时干**七杀甲**,成 **财带七煞** 之局。解此忌只有两路——合煞存财(R-财-16)或制煞生财(R-财-17),本命**无透干可合可制**;又若走「财用煞印」路(R-财-19,冬土逢之化煞即解冻本为至贵),则须「不露财以杂其印」,而本命财**双透露**、印**独而藏**——正落 R-财-14「财用煞印而印独、财煞并透,非特不贵,亦不富」之破格条件。
故本命 **财格带煞,成中带破、破中有微救(暗印暗伤)**:格局定在「常人求财、劳而多是非」,非富贵之造。财党煞无制,是其一生成败之枢——**因财生事、因财招官非**。
**用神与相神**:格局之神为财(月令所透);扶抑药神取 **丙火偏印**——化甲杀以护身、解丑月之冻以暖局,一身二用,此与《穷通宝鉴》戊土十二月调候「丙为尊、甲为佐」相合(R-候-08)。相神即此藏寅之丙(及帮身之土)。喜 **火(印)、土(比劫)**;忌 **水(财,党煞且坏印)、木(官杀,攻身)**;金(食伤)泄身生水、兼能制煞,属半路参用(R-财-30「伤食之方亦任意可行」)。
**格局高低**:财印相并、财能坏印(R-财-21),又煞无制合,属「有情不足、有力不均」之中下之造,气候上得丙火暗解寒冻,故**劳碌奔财、是非随身,晚运转金则印被冲克**。
## 四、行运
以日主偏弱、喜印比(火土)、忌财杀(水木)为基线(R-运-27 第①步,参财格取运 R-财-23~30):
| 大运 | 年份 | 干支十神 | 喜忌基调 |
|---|---|---|---|
| 甲寅 | 1956–1966 | 七杀/杀禄 | 忌(杀攻身,少年辛劳) |
| 乙卯 | 1966–1976 | 正官/官禄 | 忌(官杀并旺) |
| **丙辰** | 1976–1986 | 偏印/比劫 | **喜**(印透暖局化杀,得帮身之地) |
| **丁巳** | 1986–1996 | 正印/印比 | **喜**(火最旺,格局得济);惟巳为水命之**地网**,官司缠扰之暗线 |
| **戊午** | 1996–2006 | 比肩/阳刃 | 喜(帮身);惟午为戊之**阳刃**,运中逢冲即起争讼 |
| **己未** | 2006–2016 | 劫财/比土 | 喜(帮身担财) |
| 庚申 | 2016–2026 | 食神/食神 | 转忌(金泄身生水;**双申冲命日时双寅**,冲丙印之根——母迟) |
| 辛酉 | 2026– | 伤官/伤官 | 忌(泄身) |
要点:**1975–2020 正落丙辰丁巳戊午己未四步火土帮身之运(外带庚申)**——身弱者得印比帮身方能担财,故其谋生立业之「用神窗口」与题目所设 45 年职业期完全重合(详见第 1 题)。2016 入庚申运为一生喜忌之转折(详见第 5 题)。
## 五、逐题推理
> 说明:下引题号一律写作「第 N 题」形式,答案行收于文末。
### 第 1 题(1975–2020,丙辰至庚申大运,职业)
**考点**:以格局用神与十神结构定一生职业方向。
**推理链**:本命定格 **财格**——月令用神是财,R-财-01 明言「财……为财帛,为妻子,为才能」。财格之人,谋生之具系于「财」一路:或自营求利(生意),或以才艺取酬。再看其运:1976–2016 一路行丙辰、丁巳、戊午、己未**火土帮身之运**(身弱者得印比扶助,方能任财),故「以财为业且能立得住」的窗口恰在此四步运内,与题目所给 1975–2020 完全吻合——四选项中,唯「生意人」是「财格+身弱得帮而经营求财」的正解。
逐项排除:
- B 装修工人、D 铁匠:二者皆以「土/火金」五行取象、属手艺劳作,与「月令用神为财」的格局主线不合(手艺可归财之「才能」一路,但非格局主导方向)。
- A 德士司机:双驿马(日、时支寅)确主车马奔波,是其可取之处;然驿马属神煞层,只给「动」之事类,不决定格局方向——格局主线仍是「财」,故选「以财为业」者。
- 故选 **C 生意人**(1976 起行印比运、帮身担财,正合长期经营求财之象)。
**置信度**:中低(A/B 有神煞与五行取象之旁支支持,降级保留为备选)。
### 第 2 题(何年得子女)
**考点**:男命子息应期。子星取官煞(R-亲-02),另参 R-亲-32「用神即子星」——本命扶抑/调候用神为**火**,「其子必在木火之运、或木火流年得」。
**推理链**:四选项 1976、1978、1979、1985 皆落在丙辰运(1976–1986)之内,须以子星/子女宫的引动收敛。
- 1978 戊午:**午为火(正合 R-亲-32 用神之火)**;且午与命日支、时支寅成**寅午半合火局**(B 会局组),直接**引动时支(子女宫)**——子女宫被会动,主子女之事有成。喜年逢子女宫动,排序最优。
- 1976 丙辰:丙亦为火(用神得地),且为交运之年;惟辰与命中寅、丑无会无合,子女宫未被引动,次之。
- 1985 乙丑:乙正官(子星)透清(辰中乙,A 透清组)、丑又填实时柱空亡(子丑,D 组),子息信号亦强;然乙为木、非火(用神是木火之「火」为主),又丑冲丑、丑午相害并存,杂而不纯,降为备选。
- 1979 己未:未与丑冲(丑未冲,冲月令财库),主财与父母之事,于子息无直接引动,排除。
**结论**:取 **1978(B)**——火(用神)临岁 + 时支子女宫逢合而动,二者同指得子女。
**置信度**:低(1976、1985 为降级保留之备选)。
### 第 3 题(何年闹上官非并被警察扣留)
**考点**:官杀之忌被引动、日主受官杀制之应期(R-事-13 官禄受冲之两向、R-运-29 五组引动)。
**推理链**:本命官杀(甲乙木)为忌,官非之应即在官杀被激之年。
- 1995 乙亥(丁巳运末年,合42 岁):①**A 透清**——流年干乙,正是年支辰中所藏之正官,**官星透清**(忌神透清则凶应,主官事、官方临门);②**B 会局**——亥与命日支、时支双寅**寅亥合木**,官杀成局而势增;③**C 刑冲**——亥与大运支巳相冲(巳亥冲)。**三组引动齐备**,且所引动者直指官杀(乙官透、亥合木),是官杀攻身、被官方所制之象,与「被警察扣留」最贴合。
- 1996 丙子(戊午运交运年):A 引动的是丙印(喜神透清,主文书、庇护,非官事)、C 为子午冲(冲阳刃,主争讼、破耗)、B 子辰半合水(财)、D 子填实时柱空亡——组数虽多(四组),但引动主神为印与财,官杀未被直接激起,且偏吉偏杂,不如 1995 之直落官非。
- 1997 丁丑、1998 戊寅:丑为月支伏吟、寅为日时支伏吟,多主财与自身宫位之事;官杀虽在 1998 得三寅之旺,然无官星透清之「显」,且伏吟主重复旧事,不作首应。故排除。
**结论**:取 **1995(A)**。
**置信度**:中低(1996 因组数最多作降级保留之备选)。
### 第 4 题(因何事闹上官非)
**考点**:官非之十神事类(R-运-31 十神映射)。
**推理链**:本命官非的根由在格局结构——**财旺生杀(财党煞)而无制无合**。R-运-31:财主「钱财进出、收入渠道」,煞主「压力与责任、规章考核」;财党煞即「因财而生是非、因利而触法网」。全局财(壬癸)两透而根深,正是「贪财趋利、以财为事」之象(参 93 性情层:财旺身弱者多趋财奉势),故其官非之因应落在**财**一路,而非纯暴力或侵夺。
逐项排除:
- A 打架:纯煞/刃之象,本命虽杀旺,但杀由财生(因财起争),财才是主因,打架为「因」之下游。
- B 吸毒、C 偷窃:本命伤官(辛)与劫财(己)皆藏而不透、力量单薄,不足以成吸毒(伤官放纵)或偷窃(劫财侵夺)之主象。
- D 经营非法高利贷:正是「以财为业(财格)、以财生煞(放贷取利而涉非法催讨)、财煞俱现而无制」之现实落地,与第 1 题「生意人」的职业方向互为印证。
**结论**:取 **D 经营非法高利贷**。
**置信度**:中。
### 第 5 题(2016 年发生何事)
**考点**:2016 丙申流年 + 庚申大运之引动(R-运-29 五组、R-亲-34 父母应期)。
**推理链**:2016 为交运之年,命主 62.76 岁交入 庚申 大运。
- 引动结构:大运支申与流年支申**双申,齐冲命日支、时支双寅**(C 刑冲组,申寅冲);且流年干丙、大运干庚——**庚金克丙火**(C 之外,干头克)。
- 事类定位:寅中所藏为**甲(杀)、丙(偏印)、戊(比肩)**。其中 **丙火偏印即母星**(R-亲-02:正印为母,偏印同类,命以丙为母星),丙之根寄于双寅。今大运与流年双申冲双寅,**印之根气被连根冲拔**;又运干庚金直克流年显露之丙——**母星透而受克、其根又被冲斩**,正是 R-亲-34「岁月印气斩丧于时支者,先克母」(时支寅藏丙,印气被冲)之明验。以 1953 年生、2016 年 63 岁推,其母已届高寿,此断合于常理。
逐项排除(皆降级保留而不删):
- A 负债累累、C 创业失败、D 股票损失:庚申食伤生水、金水偏旺,于身弱之命确有「财旺耗身、破财」之直白取象(属不经细分规则的取象路径),故不得删除;但三者皆无 2016 独有的硬冲结构,年份指向性弱于「冲印斩母根」,降为备选。
- 故选 **B 母亲逝世**。
**置信度**:中(A/C/D 为降级保留之备选)。
## 六、存疑与边界
- 时柱问题:题面记「卯时」,而主盘真太阳时 04:04、对照盘 04:48 皆落寅时(时柱甲寅),两盘一致,故采寅时;已按双盘纪律排对照盘并声明。
- 格局主从:月令丑本气己(劫财)不透、中气癸透,依杂气取用定格为财格;若按其本气视作月劫而别取财煞为用(建禄月劫格路径),行运喜忌方向与本判不冲突,仅名目之别。
- 第 1、2、3 题置信度偏低,均已在行尾保留备选;若需复核,优先回查时辰边界与 1978/1985 两年之子星引动。
Q1: C
Q2: B
Q3: A
Q4: D
Q5: B
@@ -0,0 +1,102 @@
# contest8_2021 · male_19540318_P025 盲测求解
## 一、命主信息
- person_id:male_19540318_P025(1954 年出生男性)
- 性别:男(阳年男命 → 大运顺行)
- 出生钟表时间:1954-03-18 15:00(农历二月十四日申时;题面 place = 「中国大陆」)
- 出生地:中国大陆(副本解析为杭州代理 120.16E,Asia/Shanghai)
- **真太阳时:1954-03-18 14:51**(经度修正 +0.64 分、均时差 −8.83 分,合计 −8.19 分)
- 是否排对照盘:**是**
- 触发条件 1:真太阳时 14:51 距时辰边界 15:00 仅 **9 分钟(< 15 分钟)**;
- 触发条件 2:place 为模糊地名「中国大陆」。
- 对照盘口径:120°E 不经度修正,即「钟表时 = 真太阳时」→ 15:00 落 **申时**;
故对照盘时柱为 **庚申**。(说明:以 `--place "中国大陆"` 实跑,脚本对主盘照常施加 −8.19 分修正得 14:51;「不经度修正」口径须手工置为钟表时,故对照盘由 15:00 钟表时直接定时柱。)
- 两盘仅时柱不同:主盘 己未(未时)/对照盘 庚申(申时);年月日柱、节令、大运、流年全同。
- 依任务书,**答案行以真太阳时主盘(己未/未时)为准**;与对照盘分歧者于该行行尾标注。
## 二、命盘(真太阳时主盘)
```
年 甲午(伤官) 月 丁卯(偏财) 日 癸酉(日主) 时 己未(七杀)
藏干:午=丁己 卯=乙 酉=辛 未=己丁乙
空亡:日柱 戌亥 时柱 子丑
节令:卯月(惊蛰后、清明前);胎元 戊午,命宫 辛未
大运(顺行,6.02 岁起):
戊辰(6) 己巳(16) 庚午(26) 辛未(36) 壬申(46) 癸酉(56) 甲戌(66) 乙亥(76) 丙子(86)
命带神煞:月德(年干甲)、天乙/福星贵人·文昌·桃花·灾煞·绞煞(月支卯)、桃花·将星(年支午)、
将星·勾煞(日支酉)、月德合(时干己)
```
对照盘(庚申时)差异:时柱 庚申(正印);命带外加 天德、太极贵人、**驿马**、红艳、亡神、孤辰(皆在时支申)。
## 三、取格、成败、用神相神、高低
1. **月令定十神**:月令卯,本气乙木;日干癸(阴水)生乙(阴木),同性 → **乙为食神**(R-纲-00 用神专求月令)。
2. **定格**:定为 **食神格**。月令卯为专气(只藏乙),本气不透;年干透 **甲(伤官)**、月干透 **丁(偏财)**、时干透 **己(七杀)**。月令藏食而伤官透干 → **藏食露伤**(R-食-17:主人性刚)。
3. **成格路径**:命见 财透(丁有根于午、未)与 煞透(己),且 **甲己相合**——伤官(食伤同类)合去七杀,使煞不能为害而财得存,正是 **食神合煞存财**(R-食-08「最为贵格」);亦近 伤官合杀之理。财、煞之间以日干间隔、且煞被合去,故不作 R-食-11「食神透煞忌见财」之破论。
4. **成败与身强弱(R-89)**:日主癸水生卯月失令、泄气;四柱一点水比劫皆无(无壬癸子亥丑),全赖 **日支酉(辛偏印)**生身,而 **月日卯酉相冲**,印星被冲不宁 → **身弱**。食神生财本喜身强食旺(R-食-02),此身弱不任财,格虽成而降等。
5. **用神相神**:身弱,**取印(酉中辛)为用**——生身兼制伤官之泄;相神即此酉印,惜为卯所冲。喜 **比劫(水)**帮身;忌 **财(火)、官杀(土)、食伤(木)**。
6. **格局高低(R-纲-13)**:有情(甲己合煞、食伤生财流通、财气通门户)而非力全(身弱、印被冲、无庚辛透干);气候上癸生卯月「专用庚、辛次之」(R-候-13),本命无庚、仅辛藏酉,**调候不足,成色减**。综合为**中等偏低之富格**,富贵系于行运。
## 四、行运
- **己巳(16-26,1970-1980)**:巳为火(财)、己为杀,身弱不美;然巳酉半合金(印),略有可参。
- **庚午(26-36,1980-1990)**:庚(正印)生身——喜;午(财)助旺财——忌;午午伏吟。
- **辛未(36-46,1990-2000)**:辛(偏印)生身——喜;未(杀/燥土)与命时支未伏吟、土重克水——忌。
- **壬申(46-56,2000-2010)、癸酉(56-66,2010-2020)**:金水比印之地,一生最得力之二十年。
- 喜:金、水(印比)。忌:火、土(财杀)、木(食伤泄身)。
## 五、逐题推理
> 体例:先复述考点 → 推理链(格局行运 → 事件候选 → 排除)→ 选项。双盘分歧处并列。
### 第 1 题(考点:财运形态·财禄)
**推理**:财星丁(偏财)透月干、根于午与未中丁,**财旺**;卯乙食神当令、甲伤官透,**食伤生财、财气通门户**(R-事-02「伤官重而财神流通」爲富象)。然日主癸水**身弱**(四柱无水、仅酉印、卯酉冲印),**财重身轻、身不任财**(R-事-04),故财虽广而难固守、易暴起暴跌;食伤旺者泄身而喜享受、**多花销挥霍**。
- A「普通打工仔」:与财旺、食伤开创之格局及 extra_info(思想进取、善于开创)不合 —— 排除。
- D「守财奴、不喜交际、财源未广」:财透旺则财源广,且命带双桃花(善交际),与 D 相反 —— 排除。
- **B「与朋友长期合作、得助力致富」**:需比劫(朋友/合伙人)为喜用且现身,而**主盘四柱无一点水(比劫全无)**——朋友之星缺席,主盘难成立。
- C「财源广、暴起暴跌、自己多挥霍」:与「财旺透干有根 + 身弱不任财 + 食伤泄身挥霍」最合。
**主盘取 C。** 对照盘(庚申时)时支申藏 **壬(劫财)**,比劫现于支,与 B 有部分支持 → 该题存口径分歧。
### 第 2 题(考点:六亲·父亡应期;父星=偏财丁,父母宫=月柱)
**推理**:父星丁火透月干、根于午未;父母宫为月支卯,且**命局本有卯酉冲**(父母宫与己身宫素相冲)。此期大运 **戊辰(1960-1970)**——辰与月支卯相**害(卯辰害)**、辰湿土晦火,父母宫受累。五组引动(R-运-29 已逐组核对 A 透清/B 会局/C 刑冲害/D 空亡/E 伏吟):
- **1959 己亥**:亥卯未三合木局、亥填日柱空亡、驿马;然木旺反**生**火,父星得生 —— 不合父亡。
- **1963 癸卯**:流年干 **癸(比肩)直克月干丁(父星)**,劫夺父星;卯与月支**伏吟**(父母宫伏吟,主哭泣);丁火**病于卯**(阴干逆行,卯为丁之病地);岁运神煞并见 **灾煞+绞煞**。父亡信号最强。
- **1964 甲辰**:甲(伤官)**生**丁(反为生扶);辰湿土晦火、运年双辰伏吟、卯辰害 —— 有牵动而克父星之力弱。
- **1969 己酉**:酉冲月支卯(父母宫受冲),然酉为**丁之长生**(反生父星);己土泄火。
**主盘取 B(1963 癸卯)**——以「天干直克父星+父母宫伏吟+灾煞绞煞」为断。**本命年月日柱两盘全同,父之判定两盘一致,无口径分歧。**
### 第 3 题(考点:迁移应期·到香港=离乡迁居)
**推理**:印(金)为用神,主居所/文书/身份;迁动求驿马、冲、会合之引动。逐候选核五组:
- **1960 庚子**:子午冲(冲年柱,离祖之象)+子填时柱空亡(子丑)+庚正印透 —— 2 组。
- **1962 壬寅**:寅午半合火+金舆(车马)—— 1 组。
- **1968 戊申**:申(年支午之驿马)与大运辰半合水 —— 1 组(主盘命无申,引动单薄)。
- **1971 辛亥**:辛(偏印)透清命中辛(日支酉)+**亥与命卯、未三合木局**+**亥冲大运巳**(己巳运)+**亥填日柱空亡(戌亥)**—— **4 组,引动最重**;且亥为日支酉之**驿马**,印透主得居所身份。印透(安身)+驿马(迁)+冲大运(大动)+合命局,迁移之象最著。
**主盘取 D(1971 辛亥)**。对照盘命带申(驿马),1968 申伏吟时支亦强,对照盘偏 C(1968)→ 口径分歧。
### 第 4 题(考点:大运疾病)
**推理**:**先辨大运**——本命甲午年卯月、阳年男顺行、6.02 岁起运,虚龄 35-44(约 1988-1997)实历 **庚午→辛未** 运(虚龄 37-47 为辛未),**并非题面所写之「甲戌」**(甲戌为本命第 7 步、虚龄约 67-77)。题面大运名与本命不符,判为题干误标,按实际大运论。
命局总相:**癸水弱、火土燥旺、金水枯(金仅酉且被卯冲)**;辛未运未土(七杀/燥土)与命时支伏吟、土重克水。
- R-性-38「**金水枯伤而肾经虚**」、R-性-34「**忌土而入水则肾病**」→ 病应 **肾/膀胱/泌尿系统**。
- A 呼吸:火旺克金(肺)亦有理,然命金本弱、非主攻方向;B 消化:土旺(脾胃)亦是一说;D 恶性肿瘤:无郁火金生毒之显配。
**取 C(泌尿系统)**(低置信:A 呼吸、B 消化为备选线)。对照盘时支申(金)不改变「火土旺、水弱」之总相,两盘同判 C。
### 第 5 题(考点:子息;子星=官煞,子女宫=时柱)
**推理**:**主盘时柱 己未**——时干 **己(七杀)即子星透**,七杀克身(身弱为忌)→ **「子透破局」**(R-亲-18,虽时支生旺亦难为子息、或子有损);时支未,子星(阳干戊土)临**「衰」**(R-亲-15「衰中二子」)→ 二子之数。又命带**双桃花**(年支午、月支卯)→ 异性缘重,主发妻之外另有情缘(外宠)。1996 丙子年,子与主盘时支**未相害(子未害)**,害及子女宫,恰应「子有损」之象。
**主盘取 B(发妻头胎产子有损;后与外宠产子、母子平安)**——与「子透破局+二子+桃花外宠」最合。
对照盘(庚申时)时干 **庚(正印)=用神透** → 时干有用、主子女贵(R-亲-17);时支申子星临「病」→ 一子,利 C(资优生)/D(留英)→ 口径分歧(对照盘偏 C)。
## 六、存疑与边界
- 本命日主身弱仅一酉印且被卯冲,身弱程度与「食神生财」格之适配为本盘最大张力;已按身弱取印为用。
- 题面第 4、5 题之「甲戌大运(虚龄35-44)」与本命(甲午年卯月顺行、6 岁起运)不符,按实际大运(庚午/辛未)论断,此为题干大运名误标。
- 真太阳时 14:51 距 15:00 边界仅 9 分钟,且出生地模糊,主盘/对照盘时柱分歧(己未/庚申)为题面固有歧义,已按任务书以主盘为准并逐题标注分歧。
## 七、答案
Q1: C # 低置信; 口径分歧: 对照盘=B
Q2: B # 低置信
Q3: D # 低置信; 口径分歧: 对照盘=C
Q4: C # 低置信
Q5: B # 低置信; 口径分歧: 对照盘=C
@@ -0,0 +1,102 @@
# contest8_2021 · male_19700723_P029(游先生)
## 命主信息
- person_id:male_19700723_P029(1970年出生男性·游先生)
- 性别:男
- 出生钟表时间:1970-07-23 08:20(农历庚戌年六月廿一日辰时)
- 出生地(题目原文):中国台湾
- 真太阳时(主盘):1970-07-23 08:19(Asia/Taipei,经度修正+6.24分/均时差−6.44分/合计−0.20分)
- 对照盘:**已排**。触发原因:place「中国台湾」属任务书所列「境外/模糊地名」清单(含「台湾」),故按 120°E 不经度修正口径加排一盘。
- 对照盘真太阳时 08:14(`--place "中国大陆"`)。**两盘四柱完全相同**(庚戌/癸未/甲辰/戊辰,同为辰时),仅真太阳时差 5 分钟,**不构成口径分歧**,下文只列一盘结论。
## 命盘
- 年柱 庚戌(七杀) · 养
- 月柱 癸未(正印) · 墓 ← 月令未
- 日柱 甲辰(日主) · 衰
- 时柱 戊辰(偏财) · 衰
地支藏干:戌(戊辛丁)/未(己丁乙)/辰(戊乙癸)/辰(戊乙癸)
空亡:日柱空亡 寅卯;时柱空亡 戌亥(年支戌落时柱空亡)
神煞要点:华盖(戌、辰、辰三见)、天乙贵人(日干甲见月支未)、金舆(辰、辰)、十灵日、十恶大败(日柱甲辰)、童子煞(辰、辰)
节令:月令未,小暑后、立秋前;命宫壬午
## 取格 → 成败 → 用神相神 → 高低
**月令与十神**:月令未,未藏己(正财)、丁(伤官)、乙(劫财),本气己土为日干甲木之正财 → **财格**(R-财-01)。四柱天干庚(七杀)、癸(正印)、甲(日主)、戊(偏财);未中三干皆不透,年月时三干为外来的煞、印、财。
**力量**(参 R-旺-05、R-纲-13):地支戌未辰辰四土,财极旺而身弱。甲木生未月为墓,仅得辰辰未中乙木为余气微根,天干无木比帮身 → **身弱财旺**。
**配合**:戊(偏财,时干)透一位清用(R-财-02);庚(七杀,年干)透而财生煞,财党煞攻身为忌;癸(正印,月干)透,既化煞(金生水)又生身(水生木),为全局最要之救应。属「财格佩印」兼「财党煞得印化」之局(R-财-07、R-财-19)。财印之间以日干甲隔位,不相贴相克(R-财-07 成格条件成立),但戊癸隔位相合、财有坏印之意,格局遂成而带疵(参 R-财-21、R-财-14 之警戒)。
**用神相神**:月令用神为财(戊、己土);相神为癸水正印(化煞、生身、护格),兼取辰未中之乙木比劫帮身。忌神为财过旺不受身任(坏印、党煞)、及七杀庚直接攻身。
**高低与气候**:财旺而无强根之比劫、印单而带合,属「有情而力不全」一格,非上乘贵格,主凭才艺/文凭与实务谋生、为财操劳;未月三伏,土燥木渴,财重身轻,须水润木、木帮身(参 R-候-04 六月甲木,调候参看层,不改格局)。作富局/中小成之命看,不作贵格看。
## 大运喜忌(依 R-财-23~30、R-运-27)
- 甲申(5–15)/乙酉(15–25):比劫帮身、申酉官杀金。帮身与杀攻并见(乙酉运辰酉合金,官杀结党),少年学龄期身弱逢官杀为忌,学业受压。
- 丙戌(25–35):丙食神制杀(喜)+戌偏财(忌),食神生财、技艺谋生之象。
- 丁亥(35–45):丁伤官制杀(喜)+亥正印帮身、亥未半合木局(比劫,喜)——**一生最顺之运**。
- **戊子(45–55,即第22题的45–54岁)**:戊偏财透,财星重出、又隔位合癸印(财旺坏印,忌);地支子正印,与命局辰辰半合水局(印局,喜),帮身化煞。一运之内干忌支喜——**起伏**。
- 己丑(55–65):己丑财星叠见,且丑与年支戌、月支未构成丑戌未三刑、丑未相冲,财库动而身益弱。
---
## 逐题推理
### 第21题(婚姻状况与学历)
- 考点:财为妻、印为学历,看妻宫刑冲与印星得失。
- 妻星(财):戊偏财透时干,正财己为本气,财星根深成格。妻宫=日支辰,辰中坐戊偏财(财为格局用神),又带金舆——「妻宫坐财,妻当贤贵」,妻星透而成格主内助(R-亲-05、R-亲-10)。**但日支辰与年支戌相冲、又与时辰自刑**——正应「妻宫有用而坐下刑冲,未免得美妻而难偕老」(R-亲-12),财复党煞攻身(R-亲-25 凶组)。妻星妻宫虽美,刑冲终动其宫,主婚姻曾生大波折。
- 学历(印):癸正印透月干、坐天乙贵人(日干甲见未),为喜用之神,「孤财不贵,佩印帮身,即印取贵」(R-财-07)——即凭文凭取身价;命带三重华盖、日柱十灵日(R-煞-08、R-煞-29),主聪明向学。虽财有坏印之意,然财印隔位不相贴,印透有根(辰中癸癸),学历以中上断。
- 结论:婚姻经波折(离),学历中上(高级大学)——**C**(低置信:婚姻项与「财为格局用神→妻贤→已婚」一路相左,二读并存)。
### 第22题(45–54岁/戊子运工作运)
- 考点:戊子大运对财格身弱之喜忌。
- 戊偏财透=财格得财、事业财禄之象;地支子正印与命局辰辰半合水局,印星成局帮身化煞,身弱能任财。运逢「财+印」——财格佩印最喜印旺(R-财-26),身得帮而能担财;大运又逢将星(掌事自主)、福星贵人、太极贵人(R-煞-09、R-煞-23),主独当一面、衣食有靠。
- 反向:戊土偏财为扶抑忌神、且隔位合癸印(戊癸合)有坏印之嫌,财多身弱本主为财操劳;故取**自行创业、事业有声有色**一路。
- 结论:**B**(低置信:与「财多身弱、财运起伏」的 D 一路接近,二者择一)。
### 第23题(个性智慧/52岁父母状况)
- 考点:性情(参 93)+父母宫(月柱)。
- 性情:甲木日主宜正宜刚,然身弱财旺、七杀庚透——欲多力薄、性急而易动摇;命带三重华盖(孤高、艺文、玄学、想象力)与十灵日(聪明灵慧),主思致活跃而不易专守。取「想象力丰富但定力不足,急躁」。
- 父母:月柱癸未为父母宫,月干癸正印为母、透而带天乙贵人;财为父、根深有力。命主壮年已越五十,父母有寿根之象,2021辛丑虽逢丑未冲、丑戌未三刑动父母宫,然丑又为日干甲之天乙贵人,动而有解——从**父母健在**一路。
- 结论:**A**(低置信)。
### 第24题(2020年事项)
- 考点:2020庚子流年引动(R-运-29 五组、R-运-34)。
- A透清:流年干庚透出年干七杀,杀重攻身(庚锐克甲)。
- B会局:流年支子与大运支子伏吟,子辰辰半合水印局,印重。
- C刑冲:子害月支未(子未害);子伏吟大运子。
- D空亡/E伏吟:大运干戊与流年无空支填冲;子子伏吟成立(E)。
- 合成:庚七杀临身克日主(木主肝胆、筋骨、头部),又逢**灾煞**(以年支戌查,寅午戌见子,2020子支正逢灾煞——血光、意外、急症、开刀之象,R-煞-35),子未相害动月支(R-运-31)。杀攻身+灾煞并见,主身有伤损之应。
- 结论:**B(身体不佳住院开刀)**(低置信:C 合伙创业(无透比劫、仅印局,信号弱)、D 官非牢狱(有印化煞,不至)皆降为备选)。
### 第25题(52岁/2021健康)
- 考点:四柱五行偏枯与疾病(参 93 R-性-34、R-性-38)。
- 命局土(财)极旺,木(日主)弱而受金(杀)克:土旺则脾胃/肠胃易病;水(印、辰癸辰癸)偏多主嗽(肺、呼吸);火(丁藏戌未)微弱,心火不足。2021辛丑,丑未冲、丑戌未三刑齐动,土性受冲刑而病应脾胃。
- 结论:**C(肠胃心肺机能不佳)**。
---
## 存疑与边界
- 本盘格局成而带疵(财煞并透、印单带合),第21题婚姻项「财为格局用神→妻贤→已婚」与「妻宫辰戌冲自刑→难偕老→离婚」两读并存,取后者(R-亲-12 明确),故标低置信。
- 第22题戊子运干忌支喜,B 与 D 力度相近,取喜神印局帮身一路(B),标低置信。
- 第23题个性 A/B 两读皆通,取华盖+十灵之「想象力丰富、定力不足」一路(A),父母项取「冲刑有贵人解→健在」,标低置信。
- 第24题于 2020 庚子杀攻身、兼逢灾煞取「住院开刀」(B),其「与朋友合伙创业」(C)、「官非」(D)降级备选,标低置信。
- 第25题取 C,中低置信。
- 未触碰任何禁区文件、未联网。
- 答案行按本命主题序 1–5 输出(对应 question_id P029-Q21…P029-Q25)。
Q1: C # 低置信
Q2: B # 低置信
Q3: A # 低置信
Q4: B # 低置信
Q5: C
@@ -0,0 +1,150 @@
# contest8_2021 · male_19710910_P033
## 命主信息
- person_id:male_19710910_P033
- 性别:男
- 出生钟表时间:1971-09-10 10:31(广东潮汕)
- 真太阳时:1971-09-10 10:20(经度修正 -13.28 分,均时差 +2.64 分,合计 -10.64 分;时区 Asia/Shanghai,无夏令时)
- 题面:current_year = 2021
- **对照盘:不排。** 理由两条都不触发——① 真太阳时 10:20 距时辰边界(巳午之交 11:00)尚差 40 分钟,≥15 分钟;② 出生地「广东潮汕」为境内常规地名,不属题书列举的境外/模糊地名(美国、中国大陆、日本、马来西亚、新加坡、台湾、香港)。故只以真太阳时主盘作答。
---
## 一、命盘要点
四柱(真太阳时):
| 柱 | 干支 | 十神 | 支中藏干 | 十二长生 |
|---|---|---|---|---|
| 年 | 辛亥 | 伤官 | 壬(偏财)、甲(七杀) | 绝 |
| 月 | 丁酉 | 正印 | 辛(伤官,本气) | 死 |
| 日 | 戊戌 | 日主 | 戊(比肩)、辛(伤官)、丁(正印) | 墓 |
| 时 | 丁巳 | 正印 | 丙(偏印)、庚(食神)、戊(比肩) | 临官 |
- 空亡:日柱辰巳、时柱子丑。**时支巳落空亡。**
- 神煞(读盘直取):日柱魁罡(戊戌)、十恶大败;日支戌为华盖、寡宿;时支巳为禄神、驿马、亡神;年支亥劫煞、天德合。
- 命宫辛卯,胎元戊子。节令:白露后、寒露前,月令酉。
## 二、取格(依 00_总纲_取格.md §1 六步)
1. **定月令**:月柱丁酉,月令为酉。
2. **月令十神分类**:日主戊土,酉之本气为辛金,戊生辛、阳生阴为**伤官**。→ 定格**伤官格**(R-伤-01)。
3. **藏干变化**:酉为专气,只藏辛。辛透年干(年柱辛亥),月令本气与透干同气,格稳,不变他格。
4. **会支变化**:原局无三合三会动月令,格不变。
5. **定格**:**伤官格**。
6. **外格闸门**:月令自有用神(伤官),且干头有官杀财(亥中甲、壬)可参,不入杂格。
## 三、成败、用神相神与格局高低
**伤官逆用,两途**:宜佩印制之,或生财化之(R-伤-01)。
- 生财一路:财为壬水,仅藏年支亥中,一位、不透,且**与日支无根、被时支巳冲(巳亥冲)**——财弱而受伤,伤官生财「成而不全」,且冬金(秋金)生财本不贵之嫌(借 R-伤-19 之意),故生财一路走不通。
- 佩印一路:**丁火正印两透(月干、时干)**,且印有实根——时干丁通根时支巳(巳中丙),月干丁通根日支戌(戌中丁)、又丁长生于酉;伤官辛金当令且透干,伤旺。伤旺、印透而根深,正合 **R-伤-06 伤官佩印** 之格。
**定局:伤官佩印,成格。** 用神为**丁火正印**(制伤护身),相神即印星自身及帮身之比劫(戌、巳中之戊)。
**身强弱的判读**:日主戊土生酉月失令(死地),但日坐戌土(比肩通根)、时得巳禄(戊之临官),又得双丁印生——**身不弱,趋中和**。故触 R-伤-06「反要伤官旺、身稍弱」之边界、又不至 R-伤-12「伤轻身重而印绶多见」之破格(伤官不轻,月令+透干);依 16_伤官格.md 补注,作**「成格而降等」**论。
**带忌**:年支亥中壬偏财暗伏(财坏印之根),亥又与时支巳相冲(巳亥冲,冲动禄、印根与财杀之支)。此为全局之暗礁:**财星一动即坏印**,是断运的关键钥匙。
**气候参看(R-候-08 戊土八月)**:「金泄身寒,赖丙照暖,喜水滋润,先丙后癸,不必木疏」。命中丙藏巳、丁双透,火暖有根,调候之「丙」基本到位;亥水壬为滋润之源(惜藏而被冲)。调候与格局方向一致(火印为喜),减色处只在财星弱而受伤,成色由秀而中上,**不主大富,主技艺、专业与文书之学**。
**格局高低(R-纲-13)**:有情(印制伤、印得生根)而非情之至;有力(用相根深)而非力之全。定为**中等偏上**。魁罡日(R-煞-27)主聪敏果断、临事有威;十恶大败日主财来财去、不善积财——两者叠加,是「有本事、能掌事,但钱财聚不住」之象。
## 四、行运喜忌基线(16_伤官格.md R-伤-23 / 90_行运.md §7)
**伤官佩印取运:行官煞为宜(官煞生印),印运亦吉,伤食不碍,财地则凶**(R-伤-23)。合命:喜木(官杀,生印)、火(印,帮身制伤)、土(比劫,帮身);忌水(财,坏印破格);金(伤食)不碍亦不助。
大运逐段(逆行):
| 大运 | 年龄 | 喜忌判定 |
|---|---|---|
| 丙申(1972) | 1–11 | 丙印透为喜(调候所需),申为食神泄秀——幼年平顺偏吉 |
| 乙未(1982) | 11–21 | 乙正官生印为喜,未土帮身——学业成长之吉运 |
| 甲午(1992) | 21–31 | 甲七杀生印 + 午火印刃——**官杀+印双喜,青年最顺**,升学/入职/成长期 |
| 癸巳(2002) | 31–41 | 癸正财透本为忌,然戊癸相合、巳火帮身,喜忌相抵——中平,成家立业、财有所积 |
| 壬辰(2012) | 41–51 | **壬偏财透干,财坏印之忌运**(R-运-03 伤官佩印而行财运);辰又六合月令酉(辰酉合金)助伤、辰为湿土晦火损印——**十年基调为破财、事业受挫**。本批三题(2016–2019)全落此运 |
| 辛卯(2022) | 51–61 | 辛伤官透为忌,卯正官生印、卯戌合火为喜——先抑后扬 |
**关键**:壬辰运是「财坏印」的败运基调,凡流年再引动财星或助伤,即为滞、为耗、为不顺之应期年。
## 五、逐题推理
### 第 1 题(题目问「截至 2018 年的事业状态」)
**考点**:命主截至 2018 年的职业/事业形态(出身与事业线)。
**推理链**:
- 格局 = 伤官佩印,身中和,财弱而受伤→**不宜大商、难致大富,宜靠技艺/专业/文书立身**;日柱魁罡「临事有威、能自掌事」,十恶大败「财来财去、不擅积财」。
- 行运:甲午(21–31)官印双喜,是学艺/入行/上进的十年;癸巳(31–41)财官相抵、巳火帮身,为积财成家阶段;壬辰(2012 起)财坏印忌运,**事业转入下坡**。此即「截至 2018 年」之境:一个有手艺/有一摊事、却在走下坡、被钱所困的人。
- 逐项排除:
- C「大型机构高级技术顾问」、D「电讯门市销售员」——皆为受薪雇员。但第 2 题四个选项一律以「整年赚不到钱/赚小财/多赚 8 倍/大赚其财」这种**收入年度剧变**的口吻设问,说明命主是**自负盈亏、收入随经营起落**的自营者;受薪顾问与门市销售员无「破产隐忧」可言,与设问口径不合,排除 C、D。
- B「艺术家靠绘画赚钱」——伤官固主秀气,但此盘印双透、印亦有实根,气质偏「专业/文书/技术」而非纯艺术,且无纯艺术格之实据,不作首选。
- A「小商人,在内地开厂」——自营、收入随经营剧变、有破产之虞,与设问口径及「十恶大败、财来财去」之象最合。
- **结论:A**。
### 第 2 题(题目问 2016 及 2017 年的经历)
**考点**:2016、2017 两年的经营/财运顺逆,属流年应事回溯。
**断年核对(依 R-运-34 五步,重查 §7 序、分格取运条 R-伤-23、R-运-29 五组、R-运-31 映射)**:
**2016 丙申**(大运壬辰,财坏印之忌运背景)
- A 透清:流年干**丙**为偏印,命中巳中藏丙,丙透 = **透清喜神**(吉向)。
- B 会局:流年支**申** —— 命有酉(月支)、戌(日支),申来则**申酉戌三会西方金局**,伤官成局大旺(忌向,泄身、克官、生财坏印)。
- C 刑冲:**巳申刑合**(合则化水为财,又刑动时支),**申亥相害**(害年支财杀之根)。
- D 空亡:不涉(辰巳空,申不填)。
- E 伏吟反吟:无。
- 神煞(query_shensha 实查):丙申逢**驿马**(迁动、外出、场所变更)、**劫煞**(破耗争夺)、**文昌**、福星贵人。
- 合成:喜在干(丙印)、忌在支(会金局+刑合),**支之忌得会而动**,且带劫煞破耗、又逢驿马冲动——读作「局面变动、奔波、破耗,进项不聚」。印虚(丙坐申为病地,印无根)不足以制旺伤。
- → **2016 事业不顺、整年赚不到钱**。
**2017 丁酉**(同运)
- A 透清:流年干**丁**为正印,命中双丁透、戌藏丁,丁透 = 透清喜神(吉向);且丁通根于流年坐支酉(丁长生酉),**印实有力**。又**丁与运干壬相合**(丁壬合),合绊壬财——**去忌神**(吉向)。
- B 会局:流年支**酉**与运支**辰**六合(**辰酉合金**),又与命时支巳半合金——助伤官(忌向)。
- C 刑冲:**酉戌相害**(害日支、妻宫)。
- D 空亡:不涉。
- E 伏吟:酉与月支酉**伏吟**(伤官本气重现)。
- 神煞:丁酉逢**灾煞**(小凶),无劫煞。
- 合成:天干**印实且合去忌财**(吉向直捷,R-运-19 干动为应),地支伤旺(忌向但只在泄)。吉在干、忌在支而力平——读作「平中见顺、小有进项」。
- → **2017 平中见顺,赚得小财**;因 2017 **无劫煞**,作「破产隐忧」的力度依据不足,排除「更不顺、有破产隐忧」。
- **结论:b**(2016 事业不顺、整年赚不到钱;2017 平中见顺、赚得小财)。
### 第 3 题(题目问 2019 年的状况)
**考点**:2019 年事业财运 + 妻/子息应事(得子 vs 流产),多线合一。
**断年核对(R-运-34 五步)**:
**2019 己亥**(大运壬辰)
- A 透清:流年干**己**为劫财(帮身而分夺财货);命中无己透、亥中有物可牵,透清不显喜神。
- B 会局:流年支**亥** —— 与年支亥相**伏吟**(财、杀之支重现),与运支辰无合无会。
- C 刑冲:**巳亥相冲**——流年支亥冲时支巳(冲禄、冲印根丙、冲子息宫)。仅此一冲(R-运-29 仅 C 一组,止于年,不下流月)。
- D 空亡:时支巳落空亡,亥来冲空之巳(冲空激起)。
- E 伏吟:**流年支亥与年支亥伏吟**。
- 神煞(实查):己亥逢**天德合**(遇险得解之吉神)、**劫煞**(以日支戌查,见于亥——破耗争夺)。
- 方向判别(R-事-11/13,C 组命中先定方向):
- **事业线**:干为劫财(分夺)、支为财星伏吟且冲禄坏印——**忌神财动而禄、印受冲**,印为用神,用神受冲刑 → **凶向**(阻滞、破耗)。
- **子息线**:子星为官杀之甲木(藏亥)。甲长生于亥,流年亥再来**亥亥伏吟**,**子星得地而增强、且为喜神**(官杀生印);子息宫(时支巳)被冲——依 R-事-13「子星强而得地、为喜用者,冲动多应得子」。且带天德合,逢凶得解。
- 合成候选:①事业受阻滞、耗财(劫财+财动+冲禄坏印,且有劫煞)——主候选;②家中添丁(子星得地得喜,冲动子女宫)——次候选;③妻宫(日支戌)未受正冲(酉戌害为轻),妻身安。
- 逐项排除:
- b/c 皆言「事业顺畅、大赚其财」——与壬辰财坏印忌运基调、劫财夺财、冲禄坏印之向背相反,排除。
- c/d 皆言「太太流产兼住院」——需子星受伤被克、子女宫逢冲无解;此处子星甲木得亥长生、又逢亥亥伏吟而增强,且逢天德合解厄,不符,排除。
- **结论:a**(事业多有阻滞、耗财不少,但喜得麟儿)。
---
## 存疑与边界
- 第 1 题:伤官佩印「身不弱」处成格降等之边界,档次在「专业/自营」之间;最终以第 2、3 题设问口径(收入随经营剧变、存在破产隐忧)反证为自营小商人,非受薪顾问。判 A 置信度中等。
- 第 2 题:2017 顺逆取决于天干印(喜)与地支合金(忌)的权重,此处以「干动为应、去忌财」为主,倾向平中见顺。**低置信**,主要备选为 a(2017 更不顺)。
- 第 3 题:2019 子息方向依 R-事-13 以「子星得地、为喜用」断得子;若从「冲子女宫」直取亦可读流产,两向并开,此处取吉向。**低置信**,主要备选为 d。
- 未排对照盘(真太阳时距边界 40 分钟、地名境内),无口径分歧。
---
Q1: A
Q2: B
Q3: A
@@ -0,0 +1,121 @@
# contest8_2021 · male_19770706_P028 求解留档
## 一、命主信息
- person_id:male_19770706_P028(题面名「1977年出生男性」)
- 性别:男
- 出生钟表时间:1977-07-06 13:00(题面 raw:「1977-07-06 未时 台湾出生」)
- 出生地:中国台湾(题面 place 原文)
- 主盘真太阳时:1977-07-06 13:01(时区 Asia/Taipei,经度+均时差合计修正 +1.87 分;无夏令时)→ 时柱 **辛未**
- **排了对照盘**。触发原因有两项同时成立:
1. place 为境外/模糊地名(「中国台湾」在触发清单内);
2. 主盘真太阳时 13:01 距时辰边界 13:00(午/未交界)仅 **1 分钟**(<15 分钟)。
- 对照盘口径:120°E 不经度修正,`--place "中国大陆"` → 真太阳时 1977-07-06 **12:56**(未到 13:00)→ 时柱 **庚午**。
- 主盘与对照盘仅时柱不同:主盘 辛未(正官/时支未土财库),对照盘 庚午(七杀/时支午火)。
- **答案行以真太阳时主盘为准**;对照盘分歧处正文注明(本题面 raw 已明写「未时」,故主盘辛未为定盘,对照盘仅作品字)。
## 二、命盘要点(主盘:丁巳 丙午 甲子 辛未)
- 四柱:年 丁巳(伤官)· 月 丙午(食神)· 日 甲子(日主)· 时 辛未(正官)。
- 地支藏干:巳(丙食神·庚七杀·戊偏财)、午(丁伤官·己正财)、子(癸正印)、未(己正财·丁伤官·乙劫财)。
- 空亡:日柱、时柱同空戌亥。
- 节令:月令午,生于芒种后、小暑前(小暑 1977-07-07 13:47,距出生不足 1 日——月令对记录误差较敏感,但题面已明写未时且月令由日期定,无跨月之虞)。
- 神煞(细节层):文昌(巳)、劫煞(巳)、地网(巳)、月德(丙)、太极贵人(午/子)、桃花(午)、红艳(午)、灾煞(午)、福星贵人(子)、将星(子)、月德合(辛)、天乙贵人(未)、童子煞(未)。
- 大运(逆行,起运 10.13 岁):乙巳(1987) → 甲辰(1997) → 癸卯(2007) → **壬寅(2017)** → 辛丑(2027) → 庚子(2037)……
## 三、取格与成败(主盘)
1. **定月令**:月柱丙午,月令午。午本气丁(甲木之伤官)、中气己(正财)。
2. **月令十神分类**:以日干甲对月令本气丁 → **伤官**当令。→ 定格 **伤官格**(R-伤-01)。
3. **会支变化(关键)**:年支巳、月支午、时支未 **三会南方火局(巳午未)**,天干丙(食神)、丁(伤官)双透。月令之气尽化为火(R-纲-08 会支变化),食伤极旺。
4. **辨身强弱(R-89 参看)**:甲木生午月失令(死位),泄于满盘火;仅日支子水正印贴身、时支未中乙木为微根(且被火局焚弱,子水又被午冲)。→ **身弱**,伤官旺、食伤混杂(丙丁并透)。
5. **成败判定**:伤官凶神宜逆用(R-纲-01)——
- 财星己土深藏月/时/年支,**不透干**,伤官生财一路(R-伤-03)虽具其质而言不上透清;
- 印(子中癸)藏于日支贴身,可作 **伤官佩印** 之形(R-伤-06),且甲木夏月得水正合「夏木逢润、佩印秀百倍」(R-伤-18、R-伤-20)——但印不透干、子水受午冲,根不深,只算 **成而带忌**;
- 时干辛金正官被年干丁伤官直克(伤官见官),又被月干丙食神合(丙辛合、火旺不化,为合绊)——官星受伤,属「伤官见官」之忌。
- **结论:伤官格,身弱,成中带忌**。以 **子水正印为用神**(生身 + 制伤 + 调候),印为相;忌食伤火(泄身)、财土(耗身党煞)。
6. **气候(R-候-04·甲木五月)**:五月甲木「先癸后丁,庚次之」;忌「行运忌火地(木化成灰)、忌西方,惟东方吉、北方次之」。本盘癸水藏子不透且受冲,调候得力有限;喜水润、喜东方木运。
7. **格局高低(R-纲-13)**:夏木逢润本为秀气高处,然印根浅、子午相冲、伤官见官——**有情而非情之至、有力而非力之全**,中上之局,凭运而发。
## 四、行运喜忌(R-运-27 断运四步)
- 基线(伤官佩印取运,R-伤-23):**行印运(水)吉、比劫运(木)吉;伤食运(火)无碍至泄;财运(土)凶**。
- 逐运:
- 乙巳(1987-1997):巳火助燥、乙木帮身有限 → 平常偏忌。
- 甲辰(1997-2007):甲比肩帮身,辰湿土晦火、且**子辰半合水局**生身 → 转吉,学业/立身之段。
- 癸卯(2007-2017):癸正印透(喜)、卯为甲木羊刃帮身、卯未拱木 → **最吉之运**,身转强可任财 → 婚姻、得子、事业成家在此十年。
- **壬寅(2017-2027)**:壬偏印透(印运吉,R-伤-23「印运亦吉」)、寅为甲木禄根帮身;寅午半合火局亦助其势。→ 印比齐至、自立有根之运,事业上行/自立门户之机。
- 辛丑(2027-):辛正官透(伤官见官之忌再现)、丑湿土晦火略解燥 → 平中带警。
## 五、逐题推理
### 第 1 题(Q16 个性特征)
- 考点:性情(R-93 参看层,叠加于格局之后)。
- 推理链:甲木日主,满盘火(巳午未三会),木尽泄于火、无金水相济——正合 **「木奔南而软怯」**(R-性-05):「其性软怯……发泄太过者聪明自恃、多迁变不常,成姑息繁缛之仁;木尽泄于火而无水金相济者……作事狐疑少决断」。伤官旺(秀气)主想法多、才华外露,而身弱无强根(子水受冲、木被火焚)主落不到实处——**想法多而不切实际、爱做白日梦**。
- 排除:孤僻(A)与「木奔南」之软怯不合,且命带桃花红艳、伤官外向;中规中矩(C)与伤官不受拘束之性格相反;火爆生事(D)属火日主「火烈性燥」之象(R-性-03),本盘日主为木非火,火为泄神非日主本色,R-性-05 明言木奔南为「软怯」而非刚暴。
- **取 B**。
### 第 2 题(Q17 曾做过什么工作)
- 考点:职业事类(十神×宫位×五行取象,R-运-31)。
- 推理链:伤官当令(伤官>食神,业务/推销/才艺型输出),官星被伤合 → 不宜体制内固定公职;财星己土(正财)藏支——靠自身口才与专业输出取财(伤官生财)。火旺为「快节奏、投机、口才、服务」之象,财随火生。取象落于 **金融/证券之营业销售**(伤官口才 + 财 + 火之快动),非会计(需印之文书细致,本盘印弱不透)。
- 与第 3 题互证:第 3 题「创业开证券公司」之选项与本格伤官生财、且命主本业在证券一线相衔(证券营业员 → 创业证券公司),叙事一致。
- 排除:会计(B,印弱不透,文书项非所长);厨师(C,食神主厨,然本盘伤官当令、伤官为主非食神);房屋仲介(D,土财之固定不动产象,较证券稍次——保留为备选)。
- **取 A**(低置信,D 为备选)。
### 第 3 题(Q18 2017 年起壬寅大运工作变化)
- 考点:大运引动之事业变化(R-运-27~32)。
- 推理链:壬寅入运(2017 交运)。
- 运干壬水偏印透 → 印运,伤官佩印「印运亦吉」(R-伤-23),帮身制伤,为 **喜**;
- 运支寅为甲木之禄(本气根)→ 印比齐来,身弱转强、自立有根;
- 寅与月支午半合火局,才华动力再盛。
- 身弱伤官格得印比之运 = 有实力自开门户、事业扩张之期。伤官格本性独立进取(不受拘束、创业精神),壬寅印比之运给足底气 → **创业/自立门户**。
- 排除:公职人员(A,官弱且伤官见官,不宜体制);学校老师(B,印弱且非本命主线);盖庙当庙公(D,偏印枭神兼命带童子煞虽带宗教缘,然伤官旺者主世俗进取、奉势趋利——R-性-14「浊则刚猛……奉势趋利」,与遁入庙务之象相左;降为备选)。
- **取 C**(低置信,D 为备选)。
### 第 4 题(Q19 那一年结婚、几个小孩)
- 考点:婚姻应期 + 子息数(R-96 六亲,叠加于格局之后)。
- 推理链:
- 妻宫 = 日支子(正印),妻星 = 财(己土正财,R-亲-02「正财为妻」),深藏月/时/年支不透(财星深伏,R-亲-27 宜引动);
- 妻宫子水被月支午冲(子午冲)——妻宫动荡,然印为身弱之喜用,算「妻宫有用而坐下刑冲」,主得妻而防波折(R-亲-12);
- 命带童子煞(时支未)主婚缘迟滞 → 婚姻多不宜太早(排除 2004 甲申 27 岁之选项 A,且 2004 甲申天干甲为比肩争妻);
- 大运 **癸卯(2007-2017)**:癸正印透、卯为甲木羊刃帮身、卯未拱木 → 身转强可任财,**婚姻、育子之窗口在此十年**;
- 应期年比对五组引动(R-运-29):
- **2009 己丑**:己为正财透干(正财为妻,妻星明现,A 组透清)+ 丑与日支子相合(婚姻宫合动,解子午之冲)+ 丑冲时支未(子女宫被引动)+ 丑为日干甲之天乙贵人(贵人临门之喜)→ **多重引动、且正向**;
- 2008 戊子:戊偏财透 + 子伏吟日支(E 组),信号较弱、偏财主偏。
- 子息:男命以官煞为子星(R-亲-02),时干辛(正官)被丁伤官直克、又逢丙辛合绊 → 时干子星受伤破局(R-亲-18「时干不好、子透破局……难为子息」)→ **子息不多,一个**。
- **取 C**(2009 年己丑年,一个小孩)。
### 第 5 题(Q20 健康如何)
- 考点:健康(R-93 疾病篇参看层)。
- 推理链:
- 全局火炎土燥(巳午未三会火局 + 丙丁双透),日主甲木被泄被焚——「火多主痰」(R-性-38),木属风、火旺焚木成风痰;
- 用神/调候神为子水(癸,夏木之润),然子水**既被午冲、又与未相穿(子未害)**,又受满盘火土熬逼——**阳亢阴弱**(R-性-33「火旺水涸」之火颠倒相克);
- 五行配脏:水主肾与脑(肾生髓通脑),甲木主头、肝胆、神经。子水受穿受冲、木被火焚 → 病位落于 **水(脑/肾系)与木(头)**,与选项「子水受穿,阳亢阴弱,头部有颗小肿瘤」之病机一一对应;
- 命带灾煞(午)、童子煞(未)亦主多灾病之细节参看。
- 排除:A「火旺心脏有问题」——火虽旺,然日主为木,火为泄神而非日主本色,病机落点在受冲受伤之 **子水与甲木(头)**,非以火直断心脏;B「辛金克身、丙辛合、精神有问题」——辛官被合克属实,然官非病神主线;D「一生无病痛」与火炎土燥、用神受冲之象显然相悖。
- **取 C**(中低置信)。
## 六、对照盘(120°E 无经度修正,真太阳时 12:56 → 时柱庚午)分歧说明
- 对照盘四柱:丁巳 丙午 甲子 庚午(时干庚七杀、时支午)。差异:火更旺(巳午午)、时干由辛正官变庚七杀、时支未土消失。
- 逐题影响:
- 第 1 题:同 B(火更旺仍主泄气太过、木奔南软怯)。
- 第 2 题:庚煞透干,或可参「伤官用煞」取武职/纪律性行业,取象游移,主盘仍取 A。
- 第 3 题:壬寅大运同,仍 C。
- 第 4 题:对照盘时支午(庚金沐浴=二子常数),子息数或作二;婚姻应期年份不变(正财透仍在 2009 己丑)——然题面 raw 明写「未时」,主盘辛未为准,仍取 C。
- 第 5 题:对照盘无未支 → 「子未相穿」不成立,唯余子午冲,选项 C 之前提「子水受穿」落空,对照盘倾向于 A;**主盘为准,仍取 C**。
- 结论:以真太阳时主盘(辛未)为准作答;对照盘仅第 5 题(及第 4 题子息数)有实质分歧,已如上注明。
## 七、存疑与边界
- 本盘时柱正处午/未交界(真太阳时 13:01),题面 raw 明写「未时」,故定辛未主盘;对照盘庚午并陈备核。
- 伤官佩印之印(子水)不透干且受冲,成格之力打折,属「成而带忌」,格局中上;若印得生扶(水运)则秀气大显。
- 第 2、3 题为取象类(职业/事业),伤官格身弱火旺之主流取象为「业务/技艺/自立创业」,选项之间存游移,已标低置信并留备选;第 5 题为主盘病机最贴合之项,亦标中低置信。
---
Q1: B
Q2: A
Q3: C
Q4: C
Q5: C
@@ -0,0 +1,133 @@
# contest8_2021 · male_19831019_P026 解答
## 一、命主信息
- person_id:male_19831019_P026(1983 年出生男性)
- 性别:男
- 出生钟表时间:1983-10-19 09:58(Asia/Singapore,该时区当无夏令时)
- 出生地:新加坡(境外地名)
- 真太阳时(主盘):1983-10-19 09:08(经度修正 −64.60 分 / 均时差 +15.11 分 / 合计 −49.49 分)
- 排盘结果:四柱 癸亥 壬戌 庚辰 辛巳(起运 3 岁 4 个月,逆行)
- **对照盘:已排。触发两条**:① 出生地「新加坡」属境外地名;② 主盘真太阳时 09:08 距时辰边界(巳时起点 09:00)仅 8 分钟,小于 15 分钟。
对照盘口径 `--place "中国大陆"`(副本解析为 120.16E / Asia/Shanghai,钟表时=真太阳时)→ 真太阳时 1983-10-19 10:13。
**对照盘四柱与主盘完全相同(癸亥 壬戌 庚辰 辛巳),仅起运微差(3.39 vs 3.41 岁),四柱与大运干支一律相同**——两盘无口径分歧,下列各题结论两盘一致,无需分歧标注。
> 排盘命令:`ZIPEC_EVAL=1 python scripts/cast_chart.py --name male_19831019_P026 --gender 男 --birth "1983-10-19 09:58" --place "新加坡"`(及 `--place "中国大陆"`);两次退出码均 0,无异常。
---
## 二、命盘要点
```
年 月 日 时
天干 癸 壬 庚 辛
伤官 食神 日主 劫财
地支 亥 戌 辰 巳
食神 偏印 偏印 七杀
藏干 壬甲 戊辛丁 戊乙癸 丙庚戊
```
- 十神分布:日主庚金,月令戌(本气戊土=偏印),透干壬(食神,月)、癸(伤官,年)、辛(劫财,时)。
- 五行:土(戌辰+巳戊,印)最重且当令;水(壬癸亥+辰癸,食伤)次重而流通;金(庚辛+戌辛巳庚,日主与比劫)得印生而旺;火(戌丁+巳丙,官煞)极弱而藏;木(亥甲+辰乙,财)弱而藏。
- 显著结构:辰戌冲(月日相冲,妻宫被冲);庚辰日=魁罡、十恶大败日;月支戌为红艳+金舆;时支巳为驿马+劫煞+地网;年支亥为亡神+文昌+太极贵人;年柱纳音大海水命,辰巳为地网。
- 节令:生于寒露后、立冬前,戌月戊土司令。
---
## 三、取格(依《子平真诠》月令取格六步)
1. 定月令:戌;藏干戊(本气)、辛、丁。
2. 月令十神:日干庚对戌本气戊土=偏印 → **印绶格**(正偏同格)。
3. 藏干变化:戌本气戊不透;余气仅辛透(时干劫财),辛为劫财、非可用之「用神」型。本气戊土当令且通根辰、巳,**本气有力**,依总纲「本气当令有力者仍主格」——**格定印绶,不随透干变**。
4. 会支变化:无三合三会改格。
5. 定格:**印绶格**(月令戌藏戊印当令,本气主格)。
6. 外格闸门:月令自有用神(印),不转杂格。
## 四、成败 · 用神相神 · 格局高低
- **成格路径(印格用伤食泄秀,R-印-05)**:月令为印,四柱透壬(食神)癸(伤官)且通根亥、辰,身强印旺(土印重、金得生而旺),以伤食泄身之秀气——「身强印旺,恐其太过,泄身以为秀气」,**成格**。
- **用神**:食伤(壬癸水)。**相神**:食伤之根(亥、辰水库),水得禄得库,用相不孤。
- **官煞不取**:官(丁)煞(丙)皆藏不透,无官印相生、无煞印相生之路可走;财(甲乙)藏弱,亦非主干。
- **高低(有情/有力)**:印水相涵成「金白水清」之秀,用相有力(水通根亥禄辰库,金连续生水),此为「有情兼有力」,得中上之局。气候参看(调候):庚金生九月(戌月)「戊土司令,最怕土厚埋金,宜先用甲疏、后用壬洗」——本盘壬水透干淘洗庚金(得用),甲木藏亥疏土(欠透),调候大体得半。失分处:辰戌冲(两印相冲,印被激动)、土厚有埋金之嫌,故格成而有带忌之象。
- 结论:**印格用伤食泄秀,成格、有情有力而带辰戌冲之忌**——秀气外显、聪明有专业之象,然根基带冲、起伏较大。
## 五、行运(依 R-运-27 四步、R-印-21/24 取运条)
喜忌基线(印格用伤食,R-印-21):**喜财(木,疏土坏印去太过)、喜食伤(水,泄秀);忌印(土,尤己土浊壬);行官运反见其灾;煞运反能为福**。
- 辛酉(3.39–13.39 岁,1986–1995):劫财+羊刃(酉),酉为日柱空亡支。金旺生水,通泄秀之路,早年平顺。
- 庚申(13.39–23.39,1996–2005):比肩+禄(申,亦为空亡支)。比劫助身生水,读书成长期平稳。
- **己未(23.39–33.39,2006–2015):正印+印,己土浊壬、印重助太过——忌运**。(2011 年落此运)
- **戊午(33.39–43.39,2016–2025):偏印(忌)+午火正官(R-印-21「行官运反见其灾」)——印官并忌**。(二婚、生子诸年落此运)
- 丁巳(43.39–53.39,2026–2035):丁正官(忌)+巳七杀(煞运「反能为福」,且巳为驿马、丙煞得禄)。
- 丙辰(53.39–63.39,2036–2045):丙七杀+辰印。
- 乙卯 / 甲寅(63.39 岁起,2046– ):财运,喜运,晚景得地。
总势:早年金水运平稳,中年(23–53 岁)印官印煞为忌、起伏与阻滞较多,须待木财运(63 岁后)方为得力——属**先用神被印混、晚运行财而转顺**之格局。
---
## 六、逐题推理
### 第 1 题(P026-Q6)命主目前的职业 — 选项 A 贸易生意 / B 电脑技术人员 / C 偏门放高利贷 / D 无工作靠父亲
- **考点**:以格局用神与十神主导定职业领域(「对事」取象参 R-运-31、91_何知事类)。
- **推理链**:本盘用神为食伤(壬癸水),日主庚金,金水相涵、印(辰戌土)为平台学历。食伤=专业技能、技艺输出;庚金=金属/器械/逻辑;水=流通/运算。金水食伤+印格专业 → 技术专业型。财星(甲乙木)藏而弱、无根,食伤生财之路不畅,不宜纯经商;官煞(火)藏弱,无官贵平台可倚。2021 年(38 岁)行戊午运(印+官),为受雇于单位、倚专业立身之象。
- **排除**:A 贸易生意——财星(甲乙木)藏于亥、辰而不透且弱,食伤生财无根,与「食伤生财、财通门户」之富局不合,主财源不稳,列次;C 偏门放高利贷——本盘成格(印格用伤食、有情有力),非破格贫贱之局,劫财虽透尚不足成偏门主业;D 无工作靠父亲——印旺身强、成格有专业之气,非破格仰食之象。
- **取**:**B 电脑技术人员**(置信度中低——A 有食伤生财之支线)。
### 第 2 题(P026-Q7)已离婚,第二婚年份 — 2017 / 2018 / 2019 / 2020
- **考点**:男命婚姻应期,依妻宫(日支)与妻星(财)之引动(R-女-24 三途、R-事-13 婚姻宫、96_六亲)。
- **推理链**:
- 婚姻底色:日支辰=妻宫,辰中藏乙木正财(妻星藏于妻宫)。**印格妻宫坐财,印格逢之反为不美(R-亲-06)**;又**原局辰戌冲,妻宫逢冲,主得美妻而难偕老(R-亲-12)**——两条并见,正是「已离婚」之硬信号。
- 应期:再婚属「婚缘之成」,R-女-24 以「妻宫逢合会」或「妻星引动」为期。合妻宫之年:2017 丁酉(辰酉六合)、2020 庚子(子辰半合);妻星引动之年:2019 己亥(亥中甲木偏财长生成地)。
- 逐年核(R-运-29 五组):2017 酉=辰酉合妻宫,然酉为日柱空亡支且逢羊刃、灾煞(桃花带刃),合而化金(比劫),主感情激烈而争夺、空动,宜离婚动荡而非结缡;2018 戊戌=辰戌再冲,激动的正是妻宫,为**冲而主婚变**之年,不作成婚看;2019 己亥=亥中甲木(妻星/偏财)得长生,妻星引动,合「婚缘之成」之理,然己土印透、亡神并在,属平中带杂;2020 庚子=子辰半合(引动妻宫成水局)+子为咸池桃花(R-煞-07 感情萌动),合而化用神(水),为诸年中「感情萌动、合动妻宫」最清者。
- **排除**:2017(合而带刃煞、空亡,主动荡)次之;2018(辰戌冲妻宫,主婚变向)为离婚之象而非再婚;2020(桃花合妻宫亦强)。三者与 2019 竞争。
- **取**:**C 2019**(置信度低——2017/2020 各有合妻宫之力,主要分歧在此三选一)。
### 第 3 题(P026-Q8)目前一个孩子的出生年 — 2018 / 2019 / 2020 / 2021
- **考点**:男命子息之应期(R-亲-28/32、子女宫时柱、R-事-13 子女宫受冲)。
- **推理链**:男命子星,《子平真诠》取官煞(R-亲-02),本库骨架仍以真诠为准;然本盘官煞(丙丁火)藏弱不透,依《滴天髓》「用神即子星」之法(R-亲-32),**用神为水(食伤),则子必于水之运年得之**。本运为戊午(官煞在支),流年中水旺者为 2019 己亥(亥=壬水食神之禄、癸水之乡,且**时支巳为子女宫,己亥流年巳亥相冲——子女宫受冲,子星得地则主得子**,R-事-13)、2020 庚子(子=癸水帝旺、伤官极旺,且子辰半合水局)。2018 戊戌为火土(午戌半合火局,官煞之应却有辰戌冲、印重浊壬),2021 辛丑为湿土金库,水气皆不如亥、子之旺。
- **排除**:2018(火土+辰戌冲,水弱)次;2019(亥,水旺、子女宫受冲,强力候选);2021(丑土,水弱)次。
- **取**:**C 2020**(用神水帝旺、子辰半合水局,得子之象最旺;置信度低——与 2019 相去一线)。
### 第 4 题(P026-Q9)2011 年发生的事 — A 象棋冠军 / B 犯法被抓坐牢 / C 脚受伤骨折 / D 小横财
- **考点**:流年吉凶方向与事类落地(R-运-29 五组、R-运-31/32、91 何知 §3 冲刑方向)。
- **推理链**:2011 辛卯,行己未印运(忌,己土浊壬)。按五组核:
- A 透清:流年干辛=月支戌中所藏(戌藏戊辛丁),**戌中辛透清于流年干**,劫财引动 → 争夺、分夺(R-运-22)。
- B 会局:流年卯与大运未半合木,又年支亥与卯拱木——财(木)得局,然卯亦与月支戌相合(卯戌合)、与日支辰相害(卯辰害)。
- C 刑冲:**卯辰相害**,害及日支妻宫/贴身处;R-事-11 方向——卯为财(在本盘印重之局,财疏土坏印为喜用方向)。
- 组合读象:一「辛劫财透清夺财」+二「卯木(正财、亦主筋骨四肢)被庚辛金克、被戌合、被辰害」——财与木俱受克夺。卯木属木、主筋(四肢);金旺克木,木被激而伤,主**肢体/筋骨之伤**(《滴天髓》疾病层:「金行木地胆灾」「五行颠倒相克」——金旺克木,木主筋与手足);劫财夺财虽在,但「得财」与劫财夺财正相背,小横财之象不真(且卯为正财非偏财,横财当属偏财)。己未忌运、无强力吉神护木。
- 二德旁参:2011 逢天德合、月德合(R-煞-05),吉神旁参仅主「凶中有解、得宽宥」,不主大吉;将星(岁运逢)主竞争掌事——不足以独撑「象棋冠军」之断(且文昌、华盖未引动,学业技艺之神未应)。
- **排除**:A 象棋冠军——文昌/华盖未引动、仅凭将星与二德支撑,证据薄;B 犯法坐牢——本盘虽有魁罡破(辰戌冲)、地网等牢狱色彩之簇,然 2011 流年未冲动魁罡(戌辰),且二德在(凶有解),落点不如「金木相战伤木」直接;D 小横财——卯为正财、非横财,且劫财透清正主夺财,与「得财」相背。
- **取**:**C 脚受伤骨折**(金旺克卯木、卯被合被害、木主筋与四肢;置信度低到中低)。
### 第 5 题(P026-Q10)性格外表 — A 斯文有礼爱穿名牌 / B 忠厚老实不爱打扮 / C 粗鲁无礼满身纹身 / D 沉默少话皮肤白净
- **考点**:性情外表之细节参看(93_性情,格局定论之后叠加,不回改格局)。
- **推理链**:
- 五行气势:日主庚金,金水相涵(壬癸亥透通根),印(辰戌土)重。
- **金见水以流通(R-性-06)**:日主为金,金旺遇水为「得气之正」——**内方外圆,能知权变,处世不伤廉惠,行藏自合中庸**。「处世不伤廉惠」即得体有礼之象 → 斯文有礼。
- 神煞旁参:月支戌为**红艳**(庚见戌,主风情魅力和异性缘重、好修饰)+**金舆**(庚见戌,禄命之车,主安泰福德、一生清泰)——二者并见,主重仪表、爱华美之物 → 爱穿名牌(此二煞为命带,非流年仅逢)。
- 武职/刚烈之面:庚金阳金、日柱魁罡(庚辰)本主刚果有威,然金水流通、印重涵养,其刚不显于外,不作粗鲁论。
- **排除**:B 忠厚老实不爱打扮——印重或主内敛质朴,然月支红艳、金舆并见,与「不爱打扮」相抵;C 粗鲁无礼满身纹身——无伤官见血刃、无羊刃劫煞会凶之局(原局刑冲止于辰戌之冲),庚金正直不当此断;D 沉默少话皮肤白净——金水固主肤白,然庚金刚直、食伤透而流通(R-性-06 明主「能知权变、处世得体」),「沉默少话」与流通之性不合,且 D 两项在规则层无直接支撑,较 A 为弱。
- **取**:**A 斯文有礼,爱穿名牌**(R-性-06 金水流通+红艳金舆二煞并见;置信度中低——D 之「皮肤白净」亦有金水之据)。
---
## 七、存疑与边界声明
- 双盘同柱,无口径分歧。
- 本盘月令无节气边界提示、无晚子时提示。
- 性情、神煞、婚姻应期、流年事类诸断,属 93/94/96/91 之细节参看层,只叠加于格局之后,不断必然;第 2、3、4 题因应期跨多个相邻年份、候选互有竞争,置信度偏低。
## 八、答案
Q1: B
Q2: C
Q3: C
Q4: C
Q5: A
@@ -0,0 +1,148 @@
# contest8_2022 · female_19771026_P020 盲测求解
## 一、命主信息
- person_id:female_19771026_P020(1977 年出生女性)
- 性别:女
- 出生钟表时间:1977-10-26 11:10(当地钟表时)
- 出生地:马来西亚(题面 place 原文)
- **真太阳时(主盘)**:1977-10-26 10:42(经度修正 −73.24 分 / 均时差 +16.07 分)
- 对照盘真太阳时:1977-10-26 11:26(120°E 不经度修正)
- current_year(赛事元数据):2022
### 是否排对照盘及原因
**排了对照盘。** 触发条件为「place 为境外/模糊地名」——出生地「马来西亚」属境外,命中双盘纪律第 2 条,故另排一盘 `--place "中国大陆"`(副本解析为杭州代理 120.16E / Asia/Shanghai,UTC+8 钟表时≈真太阳时)。
(另一条件「真太阳时距时辰边界 < 15 分钟」未触发:主盘 10:42 距巳时上界 11:00 为 18 分钟 > 15。)
两盘差异集中在**时柱**(其余三柱全同):
| | 年 | 月 | 日 | 时 |
|---|---|---|---|---|
| 真太阳时主盘(10:42) | 丁巳 | 庚戌 | 丙辰 | **癸巳**(正官) |
| 对照盘 120°E(11:26) | 丁巳 | 庚戌 | 丙辰 | **甲午**(偏印/枭,坐丙刃) |
主盘时干支 10:42 落巳时(09:00–11:00);对照盘 11:26 落午时(11:00–13:00)。**答案行以真太阳时主盘为准。**
## 二、命盘要点(真太阳时主盘)
- 四柱:丁巳 / 庚戌 / 丙辰 / 癸巳;日主丙火,月令戌(寒露后、立冬前)。
- 双方:丙火两临官于年支、时支巳(禄神两见),年干透丁劫财帮身 → **日主通根强,身旺**。
- 财:庚偏财透月干,根于年/时两巳(巳藏庚),月支戌藏辛正财 → **财旺而有根**。
- 官:癸正官透时干,通根日支辰(辰藏癸) → **官清而有根**。
- 食伤:月令戌本气戊土(食神)当令,日支辰藏戊、巳中亦藏戊 → **食伤旺**。
- 印:仅日支辰藏乙木正印,天干不透 → 印弱。
- 空亡:日柱空亡子丑;时柱空亡午未。
- 神煞(细节层参看,不入格局):年/时支巳见禄神、劫煞、地网;日支辰见华盖、寡宿、童子煞。
## 三、取格(依 00_总纲 六步)
1. **定月令**:月柱庚戌,月令戌。
2. **月令十神**:日干丙对月令戌本气戊 → 丙生戊、同为阳 → **戊土=食神** → 定格食神。
3. **藏干变化(戌为墓库月)**:戌藏戊(食)、辛(正财)、丁(劫财)。本气戊不透;透丁于年干(劫财)。丁火生戊土(透干生本气),本气戊当令有力 → **本气仍主格,丁为帮(生食神),变而不失本格**。
4. **会支变化**:支见巳、戌、辰、巳,无三合/三会引动戌气 → 不变格。
5. **定格**:**食神格**(吉神,顺用)。
6. **杂格闸门**:月令自有用神(食神),不从化、不无用 → 不入杂格。
**格之成败**(14_食神格):
- 月令食神、庚偏财透干有根、身强食旺 → 命中 R-食-02「食神生财,大贵之格」之成格框架。
- 时透癸正官 → 触 R-食-10「食神忌官」(此局非金水食神,无 R-食-15 之免)。此为**带忌**:官星混于食神局中,财官虽相生(庚生癸),终究于食神之纯为杂。
- 年干丁劫财与月干庚财相邻相克(丁克庚),带**劫夺财**之象(R-财-20 忌「财露无官,比劫劫夺」);所幸时干癸官可制丁劫、护财(R-财-03 财旺生官则露不忌之理)。
**用神与相神**:
- 用神=月令食神(戊土);相神=财(庚辛,食神生财,缺财则食神无出路)。
- 喜:财(食神生财)、身旺(食有气)、比劫帮身(财食俱重时)。
- 忌:官(R-食-10,惟此局官兼护财制劫,忌中带用);枭印夺食(R-食-09,主盘无枭,对照盘有)。
**格局高低**:食神生财而财透有根、身食两旺,**有情**;财得官护、官得财生,财官一路相生成流——**有力**。故格不低(财禄之格),惟食神同官并见减其清、兼婚姻宫(日支辰)受月支戌冲,主财上顺、婚上波。
**气候(92_调候参看)**:丙生九月,「火气愈退、所忌土晦光,先用甲木、次取壬水」。全局土旺(戌辰巳皆藏戊)晦火,天干无甲、无壬(仅癸),**气候偏失**——谋事多需借运(甲/乙木疏土、壬癸润)补之。
## 四、行运
大运:辛亥(1981,4 岁)→ 壬子(1991)→ 癸丑(2001)→ 甲寅(2011)→ 乙卯(2021)→ 丙辰(2031)。
- **癸丑运(2001–2011,24–34 岁)**:癸正官透运干——女命夫星(癸)透清,正婚姻之期;丑带伤官/财,且丑与日柱空亡(子丑)同支、又与月支戌相刑。
- **甲寅运(2011–2021,34–44 岁)**:甲偏印(枭)透,泄官(水生木)而克食(木克土);寅为原局日支辰所推之**驿马**(申子辰马在寅)——此十年为**驿马之运**,迁动、奔波、外移之象主调;寅又与原局巳起寅巳刑。
- **乙卯运(2021–2031,44–54 岁)**:乙正印(非枭)+卯木,疏土生火,利于文书、平台、安稳;卯与柱中戌有卯戌之合。
行运断法按 90_行运 §7(先运后年、先大局后流年)+ §8 事类落地、§9 断年核对回路执行。
## 五、逐题推理(主盘)
### 第 1 题(P020-Q16)命主现在的职业(2022 年)
- 考点:以格局十神定职业倾向。
- 推理链:食神格为格之主轴,用神食神、相神财,财旺(庚透+巳中两庚+戌辛)而身旺能任财——**食神生财**之人的职业落点在「有财可经营」的金商业;食神主表达/技艺/服务,官透为夫星兼职务。
- 逐项:家庭主妇(A)与身旺财旺食伤旺之「有力任财」结构不符;秘书(B)需官印为主而本命印弱(仅辰中乙),不符;公关行业(D)偏食伤+官之人脉社交,然本命财星独重(财三见),职业重心在财;**自己做生意(C)**最契食神生财、财旺身旺之局。
- 结论:**C**(低置信——C 与 D 均属食伤类职业,界限不硬)。
### 第 2 题(P020-Q17)2008 年发生何事
- 考点:婚姻应期(女命夫星/夫宫引动)。
- 大运背景:癸丑运(2001–2011)癸正官透运,夫星透清之十年,为婚姻平台期。
- 2008 戊子(按 R-运-34 五步核对):
- A 透清:戊为月令戌中食神之透清(食神透)。
- B 会局:子与日支辰半合水,引动辰中癸官(夫星/夫宫)——**夫宫逢会**(R-女-24 婚缘之成之途)。
- C 刑冲:无。
- D 空亡:子正是日柱空亡(子丑)之支,流年填实/伏象被激起。
- E 伏吟反吟:无。
- 另:子为癸(正官/夫星)之禄地,夫星得禄。
- 合成:夫宫(辰)逢子辰半合而引动、夫星(癸)又得禄于子,双重婚姻引动;候选中「签字结婚」为最贴合(余项换工作/开公司/车祸均无相应强引动)。
- 结论:**A 签字结婚**(中置信)。对照盘(时干甲、官藏辰)此年子辰半合水与子为癸禄之引动依旧成立,两盘同断。
### 第 3 题(P020-Q18)离婚何时(2010/2013/2016/2018)
- 考点:婚姻之变应期(夫宫受冲、夫星被伤/合)。
- 结构前提:原局**月支戌冲日支辰**——夫宫本已受冲(R-女-19 得良夫而难偕老),故离婚为本命潜势,只待岁运再引。
- 逐年核(R-运-29 五组,皆甲寅运内):
- 2013 癸巳:夫星癸透清(伏吟时柱)+寅巳刑——夫星被「引」而未「伤」,属引动非刑伤,偏婚姻事件/夫之起伏,非离婚首选。
- 2016 丙申:申辰半合水引动夫宫+申中壬七煞现(官煞混杂之象)+寅申冲——夫宫被会、夫星受混杂。
- **2018 戊戌**:戌与日支辰**辰戌冲**(二戌冲辰,夫宫被冲破)+流年干戊合时干癸(**戊癸合,夫星被合去**,R-女-09 夫不亲妻)+戊食神透克癸官(食伤克夫星)。**三重新引动叠加于夫宫与夫星**。
- 合成:2018 同时命中「夫宫逢冲而无合解」(R-女-24 婚缘之变)+「夫星被合去」+「食伤克官」——三线归一,离婚应期最著。
- 结论:**D 2018**(中置信)。对照盘 2018 辰戌冲夫宫依旧(无癸透则戊癸合不成立,但辰戌冲足以断婚变),两盘同断。
### 第 4 题(P020-Q19)2016 年发生何事
- 考点:流年事类落地(R-运-31/32)。
- 大运背景:甲寅运为**驿马运**(原局申子辰马在寅)。
- 2016 丙申(五步核对):
- A 透清:丙为比肩(巳中丙透清)。
- B 会局:申与日支辰半合水(引动夫宫/夫星);申与时支巳相合(巳申合)。
- C 刑冲:**申冲大运寅——冲的正是驿马**;R-煞-06「流年支再冲马者,动象尤急」。
- D 空亡:无。
- E 伏吟反吟:无。
- 神煞(细节层):丙申年逢孤辰、亡神、勾煞、文昌、天德月德。
- 合成:「驿马被冲而急动」为一等一之信号,指向迁移、外移、出境之事;候选中「移民外国」最配(驿马冲=不安其居、远迁),次为因财(申为庚财临官之禄,偏财得禄)。
- 结论:**C 移民外国**(低置信——因「申为庚财禄+丙比肩」亦开「得横财/升职加薪」一路)。
### 第 5 题(P020-Q20)2009 年发生什么
- 考点:流年事类落地。
- 大运背景:癸丑运(丑带伤官/财/官)。
- 2009 己丑(五步核对):
- A 透清:己为伤官透(己土伤官生金财);且己伤官与大运癸官相克(伤官见官)。
- B 会局:无。
- C 刑冲:丑与月支戌相刑(丑戌刑,土动)。
- D 空亡:丑正是日柱空亡(子丑)之支,流年填实。
- E 伏吟反吟:**流年丑与大运丑全同——伏吟**。
- 神煞(细节层):丑为年支巳所推之华盖(巳酉丑见丑);本年为十恶大败。
- 合成:丑为**金库(辛正财之库)**,流年丑与运丑伏吟重复其库,又得己伤官生财——财库动而财增之象,候选中「买产业」(置产、进财)最合(丑亦为庚偏财之墓,若作父星入墓解可取「父亲去世」,然本年无冲无克父星之硬信号,置产一路更显)。
- 结论:**B 买产业**(低置信)。对照盘同年结构不变,两盘同断。
## 六、双盘(对照盘)分列
对照盘 丁巳 / 庚戌 / 丙辰 / 甲午(120°E,不经度修正):
- 取格:仍以月令戌本气戊食神定格(时柱不改变月令)→ 食神格。
- 差异:时干**甲偏印(枭神)夺食**(R-食-09,破格)——所幸月干庚财透,**透财以解**(R-食-12),格局得救仍成;时支午为丙之羊刃(劫)、兼桃花。
- 女命:官星(癸)不透天干、仅藏日支辰——夫星不显,婚姻更隐。
- 逐题比对:第 2 题(2008)子辰半合、子为癸禄之引动不变;第 3 题(2018)辰戌冲夫宫不变;第 4 题(2016)寅申冲驿马不变;第 5 题(2009)与两盘时柱无关不变。**仅第 1 题**受时柱「官→枭印」之别影响(主盘官透偏「职务/对外」,对照盘枭印偏「幕后/文书」),然本命职业主轴系于食神生财、财旺,两盘皆倾向金商业(C),**故五题答案两盘一致,无口径分歧**。
## 七、末尾答案行
Q1: C # 低置信
Q2: A
Q3: D
Q4: C # 低置信
Q5: B # 低置信
@@ -0,0 +1,94 @@
# contest8_2022 · female_19810526_P018 求解留档
## 一、命主信息与排盘口径
- person_id:female_19810526_P018(1981 年出生女性)
- 性别:女
- 出生钟表时间:1981-05-26 02:17
- 出生地:香港,中国
- 主盘真太阳时:1981-05-26 01:57(经度修正 −23.32 分、均时差 +3.40 分,合计 −19.92 分;时区 Asia/Hong_Kong,无夏令时)
- 四柱:辛酉 / 癸巳 / 甲辰 / 乙丑
- 当前年(题面元数据):2022
**是否排对照盘:是。** 触发原因:`place` 为「香港,中国」,属境外/模糊地名清单。对照盘口径 `--place "中国大陆"`(副本解析为杭州代理 120.16E、UTC+8,钟表时=真太阳时),排得真太阳时 1981-05-26 02:21,**四柱仍为 辛酉 / 癸巳 / 甲辰 / 乙丑**,两盘完全一致。
补充说明:主盘真太阳时 01:57 处丑时(01:00–03:00)正中,距两个时辰边界(01:00 / 03:00)分别为 57 分、63 分,均远超 15 分钟,不另触发对照条件。因**两盘四柱全同**,下文各题不存在口径分歧,答案行无需标注 `# 口径分歧`。
## 二、命盘要点
- 四柱:年 辛酉(正官)、月 癸巳(正印)、日 甲辰(日主)、时 乙丑(劫财)
- 藏干:酉辛(官);巳丙(食)、庚(煞)、戊(财);辰戊(财)、乙(劫)、癸(印);丑己(财)、癸(印)、辛(官)
- 空亡:日柱空亡 寅卯;时柱空亡 戌亥
- 节令:月令巳,立夏(1981-05-05 22:34)后、芒种(1981-06-06 02:52)前
- 神煞(细节层,不入格局四层):年柱天德/桃花/将星;月柱文昌/劫煞;日柱金舆/华盖/元辰/童子煞/十灵日/十恶大败;时柱月德合/天乙贵人/华盖
- 大运(顺行,起运 3 岁 8 个月 5 天 ≈ 3.68 岁):甲午(1985)→ 乙未(1995)→ 丙申(2005)→ 丁酉(2015)→ 戊戌(2025)→ 己亥(2035)
## 三、取格
1. **定月令**:月令为巳。「日干配月令地支」——甲木对巳,巳本气丙火为日主之食神。
2. **会支变化(总纲第六步前的第四步,先察会合再论本气)**:地支年酉、月巳、时丑,三支俱全 → **巳酉丑三合金局**(月令巳亦在局中)。月令之气随局而化,丙火食神被合去,化为金——金为甲木之官杀。格随所化而变,定**官杀格**。
3. **官煞之别与取清**:天干透辛(正官,年干,酉丑为其本气强根),巳中庚为七杀(藏而不透);时干透乙(劫财)与庚相合——**乙庚合、合煞留官**,取清。此与《子平真诠》第三十一篇李参政造(庚寅、乙酉、甲子、戊辰)「甲用酉官、庚金混杂、乙以合之、合煞留官」同型。
4. 结论:**正官格(官透,得巳酉丑金局)而杂七杀,乙合庚取清**;官煞虽两见,清浊已分。
## 四、成败、用神相神、高低
- **成败**:官透有强根、印透护官生身、煞得乙合而清——官格得财印相生之正路。惟全局金气太重(辛酉+巳丑+巳中庚,金局成),官杀偏旺而日主偏弱,为「官(煞)重身轻」。赖癸水正印透于月干(根在辰、丑),化官杀以生身,格成而带「身弱官旺」之病。
- **用神相神**:以官(金)为用,**癸水正印为相**(官印相生,既护官又生身,且四月甲木调候「先癸后丁」正需癸水滋润)。日主身弱,比劫(木)为帮身之喜。
- **格局高低(R-纲-13 有情/有力)**:有情——官印相生、乙庚合煞取清;有力——官杀极有力而日主根轻(甲木仅辰中乙木一微根,加印水滋扶)。综合为**有情而日主偏弱之格,贵气在夫星(官杀)之强与印之护**,本身得力处靠母亲、长辈、文书(印)一面。
- **气候(调候参看)**:甲木生四月(巳),穷通宝鉴「先癸后丁」,忌「庚金太多,甲反受病」。命局有癸透(得调候),然金局太旺(庚金太多),故成中带损——秀气有、而受官杀压制。
## 五、行运喜忌
本命官杀旺、身弱、印为用,故**喜印(水)、比劫(木)帮身化杀;忌财(土,生官杀且坏印)、忌官杀(金)再增**;食伤(火)在格局层为「泄身」之忌,但因调候需丁,只作减等参看(R-候-01,以格局为准)。
- **甲午(1985–1995,4–14 岁)**:甲木比肩帮身(喜),午火泄身(次)。少年得帮身之利,宜于求学起居。
- **乙未(1995–2005,14–24 岁)**:乙木劫财帮身(喜,助学业),未土为财(忌)。整体帮身为利,为一生读书升学之有利段。
- **丙申(2005–2015,24–34 岁)**:丙食神泄身,申金七杀大盛(忌)——此运夫星(官杀)临旺、子星(丙食神)亦透,为**婚育之运**,而日主受金气之压,为劳心受克之十年。
- **丁酉(2015–2025,34–44 岁)**:丁伤官(女命子星之阴者)透,酉金正官再增(忌)。婚育后续、官杀仍盛。
- **戊戌(2025–2035,44–54 岁)**:戊偏财透(忌)、戌土财,且戌冲日支辰(夫宫)——财旺生官杀、坏印,为一生较受累之运。
## 六、逐题推理
### 第 6 题(学历)
考点:学历高低与升学年份。
命局癸水正印透月干、为用神且有根(辰、丑),官印相生,又带文昌(日干甲见月支巳)、华盖、十灵日——学业有缘、聪明向学,故**学历不至低于大学**(排除「中七毕业」仅预科、「中五后」两选项)。
逐项看升学应期:升大学在乙未运(帮身利学)之中。2001 辛巳(辛为正官,巳为月令伏吟且为命主文昌所在)偏「考试文书」;**2002 壬午**更直接——壬为偏印透干,印即文书、录取、升学之星,且印为命主用神,为典型「升学」之年。2006 丙戌为毕业之年。方位上,命主喜印(水),香港之北(内地)正合印地,故「升学内地」于喜用方向相符。
综合取名:主盘与对照盘四柱相同,取 **B(2002 年升学内地,2006 年大学毕业)**。本题证据强度中等,属推得之年(非硬信号),标低置信。
### 第 7 题(结婚年份)
考点:女命婚姻应期(夫星、夫宫、格局三途引动)。
命局官杀为夫星,金局成而夫星极旺;日支辰为夫宫,且**辰与年支酉六合**(夫宫本已合夫星),夫缘来得不迟。婚姻应期看夫星透清、夫宫逢合会。
- **2005 乙酉**:酉即正官本气(夫星本气到位),又与日支辰作**辰酉合**(夫宫合),酉并为命主桃花(以日支辰查见酉)——夫星、夫宫、桃花三事同时被引动;且 2005 恰**交入丙申运**(申为七杀旺地、夫星临禄旺),交运之年每多大事。三途交会,最合婚期。
- 2009 己丑(丑可补成巳酉丑官局、又伏吟时支)为次选;2012 壬辰(辰为夫宫伏吟)又次;2006 丙戌(戌冲夫宫)亦可为婚之「动」,但单冲无合,作次。
取 **A(2005 年结婚)**,标中低置信。
### 第 8 题(女儿出生年份)
考点:女命子星(食伤)与时柱子息宫之引动。
女命以食伤为子星,甲木之子星为火;分男女者,阳干为男、阴干为女,丁火伤官(阴)即应**女儿**。命局火藏于巳(丙食神)而巳被合入金局,子星不旺;时柱乙丑为子息宫。
- 2007 丁亥:**丁火伤官(女儿星)透于流年**,且亥为命主时柱空亡(戌亥)之填实、又为驿马(年支酉所属巳酉丑见亥),子息之星透而与子息宫相牵,应女儿之生。
- 其余:2009 己丑(丑伏吟子息宫);2012 壬辰(壬印夺食,不利子息);2015 乙未(未冲时支丑、子息宫动,且交丁酉运之丁为伤官)——均作次选。
取 **A(2007 年)**,标中低置信。
### 第 9 题(身材)
考点:日主五行之形貌取象。
日主甲木——甲为干上参天之木,本质主**高**(木性腾上、条达),故取高挑;全局金气极旺(巳酉丑金局、辛酉、巳庚)克伐甲木,木受金削而不丰,故取**瘦削**。木性本瘦长,与「肥胖」一路不合。
取 **A(高挑,瘦削)**,标低置信(形貌取象为直白取象,非格局层硬断)。
### 第 10 题(父母情况)
考点:六亲之父母——母为正印、父为偏财;父母宫为月柱。
命局**癸水正印透于月干(父母宫之干)**,且有辰、丑之根,印又为身弱之喜用神——母星透干、得力、贴身,主**与母亲相依得力**;父为偏财戊土,藏于月支巳、日支辰,**藏而不透**,且月支巳被酉、丑合入金局(父所寄之位被合去),财又为身弱之忌(生官杀、坏印)——主**父缘较薄、父位被牵动**。两相并看,为「依母而父缘失位」之象。
应期:1988 戊辰,**偏财(父星)戊土透出天干**(父星首度明现),又逢甲午运之甲木比肩夺财克父,辰且与日支辰伏吟——父位受克之年。题中唯 A 明确「随母亲成长」,与母星为用、贴身之象最合,且「成长」二字指涉童年(1988 命主方七岁)。
取 **A(1988 年父母离异,随母亲成长)**,标低置信。备选(降级保留):B(1999 父婚外情、2009 父离开而未离婚)——2009 己丑以丑补成巳酉丑、父所寄之月支巳被合尽,亦具「父位离位」之取象路径,故不作删除,仅降为备选。
## 七、末答
Q1: B # 低置信
Q2: A # 中低置信
Q3: A # 中低置信
Q4: A # 低置信
Q5: A # 低置信
@@ -0,0 +1,156 @@
# contest8_2022 · female_19841209_P023 求解留档
## 一、命主信息与排盘口径
- person_id:female_19841209_P023(题面姓名:1984年出生女性)
- 性别:女(大运逆行)
- 出生钟表时间:1984-12-09 17:30(题面 raw:1984-12-09 酉时 中国香港出生)
- 出生地:中国香港
- 真太阳时(主盘):1984-12-09 17:13;酉时(17:00–19:00)
- 排盘审计:时区 Asia/Hong_Kong;夏令时 否(1984 年不在 1986–1991 夏令时区间);经度修正 −23.32 分、均时差 +7.18 分、合计 −16.14 分;日界 子初换日 23:00;tyme4py 1.5.0;schema 1.2
- 晚子时:否;节气边界:否(生于大雪 1984-12-07 之后两日余,远离交节)
**是否排对照盘:是。** 触发两条,任一条即排:
1. 主盘真太阳时 17:13,距时辰边界 17:00 仅 **13 分钟**(< 15 分钟);
2. 出生地「中国香港」属境外/模糊地名。
对照盘口径(120°E 不经度修正,`--place "中国大陆"` 解析为杭州代理):真太阳时 1984-12-09 17:37,酉时。
**两盘对照结论:四柱完全相同**,均为 甲子 / 丙子 / 丁丑 / 己酉,同属酉时、同月令子,故此命主**无口径分歧**,答案行不需要加「口径分歧」标注。两盘之后所有推理共用同一结论。
## 二、命盘要点
- 四柱:甲子(正印·绝)/丙子(劫财·绝)/丁丑(日主·墓)/己酉(食神·长生)
- 地支藏干:子藏癸(七杀,两处);丑藏己(食神)癸(七杀)辛(偏财);酉藏辛(偏财)
- 空亡:日柱 申酉;时柱 寅卯(酉在日柱空亡,时支酉填)
- 神煞(只作细节参看,不入格局四层):年、月支 将星;日柱 月德合·华盖·阴差阳错;时支酉 天乙贵人·太极贵人·文昌·桃花·将星·勾煞
- 月令:子(生于大雪后、小寒前);胎元 丁卯,命宫 壬申
- 大运(逆行,起运 0.82 岁):乙亥 1985/甲戌 1995/癸酉 2005/壬申 2015/辛未 2025/庚午 2035
- 真太阳时主盘与对照盘四柱一致,下面以主盘论。
## 三、取格
依总纲六步:
1. **定月令**:月支子。子为专气,藏癸一字。
2. **月令十神**:日干丁,月令本气癸(水克火、同阴)=**七杀**。→ 定**偏官格(七杀格)**。
3. **透干与会支**:
- 癸不透干(天干为 甲、丙、丁、己),无透干变化之机。
- 会支:日支丑与年、月两子成「子丑六合」;时支酉与日支丑成「酉丑半合金局」(力稍逊之拱局,参 R-纲-08)。子丑合、酉丑半合都属「合而不化/拱局」,不动摇月令本气——**本格仍为偏官格**。
4. **外格闸门**:月令自有用神(七杀),且四柱有印(甲)、有食(己)可制可化,不落「无用门」,也不合「从化门」(日主有 甲印丙劫,非满盘皆煞),**不成弃命从煞**,不入杂格。
5. **定格完成**:**偏官格(七杀格)**。下面加载 `15_偏官格.md`。
## 四、格之成败、用神相神、格局高低
**成败**:七杀为四凶神,逆用宜制之化之。
- 透**食神己土**(时干,通根日支丑,有情)→ 煞用食制之型(R-杀-03)。
- 透**正印甲木**(年干)→ 煞用印化之型(R-杀-04/05)。甲木虽不透根于月令(子仅作生源,非甲之禄根),但得月令子水与年支子水生扶,属「无情而有情」(R-杀-05)。
- 日主丁火**无根**:十二长生里日支丑为墓、月支子为绝,唯时支酉为丁之长生(阴干长生,仅算微根,且酉本身是财)。丙火劫财、甲木正印亦皆无强根。**身弱、七杀重**——即「煞重身轻」。
- 依 R-杀-05「煞重身轻,用食则身不能当,不如转而就印」:**用神取甲木正印化煞生身**,己土食神制煞为辅(兼神)。己土被甲木隔位(年干甲—时干己,中间丙、丁),不构成 R-杀-11「食制格透印破格」的紧贴夺食。
- 成格,但非「煞旺食强而身健」的极等之贵;属**无情而有情、贵而不大**(R-杀-05、R-杀-15)。
**用神相神**:用神=月令七杀(癸);成格所赖之相神=**甲木正印**(化煞生身),**己土食神**为辅。伤用甚于伤身、伤相甚于伤用——己土(食)或甲木(印)被冲被夺之年,即格倾之年。
**格局高低**:
- 有情/有力(R-纲-13):喜用(印、食)皆透而通根(甲得子水生、己通根丑),是有情;然日主与印比皆无强根,是不「有力」。总评**有情而非力之全,中下之格**,与「贵而不大」相应。
- 气候(R-纲-15、92_调候):冬月丁火,水旺火晦,最需甲木生扶、丙火暖局——甲、丙并透,调候得力,此为格局成色之加分项;但局中金(辛在丑、酉)水(癸两子)并旺,寒湿偏重,成色又被压。
- 纯杂:用神一线(煞)+相神(印、食),无官相混(原局无壬正官),不杂。
**喜忌**(据 R-杀-05/16/22 及 89_旺衰):喜**木(印,化煞生身)、火(比劫,帮身暖局)、土(食伤,制煞,虽泄身但煞重食轻宜助食)**;忌**金(财,生煞坏印)、水(官杀,攻身)**。
## 五、行运喜忌(分格取运 + 通论校正)
大运逆行:乙亥(1985)→甲戌(1995)→癸酉(2005)→壬申(2015)→辛未(2025)→庚午(2035)。
- **乙亥(1985–1995)**:乙印(喜)、亥官(忌)。亥与年月两子、日支丑成**亥子丑三会水局**,官杀得势,财(金)泄于水。半忌。
- **甲戌(1995–2005)**:甲印(喜)、戌燥土火库(暖局兼制水,喜中含半泄)。**偏喜之运**,是命主少年阶段相对能立住的一段;戌又为偏财辛之库根,父财在此运有根。
- **癸酉(2005–2015)**:癸七杀透(忌,兼女命夫星透清)、酉偏财(忌)。**全忌之运**——婚姻、官非、破财诸端多落此运;然癸为夫星透清,亦是姻缘发动之运(R-女-24)。
- **壬申(2015–2025)**:壬正官透(忌,且与原局癸杀成**官杀混杂**)、申偏财(忌)。**全忌之运**,官杀混杂最重,主夫星杂乱、官非口舌。
- **辛未(2025–2035)**:辛偏财(忌)、未燥土(微喜)。忌中带半。
- **庚午(2035–2045)**:庚财(忌)、午火(禄,大喜,帮身暖局)。后段转半喜。
断运操作(R-运-27/29/34):先运后年、先大局后流年;每步运以干支分论;关键流年按五组引动(A 透清/B 会局/C 刑冲/D 空亡/E 伏吟反吟)逐组核查后合成事件候选。
## 六、逐题推理
### 第 1 题(P023-Q31)性格
- **考点**:日主性情,属「对人」细节层,加载 93_性情。
- **推理链**:
1. 丁火阴火,生于子月水旺之地,**身弱杀重**(两子一丑皆水本气),火晦不彰;四柱地支**丑、酉为阴浊**(R-性-12 之酉丑亥),火气藏于内而湿滞。
2. 命 R-性-12「阳浊藏火,包而多滞」——阴晦难奋发,湿木藏火不能生无焰之火,「心欲速而志未逮,临事模棱少决,所以心性多疑」。
3. 命 R-性-19「沉埋之气」——身弱而官杀多者尤验,「心郁志灰,人多困郁」;又 R-性-15「时支枯者,狐疑少决,始勤终怠,主虎头蛇尾」(冬火而时支非木,火无焰)。
4. 逐项排除:A(勤俭顾家、知书识礼、明辨是非)近正印之象,然甲印虚透且被财坏(财旺坏印),非主旨;B(好勇争胜、说话霸气)须羊刃或伤官透干、身旺任之,此盘无刃无伤、身弱,不合;C(心多贪权、急于求成)虽近官杀重之「贪权」,但此人非争进型(身弱担重杀,是被压不是逞强);**D(胆小怕事、心气压抑、欠缺当机立断)**与「模棱少决、多疑、心郁志灰」三条文证逐字相合。
- **选项**:D(低置信——A 为次可能,属「印食正面象」,与「身弱阴浊压抑象」两读之间略偏阴浊象)
### 第 2 题(P023-Q32)父因好赌、何年破产
- **考点**:父星之应期。父=偏财辛金(R-亲-02),其根在日支丑(库)、时支酉(本气)。
- **推理链**:
1. 「祖上富」为已知前提,求「破产」年——即偏财(父)之根大受破之年。
2. 大运定基线:1995–2005 行甲戌(戌为财库、暖局)。选项 1995/1997/2003 落在甲戌运内,2007 落癸酉运。
3. 逐年核引动(R-运-29 五组):
- **1995 乙亥**:B 会局——亥与年月两子、日支丑成亥子丑三会水局,财(金)尽泄化水。(兼交运年)。主泄,非直破。
- **1997 丁丑**:E 伏吟——流年丁丑与日柱丁丑全同(日柱伏吟);C 刑——丑与大运戌相刑(丑戌刑);丁为比肩,克辛金(夺父星)。
- **2003 癸未**:**C 刑冲——未冲日支丑**,丑中辛(偏财父星之库根)被冲动;未与大运戌、日支丑并见,成**丑戌未三刑**;A 透清——癸(丑、子所藏)透干。丑为金库,依 R-纲-11「财官为水木金火者,冲则反累」,金库被冲即**反累受损**,正合「父业破产」。
- **2007 丁亥**:B 会局——亥又会亥子丑水局,泄财;十恶大败、亡神(耗散失脱);然带天乙贵人、福星贵人、月德合三吉,逢凶多解。
4. 逐项排除:1995、2007 皆为「泄」且 2007 有贵人解,力度被折;1997 为「伏吟+刑」偏家宅自身之动;**2003 未冲丑**直接命中父星(偏财辛)之库根并触发三刑,破财(父破产)之应最直接最重。
- **选项**:C(低置信——2007 为次可能,皆会水泄财;两读之间取「冲财库」为更直接之破产象)
### 第 3 题(P023-Q33)何年入牢狱几个月
- **考点**:官非刑狱之应期。命主自受,属官杀攻身/刑冲之应(R-事-13 官禄受冲、R-运-31 官杀事类)。
- **推理链**:
1. 命局七杀三根(子、子、丑),赖己土食神制、甲木正印化方不为祸;**制化被破之年即官杀攻身之年**。
2. 大运定基线:2005–2015 癸酉(癸七杀透,忌);2015–2025 壬申(壬正官透,与原局癸成官杀混杂,忌)。
3. 逐年核引动:
- **2003 癸未**:C 刑冲——未冲丑、并成大运戌+日支丑+流年未之**丑戌未三刑**;A 透清——癸透(可牵引官非)。三刑主刑罚,亦为强候选。
- **2007 丁亥**:B 会局——亥子丑三会水局,官杀成局**攻身**,甲印被水漂、己食被水荡,**制化俱失**;流年神煞带**十恶大败、亡神**(耗散失脱、刑狱夺自由之象)+驿马(迁动/被押送)。转年身被引动而成短灾。**天乙贵人、福星贵人、月德合在年**,故重灾得解——应「只囚几个月」而非长牢,正与题面「几个月」相吻。
- **2010 庚寅**:C——驿马、劫煞、孤辰;寅中戊土伤官见官,官非口舌象。庚为财透生煞。信号偏轻(寅亦为甲印之禄,反有救)。
- **2016 丙申**:E 伏吟——申与大运申全同;壬申运官杀混杂最重;带亡神、十恶大败。亦为可备之候选,然为婚后(婚在 2012)之年,题序上偏后。
4. 逐项排除:2010 印得禄(寅为甲禄)有解、信号弱;2016 虽官杀混杂但属后段且未见他年组数;2003 三刑重,然三刑之「冲丑」已用作 Q32 父星(偏财库)之破,此处按「财事归 Q32、官杀攻身事归 2007」分派(2007 之会水局为**全局官杀成势**,非单支冲,攻身象更纯)。
- **选项**:B(低置信——与 A/2003 强竞争;两读之间取「会水局攻身+贵人只解为短刑」这一更贴合『几个月』的读法)
### 第 4 题(P023-Q34)2005 拍拖,何年结婚
- **考点**:婚姻应期三途(R-女-24:夫星透清/夫宫合会/格局引动;R-女-10 日主自合官星)。
- **推理链**:
1. **2005 拍拖的盘面依据**:2005 交入**癸酉运**,癸为七杀=女命夫星透清,姻缘发动(R-女-24①)。流年乙酉,酉为命带桃花(以年支子查,见于时支酉)之伏吟,桃花动,应「拍拖」。此锚点吻合,验证了「以官杀为夫、以癸酉运为婚运」的口径。
2. 于是「结婚」须在癸酉运(2005–2015)内,由夫星/夫宫再被引动而定年。
3. 逐年核引动:
- **2008 戊子**:B/C——子与日支丑六合(夫宫逢合,本主婚成);然戊为伤官且与癸(夫星)作**戊癸合**,夫星被合去(R-女-09「夫星被合则不亲其妻」),且子丑合被原局两子**争合**(R-女-38 争合则情无定见)——婚而不稳,反偏「感情挫折」。
- **2010 庚寅**:夫宫丑与寅**暗合**(寅丑暗合),有动;然寅为甲印之禄(帮身)、庚财透,非婚姻正应。
- **2012 壬辰**:A 透清——**壬(正官)透干**,夫星明现(R-女-24①);且**丁壬合**,正合 R-女-10 原文明训「女以官为夫……丁日逢壬,是我之夫,是我合之,正如夫妻相亲,其情愈密」;辰又与大运酉合金。夫星透清+日主自合夫星,双证在一年,婚象最正。
- **2014 甲午**:午冲子(夫星被冲)、丑午相害(夫宫受害),主婚缘之变,非婚年。
4. 逐项排除:2008 夫宫虽合,然夫星被戊合去且逢争合;2010 只暗合且时点偏推后;2014 为冲害之忌年。**2012 双证齐备**(夫星透清+日主自合),取之。
- **选项**:C(低置信——2008 为强次选,主因是 2008 有子丑合夫宫;两读之间取夫星明文之合为正)
### 第 5 题(P023-Q35)感情生活情况
- **考点**:女命夫星、夫宫之吉凶(R-女-05 官星叠出、R-女-11 煞重得制化、R-女-14/16 夫宫、R-女-24 婚姻应期)。
- **推理链**:
1. **夫星=七杀癸,三根叠出(年支子、月支子、日支丑各藏癸)**——R-女-05「官星叠出,正夫岂可叠出,一女众夫之象,夫缘不一」;延伸到夫则主**夫不专、外有情人**,婚缘屡易。→ 排除 A(夫妻恩爱一心一意)。
2. **夫宫(日支丑)藏癸(夫星得位)+己(食)+辛(财)**:夫宫坐夫星得位、食神在夫宫(女命子星)——命主心思系于子女、主内顾家,与各选项「照顾孩子」一致。
3. **夫之气力**:七杀得月令、得偏财辛(丑、酉)相生而旺,又得己土食制、甲木印化而为我所用(R-女-11「煞重得食制印化,得夫之力、夫有威权」)。财生杀——命主一方之财向夫星汇集,夫得财势而有力,故主**夫有财力、家用不缺**。→ 排除 D(夫生意失败离家、命主替夫还债——与夫旺有力不符)。
4. **命主一方**:身弱财旺(财多身弱),己为食神子星通根,主内顾子女、以家为务;夫旺而有力,家用可给,命主不必顶门求财(与 C「夫不给家用、命主只好打工」相反)。→ 排除 C。
5. **后离婚之应**:① 官杀混杂——入壬申运(2015 起)壬正官透,与原局癸杀并立,夫星杂乱;② 夫宫被冲——2015 乙未,未冲日支丑(夫宫逢冲而无解,R-女-24「夫宫逢冲而无解之岁运多应婚缘之变」)。→ 主**婚后离异**。
6. 综合:夫外有情人(官杀众而混杂)、家用尚足(夫星得财有力)、命主在家课子(食神子星在夫宫时柱)、终致离异——与 B 逐项相合。
- **选项**:B(低置信——C 为次选;分歧点在「夫是否给家用」,取「夫星得财有力」一路)
## 七、存疑与边界
- 93_性情、91_何知事类、97_女命 之【拓展】条(无真诠原文明文者)只作参看,已按层级声明,不入格局四层。
- 神煞(桃花、华盖、亡神、十恶大败、劫煞、天乙天福贵人之类)只作细节参看,未参与取格/成败/用神/高低(R-禁-01)。
- 第 2、3 题(1995–2016 年间之具体应事年)与第 5 题(夫是否给家用)为本盘最两可处,规则路径与直白取象之间有竞争读法,故该三题均标低置信;第 3 题之 2003 与 2007 两读尤其接近。
- 本盘为真太阳时主盘与对照盘(中国大陆/120°E)四柱全同之盘,无口径分歧。
## 八、答案行
Q1: D # 低置信
Q2: C # 低置信
Q3: B # 低置信
Q4: C # 低置信
Q5: B # 低置信
@@ -0,0 +1,124 @@
# contest8_2022 · female_19900523_P019 盲测求解
## 一、命主信息与排盘口径
- person_id:female_19900523_P019(题面名「1990年出生女性(佩小姐)」)
- 性别:女
- 出生钟表时间:1990-05-23 17:30(当地钟表时)
- 出生地:中国大陆
- 真太阳时:1990-05-23 16:34(申时)
- 夏令时:是(1986–1991 全国夏令时,5 月 23 日在窗口内,钟表时先回拨 1 小时)
- 经度修正 +0.64 分 / 均时差 +3.61 分 / 合计 +4.25 分
- 四柱:庚午 · 辛巳 · 戊子 · 庚申(日主戊土)
**对照盘**:place 为模糊地名「中国大陆」,命中双盘条件二(境外/模糊地名),已按任务书口径加排对照盘
(120°E 不经度修正,命令为 `--place "中国大陆"`,副本解析为杭州代理 120.16E)。对照盘输出与主盘
**完全一致**(同为 庚午 辛巳 戊子 庚申、真太阳时 16:34、申时),**两盘无口径分歧**,下文答案行不出现
分歧标注。
**时辰边界敏感性(附带核对,非对照盘口径)**:本盘 17:30 钟表时距酉时边界(17:00 后)很近,是否回拨
夏令时决定落在申时还是酉时——回拨得 16:34(申时,庚申时柱);若误将钟表时直读(视为不计夏令时),则得
17:34 落酉时、时柱变辛酉(伤官)。排盘审计明载「夏令时:是」,故主盘取申时(庚申)。两时柱对本题 5 问
的方向不产生翻转(见第五节存疑),但记此敏感点备查。
---
## 二、命盘要点
- 日主戊土,生巳月:巳为戊之临官(禄),巳中丙火本气当令(偏印)、庚金食神、戊土比肩。
- 年支午:丁(正印)、己(劫财),并为戊之羊刃。
- 月柱辛巳(伤官坐禄),年柱庚午(食神坐刃印),日柱戊子(正财坐日支),时柱庚申(食神坐食神)。
- 天干:庚(食)· 辛(伤)· 戊 · 庚(食)——食伤两透(庚两见、辛一见),无官无煞(全盘无木)。
- 地支:午 · 巳 · 子 · 申。关系:子午冲(日支冲年支);巳申六合(月支合时支,亦带刑);申子半合水(时支与日支半合财局)。
- 五行分布:土(戊、巳中戊、午中己)旺;火(巳中丙、午中丁)旺;金(庚庚辛、申、巳中庚)旺;水(子癸正财、申中壬偏财,成半合水局)有根;**木全无(官煞不现)**。
- 神煞(细节层,不入格局):年支羊刃将星、月支禄神劫煞、日支红艳、时支文昌福星贵人驿马孤辰;日柱空亡午未、时柱空亡子丑。
- 节令:月令巳,立夏后、芒种前;胎元壬申,命宫庚辰。
## 三、取格与成败用神(依 rules/00_总纲 → 13_印绶格 等)
**第一步 月令十神**:以日干戊对月令巳之**本气**丙取十神,丙为戊之偏印 → **印绶格**(总纲 §1 第二步「以月令本气取十神」,R-纲-00 用神专求月令)。
**第二步 藏干变化(R-纲-07)**:巳为四生月、藏干不一;本气丙(偏印)不透天干,余气庚(食神)透出年、时两干,月干又透辛(伤官)。**辨主从**:透干庚辛(金)与本气丙(火)为相克而非相生,不构成「变而不失本格」的正例;本气丙当令又得年支午(丁火)之助,**印星有力**,故本气仍主格,**定格印绶格,食伤为格中泄秀之用**(格不随透干改,与总纲「本气有力者本气主格」相合)。
- 兼核:巳为戊之临官,另有一轨可作建禄月劫格(18_建禄月劫格 R-禄-01),两轨用神同向(皆取食伤/财为用、忌印比),本题 5 问的结论不因该取舍而变,故存两轨、以印格为主。
**格之成败**:印绶格而**身强印旺**(戊得禄于巳、得刃于午,火土并旺),透伤官食神泄身。依 R-印-05「有印而用伤食者,身强印旺,恐其太过,泄身以为秀气」——**成格**。财星(子癸、申壬)藏支不透而成申子半合财局,食伤生财有归路,属 R-印-09「印重财轻而兼露伤食,财与食相生……即可就富,亦不贵矣」之象:**就富不贵**。
- **用神**:食伤(庚辛金)泄秀为主用。
- **相神**:财(子水正财、申中壬偏财)——润燥、制印之太过,为泄秀之归路。
- **忌**:印(火)、比劫(土),已太旺;**官煞(木)**——格局上生印助枭,属半忌;但穷通宝鉴调候(戊土生巳月先甲疏劈、次丙癸,忌一派丙火火炎土燥)须甲木疏土,故木(煞)又为气候所需,取运上以 R-印-21「煞运反能为福、官运反见其灾」参之。
**格局高低**:身旺印旺而伤食透而有力(庚禄在申、长生于巳),泄秀有情;财成半合之局、身旺任财,为有力。气候火炎土燥,得子、申之水稍润(虽子水被午冲),属偏而得润。综合**中上格**:主聪明秀气、有财、有专业输出之能;以**财不透、官星全无,故贵气不显、不作功名显达论**(富而不贵/异路自立)。
## 四、行运喜忌(大运逆行,依 rules/90_行运 + 13_印绶格取运)
起运 5 岁 10 个月(5.86 岁,1996 年起运)。喜:食伤(金)、财(水);忌:印(火)、比劫(土);煞(木)为调候所喜、格局半可。
| 大运 | 起止(岁) | 干支十神 | 喜忌方向 |
|---|---|---|---|
| 庚辰 | 1996(5.86–15.86) | 庚食神 · 辰湿土 | 喜(食神泄秀、湿土晦火润局),童年学业顺 |
| 己卯 | 2006(15.86–25.86) | 己劫财 · 卯正官 | 己忌比劫;卯为夫星(乙木)现,兼调候所喜之木;卯与日支子相刑(子卯刑),夫宫被刑 |
| 戊寅 | 2016(25.86–35.86) | 戊比肩 · 寅七杀 | 戊忌(比肩争夫);寅为夫星(甲木)现、调候所喜;寅与命局巳、申成寅巳申三刑,主奔波变动 |
| 丁丑 | 2026(35.86–45.86) | 丁正印 · 丑湿土 | 丁忌(印重);丑为湿土、晦火润局,喜 |
关键流年(断年核对:A 透清 / B 会局 / C 刑冲 / D 空亡 / E 伏吟,依 R-运-29/34 逐组核):
- **2014 甲午**(己卯运):甲(七杀/调候用神、亦夫星)透干——A 透清;午与年支午伏吟、火助印——E 兼忌。官煞现于运年,事业星露。
- **2016 丙申**(交入戊寅运):申与时支申伏吟——E;申子半合水成财局——B 会局;申为年支午所查之驿马,主迁动/岗位调动。交运之年,事业环境转折。
- **2018 戊戌**:戊比忌、戌火库,午戌半合火局助印——纯忌年。
- **2021 辛丑**:辛(伤官,格局用神)透干——A 透清;丑与月支巳半合金局(食伤局)——B 会局;丑又为时柱空亡支之填实——D;且丑为湿土晦火润燥,调候得济。用神三线同动,为五选项中**最有利于本格用食伤泄秀**之年。
## 五、逐题推理
**第 1 题(与父母、兄弟姐妹关系)**
考点:早年是否在父母身边长大、父母缘,以及兄弟(比劫)之向背。
- 母星正印(丙丁)当令于月令巳、又得年支午(丁)助,**印星旺而贴身**——母缘厚、得长辈荫护,主「从小父母疼爱呵护」。父星偏财(壬)藏时支申、又逢月支巳合(巳申合),父星较远而不透,父之分量次于母。
- 兄弟为比劫(午中己劫、巳中戊比、申中戊比):**身旺、比劫有气而无官星制之**(全盘无木),依 96_六亲 R-亲-36「身旺而三者又显、无官,兄弟必衰」——兄弟缘薄、于己无助力,比劫为身旺之忌神(夺财),主手足之间不亲厚。
- 无「早岁离父母、寄养他人」之硬信号:印星当令护身、童年运(庚辰湿土晦火)不冲父母宫,故不取吃百家饭一路。
- 结论:父母疼爱、兄弟淡薄。→ **B**(低-中置信:兄弟部分取「身旺比劫为忌」,非硬断)。
**第 2 题(目前工作与生活情况,2022 年 32 岁)**
考点:职业形态与财务状态。
- 格局为印绶格身旺用食伤泄秀,**印为格之神**——印在事类映射(R-运-31)主「单位与平台、文书、专业资格」,主依附于单位/组织平台的性质,非纯自营。
- 财成申子半合水局、身旺任财,食伤生财有归路,属「就富不贵」(R-印-09)——**主有积蓄、财务稳定**,不作负债或月光论(财局成立且身旺,财不为耗尽之象;R-事-02「财气通门户」主富)。
- 无官星,故不主显赫爵位,但在单位内为有专业、有存款之稳定状态。
- 结论:事业单位类稳定岗位、有积蓄、生活稳定。→ **A**(中置信;「自我经营做老板」为次选,因食伤生财而无官亦有自立倾向,但「有负债」与财局身旺之象不合,排除 C)。
**第 3 题(婚姻子女情况)**
考点:夫星夫宫与子星。
- **夫星为官煞,而全盘无木、官星原局不现**——女命夫星本以官论(97_女命 R-女-04);官不现者循 R-女-28/29 变通取用:身旺而食伤多者「以财为夫」。本命财(子癸正财、申中壬偏财,成申子半合财局)为日主之喜用神,**变通之夫星(财)即坐于日支夫宫(戊子),夫星得位且为喜用**。
- 夫宫(日支子)与年支午相冲(子午冲),为婚姻宫受动之象;然日支子又与月支申半合(申子拱水),夫宫得合有解,主婚姻可得成立(R-女-24:夫宫逢合会之岁运多应婚缘之成)。
- 子星为食伤(庚辛):**食伤透两干、根于巳申、旺而有力**,时柱庚申为食神坐食神且为格局用神(时干有用),依 R-女-22/33 主子息有且子星显;主**有子女**(排除没孩子之 A、B)。
- 婚姻状态取「已婚」:变通夫星(财)得日支夫宫、又为喜用,大运另在己卯(正官现)、戊寅(七杀现)两运补出夫星,婚缘在 16–36 岁运内成立。
- 结论:已婚、有子女。→ **C**(低置信;「离异有孩子」为并列备选——官星原局不现、夫宫子午四正冲、日支子又落时柱空亡、月干伤官透,均为婚姻不安之结构,若按「星藏受冲无制应婚变」(R-事-13)一路则落 D;两向皆开,取宫星得位之正向为主答案,标低置信)。
**第 4 题(哪一年工作有新的突破发展)**
考点:流年引动与用神得力之年。
- 本格喜食伤、财,忌印比,煞为调候半喜。四选项中 2018 戊戌为纯忌年(比肩透、午戌半合火局助印),先排除。
- 2014 甲午:甲(七杀/调候用神)透为事业星,但午土助印、与年支伏吟,属「事业星现而气候转忌」之混合年,主压力与变动,非最利。
- 2016 丙申:交入戊寅运,申伏吟时支、申子半合财局、又为驿马,主岗位迁动、环境转折——有变,但丙透偏印助枭、戊寅运带三刑,变动多带奔波。
- 2021 辛丑:**辛(伤官)透清(A 组)+ 丑会巳半合金局、食伤之气会而有力(B 组)+ 丑填实时柱空亡(D 组)+ 丑湿土晦火润燥、调候得济**——用神三线同动、气候转清,伤官又主开创突破,为四选项中最契合「工作有新突破发展」之年。
- 结论:2021 年。→ **D**(中低置信;2016 交运迁动为次选)。
**第 5 题(比较符合的性格描述)**
考点:格局清浊与十神旺衰对性情的映射。
- 身旺(戊得禄刃)+ 食伤两透旺而泄秀 + 财成局 + 无官(不受官星所制)——此组合主**有主见、才干外显、务实善经营、社交不弱**,非软弱受欺(排除 B「耳根子软、被家人压榨」)亦非孤僻(食伤旺主表达社交,排除 D「孤僻没朋友」)。
- 月令本气为**偏印(枭)**当令、月干又透伤官:枭印主机变、内藏、不外露,伤官主表现与外才——**表里不一、有心计**之象,正合「表面一套背地里一套」。
- 非蛮横索取型(排除 A):伤官有印制、有财化,为秀气而非浊气,R-性-14「清则谦和」一路,不至刚暴无礼。
- 结论:外柔内刚、有主见、交际能手(且有心计)。→ **C**(中置信)。
## 六、存疑与边界
- 取格主从:月令巳本气丙为印、余气庚透干,温虽取印格为主轨,但按 R-禄-01 字面另存建禄月劫一轨;两轨用神同向,5 问结论不受影响,如实备案。
- 印星(丙)与本命午中丁火、庚辛食伤相较,属「身旺印旺以食伤泄秀」,未循 R-印-08「印多用财」一路取财为用,因财不透干、且食伤更显;此系取用侧重,非偏离规则硬断。
- 时辰边界:17:30 钟表时距酉时边界近,夏时制回拨与否决申/酉;审计明载夏令时「是」,主盘取申时(庚申)。若取酉时(辛酉,伤官时柱),第 3、4 题方向不变,第 5 题「伤官」分量加重但不改 C 的取向。
- 婚姻题(第 3 题)为本题组置信最低者,C 与 D 两向皆有结构支撑,已在正文并列说明。
- 神煞细节(R-煞-17 落实两条):①2016 申年逢年支所查之「驿马」,主岗位调动、迁动之应;②2021 丑年为「时柱空亡(子丑)」之填实支,虚象落实、又逢月支巳合金(食伤之气会合),主该年所谋之事由虚转实、专业输出得用。
> 以上内容由灵爻妙解依据古籍《子平真诠》制作技能,ai生成,仅供娱乐参考,不替代医疗、法律、投资、心理咨询等任何专业意见。灵爻妙解,传承易学智慧,欢迎访问 https://lingyaomiaojie.com
---
Q1: B
Q2: A
Q3: C # 低置信, 备选=D
Q4: D
Q5: C
@@ -0,0 +1,139 @@
# contest8_2022 · male_19740428_P017
## 命主信息
- person_id:male_19740428_P017
- 性别:男(大运顺行)
- 出生钟表时间:1974-04-28 16:40(题面)
- 出生地:美国(题面 place 原文)
- 真太阳时:1974-04-28 16:43(经度修正 +0.64 分、均时差 +2.54 分,合计 +3.18 分;时区口径 Asia/Shanghai;夏令时:否)
- current_year(元数据):2022
### 对照盘说明
已排对照盘。触发原因:place = 「美国」,属境外/模糊地名,命中双盘纪律第二款。
对照盘口径:120°E 不经度修正,`--place "中国大陆"`。结果与真太阳时主盘**完全相同**——副本 `data/cities.json` 对「美国」亦解析为 120.16E / Asia/Shanghai 代理,两盘四柱、藏干、大运、流年逐字一致。故**无口径分歧,对照盘不另列**,下文一律以主盘为准。
(主盘真太阳时 16:43,距奇数整点 17:00 为 17 分钟 > 15 分钟,且时柱申时区间 15:00–17:00 内距边界宽裕,时辰边界款不触发。)
## 命盘要点
四柱:**甲寅 / 戊辰 / 己亥 / 壬申**(日主己土,生辰月)
- 日主己土,生于清明后、立夏前,月令辰(湿土)当令。
- 十神:年干甲 = 正官;月干戊 = 劫财;时干壬 = 正财。日主己。
- 藏干十神:年支寅(甲正官、丙正印、戊劫财)、月支辰(戊劫财、乙七杀、癸偏财)、日支亥(壬正财、甲正官)、时支申(庚伤官、壬正财、戊劫财)。
- 空亡:日柱空亡辰巳(**月支辰落空**);时柱空亡戌亥(**日支亥落空**——妻宫空)。
- 神煞(细节层):时柱集天乙贵人、金舆、驿马(申),又天德、月德在时干壬;月支辰为太极贵人、红艳;日支亥为劫煞、绞煞;年支寅为亡神。
- 节令:月令辰,胎元己未,命宫己巳。
三阵力量:木(官杀,甲透 + 寅禄 + 亥长生 + 辰乙)与 水(财,壬透 + 亥禄 + 申长生 + 辰癸)两阵皆强,土(比劫,戊透 + 辰本气 + 寅戊 + 申戊)得令而众。金(食伤)仅申中藏庚一位、火(印)仅寅中藏丙一位,**金火俱弱**。
## 取格
1. 月令辰。本气戊,对日主己取十神为**劫财** → 总纲第二步路由「比劫(禄/刃/劫)→ 月令无用神」,己为阴干非阳干临刃 → 转 **18_建禄月劫格**。
2. 辰藏戊乙癸,本气戊透月干;年干甲(正官)透年支寅之本气,时干壬(正财)透日支亥/时支申之本气——**官、财两透**。禄劫之干透出仍不以为用(R-禄-02),用神须在财官煞食上另取。
3. 定**建禄月劫格**。格成与否、喜忌,见下。
## 成败 · 用神相神 · 高低
- **用神**:正官甲木(制劫)。**相神**:正财壬水(财生官,随官相助)。
- 依 R-禄-03(禄格用官,须财印相随):官透干头为奇,财相随(壬透,通根亥申;丙印又藏寅)→ **成格**。属「用官而财助」一路(李知府造示范同型)。
- 日主己土得令、比劫众多,**身旺能任财官**;官杀虽重,得比劫敌之,身官两停,格局不孤。
- 略涉:甲己合——日主合官,官星贴身向我有情;又日主坐亥(财官同宫),坐下不作虚空。合化未成(支无土局),仍以正格论。
- **格局高低**:财官俱透、相神得地(R-纲-13 有情),日主有根(有力),财官两旺而身能任——属中上之贵,有职事权威、财禄可依之象。带忌有二:一,日支亥为时柱空亡,妻宫虚而不实(六亲细节层);二,金(食伤)弱、火(印)弱,调候缺丙暖(R-候-09 己生辰月先丙后癸),体质偏湿寒。
- **喜忌总方向**:喜 财(水)、官(木)、食伤(金,化劫生财);忌 比劫(土,夺财争官)。调候参看:喜丙丁火暖(气候层,不入格局)。
## 行运
大运(顺行,起运 2.51 岁):
| 步 | 干支 | 岁 | 时段 | 断 |
|---|---|---|---|---|
| 1 | 己巳 | 2.5–12.5 | 1977–1987 | 比肩 + 印/劫,忌;巳又日柱空亡,巳亥冲日支。童年动荡 |
| 2 | 庚午 | 12.5–22.5 | 1987–1997 | 伤官透 + 午(禄/比印)。伤官克官为病,午禄帮身。**1996 落此运** |
| 3 | 辛未 | 22.5–32.5 | 1997–2007 | 食神生财 + 未(比劫、乙杀、丁印)。亥未拱木。**1999/2002/2006 落此运** |
| 4 | 壬申 | 32.5–42.5 | 2007–2017 | 正财透 + 申(伤官、驿马)。财旺喜运,食伤化劫生财。**2008 落此运** |
| 5 | 癸酉 | 42.5–52.5 | 2017–2027 | 偏财透 + 酉(食神)。酉辰六合化食伤。**2018/2020 落此运** |
| 6 | 甲戌 | 52.5–62.5 | 2027–2037 | 正官透 + 戌(劫财)。官星得地而比劫亦重 |
主线:壬申、癸酉两步为财旺喜运(2007–2027 财气最盛),甲戌(2027 起)官星透而比劫争,喜忌交杂。
## 逐题推理
### 第 1 题:1996 年(丙子)发生何事
考点:流年应事(感情/意外/财)。
- 丙子年属庚午运。丙 = 正印透(寅中丙透清,A 组);子 = 偏财,且**子为该命桃花**(日支亥查,亥卯未见子),又叠天乙贵人、灾煞(子年神煞三查同落)。
- 会局:子与时支申**半合水(财)局**,又与月支辰半合水(财库)。财局成(B 组)。子合空亡之辰(合空,D 组)。
- 冲:子冲大运午(冲运,非冲命支)。
- 合成事件候选:财局成大 + 桃花 + 驿马(申)被合动 → 一为**迁动出行(驿马)**、二为**异性缘动(桃花)**、三为财气(偏财)。驿马动(时支申被合)= 走动/返居,桃花财动 = 认识异性。故「回港 + 认识现任妻子」最贴合。
- 排:B(认识现任妻子)> D(财气动,意外之财)> C(驿马动而灾煞,撞车)> A(印透为吉,非抑郁之象)。
- 取 **B**。
### 第 2 题:何年结婚
考点:男命婚姻应期(妻星、妻宫)。
- 妻星 = 正财壬(透时干,根在亥申);妻宫 = 日支亥(坐壬甲财官)。依 R-亲-05 妻宫坐财官、R-亲-10 妻透成局(官格透财生官)→ **主妻贤内助,婚姻为吉象**。但日支亥为时柱空亡,妻宫虚而不实(R-煞-12),婚缘有「迟、实后显」之味。
- 三候选:
- 1999 己卯(辛未运):亥卯未三合(日支亥 + 流年卯 + 大运未)会动妻宫,又合空亡之亥(R-煞-13 合空则空象落实)。己比肩透(争)。
- 2002 壬午:**壬正财透干(妻星到位)**;午为日主己之**禄神**(身旺能任),又逢**天德、月德**二德(遇险有解、吉),将星(成家任事)。三查俱吉。
- 2006 丙戌:辰戌冲(月支)、戌填实空亡、丙印透;且大运未与戌相刑——刑冲并见,动荡而非婚象。
- 排:2002(妻星透 + 禄 + 二德 + 将星,星宫俱吉,最合婚姻正应)> 1999(会动妻宫但合入官杀局、比肩透)> 2006(刑冲)> D(已见妻,非单身)。
- 取 **B(2002)**。# 低置信
### 第 3 题:2008 年(戊子)发生何事
考点:流年应事(财/健康/意外)。
- 戊子年属壬申运(正财 + 伤官,喜运)。戊 = 劫财透(**与月干戊伏吟**,E 组伏吟);子 = 偏财。
- 会局:**子与时支申、月支辰成申子辰三合水局**(命局本具申辰半合,流年子补齐)→ 财局大成(B 组)。月令辰(劫)与会入水局,即 R-禄-06「会支化劫为财,尤为秀气」——劫化为财 → **主得财**。
- 冲:子不冲命支;子合空亡辰(合空,D 组)。
- 神煞:子年桃花、天乙贵人、灾煞(子年三查同落)。
- 合成候选:财局大成 + 劫财透(劫 = 同辈朋友、合伙人)→ **与朋友/合伙人共事而市场财旺**;主象为「与朋友合作生意得利」。另一路径:劫财透干(R-运-19 干动直捷)直取夺财 → 破财,降为备选。
- 排:B(与朋友合作生意赚钱——劫财=朋友、三合水局=财旺,主客相得)> A(劫财夺财,备选)> C(祖母之象在年支寅,子年不引动,弱)> D(车祸另候,遗传病无据)。
- 取 **B**。# 低置信
### 第 4 题:父亲哪一年仙逝
考点:六亲应期(父 = 偏财癸,藏月支辰;父宫 = 月柱)。
- 偏财癸藏月支辰(辰为水墓,父星坐库);月柱戊辰为父母宫,而月支辰正落日柱空亡。
- 候选:
- 2009 己丑:己比肩透夺财,丑为财库;但丑不冲辰,父母宫不动,弱。
- 2013 癸巳:癸偏财透(父星显)而落空亡之巳、巳又冲日支亥(冲妻宫为主),主体为婚姻宫动荡,父象被冲散,次。
- 2018 戊戌:**戌冲月支辰**——冲动提纲父母宫(且辰本空亡,冲空则起);戊劫财再透**夺偏财(父星)**;戌为时柱空亡支,逢流年填实;神煞又见魁罡、十恶大败(破败之象)。综合为父母宫被冲、父星被夺之应。
- 2020 庚子:偏财无引动,主体在本命自身。
- 又大运癸酉(2017–2027)偏财癸透运干,父星显于本运,父忧正落此段 → 2018。
- 取 **C(2018)**。
### 第 5 题:2020 年(庚子)发生何事
考点:流年应事(事业/健康/子息)。
- 庚子年属癸酉运(偏财 + 食神)。庚 = 伤官透(申中庚透清,A 组);子 = 偏财。
- 会局:子与申半合水(财);大运酉与月支辰六合(辰酉合金,食伤),辰已被酉合绊,申子辰三合不全。子合空亡辰(D 组)。
- 冲:子不冲命支;庚与年干甲——**庚伤官克甲正官,伤官见官**(月劫用官格之忌,R-禄-20/23 畏伤食相侮)。
- 神煞:子年桃花、天乙贵人、灾煞(血光意外之细象)。
- 合成候选:①伤官见官 → 职事受损、不与升职(排除「工作升职得财」);②庚伤官泄弱己土之气,加癸酉运金水寒湿(调候失丙暖,R-候-09),久病调养之身每于寒湿运见反复——**旧疾/服药之患复发加重**;③子动时支申(子息宫)而食伤透,为子息之象,降为备选。
- 排:B(长期服药致健康出问题)> C(子息,备选)> A(伤官见官,非升职)> D(喜运用神未绝,非死)。
- 取 **B**。# 低置信
## 存疑与边界
- 双盘无分歧(见上),口径单一。
- 日支亥(妻宫)为时柱空亡,妻宫虚实之判本身两可(R-煞-12 只作虚实参看),故第 2 题置信最低。
- 第 3、5 题同以「子年补申子辰水局」为据分属不同大运(壬申 / 癸酉),天干各异(劫财 vs 伤官),故判为不同事类;若考方将两子年作同型引动处理,答案可能互换。
- 第 5 题「升职得财」一项被伤官见官排除,但财(水局)与事业一并引动,A 亦非全无可能,故该题标低置信。
- 空亡、神煞、纳音一律未入取格/成败/用神/高低四层(依 95_禁则)。
---
Q1: B
Q2: B # 低置信
Q3: B # 低置信
Q4: C
Q5: B # 低置信
@@ -0,0 +1,109 @@
# contest8_2022 · male_19810617_P024 求解留档
## 一、命主信息
- person_id:male_19810617_P024
- 性别:男
- 出生钟表时间:1981-06-17 19:30(题目 raw:1981-06-17 戌时 中国香港出生)
- 出生地:中国香港
- 排盘真太阳时:1981-06-17 19:06(经度修正 −23.32 分 / 均时差 −0.45 分,合计 −23.77 分;时区 Asia/Hong_Kong,1981 年无夏令时)
- 四柱:**辛酉 · 甲午 · 丙寅 · 戊戌**(日主丙火,生于午月)
- 大运:逆行,3 岁 10 个月起运(约 3.89 岁)
1. 癸巳(3.89 起,1985)
2. 壬辰(13.89 起,1995)
3. 辛卯(23.89 起,2005)
4. 庚寅(33.89 起,2015)
5. 己丑(43.89 起,2025)
## 二、是否排对照盘及原因
**已排对照盘,两盘四柱完全一致,无口径分歧。**
触发条件二重:
1. 主盘真太阳时 19:06,距时辰边界 19:00(戌时起点)仅 6 分钟,小于 15 分钟阈值;
2. place 为「中国香港」,属境外/模糊地名。
对照盘口径:`--place "中国大陆"`(120°E 不经度修正,钟表时=真太阳时)。对照盘四柱仍为 **辛酉 · 甲午 · 丙寅 · 戊戌**(19:30 仍落戌时,日柱丙寅不变),与主盘逐柱相同,故本次无跨盘分歧,答案行无需标注口径分歧。
(无泄漏迹象:题面 JSON 仅含题目、选项,无 `answer` 字段;未触碰 answers/、他人答案、fate_benchmark/、评测跑分_qoder-agent/;未联网。)
## 三、命盘要点
- 日主丙火,生午月(丙之帝旺,即羊刃)。午中藏丁(劫财)、己(伤官),本气丁为劫财。
- 地支寅午戌**三合火局成局**,火势极旺;天干甲木(偏印)透月干生火,日主旺极。
- 天干另透:年干辛(正财,坐酉禄)、时干戊(食神,坐戌,寅中亦藏戊)。**四柱无水——全盘官煞(水)绝迹。**
- 神煞(细节层,仅供参看,不入格局):年柱辛酉=正财坐禄,带天乙贵人、太极贵人、将星、月德合;月支午=羊刃、桃花、将星;日支寅=红艳、福星贵人、天德合,兼劫煞、元辰;时支戌=华盖。二德(月德/天德合/月德合)在命,成「险格有二德」之象。
## 四、取格(依 `00_总纲_取格.md` 六步)
1. 定月令:月支午;藏干丁(本气)、己。
2. 月令十神:丙对午本气丁=劫财,即羊刃 → 阳干临刃 → **阳刃格**(R-刃-01)。
3. 藏干变化:午为专气月,本气即刃,无须透干变格。
4. 会支变化:寅午戌三合火局,月令之气尽化为火(比劫)——火局成,格仍为阳刃(比劫),不另立外格。
5. 第六步外格闸门:月令无用神(刃),但四柱干头有财(辛)、食(戊)可取,非「无用门」可通(R-纲-16 与 R-纲-01 但书),故**不转杂格,归正格阳刃论**。判为**阳刃格**。
## 五、成败、用神相神、高低
- **成败**:阳刃宜逆用,喜官煞制伏,最忌官煞俱无(R-纲-02、R-刃-02)。本命四柱无水,**官煞俱无、全无制刃之物**——正格以「制刃取贵」一路断为无成,不能以贵论(R-刃-13 官煞藏露根浅之贵亦无从谈起,因根本无官煞)。险格而有二德在命,按 R-煞-02 只作安危旁参,不改格局。
- **变通用财(成格之另一路)**:阳刃用财本为格所不喜,然**财星根深**(辛坐酉禄,禄为财之重根),又**透食伤转刃生财**(戊食神透时干坐戌,刃火生食土、食土生财金,火→土→金一路顺生通关)——依 R-刃-06,**变格可成,主富**,「虽不比建禄月劫之可以取贵,亦可就富」。故本命定性:**富而不贵**(无官则无位无爵)。
- **用神/相神**:用神为财(辛金),相神为食神(戊土)——食转刃生财、且为火金之通关之神(R-旺-23 火金要土)。甲木偏印生身助刃,于旺极为累(身已太旺,印非所用)。
- **调候(R-候-06 丙火午月)**:调候用神壬、庚(水火既济);**忌「戊己出干」「成火局不见滴水」**——本命戊土出干、寅午戌火局成、全盘无一滴水,正踩午月丙火调候大忌,原文断此象「僧道鳏独」。调候失济,虽成格而成色大减(气候只增减成色,不推翻格局)。
- **格局高低**:身(火)旺极、财(金)有根而遭旺火劫夺、食神通关——财气尚能通门户(R-事-02),故以「富」为格调,然富而有限、不成贵局;气候(无水)偏枯,减色。
- **性情(R-性-13、R-性-11)**:羊刃局旺(支会寅戌、逢火局)→ 心高志傲、刚烈有胆识、好动独立;又「阳明遇金」(寅午戌火局+酉中辛金伏藏被火争夺)→ 郁而多烦,一生得意者少、失意者多。
## 六、行运喜忌(依 `90_行运.md`、`17_阳刃格.md` 取运节)
- **喜**:行官煞(水)之乡以制刃、且济调候;亦喜财乡若能生官煞者。忌:比劫(火)再旺、印(木)助刃、及官煞俱无之顺火之运。
- **癸巳运(1985–1995,约 4–14 岁)**:癸水正官透干制刃——少年一段官星露,为一生较「成格」之段。
- **壬辰运(1995–2005,约 14–24 岁)**:壬水七煞透干制刃、辰为湿土晦火——青年前半段,官煞水运续旺,制刃济候,为求学、踏入社会之成格段。
- **辛卯运(2005–2015,约 24–34 岁)**:辛为正财透(妻星现)、卯为桃花(以日支寅查)——婚恋期;然卯木印生火、卯戌合又助火,火益旺而财被劫,主「财来财去、婚恋有起有伏」。
- **庚寅运(2015–2025,约 34–44 岁)**:庚为偏财透(与流年财星呼应)、寅为印(寅午戌再会火局)——十年偏财显露而劫夺随之,求财多奔波、聚而不厚。
- **己丑运(2025 起)**:己土伤官、丑为湿土晦火生金(丑酉半合金局),火气得泄、财得生,财渐安。
## 七、逐年断运(R-运-34 五步核对,关键年)
**第 38 题·2014 甲午年(辛卯运内)**
- A 透清:流年干甲=偏印,透命中寅中甲木之印(印助火,忌)。
- B 会局:流年支午与命午伏吟、又与寅戌重会火局,火势更炽。
- C 刑冲:午午伏吟月令羊刃,无解(合处逢冲、逢冲不冲皆未解)。
- D 空亡:日柱空亡戌亥、时柱空亡辰巳,午不涉。
- E 伏吟:流年午与月柱午伏吟(羊刃伏吟)、干支不同柱故非全伏吟。
- 岁运神煞:午=羊刃(岁运再逢,R-煞-20 主刑伤血光)、桃花、将星、勾煞。
- 合成:羊刃逢岁刃、火局极旺→血光刑伤之象急;火主心与血脉,刃在月支(胸位)→ **心胸部位手术之应**。
**第 40 题·2020 庚子 / 2021 辛丑年(庚寅运内)**
- 2020 庚子:庚=偏财透(与运干庚伏吟,财星叠见);子=正官(喜用、能制刃济候);子冲月令午刃(C 组刑冲:子午冲)。衰水冲旺火,午刃反激,为「动而多耗」之年(岁运逢灾煞、绞煞:血光意外、牵连羁绊)。
- 2021 辛丑:辛=正财透干(财临);丑=湿土,晦火生金助财,且丑与年支酉半合金局(财得局);岁运逢月德合(凶中有缓)、华盖(向学孤处)。
- 合成:偏财运(2015–2025)逢财透、财局,然原局劫刃极重、财易被夺——财能聚而聚之不厚,属「薄有积蓄」一档;非财务自由(无官无印贵气、财不得纯),亦不至月月清空或负欠。
## 八、逐题推理
**第 36 题(出生家庭环境:A 家境(清)贫 / B 不过不失 / C 小康之家 / D 富裕家庭)**
考点:原局年、月二柱所临十神与格局喜忌,定祖上/早年家境。年柱辛酉=正财坐禄(财之重根)、并带天乙贵人、太极贵人、将星、月德合,祖上宫财、德、位俱备;本格以财为用(阳刃用财之富格),财居年月为日主之喜——依 R-亲-35「年月财官印为日主之喜,父母不贵亦富」,家境偏于优裕。但月令午为羊刃、劫夺年柱之财(午火克酉金),且火局旺劫,家境虽不薄而有耗、非巨富之象。合参:家境在常人之上、未至豪门。取 **C 小康之家**。
**第 37 题(婚姻状况:A 仍然单身 / B 同居生活 / C 已婚 / D 已离婚)**
考点:男命妻星、妻宫与格局喜忌(`96_六亲.md`)。妻星=正财辛,透年干、坐酉禄(星不弱),且与日主丙有「丙辛合」之情(有情、有婚缘);辛卯运(2005–2015)正财透干兼桃花,正为婚恋应期,故非全无妻缘。然:①月令午刃(劫财极旺)直劫年财,火又克金——妻星被夺被伤;②妻宫日支寅虽带福星贵人、天德合,却也坐劫煞、元辰(动摇耗散之煞),并见红艳,婚宫带凶;③调候明断丙火午月成火局无滴水为「僧道鳏独」;④依 R-亲-24「劫刃重、财星轻、有食伤、逢枭印」之主克妻组合,本命正合(劫刃重、财被劫、有食戊、逢枭印甲)。诸征同指婚姻有始多折、难偕老。以妻星透合日主(曾成婚缘)为主,断为已成而变。取 **D 已离婚**。*(低置信:A 单身亦为强备选,「鳏独」可直解为独身;B 同居居其三。)*
**第 38 题(2014 年手术器官:A 心脏 / B 脑部 / C 双腿 / D 手肘)**
考点:2014 甲午流年之引动与病位配属(`93_性情.md` 疾病节)。午为丙火羊刃,流年羊刃伏吟月令羊刃(刃逢刃),R-煞-20 明主「刑伤、血光之虞」;又甲午年重会寅午戌火局,火势到顶。脏腑配属火为「小肠、心」,火主血脉;刃居月支,月柱主胸位。火旺攻心、刃主刀(手术)在胸——病位合于心。取 **A 心脏**。*(低置信:火炎上主头,B 脑部为备选;火克金伤骨可牵及 D 手肘。)*
**第 39 题(职业:A 保险从业员 / B 零售业 / C 文员 / D 的士司机)**
考点:格局取象+十神事类(`91_何知事类.md`、`90_行运.md` R-运-31)。本命阳刃格而**全无官煞**,无公职、无编制、无管理职位可论——文员(C,官印文书之职)最不合。格以「阳刃用财、食神转刃生财」成富格,事业落于**食伤生财**一路:以口才、专业服务换取财利之商业角色。命带天乙贵人、太极贵人、红艳、桃花,人缘与亲和特出,宜人际型销售;羊刃加之无官,主独立自主、佣金自食(非坐店受雇)。火土(食)生金(财)之映射正为「以口才与服务推销金融产品」。取 **A 保险从业员**。*(低置信:B 零售业亦同属财之买卖一路;阳刃亦主驾驶、技术,D 的士司机为备选。)*
**第 40 题(2020/2021 经济状况:A 月光族 / B 欠下债务 / C 薄有积蓄 / D 财务自由)**
考点:庚寅大运(偏财透)末年之财星引动。2020 庚子财星叠透而子午冲刃(动而耗,逢灾煞、绞煞),2021 辛丑正财透、丑酉半合财局、湿土晦火生金(财得局得生,逢月德合缓其凶)。财路显而原局劫刃极重,财聚而不厚:既非「财务自由」(无官无印之贵气、财不纯),亦非月光或负债(财透得局、有食通关可积)。取 **C 薄有积蓄**。
## 九、存疑与边界
- 双盘四柱一致,无跨盘分歧。
- 「阳刃用财」之变格成立,系依 R-刃-06(财根深+伤食转生);若从严以「阳刃无官煞制即败」单看,则格降为低下——本档取「变格成而主富」一路,并声明其富有限、不成贵。
- 第 37 题(婚姻)、第 38 题(手术部位)、第 39 题(职业)判据偏弱、选项相近,均标低置信;第 36、40 题为中等置信。
- 神煞、空亡只作细节参看,未入取格/成败/用神/高低四层(R-禁-01)。
## 十、答案
Q1: C
Q2: D
Q3: A
Q4: A
Q5: C
@@ -0,0 +1,110 @@
# BaziQA 求解:male_19831101_P022(contest8_2022)
## 一、命主信息
- person_id:male_19831101_P022(题目名:1983年出生男性)
- 性别:男
- 出生钟表时间:1983-11-01 21:30(题面 raw:「1983-11-01 亥时 中国台湾出生」)
- 出生地:中国台湾
- 真太阳时(主盘):1983-11-01 21:52
- 对照盘:**已排**。触发原因:place「中国台湾」属境外/模糊地名(任务书双盘纪律第二条)。对照盘口径为 120°E 不经度修正(`--place "中国大陆"`,副本解析为杭州代理 120.16E / Asia/Shanghai)。
- **两盘四柱完全相同**(癸亥 壬戌 癸巳 癸亥),仅经度修正不同(台北 121.5E:+6.24 分;杭州 120.16E:+0.64 分),真太阳时分别 21:52 / 21:47,**同属亥时**,无时辰跨界、无晚子时、无口径分歧。下文结论两盘通用,末尾答案行不标口径分歧。
- 题目数:5(P022-Q26 ~ P022-Q30)。
## 二、排盘口径
- 时区 Asia/Taipei,夏令时:否(1983 年不在 1986–1991 夏令时段内)。
- 经度修正 +6.24 分 / 均时差 +16.38 分 / 合计 +22.62 分(主盘)。
- 日界规则:子初换日(真太阳时 23:00);本盘真太阳时 21:52,未涉晚子时;距交节(立冬 11-08 07:52)远,无节气边界提示。
- 对照盘仅经度修正不同(合计 +17.02 分),四柱一致。
## 三、命盘要点
- 四柱:年 癸亥(比肩·帝旺)/月 壬戌(劫财·衰)/日 癸巳(日主·胎)/时 癸亥(比肩·帝旺)。
- 藏干:亥(壬劫财、甲伤官)×2;戌(戊正官、辛偏印、丁偏财);巳(丙正财、庚正印、戊正官)。
- 空亡:日柱午未;时柱子丑。
- 神煞(仅参看):驿马(亥、巳)、天乙贵人(癸见巳)、太极贵人(癸见巳)、地网(巳)、阴差阳错(癸巳日)、寡宿(年支亥见戌)。
- 五行分布:水 6、土 3、火 2、金 2、木 2。**水(比劫)占绝对优势**:天干四字全为壬癸比劫,地支亥亥两坐日主帝旺。
## 四、取格
依《子平真诠》「用神专求月令」:
1. 月令戌(寒露后、立冬前),藏戊辛丁;本气戊为日主癸水之**正官**(戊癸阴阳相配)。
2. 戌中戊辛丁**皆不透干**(四柱天干唯壬癸比劫),无从透变,故以本气取格 → **正官格**(杂气正官,兼财兼印藏于库)。
3. 非建禄月劫格(月令戌为官库,非癸之禄刃);非从格(日主极旺有根)。外格闸门不开(月令自有用神)。
4. 兼看:官、财、印、伤皆藏支而不透,全局天干只显比劫。
## 五、格之成败 · 用神相神 · 格局高低
- **成败**:正官格喜财生官、印护官(财印并透两不相碍为上)。此造财(丙丁)、印(庚辛)俱藏不透,官星孤而无辅;更重者——日支巳(官根、亦妻宫财库)被年、时双亥**冲**,官星之根受伤。属「孤官无辅」之列,格低且带忌。
- **用神/相神**:身旺极,用神取正官戊土;相神宜财(财生官),而财被比劫重重劫夺、不能生官;印生身反为忌。
- **旺衰扶抑(参看层)**:日主旺极、比劫成群、官轻财弱,扶抑药神宜「泄」(食伤)与「耗」(财)。命局甲木伤官、丙丁财皆藏而不透,泄耗之用不显。
- **高低**:身旺(有力)而用神官星无力、财被劫、妻/官之根受冲,配合无情不能呼应 → 格局偏低。属劳碌、财来财去、名位不显、婚缘多波折之命,非寒乞(天乙、太极、正官当令,尚有和气与贵人),亦不主大富大贵。
- **调候(参看层)**:九月癸水,穷通宝鉴取辛发水源、甲制戊土。命有辛(戌中)、甲(亥中),俱藏透不出 → 中和偏平,常人之上、贵显之下,与格局低断相合。
- **禁则约束**:神煞、纳音、空亡未进入取格/成败/用神/高低四层。
## 六、行运
- 排法:逆行,起运 7.90 岁。大运:辛酉(1991)→ 庚申(2001)→ 己未(2011)→ 戊午(2021)→ 丁巳(2031)→ 丙辰(2041)。
- **辛酉、庚申(7.9–27.9 岁,1991–2011)**:纯印运,覆盖求学全程。印为文凭学业之神,虽于身旺命为忌(助旺),但主读书考试得力 → 学历当在大学之上。
- **己未(27.9–37.9 岁,2011–2021)**:己七杀透、未为杀库,官杀运——身旺喜官杀制身,为用神运,事业渐入正轨。
- **戊午(37.9–47.9 岁,2021–2031)**:戊正官透、午为正财,官财并美,同为用神运,中年前后为事业财禄主升段(2021 为交运年,戊癸合,官星贴身)。
- **丁巳、丙辰(47.9 岁后)**:财星得地,财运续旺。
- 忌在印比(金水)之限,喜在官财食伤(土木火)之限。
## 七、逐题推理
### 第 1 题(对应 P022-Q26)爱情问题
- 考点:男命婚姻感情状态。
- 推理链:男以财为妻。此造财星丙(藏日支巳,丙禄在巳)、丁(藏月支戌,火库)俱藏不透,且被年时四水比劫重重劫夺——妻星虽藏而有根,却被劫;日支巳为妻宫,坐丙财(妻宫有用),却**被年、时双亥相冲**。依真诠论妻子篇:「妻透成格,或妻宫有用而坐下刑冲,未免得美妻而难偕老」——妻宫有用而逢冲,主有妻而难偕老。合参比劫极旺夺财(「财神轻而比劫多」),婚缘多波折,能成而难守。
- 逐项排除:D(已婚幸福育子)——妻宫被冲、财被劫,与「家庭幸福」相反,排除。B(稳定交往多年未婚)——夫妻宫逢冲无解,长期稳定关系难维持,次排。A(单身几任无疾而终)与 C(曾婚离婚)皆合「婚姻不顺」之象。妻宫坐财有根、天乙贵人坐妻宫,主有婚姻之缘而非终身无配,故取 C(曾有一段婚姻而终离),A 列为备选。
- 结论:C(低置信;A 为备选)。
### 第 2 题(对应 P022-Q27)学历与工作
- 考点:出身学历、职业性质。
- 推理链:辛酉、庚申两运共二十年纯印,严丝合缝覆盖求学年龄段 → 学历当在大学以上。格为正官格(官为分所当尊之神),官星虽弱而月令当令有根,天乙、太极二贵人坐日支 —— 主聪慧、向学、走正途体制路线。财星被比劫劫夺,不宜以经商求财为业;官(名位、职务、体制)与印(文书、学术、平台)为一生立身之所。官+印相配、财路受阻 → 宜体制内的研究/学术/文职,而非企业求财或技术经商。
- 逐项排除:A(高职摆摊)——二十印运与正官格不容此;D(上市公司、工程/企业)——财被劫,走企业求财之路不顺,次排。C(硕士、大学研究员)与官格+印+贵人路线最合。
- 结论:C(中等偏低置信;D 为备选)。
### 第 3 题(对应 P022-Q28)被骗钱的时间
- 考点:破财(被骗)之应期,流年定位。
- 推理链(按断运序列查表):命局比劫(劫财)极旺,妻财宫(日支巳,藏丙财)本是财之所在。逐候选年比对五组引动——
- 2014 甲午:甲透亥中伤官(A 组透清),午为日柱空亡填实(D 组)、午未与大运未合(B 组);但午火属财,为助财之年,非夺财,事类偏得财/伤官泄秀,非「被骗」。
- 2018 戊戌:戊透戌中正官(A 组)、戌戌伏吟月支(E 组)、戌与大运未相刑(C 组);事类偏官星/职务/官非,非直接破财。
- 2019 己亥:亥为年、时支伏吟(E 组),亥与大运未半合木局成伤官局(B 组),**亥冲日支巳(C 组,冲财宫、妻宫)**;己七杀透。劫财得势(三亥)+伤官局成+冲财宫,正是「比劫夺财、被同辈/小人所骗而破财」之象,且兼动妻宫。
- 2021 辛丑:辛透戌中偏印(A 组)、巳丑半合金局合动妻宫(B 组)、丑戌刑(C 组);事类偏文书/合同、婚姻与母辈之事,破财为间接。
- 最贴合「被骗钱」(比劫夺财)者为 2019 己亥。
- 逐项排除:2014 助财反非破财;2018 偏官非;2021 偏文书婚姻。取 2019。
- 结论:C(2019 年)。
### 第 4 题(对应 P022-Q29)个性及特色
- 考点:性情、才性。
- 推理链:此造最大结构特征是**比劫暴旺**——天干四字全为壬癸比劫,地支亥亥两帝旺,比劫居五行之绝对优势。比劫主同辈、朋友、竞争;身旺比劫为忌,故为「好交际、重义气、朋友多而杂」,但因比劫夺财、朋辈带来的是分夺与破费,难得知己 → 「喜好交友而真心朋友寥寥」。正官虽当令为格,然官星藏而不透、根被冲伤,其「律己约束」之力不能自立,故性格主导在比劫之性,而非正官之德。
- 逐项排除:D(和善律己宽人)——此为纯粹正官/正印得用之象,本造官弱被伤,不取(列为备选);A(过动亢奋)——伤官仅藏不透,阳动之性不显;B(体力雄健)——虽身旺体壮,但非命局最显著之「特色」对应。
- 结论:C(中等偏低置信;D 为备选)。
### 第 5 题(对应 P022-Q30)理财能力
- 考点:财、理财、用财方式。
- 推理链:命局财星(丙丁)藏而不透,被年时四水比劫重重劫夺;劫财旺主冒险、投机、好赌、敢下重注,而所赚之财随即被比劫分夺(劫财夺财)——正合「相当投机,赚的钱几乎都投入股市,但赚少赔多」之象。财库(戌)与财根(巳)又逢冲刑,财更难聚守。
- 逐项排除:A(会理财、已置房)——财被劫而难聚,与「会理财、能置产」相反;B(母亲代管)——印为母,然印不透、非命局主导,母代管之象不显;C(富二代乱花)——年月无富贵之根可承,身旺比劫更非富二代之象。
- 结论:D(中等置信)。
## 八、存疑与边界
- 第 1 题「婚变年份」:题面所给 2021 年,盘上冲妻宫最著者为 2019 己亥(亥冲巳),2021 辛丑以巳丑半合、丑戌刑动妻宫与官库为主,冲力不及 2019;然「曾婚而离」之类型判断仍以妻宫坐财逢冲、比劫夺财为据,故取类型 C,年份层面存疑,标低置信。
- 第 4 题:正官格与比劫旺双线均显,官弱则取比劫主导之断(C),正官之德(D)降为备选。
- 对照盘与主盘四柱全同,无口径分歧。
---
Q1: C # 低置信
Q2: C # 低置信
Q3: C
Q4: C # 低置信
Q5: D
@@ -0,0 +1,127 @@
# BaziQA 求解:contest8_2022 · male_19850629_P021
## 一、命主信息
- contest:contest8_2022(current_year=2022)
- person_id:male_19850629_P021(题目 name「1985年出生男性」)
- 性别:男
- 出生钟表时间:1985-06-29 18:32(题目 place 原文「马来西亚」,题面注「酉时」)
- 出生地:马来西亚(题面 place 原文,脚本解析时区 Asia/Kuala_Lumpur)
- **真太阳时(主盘):1985-06-29 17:15**(经度修正 -73.24 分、均时差 -3.04 分,合计 -76.28 分;时区无夏令时)
- 四柱:**乙丑 / 壬午 / 己亥 / 癸酉**
- 对照盘:**已排**。
### 双盘说明
- 触发原因:place「马来西亚」属**境外/模糊地名**(双盘纪律条件二),强制排对照盘。
- 对照盘口径:place 传「中国大陆」(副本解析为杭州代理 120.16E,UTC+8 钟表时≈真太阳时,即 120°E 不经度修正),真太阳时 1985-06-29 18:29。
- 对照盘四柱:**乙丑 / 壬午 / 己亥 / 癸酉**——与主盘**完全相同**(两盘皆落酉时,18:32 钟表时在 UTC+8 下同为酉时)。
- 另注:主盘真太阳时 17:15 距酉时边界 17:00 恰为 15 分钟(纪律条件一要求「小于 15 分钟」,不满足),对照盘由「境外」条件触发。
- **两盘同盘,无口径分歧**,下文答案均无「口径分歧」标注。
---
## 二、命盘要点
- 日主己土,生午月(芒种后、小暑前)。
- 四柱十神:年乙(七杀)丑、月壬(正财)午、日己(日主)亥、时癸(偏财)酉。
- 藏干:丑(己癸辛)、午(丁己)、亥(壬甲)、酉(辛)。
- 日主得根:月令午为**己之临官(禄)**,年支丑、月支午中己皆比肩——**身旺**。
- 财(水):壬正财透月干、癸偏财透时干,通根日支亥(壬禄)、年支丑(癸),**财旺两透**。
- 印(火):午火当令,丁偏印藏——**印旺**。
- 食(金):时支酉为辛之禄地(食神有气),年支丑藏辛。
- 官煞(木):乙七杀透年干(坐丑衰),甲正官藏日支亥——**官煞弱而混**。
- 空亡:日柱辰巳、时柱戌亥(**日支亥在时柱空亡内**)。
- 神煞:华盖、太极贵人(年支丑);禄神、桃花、元辰(月支午);天德、驿马(日支亥);文昌、将星、灾煞(时支酉)。
- 节令气候:己土生午月,夏土火炎土燥,穷通宝鉴「三夏己土,禾稼在田,最喜甘沛,取癸为要,次用丙火」——**调候正需癸水**,本命癸透亥丑有根,调候得用。
## 三、取格(依 00_总纲 §1 六步)
1. 定月令:午。
2. 月令午为**日主己之临官(禄堂)**——己禄在午。依 R-禄-01「建禄月劫同格,别取财官煞食为用」,立**建禄月劫格**(月令自身无用神,于四柱另取财官煞食)。
- 备注(存疑):总纲 §1 第二步字面作「以日干对月令本气取十神」;午本气丁为偏印,字面亦可读作**印绶格**。然午即己之禄(命盘「月柱·临官」亦标此),子平通法及本库 R-禄-01「月令为日干之禄(临官)」皆归建禄。两读**结论趋同**:无论建禄用财、或印重身强「印多而用财」(R-印-08 透财抑印),**用神皆为财(水)**,故取格分歧不改喜忌与断语。
3. 藏干变化:午本气丁(偏印)不透,四柱透财(壬癸)、七杀(乙)、比肩(日主);无寅申巳亥辰戌丑未之透干格变。
4. 会支变化:无三合三会成局(丑酉只半合金、亥无卯未),格不变。
5. 定格完成:建禄月劫格。
6. 杂格闸门:月令自有用神(财、煞透干可取),不转杂格。
**格之成败**:建禄用财带食——壬癸财两透(财星根深),时支酉食神有气(辛得禄),合 R-禄-05「禄劫用财须带伤食……四柱带食神/伤官透出或有气」→**成格**;财透两位为「露」且偏正杂出,较 R-禄-02「透一位以清用」为逊,故成而未极。
**用神与相神**:用神=财(壬正财为主、癸偏财为辅,水);相神=食神辛(时支酉,既泄比劫之旺、又生财,兼制年干乙煞)。七杀乙弱且有食制,不碍。
**格局高低**:身旺、财旺、食有气、调候得癸——**有情而有力**,然官星(甲)藏而弱(官不起),财偏正杂出、比劫(土)与印(火)皆旺助身夺财,故**富多贵少**(依 R-禄-14/18「用财……亦可取富,但不贵耳」,参 R-性-26「富而秀者,身旺财旺与官星不通」)。格局中上偏低之富格。
**喜忌总纲**:喜金(食伤,泄秀生财)、喜水(财,用神兼调候);忌火(印,助身增燥)、忌土(比劫,夺财);木(官煞)为护财之喜,然身旺而官煞弱且混杂无去留,逢之易起官非是非。五行流行(木→火→土→金→水)无断,根本气畅。
## 四、行运
大运逆行,7.88 岁起运:
- **辛巳**(1993–2002,8–17 岁):辛食神泄秀(喜),巳为印火(忌)然巳与命丑酉**会金局**(巳酉丑,食伤得地、生财)——学业少年期,食伤旺主聪敏,半吉。
- **庚辰**(2003–2012,18–27 岁):庚伤官生财(喜),辰湿土助身亦为水库;**庚合年干乙,合煞存财**(R-禄-14)——事业起步、财运上升之吉运。
- **己卯**(2013–2022,28–37 岁):己比肩透(忌,夺财);卯为七杀乙木(忌),且**卯冲时支酉**,冲坏食神相神——制煞之具被冲,七杀无制攻身。**忌运**:破财、竞争分夺、官非压力、婚恋波折并见。
- **戊寅**(2023–2032,38–47 岁):戊劫财(忌,夺财);寅正官(甲)得地、寅亥合木,官星较显而甲己暗合,比劫与官星并动,喜忌参半。
### 关键流年(依 R-运-34 五步核对后落笔)
- **2009 己丑**(庚辰运):己比肩透(夺财)、丑与年支伏吟、丑酉半合金(食伤)、丑辰相破;神煞逢太极/华盖(命带重见)、流年干支自属十恶大败。→ 比劫夺财、合伙分夺之象。
- **2019 己亥**(己卯运):己比肩、亥与日柱**伏吟**(妻宫重见),亥为驿马(迁徙动)、天德(得解)——妻宫被牵动。
- **2022 壬寅**(己卯运):壬正财透清(命中亥藏壬)、寅为正官甲之生地、寅亥合木(官局动),逢劫煞、亡神、孤辰;己卯运比劫夺财、卯酉冲坏食神(煞无制)——财透而生官煞、煞攻身无制之象。
## 五、逐题推理
### 第 1 题(个性)
考点:对人「性情」细节(加载 93_性情)。
推理链:五行木火土金水俱全且顺生无断(乙木生午火、午火生己丑土、土生辛酉金、金生壬癸水、水生乙木),依 R-性-02「五气不戾,性情中和」为不苟、无骄谄;天干乙壬己癸全阴在外、地支午(阳)在内,合 R-性-16「阳在内、阴在外,不激不亢,德胜才者,局合君子之风」。身旺而印重、财旺而食秀,为人持正而务实;命带华盖、太极贵人(年支丑)皆主孤高、向学、内敛,火土燥而得丑湿土与水润,非暴烈之象(R-性-03「火烈而性燥」以「无丑辰湿土」为条件,本命有丑,不触发)。综合取向为**谨慎持重、不轻冒险**一路。
排除:B「脾气暴躁,自暴自弃」需火烈性燥而无湿土,本命丑湿土润、且五行流通,不合;C「先斩后奏,闯祸后就逃避」属伤官劫财无忌之象,本命有官煞透、食神制,不合;D「苦口婆心,啰啰嗦嗦」本命印食虽旺,然主线取中和持正一路更贴。取 A。
### 第 2 题(婚姻)
考点:婚姻应期(加载 96_六亲 §4 妻宫妻星 + 90_行运 R-事-13)。
推理链:妻宫=日支亥(藏壬正财、甲正官——妻宫坐财官,R-亲-05「妻当贤贵」),妻星=天干财(壬正财、癸偏财两透),R-亲-10「妻星透而成局」主内助。日支亥在**时柱空亡(戌亥)**内、且辰巳空亡不涉。大运己卯(2013–2022)卯与日支亥**半合木**、并冲时支酉,婚宫全程被牵动——婚缘应在此运。R-亲-13「妻星两透偏正杂出」防刑克,然 R-亲-23 身旺财旺「必富贵而多妻妾」,非无婚之象,排除「至今未婚」。具体收敛:**2019 己亥**年与日柱己亥**伏吟**(妻宫亥重见)、亥为驿马(成家迁动)、又逢天德(凶解),为婚缘落实之年;对照 2017 丁酉(丁壬合去妻星壬,反主妻星被牵)、2018 戊戌(戊劫财透,夺财),皆不如 2019。选项 B「2019年11月」正为亥年亥月双现妻宫之期。
取 B。低置信(亦不排除 A 2017年3月)。
### 第 3 题(2009 年何事)
考点:流年应事(庚辰运 / 己丑年,命主实龄 24)。
推理链:庚辰运为伤官生财、合煞存财之吉运(事业开创期);2009 己丑年己比肩透干——**比肩即同辈、朋友、合伙人、竞争者**(R-运-31 十神事类),其用为「分夺财利」。丑与年支乙丑**伏吟**、与时支酉半合金、与大运辰相破,流年干支又自属十恶大败(主财物大进大出、易大挫)。比劫夺财贯穿全年,最合「合伙/朋友间因分财而受骗破耗」之象。分组:B 组(丑酉半合食伤)、E 组(丑伏吟年支)——引动非单一。
排除:A(黑道女人被追杀)须桃花与煞大动,己丑年无桃花引动(命带桃花在午),不合;C(中彩票得横财)比劫当值之年多主破财而非得财,且丑为金库非水库,不合;D(车祸重伤)命带灾煞在酉、虽逢丑半合,然无冲无刑、引动不足,且比劫夺财之象更着。综合取 B「和朋友创业,被股东诈骗」。
取 B。低置信。
### 第 4 题(2022 上半年何事)
考点:流年应事(己卯运 / 壬寅年,current_year=2022,命主实龄 37)。
推理链:壬寅年,壬为正财透清(命中亥藏壬),财透而生官煞;寅为正官甲之生地,寅与日支亥**合木**,官局动。然所行**己卯运**为忌运:己比肩夺财、卯冲时支酉**冲坏食神**(食神为制七杀乙之相神),七杀无制而攻身;身旺而官煞弱且**混杂**(乙煞透、甲官藏,无去留),依 R-事-13「官禄受冲刑」——官星浊杂、为忌者多应**官非、口舌**。神煞层:2022 逢**劫煞**(争夺、口舌、意外伤损)、**亡神**(耗散失脱)、孤辰,皆指向争夺破耗与是非乃至官讼;天德合主凶中有缓。
排除:D(升职)身旺虽喜官,然官煞混而无制、又逢劫煞亡神破耗,升迁之象不成立;A(创业融资)己卯运比劫夺财、食神被冲,不宜得财反主破财,且与劫煞争夺之象相悖;C(父亲受伤)虽偏财(父)在己卯运受比肩之克,但流年主象在官煞攻身与劫煞争夺,官非之象更显。综合取 B「犯下刑事罪被告上法庭」。
取 B。低置信。
### 第 5 题(学历)
考点:学业出身(参 93_性情 §6 出身、印/官/食配置)。
推理链:学历以印为文凭之器。本命印(丁火)本气藏午、午为印之禄地(当令有力),命带文昌(时支酉)、华盖、太极贵人(年支丑),主聪敏向学;然**财旺两透坏印**(壬癸水克丁火),且日主官星(甲)藏亥、弱而**官不起**——合 R-性-26「富而秀者,身旺财旺与官星不通……纵有清气,不过一衿终身」,为「弃文就商」之象。早年辛巳运食伤泄秀(聪慧)而巳酉丑会金局亦偏食伤生财之路,非纯官印功名之局。综合:有向学之根而文凭受财坏、功名不高,学历止于中等实用一路。
排除:D(小学未读)印得当令、文昌入命,非失学之象;C(专业技术学校)食伤旺虽近技艺,然本命财旺主商而非专技;A(大学/大专)印虽有力,但财坏印、官不起,文凭之象不足以上探。取 B「中学/高中毕业」。
取 B。低置信。
---
## 六、答案
Q1: A # 低置信
Q2: B # 低置信
Q3: B # 低置信
Q4: B # 低置信
Q5: B # 低置信
@@ -0,0 +1,175 @@
# contest8_2023 — female_19581027_P014
## 命主信息
- person_id:female_19581027_P014(1958年出生女性)
- 性别:女
- 出生钟表时间:1958-10-27 07:00(当地钟表时,Asia/Taipei)
- 出生地:台湾(题面原文;属境外/模糊地名)
- 真太阳时主盘:1958-10-27 07:22(经度修正 +6.24 分、均时差 +16.14 分,合计 +22.38 分)
- 对照盘:**已排**。触发条件二——出生地为「台湾」(境外/模糊地名,落在任务书列举清单内)。
对照盘口径 120°E 不经度修正(`--place "中国大陆"` → 杭州代理 120.16E,UTC+8 钟表时≈真太阳时),
真太阳时 07:16。
- **两盘结果**:主盘与对照盘四柱全同——**戊戌 壬戌 丁丑 甲辰**(真太阳时 07:22 与 07:16 均落辰时 07:00–09:00 之内)。
故本题**不存在口径分歧**,下文按此一盘统一推理,答案行不标「口径分歧」。
- 时辰边界检查:真太阳时 07:22 距辰时起点 07:00 为 22 分钟(> 15 分钟),边界条件未触发;对照盘仅因境外地名而排。
## 一、命盘要点
```
四柱:戊戌 壬戌 丁丑 甲辰
```
- 日主 **丁火**,生于戌月(寒露后、立冬前),戌为火之墓库,日支丑、时支辰皆墓/库,
**日主无禄无刃、通根仅戌中丁比肩(墓中之根),身弱**。
- 地支四土库齐见(年戌、月戌、日丑、时辰),**戊土伤官极旺**(戊透年干 + 戌本气 + 丑己 + 辰戊)。
- 天干:年戊(伤官)、月壬(正官)、日丁(日主)、时甲(正印)。
- 藏干:戌〔戊辛丁〕、丑〔己癸辛〕、辰〔戊乙癸〕。
- 空亡:日柱空亡 **申酉**;时柱空亡 **寅卯**。
- 神煞:**华盖三重**(年戌、月戌、日丑)、绞煞(日支丑)、阴差阳错(日柱直查)。华盖重重,主向学、艺文、宗教玄学之缘。
- 干支关系:**丁壬合**(日主丁与月干壬正官作合);丑戌相刑(日支丑刑年月戌);辰戌相冲(时支辰冲年月二戌);丑未冲(逢未运/未年);丑辰、戌戌同气。
- 调候:丁生戌月,穷通宝鉴「九月丁火,端用甲、庚(乙不离丙)」——**甲木透时干**,得调候用神;庚金不透(辛金藏戌丑),是此盘之一缺。
## 二、取格(按 00_总纲 六步)
1. 月令:戌(月柱壬**戌**)。
2. 月令本气十神:戌本气戊,对日干丁为**伤官** → **伤官格**。
3. 藏干变化:戌藏戊辛丁,本气**戊透年干**,辛(偏财)藏而不透,故本气透出、格定为**伤官格**(杂气伤官,透清一位)。
月干壬正官非月令所藏,属格中之官(伤官见官之字)。日主丁与月干壬作合(丁壬合)。
4. 会支变化:辰戌丑未四库并存,然无三合/三会使月令之气化为别神,格不变。
5. 定格完成:**伤官格**(杂气透清)。
6. 外格闸门:月令自有用神(伤官透干取用),**不转杂格**。
## 三、格局成败 · 用神相神 · 高低
- **成败**:伤官旺(土重)而日干偏弱(丁无强根),四柱**透正印甲木**、甲通根辰中乙木——
正合《子平真诠》「伤官佩印」:印能制伤、生身,**成格,秀气之格**。
另戌月令中戊(伤)与辛(财)同根,兼「财伤有情」一路,秀气可泄于财。
- **用神 / 相神**:月令用神为**伤官**(凶神逆用);**相神为甲木正印**(制伤、生身、又得调候),
辛金偏财为财源之辅(藏而不透,力缓)。
- **带忌与救应**:月干壬官被年干戊伤官紧克(伤官见官),为**带忌**;
赖时干甲印制伤、且壬合日主(丁壬合,官有情于我),忌得有救,格不倒。
- **高低**:有情(印护身、财有根、官合我)、**力有不全**(身弱、印根仅辰中一乙、官星无强根)。
综合为**秀气成格而中上,非大贵**——宜以才艺、专业、口才立身,财来自伤官生财一路,
女命另参夫星(官壬透而合我,夫星明顺)。
- **调候成色**:甲透得候,才艺成器、秀而不寒;缺庚金一刀劈甲,故其成带「勉强」之味,非殿元之贵。
## 四、行运(大运逆行)
- 辛酉(6–16岁,1964起)/庚申(16–26岁,1974起):**财运(金)**。佩印格忌财坏印,少年两运财旺不助身。
- **己未(26–36岁,1984起)**:己食神 + 未(木库/印库,且**未冲日支丑**)——食神生财、印库微帮身,此运为才艺变现、家事变动之期。
- **戊午(36–46岁,1994起)**:戊伤官 + **午(丁之禄,帮身)**。身弱得禄,且伤官克壬官(夫星受克)——自立创业、老公受克之运。
- **丁巳(46–56岁,2004起)**:丁比肩 + **巳(丁之帝旺,帮身)**。身得帝旺,能任财,为财禄丰盛期;然火炎土燥,木(印)渐枯。
- **丙辰(56–66岁,2014起)**:丙劫 + 辰(湿土、水库,辰冲命戌)。火土之气稍敛。
- 乙卯(66岁起,2024):乙偏印 + 卯(印),印运帮身。
喜忌基线(伤官佩印,参 R-伤-23 与身弱扶抑):**喜木(印)、火(比劫);官煞(水)为可用(生印,然微克身);土(伤食)不碍;金(财)为忌(坏印)**。
---
## 五、逐题推理
### 第 1 题(P014-Q26,1983/1984/1985/1986)——以服装设计师身份出名大旺
**考点**:伤官秀气(才艺/专业)在何年彰显成名并转为旺象。
- 大运:1983 在庚申运末(财),1984 交运入**己未**(食神+印库),1985、1986 在己未运。
- 逐组核对:
- 1983 癸亥:癸(七杀)透清于丑辰(A 组);亥为甲印长生、驿马。引动 1 组 → 止于年。
- 1984 甲子:**甲(正印,相神)透**;子丑六合、子辰半合水(B 组)。交运年。官印相生之象。
- 1985 乙丑:乙(偏印)透清于辰(A 组);丑再临、丑戌刑(C 组)。华盖(日支丑)引动。
- 1986 丙寅:寅戌半合火(B 组);寅填实时柱空亡(D 组);丙劫帮身。
- 论断:本年之「出名」当系**名声与专业资历**同显之象。1984 为**交运年**(脱财运转入己未食神生财之运),
流年**甲木正印透出(相神临身)** 且坐下子水官星、子丑合动日支——官印相生,名声地位一时跃升,
最合「成名」之直接取象(印主专业资历、官主名望),故取 **B 1984**。
(备选:1986 丙寅,丙劫帮身 + 寅戌火局,主「大旺」之元气,然少官印名气之象,降为备选。)
- **置信度:中低**(1984 / 1986 两存,1985 华盖学艺亦近)。
### 第 2 题(P014-Q27,1987/1989/1990/1992)——通灵、梦神明报六合彩明牌,大姐得横财
**考点**:玄学灵异之缘(华盖/印)与偏门横财(偏财/比劫)同现之年。
- 大运:1987–1992 皆在**己未运**。
- 逐组核对:
- 1987 丁卯:丁(比肩,姊妹)透清于戌(A 组);**卯戌六合**(合动年月华盖之戌,B/C 组);卯辰相害;
卯填实时柱空亡(D 组)。**引动 4 组**。又:卯为年支戌之桃花;岁运逢**太极贵人、童子煞**(玄学/灵异)。
- 1989 己巳:己(食神)透清(A 组);巳丑半合金(B 组)。引动弱。
- 1990 庚午:庚(正财)透(非命藏);午戌半合火、丑午害(B/C 组);午为桃花。
- 1992 壬申:壬(官)重透;申填实日柱空亡(D 组)。
- 论断:**通灵**之象,命本带**华盖三重**(戌戌丑),主宗教玄学、灵异之缘;
1987 丁卯以**卯戌合**引动华盖之库,更逢**太极贵人 + 童子煞**(皆玄学灵异之煞),灵异之应最著。
又 **丁比肩透** = 姊妹星现,正应「她跟她大姐说」;偏财辛藏戌丑,戌被卯合而动,主偏门之财。
通灵 + 姊妹 + 偏财三象俱在 1987,取 **A 1987**。
(1990 庚午偏财透,主得财一路,然乏通灵之信号;1992 壬申为日主合夫星并填空亡,属官星事类。)
- **置信度:中**。
### 第 3 题(P014-Q28,1991/1992/1993/1994)——老公上班不稳,自行创业开店,店里打小孩
**考点**:财星引动(开店自立)+ 夫星/夫宫动摇(老公不稳)+ 子女宫动(打小孩)。
- 大运:1991–1993 在**己未运**(未冲日支丑,夫宫动);1994 交运入**戊午运**(戊伤官克壬夫星)。
- 逐组核对:
- 1991 辛未:辛(偏财)透清于戌丑(A 组);未冲日支丑、未刑年月戌(C 组)。引动 2 组。
- 1992 壬申:壬(正官,夫星)重透,与命月壬**两壬争合日主丁**;申填实日柱空亡(D 组)。引动 1–2 组。
- 1993 癸酉:**癸(七杀)透清于丑辰**(A 组);**酉丑半合金、辰酉合金**(B 组,财局);
酉填实日柱空亡(D 组)。**引动 3 组**。又岁运逢**天乙贵人、文昌、将星**(掌事任责)。
- 1994 甲戌:戌冲时支辰(子女宫)、戌伏吟年月(C/E 组);甲印透。大运戊午伤官克官(夫星)。
- 论断:本题三线并取——**创业开店**(财)、**老公不稳**(夫星受克/浑浊)、**打小孩**(子女宫动)。
1993 癸酉三线俱全:**酉会丑、会辰成金局**(伤官生财之财局大开,主自力开张营业)+
**癸七杀透而官煞混杂**(夫星不清,正「老公不稳」之象)+ **时支辰(子女宫)逢酉合动**(子女之事),
且带**将星**(自主掌事)——引动组数亦最多(3 组)。故取 **C 1993**。
(备选:1991 辛未,辛偏财透清为最直接之「创业财」,未冲日支主家事动,然子女宫无引动,降为备选。)
- **置信度:低**(1991 / 1993 / 1994 三存,本题最不固)。
### 第 4 题(P014-Q29,1996/2003/2005/2008)——忽然赚到大钱,买房解决孩子读书通勤
**考点**:财局大成(赚大钱)+ 印星引动(房产/文书)同现之年。
- 大运:1996、2003 在戊午运;2005、2008 在**丁巳运**(身得帝旺,能任财)。
- 逐组核对:
- 1996 丙子:子丑合、子辰半合水(B 组);丙劫帮身。无财、印引动。
- 2003 癸未:癸(七杀)透清(A 组);未冲日支丑(C 组)。未为木库(可作印/房),然乏明透之财。
- 2005 乙酉:**乙(偏印)透清于辰**(A 组,印主房产文书);**酉丑半合金、辰酉合金**(B 组,财局);
酉填实日柱空亡(D 组)。引动 3 组。又岁运逢**天乙贵人、文昌、将星**(文昌主文书契约)。
- 2008 戊子:戊(伤官)重透;子丑合(B 组)。无财、印引动。
- 论断:**赚大钱**须财旺,**买房**须印显(印主住所/文书)。2005 乙酉一身兼之:
酉与命支丑、辰半合成**金局(财局大成)**,又**乙木偏印透出**(住所、文书、契约之象),
更逢**文昌**(文墨契约)——财、印、文书三象同时,最合「赚到大钱又置产」;
且丁巳运身旺能任财,故取 **C 2005**。
- **置信度:中**。
### 第 5 题(P014-Q30,2008/2010/2016/2022)——乳房硬块转乳癌,开刀顺利平安
**考点**:木(印/相神)受克之病年,兼见金(刀/手术)与救治之象。
- 大运:2008、2010 在**丁巳运**(火炎土燥,木渐枯);2016、2022 在**丙辰运**(辰湿土稍敛火)。
- 逐组核对:
- 2008 戊子:戊(伤官,土)重透;子丑合(B 组)。无金克木之象。
- 2010 庚寅:**庚(正财,金)透**——金克甲木相神(木主肝、乳房之象);寅为甲印之禄(得地自救);
寅巳相刑(C 组,病动);寅戌半合火(B 组);寅填实时柱空亡(D 组)。**引动 3 组**。
岁运逢劫煞。
- 2016 丙申:申(金)克甲木;申辰半合水(B 组);申填实日柱空亡(D 组)。无自救之禄。
- 2022 壬寅:寅为甲禄、填实空亡(B/D 组);壬官。无金(无刀/病象)。
- 论断:乳房(肝木)之病,系**相神甲木受金克**之应;手术(开刀)为**金**象。
2008/2016/2022 或无金、或无救;**2010 庚寅**则**庚金透**(病构与开刀之象)且**寅为甲木之禄**——
相神虽受克而得地自救,正合「**检查后开刀十分顺利、平安无事**」;又丁巳运火炎土燥,木枯成毒,
与时相合,引动组数最多(3 组)。故取 **B 2010**。
(备选:2016 丙申,申金克木亦为病象,然无寅禄可救、且落丙辰运,降为备选。)
- **置信度:中低**。
---
## 六、存疑与边界声明
- 出生地「台湾」为模糊地名,已按任务书排对照盘;两盘四柱一致,无口径分歧可标。
- 本盘界格清晰(月令本气透干取伤官格),无晚子时、无节气边界提示、无外格两可。
- 第 1、3、5 题候选年结构接近(同为大运喜忌内的相邻流年),排序取「引动组数最多、且与题干事件三线相合者」,
置信度已逐题标注。
---
Q1: B
Q2: A
Q3: C
Q4: C
Q5: B
@@ -0,0 +1,141 @@
# contest8_2023 · female_19661018_P009 盲测答卷
## 命主信息
- person_id:female_19661018_P009
- 性别:女
- 出生钟表时间:1966-10-18 23:15(当地钟表时,香港,Asia/Hong_Kong,无夏令时)
- 出生地:香港(题面 place 原文)
- **真太阳时主盘:1966-10-18 23:06**(经度修正 −23.32 分、均时差 +15.03 分,合计 −8.29 分)
- **是否排对照盘:排了。触发原因两条件同时满足——**
1. 主盘真太阳时 23:06 距时辰边界(真太阳时 23:00 子时初)仅 **6 分钟 < 15 分钟**;
2. place 为境外/模糊地名(香港)。
- 对照盘口径:`--place "中国大陆"`(副本解析为杭州代理,120.16E,UTC+8 钟表时≈真太阳时),得真太阳时 1966-10-18 23:30。
- **两盘四柱相同(丙午 戊戌 辛亥 戊子),无口径分歧**,答案行以真太阳时主盘为准,无需标注分歧。
### 排盘口径声明(晚子时)
本造落于真太阳时 23:00–24:00(晚子时)。主盘按「子初换日」(真太阳时 23:00 起算次日)定格,日柱辛亥、时柱戊子。
另存「子正换日」一派,日柱、时柱将不同(该派下日柱作庚戌、时柱作丙子,全局大变)。
**下文一切判定按子初换日之盘(辛亥日)展开**;子正换日之盘不在本次口径内,仅作此声明。此外本造距月令节气(寒露 10-09、立冬 11-08)均远,月令无边界风险。
---
## 一、命盘要点
四柱:**丙午 / 戊戌 / 辛亥 / 戊子**(日主 辛金)
- 天干:丙(正官)· 戊(正印)· 辛(日主)· 戊(正印)
- 地支:午(丁七杀、己偏印)· 戌(戊正印、辛比肩、丁七杀)· 亥(壬伤官、甲正财)· 子(癸食神)
- 五行分布:火(丙、午、丁×2)约四见,土(戊×2、己、戌及戌中戊)约四见,金(辛×2)二见,水(亥中壬、子中癸)二见,木(亥中甲)一见。**火土两旺、水木偏弱**。
- 空亡:日柱空亡寅卯(甲木正财之禄根落空);时柱空亡午未。
- 神煞(只作细节层,不入格局四层):年柱天德/月德(丙)、天乙贵人(午)、将星(午);月柱**华盖(戌)**;日柱天德合/月德合(辛)、太极贵人(亥)、金舆(亥)、**劫煞(亥)、元辰(亥)**、十灵日;时柱文昌(子)、桃花(子)、**灾煞(子)**、童子煞(子)。
- 节令:戌月,寒露后立冬前;胎元己丑,命宫乙未。
---
## 二、取格(六步决策流程)
**第一步 月令**:月支戌。**第二步 月令十神**:戌藏戊(本气)、辛(中气)、丁(余气);以日干辛对月令本气戊取十神——戊土生辛金,为**正印**,且戊透月干、时干两重 → **定为印绶格**(正偏同格,依「用神专求月令」,月令本气为印即取印格,不为他神另立格局)。
**第三/四步 藏干与会支变化**:
- 月令戌为燥土之库,本气戊透(月干、时干),不必变更本气,格仍以印为主。
- 年干透丙 = 正官,丙辛相合(日主自合官星)。年支午为丙之帝旺、戌为丙之余气,官星有根而透,属「印格透官」,官为相神(官生印)。
- 支中另有亥、子水(壬伤官、癸食神),为泄身之食伤;时支子与日支亥连气,水有一定力量。
- 无三合三会引化月令(午戌仅半合火,辰不见),不构成会支变格;亦无弃印就财官之会局变化。故正格成立。
**第五步 定格结论**:**印绶格,透正官(官印相生),兼有食伤泄秀。**
### 成败 / 用神相神 / 格局高低
- **成格**:印格透官,正官不独生印,即可以为用(R-印-03),身旺印强、官星清纯,成格而贵。本造与《子平真诠》「丙寅、戊戌、辛酉、戊子(张参政)」一造结构极近(同戊戌月、戊子时、年干丙官透、辛日印格透官),书判为贵。
- **用神与相神**:月令用神为印(戊土);**相神为丙火正官**(官生印而成格)。全局赖官星一字相成。
- **带忌**:① 年支午中藏丁七杀,与丙官并见(官煞混杂),丁藏未透、且日主辛与丙合,官未全浊,但毕竟杂气;② 日支亥中壬水伤官遥对年干丙官(伤官见官之嫌);③ 印过重而透两戊,土重有埋金之嫌——此即**调候之「病」**。
- **气候(调候)**:辛金生戌月,戊土司令、母旺子相,「**火土为病,水木为药**」(《穷通宝鉴》九月辛金:须甲疏土、壬泄旺金)。本造**亥中壬甲、时支癸子俱在——药在其命**:日支亥(壬水伤官+甲木正财)为泄金、疏土之总枢,时支子(癸食神)佐之。故格局虽带忌,药神自具,非破格之命。
- **高低**:有情(官清、印得官生、食伤泄秀)而力亦不弱(官有午戌之根、印透两重、日主得月令冠带通根),忌在印土太重、财星(木)落空无强根。评为**中等偏上、贵而不厚的成格**(官印相生得贵气,然财空印浊,富不足而格局有瑕)。
### 行运喜忌基线
依印格取运(R-印-19~26)并参调候:
- **喜**:财(甲乙木,疏土抑印)、食伤(壬癸水,泄旺金淘洗);即运走水木为药乡。
- **忌**:官煞(丙丁火,助燥)、印(戊己土,添埋金之病);即火土为忌。
- 但依 R-印-19(印格用官、官露印重),「**财运反吉,伤食之方亦为最利**」——财运、食伤运皆利,官运本为用神之乡亦不忌,最忌再添印土与燥火。
**大运(女命逆行)**:
1. 丁酉 1969–1979(3–13 岁):丁为七杀(火,混官助燥)忌;酉为辛禄、帮身。
2. 丙申 1979–1989(13–23 岁):丙正官(用乡);申为劫财,申子半合水(泄秀)、申冲日柱空亡之寅。
3. 乙未 1989–1999(23–33 岁):乙偏财(木,喜·疏土);未燥土(忌,未戌相刑月支)。
4. 甲午 1999–2009(33–43 岁):甲正财(木,喜);午正官(有火之嫌,然为用神之乡)。
5. 癸巳 2009–2019(43–53 岁):癸食神(水,喜·泄秀);巳为丙官之禄(官旺),然**巳亥冲**冲日支(己身/配偶宫、财根),且**巳为日支亥之驿马**(亥卯未见巳)→ 主迁动、远行、变动。
6. 壬辰 2019–2029(53–63 岁):壬伤官(水,喜);辰为湿土印库(晦火生金,稍缓火土之病),**辰戌冲**冲月支(父母/长辈宫、华盖)。
---
## 三、逐题推理
### 第 1 题(性格特征)
- **考点**:印格重印之人的性情。
- **推理链**:日主辛金生辰戌月,月令印星(戊土)两透,又得年支午中己土、月支戌土相扶,**印重为全局之主**——正印主慈厚、保守、好静、重信誉、依赖、守成、寡于交际;印重而克食伤,故表达含蓄、少夸饰而多务实。日主得官星(丙)相合,性守规矩、循分;食伤(亥子水)泄秀,内里聪敏、心细(文昌入命、十灵日)。合参《滴天髓》性情篇:金得水以流通,本造金旺而水有根,主内方外圆、知权变,然终以重印之守成为底色。
- **逐项排除**:甲「急性子、被他人左右、对朋友豪爽」偏比劫外向,本命无比劫透干、亦无财助豪爽,不合;乙「喜投诉、常诉苦、易怒、多疑」属官煞杂乱枭印之象,本命官清无枭,怒象不显,不合;丙「贪财好胜、权力欲重、喜命令人」属财官旺而身强之象,本命财弱而落空、官被日主合,无此张扬,不合。
- **择答**:丁——「不懂交际,少说法多做事,守财节俭」正合重印守成、寡言、惜财之性。
- **结论:D**(中置信)。
### 第 2 题(适合行业)
- **考点**:由格局用神取行业。
- **推理链**:格为**印绶格**,印主文书、典籍、教育、学术、行政、静态内务之职;印格透官(官印相生),职业性质偏**文职、书面、守成**一类,而非逐利、交际、临场搏杀之职。本命财星(木)落于日柱空亡且仅亥中一藏、无强根,故**不宜经商、推销类逐财之业**;比劫不显,亦不宜合伙竞争。
- **逐项排除**:甲「律师」需官杀有力兼食伤辩才、临事争锋,本命官被日主合、气不张扬,且财官(火)为调候之病,非其本位;乙「销售员」纯逐财而外向,与重印守静、财空之命相违;丙「地产生意」属财土生意,财空而印病(火土为病),不宜以病神为业。
- **择答**:丁——「图书馆文员」,静态文职、以文书典籍为业,最契印格守静工文之性。
- **结论:D**(中低置信)。
### 第 3 题(叔叔出家、跳楼亡之年)
- **考点**:六亲(父辈之亲)丧亡之应期。
- **推理链**:叔叔为父之弟,属父辈之亲。依宫分法(年月日时配祖上、父母、己身、子女),**月柱为父母(父辈)之宫**;本造月柱戊戌,其戌又与年支午半合火(官杀,男亲之象)、且戌为本命华盖(僧道之征,正应「叔叔是出家人」)。父辈之亲的丧亡,多应于**该宫逢冲、逢刑、或被合化引动而失位**之年。四候选年皆在丙申运(1979–1989)中:
- 1982 壬戌:戌戌伏吟月支,华盖重现;壬伤官透(克丙官)。动而不冲。
- 1984 甲子:子与年支午相冲(冲祖上宫),岁运再逢灾煞(子,血光横死之象)。然所冲为年支祖上宫,非父辈之月宫。
- 1986 丙寅:寅午戌三合火局(官杀局成),丙官再透且与日主合;寅为日柱空亡并冲大运申。是年天德、月德、天乙、太极贵人齐现,逢凶有解之力偏强。
- 1988 戊辰:**辰戌相冲,直冲月支(父辈之宫)**,又冲开戌中印库与华盖(僧道之宫);岁运逢寡宿(孤丧之象)、地网(缠缚蹇滞)。冲月宫而动父辈之亲,宫受冲而无合解,与「叔叔(父辈之亲)亡」之宫象最为贴切。
- **取舍**:1986 三合火局、1984 逢灾煞各有一端之象,然 1986 贵人多而解、1984 所冲为祖上宫而非父辈宫;**1988 辰戌冲月支(父辈宫)为唯一直接动及父辈之宫者**,且并逢寡宿、地网,孤丧蹇滞之象齐全,故取 1988。
- **结论:D(1988)**(低置信)。
### 第 4 题(婚姻情况与学历)
- **考点**:女命夫星/夫宫 + 子星/子息宫 + 学历(印)。
- **推理链**:
- **学历**:印主学业文凭,本命印绶格、印星两透得令且无财强破印(财仅亥中一藏、落空),学业有根 → 断**有大学毕业**。据此排除丙、丁(二者均「没有大学毕业」)。
- **婚姻**:女命以正官为夫星。年干丙正官透干而为印格之相(官印相生成局),主夫贤得力;且**丙辛相合——日主自合官星,是为「我之夫、我合之,夫妻相亲,其情愈密」**(R-女-10,阴日干自合所透正官之正例),主成婚而夫妻情厚。故非「单身从未结婚」。
- 夫宫(日支)亥坐伤官,于印格属泄秀之喜,不主刑克;子星为食伤(亥中壬、时支癸),时柱戊子子星得气,主有子女。
- **逐项排除**:甲「单身、从未结婚、无子女」与日主自合官星、夫星成局之象相反;丙「已离婚、无子女、没大学毕业」的学历项与印格不合;丁「没有大学毕业」不合,另其所述取向亦无盘面硬信号。
- **择答**:乙——**已婚、有子女、正常普通家庭,大学毕业**。
- **结论:B**(中置信)。
### 第 5 题(2008 年至今之命运)
- **考点**:近十五年(甲午运末·癸巳运·壬辰运初)之运势与应事。
- **推理链**:本命用神(药)在财与食伤(水木),忌神为再添印土与燥火(火土为病)。
- **甲午运末(至 2009)**:甲正财透(喜),为得财、风光之段。
- **癸巳运(2009–2019)**:癸食神透干(喜,泄秀、悠闲享受);**巳为日支亥之驿马**(亥卯未见巳),主迁动、移徙、远行,且巳亥相冲,己身/配偶宫被激起而动 → **应迁动、移居、异地生活**之象;巳又为丙官之禄,官星得禄,名分、身份之事亦动。
- **壬辰运(2019–2029)**:壬伤官透(喜,泄秀),辰为湿土印库、能晦火生金稍缓火土之病;辰戌冲月支,长辈宫再动。
- 命带天德、月德(丙)与天乙贵人(午),险象得缓解,**不利之事有转圜**,与「骤落穷困、长病不起」一路之凶象不合。
- **逐项排除**:丙「酒后开车撞死人、坐牢」需官非刑狱之硬信号(伤官见官成祸、官星被伤而无解),本命官星为用且得日主相合,只有杂气之嫌而无刑狱之局,不合;丁「突然全身多病、四处求医不愈、转为穷困住公屋」为破格沦落之象,本命成格且药神(水木)自具、二德贵人护佑,不至沦落,不合;乙「得保险金而富裕在香港」需财运透显而成,然本命财星落空,是段流年财气不显(2014 甲午、2015 乙未虽有财透,却同时叠午未之燥),不如迁动之象明确。
- **择答**:甲——**癸巳运巳为驿马、癸食神泄秀**,正应「移居异地(移民)、半休闲半投资、充裕宽裕」之象。
- **结论:A**(低置信;与乙「得财而富裕」备选接近)。
---
## 四、存疑与边界
1. **晚子时分歧**:本造真太阳时 23:06 落于 23:00–24:00,子正换日一派将改日柱、时柱(作庚戌日丙子时),全局大变;本答按主盘子初换日之辛亥日展开,提示此为最大不确定源。
2. **第 3 题(六亲丧亡年)** 为四选项中凭宫冲(辰戌冲月支父辈宫)与神煞(寡宿/地网)取象,1984 之灾煞(血光横死)、1986 之三合火局各有一端之象,故标低置信。
3. **第 5 题(近十五运)** 与第 2 题(行业)均在「成格带忌、财空印浊」的模糊地带取象,置信不高。
4. 神煞、纳音、空亡仅作细节参看,未据以取格、定成败用神或评高低(依禁则)。
---
Q1: D
Q2: D
Q3: D # 低置信(1988;1984 灾煞之象备选接近)
Q4: B
Q5: A # 低置信(乙「得财富裕」备选接近)
@@ -0,0 +1,155 @@
# contest8_2023 — female_19780405_P013
## 一、命主信息
- person_id:female_19780405_P013(1978 年出生女性)
- 性别:女
- 出生钟表时间:1978-04-05 17:00(当地钟表时间)
- 出生地:台湾(题面原文 place)
- 真太阳时:1978-04-05 17:03(时区 Asia/Taipei,UTC+8,夏令时否;经度修正 +6.24 分、均时差 −3.17 分,合计 +3.07 分)
- current_year(题面元数据):2023
### 排盘失败情况
无。主盘、对照盘均退出码 0,stdout 正常出盘。
## 二、排盘口径与双盘
**是否排对照盘:排了。触发原因(两条均命中):**
1. 主盘真太阳时 17:03,距时辰边界 17:00(酉时起点,奇数整点)仅 3 分钟,< 15 分钟;
2. place「台湾」属境外/模糊地名。
**对照盘口径**:120°E 不经度修正,`--place "中国大陆"`(副本解析为杭州代理 120.16E / Asia/Shanghai,钟表时 = 真太阳时)。
**两盘分列:**
| 柱 | 真太阳时主盘(17:03 → 酉时) | 对照盘(16:57 → 申时) |
|---|---|---|
| 年 | 戊午 | 戊午 |
| 月 | 丙辰 | 丙辰 |
| 日 | 丁酉 | 丁酉 |
| 时 | **己酉** | **戊申** |
| 命宫 | 丙辰 | 丁巳 |
两盘仅时柱不同,其余三柱、大运(同起运 0.07 岁、同逆行)、节令完全一致。故第 3 题(婚期)、第 1 题(2011)、第 2 题(2009)两盘结论相同;第 4、5 题(子息)受时柱影响,须分列——见第六节。
**节气边界提示**:主盘距清明(1978-04-05 11:39)仅 5.4 小时(真太阳时),命盘带 ⚠️。若出生记录误差超过此值(即实际出生早于约 11:39 真太阳时之前),月令将由辰变卯、四柱全变。本题出生钟表时已 17:00,误差 5 小时以上方可动摇,认定为辰月。此敏感性记录在此,下文按辰月之盘解释。
## 三、命盘要点(以真太阳时主盘为准)
- 四柱:戊午 / 丙辰 / 丁酉 / 己酉
- 日主:丁火(生于辰月,清明后 5.4 小时)
- 十神分布(干):年干戊=伤官,月干丙=劫财,日干丁(止),时干己=食神。
- 地支藏干十神:午(丁比肩、己食神)/辰(戊伤官、乙偏印、癸七杀)/酉(辛偏财)/酉(辛偏财)。
- 五行:火(丁、丙、午)/土(戊、己、辰、午中己)/金(酉、酉)/水(辰中癸)/木(辰中乙)。
- 关键结构:**戊伤官透于年干、己食神透于时干,食伤双透**;**酉金偏财两坐日、时**,且月支辰与日支酉**辰酉六合**,金气偏旺;日主以**年支午禄(临官)+月干丙劫**为根,**印(乙)藏辰不透、杀(癸)藏辰不透**。
- 女命定位:夫星=官杀(水,壬/癸),夫宫=日支**酉**;子星=食伤(土,戊/己),子息宫=时柱(己酉)。
## 四、取格(依 00_总纲_取格.md §1 六步)
1. 定月令:节令「辰」,藏干戊乙癸。
2. 月令本气十神:日干丁对辰本气戊——火生土、阴阳相异,为**伤官**。伤官非吉神,属逆用之凶神。
3. 藏干变化(辰为四墓月):唯一透出者为**本气戊**(年干),乙、癸不透,无须「变而不失本格」之辨。兼透看食伤——时干己为食神,**食伤并透**,但本气戊当令主格。
4. 会支变化:辰酉六合,月支与日支相合。合而未全化为金局(原局金虽有两酉,然无丑巳助合、辰中戊土仍当令透干),月令本气仍主格,**不作「辰酉化金变财格」论**(依 R-纲-08「六合力稍逊,亦足参变化」与 R-纲-10 杂气取用之辨主从)。
5. 定格:**伤官格**(月令本气伤官透干)。
6. 外格闸门:月令自有用神(伤官),不通过「无用门」;日干无合化。**不转杂格**,守正格。
**格之成败(R-伤-03、R-伤-22、R-伤-05)**:局中财(酉酉两坐)与食伤(戊己双透)并旺,走的是**伤官生财**一路——伤官为生财之具,转凶为吉,为伤官格最利之用法;日干有午禄重根、又有丙劫相扶,**身有根而能任财**,成格。惟**印(乙)不透、财星(辛)亦不透干**,比「财透干而身强」之正例略逊一档,属**成格而降等**:财伤之力量压过日主,偏于「财旺身轻」一侧。
**用神与相神**:月令用神=伤官(戊),成局所赖=财(酉酉之辛,为相神,伤官生财赖财而成)。伤用神(伤官)甚于伤身,伤相(财)甚于伤用。
**有力无力与扶抑(参 89_旺衰扶抑 R-旺-14)**:日主弱而财旺、食伤多——扶抑之药取**比劫(火)**帮身、**印(木)**生身制伤。故:
- **喜:火(比劫)、木(印)**;
- **忌:金(财)、土(食伤)**过泄过耗;
- **水(官杀)**:克身为忌,然亦生印(辰藏乙木)略作通关,**吉凶参半、偏忌**。
**气候(参 92_调候 R-候-07)**:丁火生辰月,「戊土司令,泄弱丁气,先用甲木引丁制土,次看庚金」。本局**甲木不见、庚金不透**,调候之药(甲引丁)缺位,仅乙木藏辰(湿乙伤丁);又忌「支成水局加壬透(杀重身轻)」。故格局成而**气候未得**,属成格减色之象——一生需自食其力、凭才智(伤官为秀气)取贵,非坐享之命。
**格局高低**:伤官生财、身有根而财伤并旺,有情而**力量不尽均**(身仅一禄、印藏不透、调候缺药),列**中等**;得印比之运助身方见秀发,逢财伤岁运则耗而多劳。
## 五、行运(依 90_行运.md §7 断运操作序列 / 分格取运节)
大运逆行:乙卯(0–10)→ 甲寅(10–20)→ 癸丑(20–30)→ 壬子(30–40)→ 辛亥(40–50)→ 庚戌(50–60)→ 己酉(60–70)→ 戊申(70–80)。
- **乙卯(1978–1988)/甲寅(1988–1998)**:印运(木)当权,正合扶抑「弱而食伤多取印」之喜——生身、制伤,主少年得荫、学业有凭(伤官为秀气,得印则秀而有节)。
- **癸丑(1998–2008)**:癸七杀透(夫星现)、丑为金库湿土(半合酉助财)。官杀生印略通身官之关,然湿土晦火、金气愈旺,身弱逢财旺——**事业起步期,劳而多压**;亦是夫星(水)初透之十年,婚缘之门在此段末与下段启。
- **壬子(2008–2018)**:壬正官透(**丁日逢壬,是我合之**,日主自合夫星,夫妻相亲——R-女-10)、子与命辰**子辰半合水局**(夫星/官杀成局,正合 R-运-15「丁生辰月……运支逢申子以会之」之成格之型)。此十年为**婚姻、生育之核心期**;然子辰半合水加壬透,逼近调候所忌之「支成水局加壬透(杀重身轻)」,故**喜中带压**:婚育之喜与健康/责任之负并见。
- **辛亥(2018–2028)**:辛偏财、亥中壬甲(官印)。财旺耗身、亥又生木——财官印交杂,属**谋财任事、外缘走动**之十年;身轻则宜守不宜攻。
- **庚戌(2028–2038)**:庚财、戌火库(亦为伤官之库)。财旺逢火库,身得一点补,然终是财重之运。
## 六、逐题推理(先复述考点 → 推理链 → 选项字母)
### 第 1 题(原始题号 P013-Q21):2011 年发生什么事?
考点:某一年的现实事件回溯(事业/身份/财务)。
- 2011=辛卯,处 **壬子大运**(正官)。
- **A 透清(R-运-22)**:流年干辛=偏财(透干,主动),为财星引动之最直接信号。
- **B 会局(R-运-23)**:流年卯与日支/时支酉——**卯酉相冲**(非会);卯与大运子**子卯相刑**。
- **C 刑冲(R-运-10/11、R-事-10/11)**:卯酉冲,所冲为酉(财宫、夫宫)。财受冲=财之进退变动;夫宫受冲=婚恋/贴身处境被激起。
- 引动合成:流年**辛偏财透干+卯偏印临支(印=文书、证件、迁移之象)+卯酉冲(迁移、变动)**,大运壬正官主「名分、事业、身份」。三线合成,2011 是一个**财/事业/身份文书之开创或变动之年**,非无事之年。
- 逐项排除:「无事发生」与强引动不符,排除 D;「投资获利千万」为纯财之一闪信号(辛财透而根(酉)被卯冲),财来而根动、难坐实「获利千万」之巨量,降为备选;「绿卡」需印(文书)+迁移之组合,亦合(备选)。主取**财生官、开创事业**——A 成立公司为主答案,B(绿卡)、C(投资获利)降级为备选。
- **字母:A**(低置信)。
### 第 2 题(原始题号 P013-Q22):以下事项,哪个在 2009 年没有发生?
考点:某一年多项事件的取伪(哪一项无引动)。
- 2009=己丑,处 **壬子大运**。
- A 透清:流年干己=食神(透,主动),引动午中己(食神)——主技能、专业、工作输出。
- B 会局:**丑酉半合**(巳酉丑缺巳)成金局——财局动,引动日、时酉(财宫、亦为日支夫宫);**子丑六合**合大运子(官杀)。
- C 刑冲:丑辰破、丑午害(轻)。
- D 空亡:无(丑不在辰巳/寅卯空亡之列)。
- E 伏吟反吟:无。
- 合成:2009 为**「合」之岁**(子丑合、丑酉合),主「定、聚、置」而**非「动、迁」**;己食神透+丑(金库 = 财库,又为日支酉之华盖=向学)——三事(找到工作=食神/合官、购置不动产=财库、考上律师=华盖向学)皆有引动;惟**远距离旅行**须驿马或冲(迁动)为据:本命并无驿马(年支午属寅午戌,马在申,原局无申),岁运亦未引动驿马(大运子属申子辰马在寅、流年丑属巳酉丑马在亥,命局均无),且 2009 全无冲(只逢合),**无迁移之引动**。
- **字母:B**(远距离旅行——2009 年未发生;低置信)。
### 第 3 题(原始题号 P013-Q23):何时结婚?
考点:女命婚姻应期(夫星、夫宫之引动)。
- 女以官为夫(R-女-04),本命官杀(壬癸水)**不透干**,仅**癸藏月支辰**。夫星之「透清」,须待大运引动——**癸丑运(1998–2008)透癸七杀、壬子运(2008–2018)透壬正官**,合 R-女-24「夫星透清」之途。
- R-女-10 明文:**丁日逢壬,是我之夫,是我合之,夫妻相亲,其情愈密**——本命日干丁,正官壬之一字到运即为「夫妻」之应。壬字(正官)**首见于壬子大运,起于 2008 年**。
- 2008=戊子:大运壬子、流年戊子,**子辰半合水局**(夫星/官杀成局,R-运-23 会局作清),且大运子与流年子伏吟加重水势;丁壬合(日主合夫星)。此为全盘**夫星最完整之一次引动与夫妻相亲之合**,且 2008 为**交运年**(癸丑转壬子,人生阶段之里程碑)。
- 2009=己丑:另有**丑酉半合**引动夫宫(酉)、子丑合大运(合夫星),为「夫宫逢合」之次强信号——列备选。
- 2006 丙戌(戌冲辰、午戌半合火、丙劫透)无明显婚星婚宫引动;2007 丁亥(亥藏壬官但亥与日主、夫宫均无合冲)亦弱。均排除。
- **主取 2008**:交运 + 丁壬合(日主自合夫星)+ 子辰半合官杀局,三重相应。备选 2009(夫宫丑酉半合)。
- **字母:C(2008)**。
### 第 4 题(原始题号 P013-Q24):命主哪一年生孩子?
考点:女命子息应期(子星=食伤、子息宫=时柱之引动)。
- 女命以食伤为子星(R-女-20),本命子星=土(戊伤官、己食神),**戊透年干、己透时干**,子星本旺;子息宫=时柱**己酉**(主盘)。
- 候选逐一查表(R-运-22/23 会局透清、R-事-13 子女宫受引动):
- **2012 壬辰**:辰本气**戊=子星**(当令透清之根);**辰酉六合**引动时支酉(子息宫);壬=正官(夫星)且**丁壬合**(夫妻相亲)。——子星、子息宫、夫星**三线并动**。
- **2013 癸巳**:巳藏戊(子星)、**巳酉半合**引动时支酉(子息宫)、癸=七杀(夫星)。——两线半(子星+子息宫)。
- **2015 乙未**:未藏己(子星),未与酉无合、无冲——子息宫未动,仅子星一线。
- **2018 戊戌**:戊伤官透(子星强)、戌藏戊,然戌与酉无合、戌冲月支辰——引动在月柱(父母/平台)非子息宫。
- 排序:2012 三线并动最全,2013 次之,2015/2018 更次。主取 **2012**。
- **字母:A(2012)**(低置信,备选 2013)。
### 第 5 题(原始题号 P013-Q25):生产状况为?
考点:女命子息之男女/状况(子星阴阳、子息宫)。
- 依 R-亲-14「看子息:宫(时支)与星(时干所透)并参」,及 R-亲-16「子星之男女,以阳干为男、阴干为女」(推及女命子星食伤:阳土戊为男、阴土己为女)。
- **主盘时干=己(食神,阴土)**,且己土于时支酉为**长生**(阴干己长生在酉),时干有用(食神生财,于伤官生财格为助)——合「子星阴干=女」。
- **对照盘时干=戊(伤官,阳土)**,为阳干——判为男。(对照盘时支申为驿马,本命神煞结构亦异。)
- **口径分歧**:第 5 题两盘结论不同(主盘=女婴 / 对照盘=男婴)。按任务纪律,**答案行以真太阳时主盘为准**——主盘时干己为阴土,**取女婴**。
- **字母:B(女婴)**(低置信;对照盘为 A)。
## 七、双盘分列与分歧汇总
- 第 1 题:主盘/对照盘均取 A(时柱卯酉冲 vs 卯申无涉,结论方向一致,不改)。
- 第 2 题:主盘/对照盘均取 B(本命主盘无驿马、对照盘时支申为驿马,然 2009 岁运未引动驿马,结论一致)。
- 第 3 题:主盘/对照盘同(年、月、日柱与大运全同,婚期系于壬子大运与丁壬合),均取 C。
- 第 4 题:主盘时支酉、对照盘时支申,2012 辰分别合酉/合申(申子辰半合),均引动子息宫;结论一致取 A。
- 第 5 题:**两盘分歧**——主盘时干己(阴→女婴 B)、对照盘时干戊(阳→男婴 A)。答案以主盘为准(B)。
## 八、存疑与边界声明
- 本命**印(乙)藏辰不透、官杀(癸)藏辰不透、财(辛)藏酉不透**,全局用神(伤官)虽透而相神(财)与夫星、子星多藏支中,须待岁运引动方显——故各题事件之「应期」多依岁运透清/会局而定,非原局明透,**置信度整体偏低**,第 1、2、4、5 题尤甚。
- 日主强弱处「中和偏弱」之临界(午禄+丙劫 vs 酉酉财+戊己伤食),扶抑取「喜印比、忌财伤」;若断为身强,则财官为喜,行运吉凶方向将反转——此处依 R-旺-14「弱而财旺取比劫、弱而食伤多取印」及调候(丁火辰月忌水、喜甲)定为身弱一路。此为判定分歧点,特此声明。
- 依 R-女-23 移用长生沐浴歌(以戊阳土查子星临时支之宫数:戊长生在寅,至酉为「死」),本主子星宫数落「死」位——该条系男命子星(官煞)而设、原书无女命明文(R-女-23 存疑)。**不取此条**断「无子」(与第 4 题她有生育相悖),改依 R-亲-14「宫星并参」与 R-女-22「时干有用」正断;此处按 R-禁-22 声明偏离(偏离 R-女-23 之宫数常数,理由:该条效验未详且专为男命立,书证不足)。
- 神煞(将星、天乙、文昌、童子煞等)与纳音、空亡**均未进入取格/成败/用神/高低四层**(守 R-禁-01),仅在迁移、文书等细节参看处借用其取象,且不单独定吉凶。
---
## 答案
Q1: A # 低置信
Q2: B # 低置信
Q3: C
Q4: A # 低置信
Q5: B # 低置信 # 口径分歧: 对照盘=A
@@ -0,0 +1,130 @@
# contest8_2023 · female_20020601_P015 求解留档
## 一、命主信息
- person_id:female_20020601_P015(女,2002 年生)
- 性别:女(大运逆行)
- 出生钟表时间:2002-06-01 08:30(Asia/Hong_Kong,无夏令时)
- 出生地:香港
- 主盘真太阳时:2002-06-01 08:09(经度修正 −23.32 分 / 均时差 +2.64 分 / 合计 −20.68 分)
### 双盘说明(排了对照盘)
- **触发原因**:place 为「香港」,属任务书列举之境外/模糊地名,强制排对照盘。
- **对照盘口径**:`--place "中国大陆"`(副本解析为杭州代理 120.16E / Asia/Shanghai,UTC+8 钟表时≈真太阳时),真太阳时 08:33。
- **两盘结果**:主盘与对照盘**四柱完全相同**——壬午 / 乙巳 / 庚子 / 庚辰,大运、流年、流月亦同(唯起运 8.77 vs 8.78 岁之微差)。故**不存在口径分歧**,全部题目两盘同断,答案行不标分歧注。
- 主盘真太阳时 08:09 距辰时边界(09:00)约 51 分钟,未触发「距时界 <15 分钟」条件;对照盘为地名触发。
## 二、命盘要点
四柱:**壬午 · 乙巳 · 庚子 · 庚辰**(日主庚金,生于巳月,长生之地)
- 年柱壬午:食神(壬)坐官印(午藏丁正官、己正印)
- 月柱乙巳:正财(乙)坐七杀偏印(巳藏丙七杀、庚比肩、戊偏印)
- 日柱庚子:日主庚金坐伤官(子藏癸伤官)
- 时柱庚辰:比肩(庚)坐偏印财伤(辰藏戊偏印、乙正财、癸伤官)
- 空亡:日柱空亡辰巳;时柱空亡申酉
- 节令:巳月,立夏后芒种前,月令本气丙火
- 大运(逆行):甲辰(8.77,2011)→**癸卯(18.77,2021)**→壬寅(28.77,2031)→辛丑(38.77,2041)
- 流年:2002—2035 全量见盘
## 三、取格(依《子平真诠》取格总纲)
1. **定月令**:月柱乙巳,月令巳;巳藏丙(本气)、庚、戊。
2. **月令十神分类**:日主庚金对月令本气丙火——丙为阳火克庚阳金,同阴阳为**七杀** → 入**偏官格(七杀格)**。
3. **藏干变化**:巳为本气不透月,本气丙火不透干;透出者为年干壬(食神)、月干乙(正财)、时干庚(比肩)。辨主从——透干乙木(财)**生**本气丙火(透干生本气),且本气丙火当令有力(巳月火旺),依「变而不失本格」之例,**本气丙火仍主格**,透出乙财为兼。
4. **会支变化**:年支午、月支巳半会南方火方,官杀(丙丁火)同气而旺;日支子、时支辰半合水局,食伤(壬癸水)得地。月令之气未化为别神,格不随会支改。
5. **定格**:**偏官格(七杀格)**。
## 四、成败 / 用神相神 / 高低
- **成格**:年干壬水食神透出,坐子、辰(癸水)通根,**食神制煞**——七煞得制,逆用得宜,成格(煞用食制,诸式之上)。
- **带忌**:① 月干乙木正财透出,财能「转食生煞」,为煞格所忌(露财);② 官煞混杂——巳藏丙(杀)、午藏丁(官)同见,虽俱不透干,然巳午半会火方,官煞之气并旺而不清。
- **救应评估**:乙木财星本身无强根(仅时支辰中乙木一余气),且与日主庚金作**乙庚之合**(夏月金不化,为合而不化之羁绊),克泄之力有限,带忌而不至破格。
- **用神 / 相神**:用神为月令丙火七杀,**相神为壬水食神**(制煞成格赖此一字)。
- **调候参看**:庚金生巳月,调候「先壬方得中和」——壬水透干,得调候之助,成色增。
- **旺衰参看**:日主庚金得巳中庚金长生之根、时干庚比肩帮身,四柱有根,能受财官而当伤杀,**身中下而非无根**;七杀当令(火旺)而食神有根,煞食两强而身稍逊。
- **格局高低**:有情(食制煞、调候得水)而力未尽全(日主偏弱、官煞混杂、露财带忌),属**中上之格**——贵气有而未极。
## 五、行运喜忌(依《子平真诠》论偏官取运)
偏官格食制之取运:**煞重食轻则助食,食重煞轻则助煞,煞食均而身轻则助身;忌正官混杂,畏印绶夺食**。
- 甲辰运(8.77—18.77,2011—2021):甲为偏财(助煞之党、泄食),辰为偏印(湿土生金、亦助食神之根)。少年至学龄段,财印并见,学业与家境平顺偏中。
- **癸卯运(18.77—28.77,2021—2031)**:癸水伤官透(伤官亦制煞,然与食神壬并见为杂),卯木正财伏吟月令之财——**伤官见官**(癸克丙丁夫星),兼**卯刑日支子(夫宫)**。此运为婚恋多变之十年。
- 壬寅运(28.77—38.77,2031—2041):壬食神透(喜,助制煞之相),寅为偏财兼丙火杀之长生,财煞并旺。
- 辛丑运(38.77—48.77,2041—2051):辛劫财帮身(喜),丑偏印(湿土生金,喜),为帮身之地。
## 六、逐题推理
### 第 31 题(出身贫富)
**考点**:原生家庭之财势(年柱祖上宫、月柱父母宫之十神喜忌)。
推理链:年月两柱壬午、乙巳——年干食神透、月干正财透,年月支巳午中藏七杀(丙)、正官(丁)、偏印(戊)、正印(己)。即**财、官、印三者俱备于年月**,且提纲(月令巳,七杀当令)得令、年干壬水食神制煞为「有用」——依六亲篇「提纲得力、或年干有用,皆主父母双全得力」,父母宫为完整而非破败之象(排除 A 孤儿院)。日为庚金坐伤官、时庚辰比肩坐印,日主得比肩与印之帮,非孤露之命。然日主庚金生于巳月,火(官杀)旺克金,日主偏弱不胜其财官;年月财官旺而身不任,富屋之象,成不了「大富贵」(排除 D)。综合:年月财官印俱全而身不甚任、父母宫完整、食神制煞格局可用,落于**小康之家**。
**选项**:C
### 第 32 题(学历程度)
**考点**:学历高低(以印星、官星之清浊与食伤之秀气并参)。
推理链:学业之文凭看**印星**与**官星**——本命正印己土藏年支午、偏印戊土藏月支巳与时支辰,印星三位有根;年支午中**丁火正官生己土正印**,为「官印相生」,主文书文凭之路可通。日主庚金弱而喜印,印为喜神。食神壬水透干、子辰半合水局,食伤吐秀,聪明才艺之资。大运甲辰(8.77—18.77)印(辰)生金、财(甲)不碍,求学段平顺;癸卯运癸水伤官虽有「伤官见官」之杂,然文凭根基已成。综合官印相生、食神吐秀,学历当在**大学毕业**一级(排除 C 小学、D 中六;B 硕士于 20 岁之龄不合)。此题为整组中凭盘最难精判者之一,置信中等偏下。
**选项**:A
### 第 33 题(哪一年有拍拖/恋爱)
**考点**:婚恋应期——夫星(官杀火)与夫宫(日支子)之岁运引动。
推理链(依女命婚姻应期三途,先运后年):
- 起运前童限略过(2011 前);2011—2021 行甲辰运,甲木偏财生火(夫星)不绝,辰为印。
- **2018 戊戌**(甲辰运):戌为火库(丁官之根),且**戌与年支午半合火局**,官杀(夫星)成局而旺——夫星得地之引动最著。戊为偏印(枭神),主内向学业。
- 2019 己亥:亥与日支子半会水方(动夫宫),然亥冲月支巳(冲七杀夫星),正印透,偏学业。
- 2020 庚子:子与日支子**伏吟**(动夫宫),子午相冲(冲年支之丁官夫星);庚为比肩(同辈社交)。
三年各有夫星或夫宫之引动,其中**2018 戌午半合火**为夫星本身成局,是恋情成立信号最直接之年。取 2018(A)。此题为整组最难者,2019、2020 亦有可取之象,置信偏低。
**选项**:A `# 低置信`
### 第 34 题(2022 年姻缘)
**考点**:2022(壬寅)在大运癸卯中之婚姻吉凶方向。
推理链:2022 壬寅,行**癸卯运**(2021 起)。
- **夫星方向**:大运癸水为伤官,透克官杀(丙丁火为夫星)——**伤官见官**;流年壬水食神亦泄克官星之气。夫星受制受泄,为婚缘向「变」之象。
- **夫宫方向**:大运卯木**刑日支子(夫宫)**(子卯相刑),夫宫逢刑而无合解,主婚缘动荡。
- **流年结构**:流年寅与月支巳相刑、与年支午半合火(夫星被激),并未与日支子成合会;夫宫无「成」之引动。
- 综合:以伤官运克夫星、夫宫逢刑、夫星无净得地之引动,2022 于姻缘为「动而散」之向——恋情破裂、分手之象(排除 A 结婚、B 奉子成婚、C 离婚,20 岁之龄亦不合离婚)。置信中等。
**选项**:D
### 第 35 题(2022 年发生什么大事)
**考点**:2022(壬寅)岁运引动合成之现实事件。
推理链(R-运-34 五步核对之要点):
- **透清 / 会局**:流年支寅与年支午**半合火局**(引动官杀),与月支巳相刑(动父母宫之七杀偏印);寅与日支子无合会、与辰无合会。流年干壬透,与命干壬伏吟(食神重出)。
- **驿马**:以日支子查(申子辰马在寅),2022 之支寅恰为**驿马**——主迁动、远行、环境变动。
- **十神取象**:流年支寅本气甲木,为庚金之**偏财**(横财、意外之财、偏门财);大运卯为正财,寅卯又半会木(财)方——**2021—2022 全程食神/伤官生财**,财气为 2022 最突出之一线;兼有官杀(寅午半合火)旺、食神壬透之「名与表现」线。
- **冲刑方向**:寅巳刑落月柱(父母宫),并夹财克印(寅木克己土母/印);然寅午半合火亦生土,母星受生,故「母亲」条并非净凶,判为**存疑候选、不取主断**。寅木偏财之直接取象强于其余,故以偏财(横财)为主断。
- 综合:2022 主题为「财」之突发与会财之喜,选项中最贴合者为**横财运**。
**选项**:D `# 低置信`
(若以「官杀旺+食神透」之线取象,则 A 事业机遇/比赛得奖为备选;C 母亲急病之象因印星同获火生而不净,降级为备选。)
## 七、存疑与边界
- 本命为**偏官格食制带忌**(露财、官煞混杂),格局属中上,故涉及「出身」「学历」之两题只能判方向、难臻精确。
- 第 33 题(恋爱年)三候选年 2018/2019/2020 均有夫星或夫宫之引动,取夫星成局最著之 2018,标低置信。
- 第 35 题(2022 大事)以偏财(横财)为主断,官杀/事业线为备选,标低置信。
- 神煞(将星、月德、驿马、桃花等)仅作事类细节参看,不入取格、成败、用神、高低四层。
---
Q1: C
Q2: A
Q3: A # 低置信
Q4: D
Q5: D # 低置信
@@ -0,0 +1,145 @@
# contest8_2023 · male_19560311_P012 求解留档
## 命主信息
- person_id:male_19560311_P012(1956 年出生男性)
- 性别:男
- 出生钟表时间:1956-03-11 09:00(Asia/Kuala_Lumpur,UTC+8,无夏令时)
- 出生地:马来西亚
- 真太阳时(主盘):1956-03-11 08:06
- 对照盘:**已排**。触发原因:出生地「马来西亚」属境外地名(任务书双盘纪律第二条)。
对照盘用 `--place "中国大陆"`(120°E 不经度修正,钟表时=真太阳时 08:50)。
- 两盘结果:**完全相同**——四柱均 丙申 / 辛卯 / 丁丑 / 甲辰,真太阳时 08:06 与 08:50 均落辰时
(07:00–09:00)内,距 09:00 边界分别 54 分、10 分,均未跨时辰。故不存在口径分歧,末尾答案行不标 `# 口径分歧`。
---
## 一、命盘要点
```
年柱 丙申(劫财)·沐浴 月柱 辛卯(偏财)·病
日柱 丁丑(日主)·墓 时柱 甲辰(正印)·衰
```
- 日主 丁火,生于卯月(惊蛰后、清明前),月令卯独藏乙木 → 乙为丁之**偏印**。
- 地支藏干:
- 申:庚(正财)、壬(正官)、戊(伤官)
- 卯:乙(偏印)
- 丑:己(食神)、癸(七杀)、辛(偏财)
- 辰:戊(伤官)、乙(偏印)、癸(七杀)
- 天干十神:丙(劫财)、辛(偏财)、丁(日)、甲(正印)。
- 空亡:日柱空亡申酉,时柱空亡寅卯。
- 神煞:天德、月德(二德齐)、金舆、亡神、太极贵人、灾煞、元辰、华盖(丑、辰两见)、阴差阳错。
**五行/十神力量(格局内相对度量):**
| 十神 | 木(印) | 火(比劫) | 土(食伤) | 金(财) | 水(官煞) |
|---|---|---|---|---|---|
| 来源 | 卯(当令)/甲(透)/辰乙 | 丙(透)/丁(日) | 申戊/丑己/辰戊 | 辛(透)/申庚/丑辛 | 申壬/丑癸/辰癸 |
丁火于四支**全无强根**(火之库在戌,命无戌、无巳午未),**身弱**,全赖印(木)生身、劫(丙)帮身。
印(木)当令且透,力强;财(金)三见且透,力强;官煞、食伤皆藏支不透。
## 二、取格
- 月令卯,日干对月令本气取十神:乙木生丁火、同阴 → **偏印**。(00_总纲 §1 第一步、第二步)
- 卯为专气(子午卯酉),本气即乙,不涉透干变化;甲木正印又透时干,印星透干。
- **定格:印绶格**(正偏同格,R-印-01)。印透时干为用,定格无误。
## 三、格之成败 · 用神相神
- 印格忌财。本命**辛财透月干、申丑藏庚辛,财旺**,财有坏印之势(R-印-12 贪财破印之嫌)。
- 救应在**丙辛合**:年干丙火劫财合去月干辛金偏财,劫财制财而护印(R-印-13 财重破印得劫财为救、
R-纲-05 败中有救)。辛财被合绊,不能直坏甲木,印得保。**败中有救,格复成。**
- **用神:印(甲木/卯)。相神:劫财(丙火)**——全局之格赖丙合辛去忌而成者(R-纲-12)。
- 另参气候(92_调候 · 丁火二月):二月丁火「湿乙伤丁,先庚后甲」。本命有甲透引丁(合调候),
庚金藏申(劈甲引丁之力稍欠),湿乙(卯)偏重——**气候小欠,格局成而减色**(R-纲-15)。
亦即财(庚辛)于调候为「药」(制湿乙、引丁),故财非全忌:财印相济处是格之亮点,
但财旺身弱处是格之病。综合判:**身弱财旺,用印赖劫,成格而偏富不贵、以富屋贫人之象**(R-纲-13 有情而力不全)。
## 四、行运(大运 + 关键流年)
喜忌基线(印格身弱用印、忌财坏印;调候兼喜庚甲):
- **喜**:木(印,生身)、火(比劫,帮身且制财)、水(官煞生印,前提是有土制之)。
- **忌**:金(财,坏印耗身)、土(食伤,泄身且生财)。
| 大运 | 年份 | 判定 |
|---|---|---|
| 壬辰(8–18) | 1964–1973 | 壬官生印为喜,辰土忌;辰卯相害。平中带杂 |
| 癸巳(18–28) | 1974–1983 | 癸杀生印、巳火帮身,双喜。**学业/事业成长期,吉** |
| 甲午(28–38) | 1984–1993 | 甲印、午火,双喜。**一生最吉之运** |
| 乙未(38–48) | 1994–2003 | 乙印为喜,卯未半合木局印更旺;然未土冲日支丑、丑未冲开库。半吉半动 |
| 丙申(48–58) | 2004–2013 | 丙劫帮身为喜,申金财为忌,申辰半合水。喜忌参半 |
| 丁酉(58–68) | 2014–2023 | 丁比帮身,然**酉金财旺冲卯(坏用神印)、酉丑半合金局**。**忌运(R-运-11 运既忌而又冲则重)** |
| 戊戌(68–78) | 2024–2033 | 戊伤忌,戌与卯合火帮身、戌与丑刑。杂 |
关键流年(按 R-运-29 五组引动复查,R-运-34 程序):
- **1997 丁丑**(41 岁,乙未运):E **伏吟日柱**(丁丑=日柱丁丑);C 大运未与流年丑**丑未冲**(冲动妻宫/财库)。
2 组。引动落于日柱(己身/财),且丑中己土食神、辛金偏财被冲开。
- **2011 辛卯**(55 岁,丙申运):A 透清(辛金财,命藏丑辛);E **伏吟月柱**(辛卯=月柱辛卯);D 卯填时柱空亡(寅卯)。
3 组。辛金克卯木(财坏印、金克木)。
- **2013 癸巳**(57 岁,丙申运):A 透清(癸杀,藏丑辰);巳与申刑合。2 组,且癸生印、巳帮身为喜。
- **2016 丙申**(60 岁,丁酉运):E **伏吟年柱**(丙申=年柱丙申);B 申辰半合水局;D 申填日柱空亡(申酉)。3 组。
- **2017 丁酉**(61 岁,丁酉运):E **伏吟大运**(丁酉=大运丁酉);C **酉冲卯**(冲用神印);B 酉丑半合金局(财);
D 酉填日柱空亡。**4 组,为全程引动最强之年**。用神(印)被双酉冲去,身弱失所倚 → 凶向(R-事-11 喜用受冲刑则凶向)。
- **2020 庚子**(64 岁,丁酉运):A 透清(庚金财,藏申);B 子辰半合水;C 子卯相刑。3 组。金水旺(肺/肾)。
## 五、逐题推理
**第 1 题(Q16)考点:性情。**
印绶格身弱,日主丁火阴火无根;印重(卯当令+甲透+辰乙),木多火塞、湿乙伤丁,光不外显;
神煞双华盖(丑、辰)主孤高向学、太极贵人主好寻根究底。综合取「内向、沉静、多思」一路。
财旺透干(贪财取向)本可牵出「财多」一面,但身弱无根、火不显扬,外向好胜(D)可排除;
官煞不透且不重,「胆小没主见」(B)证据不足。取 **C**。
**第 2 题(Q17)考点:学历。**
印为用神且有力(月令当令、甲透时干),丙辛合救印使印不被财坏,印格成而可用 → 学业可成。
官煞藏而不透,无显官印相生之贵,故不到科举高等(D 硕士证据弱);财旺坏印之嫌得丙救,
不至弃学(B 中学辍学证据弱)。判**大学毕业**。取 **C**。
**第 3 题(Q18)考点:婚姻。**
①妻星(财)透月干辛,本旺,财旺主有妻室(D 未婚排除)。
②然**丙辛合**——男以财为妻,妻星被别干(劫财)合去,主「妻不亲其夫」(R-亲-19),配合有向背。
③妻宫日支丑坐财,印格逢之**反为不美**(R-亲-06);且妻星透而近破格,防刑克(R-亲-11)。
④妻宫丑逢大运乙未(1994–2003)之冲,宫被冲动,主「得美妻而难偕老」(R-亲-12 妻宫坐下逢刑冲)。
三者同向,指向**婚姻中变**。另双华盖主孤、官煞(子星)藏支(时支辰为子星壬之墓),子女缘亦不见厚。
综合取 **C(早年结婚,晚年离婚)**。
**第 4 题(Q19)考点:1997 流年应事。**
1997 丁丑,乙未运。引动:**伏吟日柱**(自身/主体之事,自立门户之象)+**丑未冲**(冲动财库与妻宫,
丑中己食神、辛偏财被冲开)。
十神合成:流年丁火比肩(自身/合伙)+丑中己土食神(饮食技艺)+丑中辛金偏财(大财),
大运未土亦属食伤之库——**食伤生财、比肩自立**之组合指向「自己做吃的生意、创大业」。
出国寻宝(C)需驿马引动,而本命年支申/时支辰之驿马在寅、日支丑之驿马在亥,1997 丑年不引动驿马,故 C 证据弱;
诈骗破财(A)属纯劫夺财,与食伤生财之主线不合;车祸(B)无金舆(车)引动(金舆在申,未逢)。
取 **D(自创业,开办大型港式酒家)**。
**第 5 题(Q20)考点:健康/寿元。**
身弱无根、全赖印(木)为生化之源;忌神为金(财)——坏印耗身。
2014–2023 走**丁酉忌运**(酉财旺、冲卯坏用神印),为大凶之运(R-运-11 忌运又逢冲则重)。
其中 **2016 丙申伏吟年柱**、**2017 丁酉伏吟大运**连续两年伏吟,且 2017 酉金**双冲卯木用神**——
用神印根被连根冲去,身弱失所倚(R-事-11 喜用受冲则凶向),为全程引动最强、最凶之节点。
R-性-34「忌神(金)入木(肝)则肝病」亦与金克木(坏印)之机理相应。
故断重大恶疾起于 2016 丙申(伏吟年柱)之年、于 2017 丁酉(伏吟大运、双酉冲去用神印)之年不治。取 **C(2016 确诊癌症,隔年与世长辞)**。
(备选:2011 辛卯金克木(血/风)、伏吟月柱,有「血管阻塞/中风」之象,降级备选——
若主答案不中,此为次选。)
---
## 六、存疑与边界
- 本盘身弱财旺、用印赖劫,属「成而偏富不贵」之杂局,性情与六亲取象皆有财、印两争,
第 1、3 题方向存在财(贪)与印(静)两可,故第 1、3 题标低置信。
- 第 2 题学历、第 5 题健康年份为规则路径与直白取象并存,标低置信。
- 对照盘与主盘四柱全同,无口径分歧,末尾答案行不作分歧标注。
---
## 答案
Q1: C # 低置信
Q2: C # 低置信
Q3: C # 低置信
Q4: D # 低置信
Q5: C # 低置信
@@ -0,0 +1,153 @@
# BaziQA 盲测作答:contest8_2023 / male_19620806_P010
## 一、命主信息
- person_id:male_19620806_P010(1962 年出生男性)
- 性别:男(大运顺行)
- 出生钟表时间:1962-08-06 09:00(当地钟表时间)
- 出生地:香港
- 真太阳时(主盘):1962-08-06 07:30
- 换算:香港 1962 年处夏令时(排盘审计「夏令时:是」),钟表 09:00 先回拨 1 小时得 08:00,
再经度修正 -23.32 分、均时差 -6.21 分(合计 -29.53 分)→ 真太阳时 07:30,落**辰时**(07:00–09:00)。
- **对照盘:已排**。触发原因:place「香港」属任务书列明的境外/模糊地名(美国、中国大陆、日本、
台湾、香港等),必须再排一盘。对照盘口径为 120°E 不经度修正——`--place "中国大陆"`
(副本解析为杭州代理 120.16E,Asia/Shanghai,中国 1962 年无夏令时)→ 真太阳时 08:54,亦落**辰时**。
- **双盘结论:四柱完全一致**——壬寅 / 丁未 / 丙子 / 壬辰;仅起运岁数微差(主盘 0.68 岁、对照盘 0.66 岁),
不影响任何一题判定。故**无口径分歧,末尾答案行不标注分歧**。
(注:主盘距时辰边界 07:00 与 09:00 各 30 分钟,不满足「真太阳时距时辰边界 <15 分钟」这一条;
对照盘 08:54 距 09:00 仅 6 分钟,但仍属辰时,两盘同柱,故对照盘不改答案。)
## 二、命盘要点(两盘同)
四柱:**壬寅 / 丁未 / 丙子 / 壬辰**(丙火日主,生于未月)
- 天干:年壬(七杀)、月丁(劫财)、日丙(日主)、时壬(七杀)
- 地支藏干:寅(甲偏印、丙比肩、戊食神)/未(己伤官、丁劫财、乙正印)/子(癸正官)/辰(戊食神、乙正印、癸正官)
- 日主丙火之十神分布:
- **官杀**:壬七杀两透(年、时)+子中癸正官、辰中癸正官——水(官杀)三见且两透,最旺;
- **食伤**:未中己(伤官,月令本气)+辰中戊、寅中戊(食神)——土三见,食伤混杂;
- **印**:寅中甲、未中乙、辰中乙——木三见,皆藏不透;
- **比劫**:月干丁(劫财)透+寅中丙(比肩);
- **财(金)**:**全局无金**,且日柱空亡申酉(金之位空)——正偏财俱绝。
- 神煞:驿马、红艳、福星贵人(年支寅);金舆(月支未);将星、灾煞、福星贵人、阴差阳错(日);
华盖、童子煞(时支辰)。无孤辰寡宿。
- 空亡:日柱空申酉;时柱空午未。
- 节令:未月(小暑后、立秋前),胎元戊戌、命宫丙午。
## 三、取格(依《子平真诠》总纲六步)
1. 月令=未。以日干丙配月令未之本气己土 → **伤官**。
2. 月令本气己土不透;透者为月干丁(劫财,出未之中气)。丁火生己土(透干生本气),
且未月己土当令有力 → 依总纲「变而不失本格」,**本气仍主格**,丁劫财为相为兼。
→ 定格:**伤官格**。
3. 官杀(壬)两透,反为入格之关键:伤官为凶神宜逆用——此局印(甲乙)藏而有力,
煞(壬)透而生印、印又帮身制伤,正合**「伤官用煞印」**(R-伤-08)一路;
与本库《伤官格》命例 8「壬寅丁未丙寅」(夏阁老,原文仅录三柱)同型——同为丙日未月、
煞透印藏、无财,判入「伤官用煞印,无财便为贵格」。
**成败与用神、相神:**
- 用神:月令伤官(己,秀气)。相:煞(壬七杀)与印(甲乙)——煞生印、印帮身制伤,两得其宜。
- **成格之要害在「无财」**:本命全局无金(财),故印不被财坏、煞不被财党,格局得成;
缺点在官煞混杂(壬两透+子、辰两癸)而不清,为「带忌」;又食伤混杂(戊己并见)为不纯。
- 高低:印藏寅得禄(甲禄在寅)而有力,煞两透有源(子辰半合水助之)——有情而近有力,
格局不低;惟官煞不纯、食伤混杂,格成而带瑕疵,不能作纯清之贵论。
**调候(参看,未月丙火):**
- 丙火未月,取壬为用、庚为佐(六月丙火退气、三伏生寒,壬水辅映)。本命**壬水两透**——调候用神得,
格局增色。**忌「己出混杂」(庸夫俗子)**——本命未月己土伤官当令,正是调候所忌之混,
故虽成格而减其秀,格调落在「成而带浊、贵而不纯」一档。
- 佐神庚金(财)即调候之佐,本命全无:**调候之佐缺**,为减色处。
## 四、行运(依《行运》通论)
大运顺行:戊申(0.68) 己酉(10.7) 庚戌(20.7) 辛亥(30.7) 壬子(40.7) 癸丑(50.7) 甲寅(60.7) 乙卯(70.7)
- **戊申运(约 1–11 岁)**:申为偏财(父星、亦调候之佐庚之禄地),申**冲年支寅**(冲丙之长生、冲印根),
申又与命中子辰**会成申子辰水局**——财化为官杀、印根被冲。早岁家庭宫(年支)被动、父星出现即被合化,
为「父缘薄、早年家庭变动」之象。
- **己酉运(约 11–21 岁)**:己伤官透、酉为正财(妻星、父星),酉却落**日柱空亡(申酉)**,
且辰酉合金——财现而空、成而虚。少年至青年,财(父/妻)之线仍虚。
- **庚戌运(20.7 起)**:庚偏财透(调候之佐庚金现!),戌为火库、与未相刑(未戌刑)、
与寅半合火。财星终透,为成家立业之窗口。
- **辛亥运(30.7 起)**:辛正财透,亥与寅合木(印)、子亥会水——财与官杀并动。
- **壬子运(40.7 起)**:壬煞透、子为日支本气再现(子=正官,且子子伏吟日支)。
- **癸丑运(50.7 起,2013–2023)**:癸正官透(由子中癸透清),丑与月支未**相冲**(丑未冲=父母宫被冲),
丑又与日支子**相合**(子丑合)。此十年父母宫与夫妻宫同被牵动。
- **甲寅运(60.7 起,2023)**:甲偏印透,寅为丙之长生与印禄——印比得地。
## 五、六亲(依《六亲》,叠加于格局之后)
- 宫分:年柱祖上/早年,月柱父母宫,日支妻宫(亦己身),时柱子息宫。
- 星配:**偏财为父、正印为母、正财为妻、官煞为子女(男命)、比劫为兄弟**。
- **父(偏财=金)**:全局无金、且金位(申酉)落日柱空亡——**父星绝**。
- **母(正印=乙木)**:乙藏未、辰,甲藏寅且得禄——**母星有气**(虽月支未为木墓,年支寅得禄可救)。
- **妻(正财=金)**:同属金,**妻星无不现**;而**妻宫(日支子)坐正官**——妻宫有星而妻星无。
- **兄弟(比劫)**:月干丁劫财透、寅中丙比肩——**有兄弟之象**,非独子。
- **子女(官煞)**:壬煞两透+子辰半合官局——子星旺而有根。
## 六、逐题推理
### 第 1 题(命主 16 岁前家庭状况)
考点:早年(童限)家庭抚养状况。推理链:父星(偏财/金)全绝、金位又落空亡,父之线极虚;
母星(正印)有气。童限戊申运申冲年支寅(家庭宫被动)、申子辰会水局,家境早年即被动荡、
父不在而母为主。逐项排除:B 孤儿院、D 收养父母——皆须父母双亡或弃养,而本命母星有明显气、
月令提纲亦非全无用神,母在,故不取;C 跟随父亲生活——父星绝,不取。→ 取**跟随母亲生活(A)**。
### 第 2 题(命主父母状况)
考点:父母存殁先后。推理链:财为父、印为母;本命**父星(偏财)绝于局、妻父同源之金全无**,
父之线薄,主父不永;**母星(正印)藏而有气**(寅得禄),母之线较厚。
「提纲得力、年干有用者父母双全」之泛条虽存在,但四选项皆为「有问题」之设定,以财/印之厚薄分先后:
父薄母厚 → **父短寿、母长寿**。排除:A 父母相继在儿时离世(母星未绝,不取);
C 贫穷分离(年月杀印相生、非全然为忌,且题设重「父短」而非「分离」,C 作次选);
D 父长寿母短寿(与财绝印存相反,不取)。→ 取 **(B)父短寿母长寿**。
### 第 3 题(命主婚姻状况)
考点:婚姻。推理链:男命妻星即正财(金),**本命财星全无**,妻缘本薄;然**妻宫(日支子)坐正官**,
依《论妻子》——「妻坐官,吉也,而伤官逢之,岂能顺意」:本命正是**伤官格**,妻宫之官被伤官所嫌,
婚姻不能顺意。又日柱**阴差阳错**(丙子,正列十二阴差阳错日)——「男子逢之,主退外家,
亦与妻家是非寡合」,明指**曾婚而与妻家不合**。合断:有婚(妻宫有星、阴差阳错明指有妻家)
而终不能谐(伤官见官、妻星绝)→ **已婚,但已离异(A)**。
(备选讨论:妻星绝+华盖+童子煞亦有「独身」取象,见下第 3 题末段说明;主取 A,标低置信。)
### 第 4 题(2014 年发生何事)
考点:流年应事。2014 = 甲午,处**癸丑大运**(2013–2023)。
- 引动核查(依五组清单):
- A 透清:流年干甲,透出命中寅中所藏之甲(偏印)——印/母透清;命中偏印透。
- B 会局:流年支午与命中年支寅**半合火局**(寅午),比肩劫财得势。
- C 刑冲:**流年午冲日支子**(冲动日支=己身/妻宫);另大运丑冲月支未(父母宫)。
- D 空亡:午属**时柱空亡(午未)**,流年午来填实。
- 神煞:甲午之年逢**天德、月德**(未月天德甲、月德甲)二德齐——凶险有解;又逢**羊刃(丙刃在午)、
灾煞、将星、童子煞**——羊刃+灾煞主血光急症,二德主遇险得解。
- 判向:冲落**日支子**——日支为「己身+配偶」之贴身宫;本命妻星(金)全无、婚姻已见离异不顺,
妻宫之象不键,故此冲之力主要落在**日主己身**:日支受冲、又命带灾煞(以日支子查,见午)、
流年再逢羊刃灾煞,主**己身血光急症**。→ 候选排序:①**命主自己患癌症(D)**;
②伴侣/妻之病(A)——妻星虽绝、子午冲妻宫亦开此向,降级为备选;③父母之病(C)——大运丑未冲
父母宫亦支持,列为次备。综合取**命主自己患癌症(D)**(低置信)。
### 第 5 题(以下何项属正确)
考点:综合事实。逐项:
- A 独子——月干丁劫财透、寅中丙比肩,**有兄弟姐妹之象**,非独子,A 不取。
- D 工作稳定、一份工做到退休——官煞混杂(壬两透+癸两藏)而不清,又财绝(官无源、身无养),
事业线动荡,D 不取。
- C 长期患病需人照顾——身弱(官杀两透克身、食伤混杂泄身)+童子煞(幼多灾病),有健康薄弱之象,
然印(三木)化杀帮身,未至「长期卧床」,C 作次选。
- B 曾犯事留有案底——**官杀混杂两透**(七杀重)+**伤官当令**(伤官见官为祸),又日柱**阴差阳错**、
将星主权,气性刚猛、易触官非刑宪;调候谓「己出混杂(庸夫俗子)」亦是浊而不清之象。→ 取
**曾犯事,留有案底(B)**(低置信)。
## 七、存疑与边界
- 本命「伤官用煞印」为成格之贵,然官煞混杂、食伤混杂、调候犯「己出混杂」,格调落「成带浊」;
六亲之吉凶以宫星配格局喜忌为断,与贵贱之判分轨。
- 第 3、4、5 题存在多解张力(妻星绝/妻宫坐官/阴差阳错三者指向不同),已按规则逐项加权,
非高置信。
- 未引纳音、空亡、神煞入格局四层(遵禁则);神煞、空亡仅作流年细节参看。
## 八、答案
Q1: A
Q2: B
Q3: A
Q4: D
Q5: B
@@ -0,0 +1,129 @@
# contest8_2023 · male_19800711_P016(1980年出生男性)
## 命主信息
- person_id:male_19800711_P016
- 性别:男
- 出生钟表时间:1980-07-11 09:00(Asia/Hong_Kong,夏令时:否)
- 出生地:香港
- 真太阳时(主盘):1980-07-11 08:31(经度修正 -23.32 分 / 均时差 -5.32 分,合计 -28.64 分)
- 四柱:庚申 癸未 乙酉 庚辰
- 当前年(题面 current_year):2023
### 是否排对照盘及触发原因
**已排对照盘。** 触发条件:place 为「香港」(境外/模糊地名,命中双盘纪律第二款)。对照盘口径 `--place "中国大陆"`(杭州代理 120.16E,Asia/Shanghai,UTC+8 钟表时即真太阳时),真太阳时 08:55。
**对照盘结论:** 两盘四柱完全相同(庚申 癸未 乙酉 庚辰),仅起运天数差 2 天(9.12 岁 vs 9.11 岁),大运干支与流年全同。**两盘无口径分歧**,下文答案行无需标注分歧。主盘时柱辰(07:00–09:00),真太阳时 08:31 距 09:00 边界 29 分钟,未触发时辰边界条件,时辰稳固。
---
## 一、命盘要点
- 日主乙木,生未月(季夏,木退气)。日主坐酉(乙之绝地),仅得未中乙、辰中乙两处余气微根,赖月干癸水偏印相生。**日主偏弱。**
- 天干:庚(年)、癸(月)、乙(日)、庚(时)——**双庚正官透干**,癸水偏印透干。乙庚合(日主与两庚争合)。
- 地支:申、未、酉、辰——申(庚壬戊)、未(己丁乙)、酉(辛)、辰(戊乙癸)。
- 十神盘点:官杀(庚庚+申酉+辰酉合金)最重;印(癸透+申壬+辰癸)次之;财(未己+辰戊+申戊)中而**不透**;比劫(未乙、辰乙)弱;食伤(未丁)最弱。
- 地支组合:辰酉合金(时支合日支,金势更增);未无会;申酉金乡。
- 神煞(仅作细节,不入格局四层):天乙贵人(年支申)、桃花+将星(日支酉,妻宫带桃花)、华盖+童子煞(时支辰)、寡宿(月支未)、亡神(年支申)。
## 二、取格
依《子平真诠》「用神专求月令」:日干乙木配月令未。
1. 月令未本气己土,乙木克己土为财 → **财格**(正偏财同格)。
2. 未为杂气(辰戌丑未),按杂气取用条:未中本气己(偏财)**不透**,余气丁(食神)、乙(比肩)亦不透;天干所透之庚(官)、癸(印)非未所藏,不构成「月令透干取用」;未亦无三合三会。
3. 故格仍以月令本气定——**财格**。透干之官(庚)、印(癸)为财格配合上的成格之用。
4. 第六步外格闸门:日主有微根、命中有用神可取(官印财俱在),不转杂格;亦非从杀(乙木根未全无,且有印生)。**正格。**
## 三、格之成败、用神相神、高低
- **格局态势**:财格,财(土)生官杀(金)、官杀极旺而日主弱。金势过重(双庚+申酉+辰酉合金),官杀攻身为病;赖月干癸水偏印化官杀而生身,官(庚)生印(癸)、印生身(乙),成「财→官→印→身」一路相生。
- **成败**:属「财格佩印 / 财用印化杀」之救应成格(《子平真诠》论财篇「财格佩印」与「财用煞印」两型并存于此)——财藏不透,印透帮身,财印不相碍,格成。**带病之处**:官杀太重、日主太弱,官(庚)虽有印化而势仍压身,格成而减色,非大贵之局;财(月令用神)反为病(党煞、坏印之嫌),故富亦有限、财来财去。
- **用神与相神**:月令财为用神所在,但以印(癸水)为全格所倚之**相神**——化官杀、护日主、通关财官。伤官(丙)为制官杀之药,比劫(乙)为帮身之助。
- **格局高低**:配合有情(官印相生、生化一路),然**主用者根力不敌**(官杀四倍于身),属「有情而不情之至、有力而不力之全」——中上之局,主一技在身、依人成事,能过活、能小富,难望显达。官杀旺而印化者亦主劳心承重之象。
## 四、行运
大运顺行,起运约 9.12 岁(1989 年起):
- 甲申(9–19 岁,1989–1999):甲劫帮身、申金加重官杀——童限后进学,平中带压。
- **乙酉(19–29 岁,1999–2009)**:乙比肩帮身、酉为妻宫伏吟(酉酉),又是日主绝地。此运婚姻、身事皆动;酉金增官杀压力,赖乙木比肩分任。
- **丙戌(29–39 岁,2009–2019)**:丙伤官透(运干,主前五年 2009–2013)、戌正财库(运支,主后五年 2014–2018)。丙伤官生财、亦制庚官;戌为财库,与命局**辰戌冲**(冲时支辰、并冲辰中癸印用神)、**酉戌害**(害妻宫)、**未戌刑**(刑父母宫)。此运财禄起落最大——详见逐题。
- 丁亥(39–49 岁,2019–2029):丁食神、亥为印(用神之地),官杀得食神制、印得地——由困转稳。
喜忌基线(断运用):**喜**印、比劫(水、木);**忌**财过旺(党煞坏印)、忌官杀过重、忌伤官盗气。行运之喜忌皆以此校正。
---
## 五、逐题推理
### 第 1 题(P016-Q36)第一次结婚年份?(A2000 B2001 C2005 D2006)
考的是婚姻应期。男命以财为妻、以日支(妻宫)为婚姻之宫。本命妻宫坐酉(七杀、带桃花),财(妻星)藏而不透,故妻缘之成须待**岁运引动妻宫或妻星**。
- 第一婚在大运 **乙酉(1999–2009)**内,此运酉酉伏吟妻宫,为婚姻启动之运。
- 2000 庚辰:辰为**正财**(戊土),且**辰酉六合**——正财(妻星)合入妻宫,男命婚期最正之象。
- 2001 辛巳:巳酉半合妻宫,但巳本气为伤官,财仅藏于戊,力度次之。
- 2005 乙酉:酉为妻宫(+桃花)伏吟,天干乙比肩争妻——主感情大动而不主成婚。
- 2006 丙戌:戌为正财(妻星),然**酉戌相害**妻宫,成中有破。
排除 2001(半合偏弱)、2005(比肩争合、伏吟主情动)、2006(害妻宫)。取**辰酉合、正财合妻宫**之 2000。
### 第 2 题(P016-Q37)第二次结婚年份?(A2011 B2012 C2013 D2015)
男命二婚,当先有婚变、再有再娶。
- 婚变应于 **2011 辛卯**:卯**冲**日支酉(妻宫被冲),又逢辛七杀透、元辰/灾煞并临——直白取象即「姻缘被冲开」,为离婚之年。
- 再娶则须妻宫复逢合会。2012 壬辰:**辰酉六合**妻宫、又辰为正财——与前妻星合妻宫同一机制(同型引动应同类事),再婚最宜。
- 2013 癸巳:巳酉半合,可行但弱于六合。2015 乙未:未为财库然不合金妻宫,乙比肩又主争。
取**辰酉合、正财合妻宫**之 2012。
### 第 3 题(P016-Q38)从事职业?(A秘书 B物流公司老板 C翻译员 D游泳救生员)
考取格与财官印配置。
- 月令未为财格,财(土)主货物、贸易、经营性收入;官杀(金)旺主车、机械、规矩、营运之物。金旺财旺而合于日支(辰酉合金)——象在「以金属、货物、运输营财」。
- 全格为财格(月令财)为体,故以**经营/商业**取象胜过单纯文职。用神系于印(文书),然印在此为相神而非格体;食伤最弱,不主语言表达(排除翻译员);泳救象属水而日主弱不胜水劳(排除救生员);秘书属官印文书一路,与「月令财、双官透而财为主」的财格主导不合。
取**物流公司老板**。
### 第 4 题(P016-Q39)性格特征?(A被动做事消极但爱心同情心重 B鬼主意多爱走捷径耍小聪明 C保守节俭但承担力强 D脾气暴躁好色做事鲁莽)
考的十神配性情。
- 官杀(庚庚+申酉)为全局最重之神,正官主守规、约束、任事;官杀极旺而日主弱,必以「承受、担责、持重」为性——**承担力强**之象最著。
- 财(未己辰戊申戊)藏而不透,财不露白 → **节俭**,惜财不炫。
- 官透印随,财官印相生一路 → **保守**、循规、不事张扬。
- 排除 B:食伤(丁)最弱不透,非聪明外露、投机取巧之性。排除 D:官为透干之正官且有印化,非七杀无制之暴躁鲁莽;桃花在妻宫仅主感情多事,不足以主「好色」为性之主。排除 A:虽身弱有被动一面,但官杀极旺、财官印相生之主线显于「承担持重」,非纯「消极依赖」——A 之「爱心同情心」虽合印,然其「做事消极」与全局官旺承担之象相左。
取**保守,节俭,但承担力强**。
### 第 5 题(P016-Q40)丙戌大运(2009–2018)财运?(A一直稳定有存款房产 B投资物业股票屡获丰厚 C刚开始丰盛,后因赌钱债台高筑 D刚开始平稳,后因替家人清还债务而负债累累)
考大运喜忌与财之应。
- **该运为忌运为主**:丙为伤官(盗日主之气),戌为正财库(助财党煞、坏印)。喜印、比劫,此运皆无显著助力,故财必起落、终归破耗——A、B(一直丰稳、屡获厚利)皆不合忌运基调,先排除。
- **运干管前五年、运支管后五年**:丙(2009–2013)为伤官,伤官生财本可来财,然命中癸印克丙(印护日主、制伤),伤官生财之力被抑,故前段「财政平稳渡过」而非骤富。戌(2014–2018)为财库,与命中**辰戌相冲**、**未戌相刑**、**酉戌相害**,冲开财库又冲坏辰中癸印(用神受伤)、刑及月柱父母宫——财既动且坏印,见破败。
- **因「家人」而非因「赌」**:伤官(丙)受印制,不为赌荡之象;破财之由落在戌财冲刑坏印——财(六亲中主父/家人)为忌神而动、坏及用神印,正是「因家人致财耗、替家人清债」之象(《命理之财为忌神、财坏印》一路)。排除 C(赌钱主伤官放恣,此盘伤官被印制;且前段为「平稳」非「丰盛」)。
取**刚开始平稳渡过,但后来因为要为家人清还债务而负债累累**。
---
## 六、存疑与边界
- 本盘为**穷通宝鉴「夏木」以外之乙木未月局**,取格有「财格佩印(主贵)」与「财用煞印(主富)」两说并陈(《子平真诠》论财篇同在),本判以月令财为体、印为相神,未强断贵贱,只定「成而减色、依人成事」。
- 婚姻之年(第 1、2 题)依妻宫(日支酉)逢合之应期收敛到年(辰酉六合),置信度**只能定到年、且属二选一之推**,标注低置信。
- 第 5 题 C/D 两型皆属「先好后坏」,本判以「伤官被印所制、破财归因于财星冲刑坏印(家人)」取 D,属两可处之取舍,标注低置信。
- 未发现题面 JSON 残留 `answer` 字段等泄露迹象;未触碰任何禁区文件、未联网。
---
## 末尾答案行
Q1: A
Q2: B
Q3: B
Q4: C
Q5: D # 低置信: C/D 两可
@@ -0,0 +1,120 @@
# contest8_2023 · male_19860424_P011 求解留档
## 一、命主信息
- person_id:male_19860424_P011(题面名「1986年出生男性」)
- 性别:男(male)
- 出生钟表时间:1986-04-24 21:30(当地钟表时间)
- 出生地:马来西亚(题面 place 原文)
- 真太阳时(主盘):1986-04-24 20:18(经度修正 -73.24 分,均时差 +1.86 分,合计 -71.38 分;时区 Asia/Kuala_Lumpur,夏令时:否)
- 主盘四柱:丙寅 / 壬辰 / 戊戌 / 壬戌(戌时)
- 对照盘:**已排**。触发原因——place 为境外地名(马来西亚),命中任务书「双盘纪律」第二条件。
- 对照盘口径:`--place "中国大陆"`(副本解析为杭州代理 120.16E,Asia/Shanghai,钟表时≈真太阳时)
- 对照盘真太阳时:1986-04-24 21:32(亥时)
- 对照盘四柱:丙寅 / 壬辰 / 戊戌 / **癸亥**
- **两盘差异**:仅时柱不同。主盘时柱 壬戌(时干壬偏财、时支戌比劫兼印库),对照盘时柱 癸亥(时干癸正财、时支亥为壬水财之禄地、藏甲七杀)。
- 答案行以**真太阳时主盘**为准(见末节)。
## 二、排盘与取格(主盘为主)
### 1. 命盘要点(主盘)
- 四柱:丙寅 壬辰 戊戌 壬戌。日主戊土,生于辰月(清明后、立夏前),月令辰。
- 天干十神:年干丙=偏印;月干壬=偏财;日主戊;时干壬=偏财。
- 地支藏干:寅(甲七杀、丙偏印、戊比肩);辰(戊比肩、乙正官、癸正财);戌(戊比肩、辛伤官、丁正印);戌(同前)。
- 空亡:日柱辰巳空、时柱子丑空。
- 节令:胎元癸未,命宫辛卯。
### 2. 定格(依 00_总纲_取格.md §1 六步)
- 第一步 月令=辰。第二步 以日干戊对月令本气戊 → **比肩**,属「比劫(禄/刃/劫)→ 月令无用神」一路,阳干临刃者转阳刃格,此非阳刃(戊刃在午),故转 **18_建禄月劫格**(于四柱透干、会支别取财官煞食为用)。
- 第三步 藏干变化:辰藏戊(本气,即日主)、乙(正官,不透)、癸(正财,不透)。四柱透干中,月、时两干透 **壬(偏财)**,以月令辰为水库之根,可取为用(R-纲-10 杂气取用:库根透出亦作透出取用论)。年干丙偏印从寅透。
- 结论:**建禄月劫格,别取偏财为用**(壬水偏财透两位、以辰为库根)。相神取戌中所藏辛金伤官(化劫生财,R-禄-05)。
### 3. 成败、用神相神、高低
- **身旺**:戊土通根辰、戌、戌三土,加年支寅中戊之余气,又得丙火偏印(通根寅)生扶,日主明显偏旺。
- **成格**:月劫用财,四柱带伤食(辛金伤官藏日、时两戌,有气)——合 R-禄-05「禄劫用财须带伤食化劫生财」之「有气」条件,格成。
- **带忌**:财星壬水**两透而露**(露财),而天干**无官星护卫**(乙官藏辰不透),四柱**比劫众**(戊辰戌戌+寅戊),财露无护、比劫争财,是为带忌(R-财-02/13、R-禄-12)。且辰戌两冲,燥湿交战,水财受燥土之制。
- **用神=偏财(壬水)**,**相神=伤官(辛金)**(通关化劫)。喜:食伤(金,泄土生财)、财(水)、官杀(木,制劫护财);忌:比劫(土)、印(火,生身且夺食伤)。
- **格局高低**:身旺而财透有根,属「用财」一路可取富;然伤食不透(仅藏)、官不透、财露被劫,通关护财之力皆薄——依 R-禄-18「用财不透伤食而仅财纯根多者,富而不贵」之档,且带「财露无官」之忌,断为**中平偏上、财来财去、富而不巨、贵气不足**。气候参看:春土(辰月)土旺,喜甲木疏土、庚金泄土、壬水润土(92_调候),本命壬透有、甲庚藏而不透,药神未全,减色。
### 4. 行运(依 90_行运.md、R-禄-21)
大运顺行:癸巳(3.77岁/1990)→ 甲午(2000)→ 乙未(2010)→ 丙申(2020)→ 丁酉(2030)→ 戊戌(2040)。
- 建禄月劫格用财带伤食(R-禄-21):财食轻者宜助财、不喜印比;财食重者喜印绶不喜比肩。本命财透而伤食藏(财重食轻),故通盘**喜金(泄土生财)水(财)木(制劫)**,**忌火(印)土(劫)**。
- 癸巳运(1990–1999,童限后至13岁):癸水正财透(喜)+巳火印、巳为戊禄(忌),吉凶相半。
- 甲午运(2000–2009,14–23岁):甲木七杀透(制劫护财,喜)+午火羊刃(忌);学业期,压力与研究、专技并存。
- **乙未运(2010–2019,24–33岁)**:乙木正官透(制劫护财、又为男命子星之显,喜)+未燥土劫财(忌)。此十年官星当运、护财成家,为**婚育与立业的窗口期**;然未土劫财、未戌相刑,婚姻宫本已有辰戌冲,此运婚姻多起伏。
- 丙申运(2020–2029,34–43岁,**当前**):丙火偏印盖头(忌,印夺食伤,阻财路)+申金食神得地(喜,泄土生水、申为水之长生)。支吉干凶,逢申酉金运生财,中晚年财源转顺;然丙丁火印运(2020–2039)与命局丙印同气,印重则「求名、文书、玄学、顾问」之象显。
- 丁酉运(2030–2039):丁印(忌)+酉金伤官(喜),同丙申,食伤生财而印为病。
- 应期纪律:下文关键流年已按 R-运-27~R-运-34 五步核对(重查本格取运基线、五组引动清单 A透清/B会局/C刑冲/D空亡/E伏吟、91_事类映射、96_六亲),编号收在内部。
### 5. 对照盘差异对结论的影响
- 对照盘时柱 癸亥:时干癸=正财透(正妻星透)、时支亥=壬水财之禄地,**财星更旺更清、得禄有力**;且时支亥为甲木(男命子星)之长生,子息宫得子星长生。
- 主盘时柱 壬戌:时支戌为子星甲木之「养」位、又是比劫印库,财坐燥土稍受制。
- 两盘于「财之旺度、子息宫之优劣」上有程度差:**对照盘更利财、子息更旺**;主盘则财受制、比劫夺财之象更显。按纪律,答案行一律以主盘为准。
## 三、逐题推理(主盘;对照盘差异另注)
### 第 1 题(问结婚年份:A 2012 / B 2013 / C 2015 / D 2016)
- 考点:男命婚期应期——以妻星(正偏财)与妻宫(日支戌)之引动落点定年。
- 推理:乙未运(2010–2019)官星当运、为婚育窗口。五组引动逐组核该运内流年——
- 2012 壬辰:透清/伏吟(E,壬伏吟命干、辰伏吟月支)+刑冲(C,辰冲日支戌、时支戌,激活命局本有之辰戌冲)=2组;妻星壬财透、妻宫被冲而大动。方向:妻星为喜用(身旺喜财),逢冲而「动而成」(R-事-13)。
- 2013 癸巳:透清(A,流年干癸透出命中辰所藏之正财癸)+空亡填实(D,巳为日柱空亡之支)+刑冲(C,巳刑年支寅)=3组,且**戊癸相合**(日主合正财)——为「日主合财、正财透清」之典型婚娶应期,引动组数最多。
- 2015 乙未:仅未刑日支戌(C,1组),无财星引动,偏弱。
- 2016 丙申:会局(B,申与命辰半合水局)+刑冲(C,申冲年支寅)=2组。
- 排序:2013(组数最多 3 组+日主合正财)→ 2012(2 组、妻宫冲)→ 2016(2 组)→ 2015(1 组)。
- 结论:**取 2013**(主答案),备选 2012。**低置信**(2012/2013 两可,仅一线之差)。
### 第 2 题(问两个男孩出生年份:A 2013与2015 / B 2014与2016 / C 2016与2019 / D 2017与2022)
- 考点:男命子息应期——子星=官杀(木),子息宫=时柱(时支戌)。
- 推理:以子星(甲/乙木)透干之年、兼子息宫(时支戌)刑冲之年为得子高峰——
- 2014 甲午:甲七杀透干(子星透清,最强得子象)。
- 2015 乙未:乙正官透干(子星透)+未刑时支戌(子息宫动)。
- 2019 己亥:亥为甲木长生、寅亥合木(子星合动)——但该年逢劫煞、绞煞、天罗(凶星并见),得子象打折扣。
- 2022 壬寅:寅为甲木临官(禄),子星到禄——然已在晚段。
- 结合第 1 题婚期 2013,长子最合于婚后次年的**甲杀透干之年(2014)**,次子落 2016(申与命辰半合财局、时柱同气有引动)。
- 结论:**取 B(2014与2016)**,备选 A(2013与2015,若婚期提前一年)。**低置信**。
### 第 3 题(问目前财运:A 逾千万马币 / B 收入平平固定薪金4千 / C 财运顺畅每月增长 / D 欠债逾1千万)
- 考点:财格身旺之财之聚散与当前大运吉凶。
- 推理:身旺财透本有求财之能;然——① 财露(壬两位透)而**天干无官护卫**,比劫(四土)争财,财被分夺;② 辰戌两冲,燥土制水,财根受损;③ 十恶大败(戊戌日柱)主破财、财大进大出、不宜守成;④ 无食伤透干通关(辛金仅藏且受火土制),土直接克水。合之,「能求财而不易聚财」。
- 但就**当前(2023,丙申运)**言:申金食神得地,与命辰半合水局,泄土生财,中晚年财源转顺,非绝地。故断为「有进项、渐有增长,而非巨富、亦非倾覆」。
- 排除:A(千万身家)——财被劫、十恶大败、伤食不通关,难至巨富;D(欠债千万)——命带天德月德(R-煞-05,险中得解),且财有辰库之根,不至倾覆。
- 结论:**取 C(财运顺畅,每月收入都有增长)**,备选 B。中等置信。
### 第 4 题(问婚姻情状:A 已离婚 / B 已婚但有婚外情 / C 婚姻美满 / D 未婚但有两孩子)
- 考点:男命妻星妻宫之成败——依 96_六亲.md R-亲-10~R-亲-13、R-亲-24。
- 推理:① **R-亲-12**「妻透成格,或妻宫有用而坐下刑冲,未免得美妻而难偕老」——本命妻星(壬财)透而成局(月劫用财),而妻宫日支戌**坐下辰戌两冲**,正合此条→主得妻而**难偕老**;② **R-亲-24①**「财神轻而无官、比劫多,主克妻」——本命比劫众、官不透,正合;③ 命带童子煞(日时),主婚缘迟滞、婚配不顺。
- 三条同向,皆指婚姻不长久、多刑克,而非「美满」。
- 排除:C(婚姻美满)——与妻宫双冲、妻透被劫相悖;D(未婚但有两孩子)——与第 1 题已有结婚年份相悖。
- 结论:**取 A(已离婚)**,备选 B(已婚但有婚外情,若偏财两透取「外室显」之象)。**低置信**(A/B 两可)。
### 第 5 题(问目前职业:A 小吃店老板 / B 寿板店职员 / C 偏门老板 / D 命理风水顾问)
- 考点:格局十神+神煞事类合成职业取象。
- 推理:① 日柱戊戌为**魁罡**,主性严有操持、聪敏果断;② 日、时两戌为**华盖**(年支寅、日支戌查戌),主孤高、艺文、宗教玄学之缘;③ 日、时之戌又为**太极贵人**(戊日见辰戌丑未),主好寻根究底、与玄学哲思有缘——华盖、太极贵人密集于日时两宫,术数、玄学、宗教、顾问之象显;④ 年干**丙偏印**透(通根寅),偏印(枭)为术数、偏门学问之星,且 2020–2039 行丙申、丁酉**印运**(文书、学术、玄学、顾问之运)当值;⑤ 偏财两透,主自雇、偏业、非固定薪之财(与「顾问」受润笔之象合)。
- 排除:A(小吃店老板)——食伤主饮食,本命伤官仅藏不透,饮食店之象薄;B(寿板店职员)——华盖、天罗虽近阴丧之象,然本人为「职员」(受薪)与偏财自雇、魁罡操持之性不合,且无劫煞(主盘);C(偏门老板)——天罗地网主蹇滞、官司,主盘无劫煞,偏门之凶象不全。
- 结论:**取 D(命理风水顾问)**,备选 C。中等偏低置信。
## 四、存疑与边界
- 主盘与对照盘仅时柱不同(壬戌 vs 癸亥),财之旺度、子息宫优劣有差;本题各答案行以主盘为准,凡两盘可能分歧者已在正文注明,未在答案行标「口径分歧」,因两盘于各题之倾向未翻转(对照盘财更旺只加重「财不弱」之判断,不改变选项方向)。
- 第 1、2、4 题属推测性时序推断(本场景无用户可核对,按「不可核对者直推」路径给最佳推断),置信度偏低,已标 `# 低置信`。
- 未发现题面 JSON 残留 answer 字段,无泄露。
- 未触碰任何禁区文件,未联网。
## 五、答案
Q1: B # 低置信
Q2: B # 低置信
Q3: C
Q4: A # 低置信
Q5: D
@@ -0,0 +1,99 @@
# 命主信息
- person_id:chaozhou_male_19720108_P002
- 姓名/描述:1972年潮汕出生男性
- 性别:男
- 出生钟表时间:1972-01-08 11:00(题面 raw 记作「午时」)
- 出生地:广东潮汕,中国
- 真太阳时(主盘):1972-01-08 10:40(经度修正 −13.28 分、均时差 −5.77 分,合计 −19.05 分)
- 是否排对照盘:**未按双盘条件触发**(主盘真太阳时 10:40 距午时边界 11:00 为 20 分钟,≥15 分钟;且出生地为境内,非境外/模糊地名,故不触发 120°E 对照盘)。
- 但题面 raw 明写「午时」与真太阳时落「巳时」冲突,为稳妥另做了一次 120°E 校验盘(`--place 中国大陆`,杭州代理 120.16E):其真太阳时 10:54,四柱仍为 **辛亥 辛丑 戊戌 丁巳**,与主盘完全相同。**两盘无口径分歧**,答案一律按真太阳时主盘(巳时·丁巳)给出。
- 当前年(元数据 current_year):2024。
# 命盘要点(主盘)
- 四柱:年 辛亥(伤官)/月 辛丑(伤官)/日 戊戌(日主)/时 丁巳(正印)
- 藏干:亥=壬(偏财)甲(七杀);丑=己(劫财)癸(正财)辛(伤官);戌=戊(比肩)辛(伤官)丁(正印);巳=丙(偏印)庚(食神)戊(比肩)
- 空亡:日柱空亡辰巳(时支巳落空);时柱空亡子丑(月支丑落空)
- 神煞:魁罡(日柱戊戌直查)、十恶大败(日柱)、华盖(日支戌)、寡宿(日支戌,年支亥查)、天乙贵人+太极贵人(月支丑)、太极贵人(日支戌)、劫煞(年支亥)、禄神+驿马+亡神(时支巳)
- 节令:丑月(小寒后、立春前),月令丑;胎元壬辰,命宫己亥
- 大运(逆行,起运 0.62 岁):庚子(0.62) → 己亥(10.62) → 戊戌(20.62) → 丁酉(30.62) → 丙申(40.62) → 乙未(50.62) → 甲午(60.62) → 癸巳(70.62)
# 取格
月令丑为杂气(己劫/癸财/辛伤)。丑之本气己土为劫财,不透;丑中辛金伤官却由年干、月干**双透**。依总纲「本气不透而透他干→以透者取用、格随透干变」及杂气「透干取其清者用之」:**定格为伤官格**(月令透出伤官,格随透辛而变)。
- 本气劫财不立为用,伤官透干自立为用,故不以建禄月劫或杂格论;月令自有用神,外格闸门不开。
- 加分项:丑中辛(伤官)与癸(正财)**同根月令**,成「财伤有情」之秀气(与《子平真诠》丙日丑月己庚同根一例同理)。
# 成败、用神相神、高低
- **成格**:伤官为凶神宜逆用。此局印星(丁火)透于时干、通根时支巳(禄)与日支戌,根深有力,属**伤官佩印**;同时财(水)藏于亥、丑而流通,兼「财伤有情」。两路皆能成格,格成立。
- **带忌**:伤官重出(辛·辛·丑辛·戌辛四重)又混食(巳中庚),秀气不清,属「伤官浊」;财星深伏不透,妻星不显。
- **用神相神**:以月令**辛金伤官为用神**;**丁火正印为相神**——制伤之骄、且为冬土调候暖局之要。
- **格局高低**:丑月严寒,戊土须丙火解冻(《穷通宝鉴》戊土丑月「丙为尊、甲佐」)。局中有丁透、巳戌藏丙丁,火已得地,**金水多寒而得火融和**,格局成色为高(参《子平真诠》伤官章「金水多寒得火融和」、都统制戊日土金伤官之例)。惜身不弱(丑戌巳丑土根重),佩印本宜伤旺身稍弱,此则**成格而降等**,故为「贵而降等、中上」之造,非大富贵。
- **喜忌**(行运基线):以印(火)为相神、调候急需,**喜火**(印、调候),**喜木**(官煞生火、疏土,佩印格官煞为宜);**忌水**(财增寒且坏印相),**忌土**(比劫助湿夺财);金(食伤)为格用,泄秀不碍但冬寒减色。
# 行运
- 庚子(虚1–10,1973–82)金水寒、财旺:忌。己亥(虚11–20,1983–92)亥水财、冲时支巳(印根):忌,且为**母星(印)受斩丧之运**。戊戌(虚21–30,1993–2002)土湿比劫,平中偏忌(大运伏吟日柱,妻宫/自身被引动)。
- **丁酉(虚31–40,2003–12)、丙申(虚41–50,2013–22):火印当运,为命中最喜之二十年**,事业、名望、住所之机皆在此。乙未(虚51–60,2023–32)、甲午(虚61–70,2033–42)木遇火,官煞运宜,晚运亦佳。
- 一生格局是「早年金水寒滞、中年火印发越、晚运木火延美」的走向:**发越之机在虚龄三十以后**。
---
# 逐题推理
> 说明:题面 question_id 为 Q6–Q10,本命主题数为 5,下文以「第1题…第5题」对应 Q6–Q10,末尾答案行按契约用 Q1–Q5。
## 第1题(=Q6)性情与情绪
- 考点:伤官格之性情清浊。
- 推理:伤官为月令格用,主聪敏、才艺、外露、直率;本局伤官**重出四重又混食神**,依「伤官格清浊」之断,**重出混杂者为浊**——「浊则傲而多骄,刚而无礼,以强欺弱,奉势趋利」。再叠**日柱魁罡(戊戌)**:魁罡主性严、刚直、有操持、临事有威,其人豪爽(慷慨)、爱憎直白(表里如一)、带有刚烈好斗之气(暴力倾向之一面)。戊土厚重亦主慷慨笃实。
- 排除:印透虽主涵养,但伤官重浊之刚烈为此盘主导(儒雅/书画一路被浊伤所压);伤官旺而外露、非寡默(排除孤僻寡默);华盖虽主孤,但伤官之表现欲使其非纯然独乐。
- 结论:B(慷慨、表里如一、有暴力倾向)。
## 第2题(=Q7)男女关系与婚姻
- 考点:妻宫、妻星并参。
- 推理:妻星为正财(癸,藏丑)兼偏财(壬,藏亥),**财星深伏不透、无透干成局**,主婚缘不显、成婚需待激动之年;妻宫(日支戌)所坐为比肩戊、伤官辛、正印丁,**不坐财官**,依「妻宫坐财官方贤贵」之常法不成立,妻宫本不美。又局中比劫重(戊·戊·己)而财轻,**劫重财轻主克妻/妻不利**;财星(水)既坏印相(水克丁火)、又生煞(亥壬生亥甲),属**财浊**——财浊主妻「悍妒、情绪化」,河东狮吼,夫妻欠和。行运上,戊戌运(虚21–30)伏吟日柱、妻宫被引动,恰在婚龄段;随后的丁酉运酉与日支戌相害,妻宫再受扰,感情进一步受损。
- 排除:财星有根(非无财),不成「一生未娶」;妻宫不美、财浊不良,「关系良好未见有异」不符;「妻即离世」需财被连根去尽之象,此局财藏有根、未见去尽之激,故不取早逝一路。
- 结论:C(虚龄24至33期间娶妻,因妻子情绪化影响了感情)。
## 第3题(=Q8)事业特色
- 考点:格局取象定事业。
- 推理:伤官格为秀气之格,成格所赖在**印(丁火,透干根深)**——伤官佩印,佩印者贵,主文书、证书、单位平台、名声(印之现实对应),故事业走**印路(公职/文教/单位)**而非纯商。日柱**魁罡**主刑、主威、主掌权之辈;**十恶大败**主做事易有大挫、不宜守成;伤官旺而官煞(亥甲七杀)被金克被巳冲,属**伤官见官**之象——合为「有官方平台之职,却因刑案/官非而受损、提早退」的一路。行运虚31–50走火印喜运,正应「曾在体制内得平台」。
- 排除:财不透、伤官生财之路不完整,纯「成功商人以零售起家」取象不足(财藏且劫重夺财,不主大商厚利);畜牧场(承兄)、建筑工人二项与魁罡、伤官佩印、官非结构皆不相应。
- 结论:B(曾任公务员,因涉嫌刑事案件而要提早退休)。
- 置信度:中低(伤官格本有「秀士/商」两歧,此处以印透成相、魁罡带刑、官非结构取 B)。
## 第4题(=Q9)母亲离世之年
- 考点:母星(正印)与母宫(月柱)之受损伤。
- 推理:戊土以**正印丁(时干)为母**,印之根在时支巳(丙丁禄地)与日支戌(丁)。母星之危,在于**印气被斩丧**:大运**己亥(虚11–20,1983–92)**,亥水(财)既克印(水火),又**冲时支巳**(印之根),母亲之根受冲受克,此运即母之大凶运。应期取流年**1989 己巳**:流年巳**填实日柱空亡之巳**(原时支巳为空亡,虚象落实),又被大运亥相冲,印根「填实而复受冲」,母事应之。1990 庚午为火年、印反旺,不作克母年。
- 排除:2011 辛卯、2021 辛丑俱落在丁酉、丙申**火印当运(母星得地、为喜运)**,母星逢生扶,非当龄离世之象(2021 虽逢月柱辛丑伏吟、丑中癸暗克丁,然大运火印当权、母得安,不作首选);1989 较 1990 为印根受冲受克之应年。
- 结论:A(1989)。
## 第5题(=Q10)虚龄34至43之田宅运
- 考点:田宅(印星=住所、财星=不动产)于该限之行运喜忌。
- 推理:虚龄34–43(约2005–2014)行**丁酉(虚31–40)、丙申(虚41–50)**两步,皆**火印当运**。印之现实对应为住所、房产、单位平台;火印为命中最喜之运(调候暖局、印星得地),故田宅之机在此限而**向上**:得房产、得厚利之象成立。此限又交入丙申运,申与时支巳相合,房产文书之引动频繁,交易得利。财(水)虽为忌,然火印生扶日主、身强能任,逢财产之事多能顺遂取利。
- 排除:「获分配公屋」偏向被动受配(且公屋为境外语境,命主为境内潮汕人,2005–2014 已过福利分房期),不取;「订金被没收」「卖屋还债」二项为田宅受克破之忌象,与丁酉、丙申两步火印喜运相左,不取。
- 结论:A(通过买卖房产而得厚利)。
- 置信度:低(田宅取象财印两可,此处以火印喜运、身强任财取「得利」一路)。
---
## 存疑与边界声明
- 时柱口径:题面 raw 记「午时」,真太阳时实落巳时(丁巳);已加排 120°E 校验盘,四柱一致,无口径分歧。
- 第2题(婚姻)与第5题(田宅)为本次最不确定者:婚姻宫所坐非财官、财星深伏、比劫重,「妻情绪化」「晚婚」「妻早逝」诸路各有书证支撑(财浊主悍妒 vs 劫重财轻主克妻),本代理按「财浊·妻情绪化 + 反吟妻宫在婚龄段」取 C,置信度低。
- 第3题「公务员因刑案退休」与「成功商人」两歧:本局财不透,纯伤官生财不完整,故以印透成相、魁罡带刑、伤官见官取 B,置信度中低;若判者以「伤官重而财神流通主富」为断,则倾向 D,此处按前者。
- 第4题母亡年(1989 vs 1990)依「印根巳被亥冲、巳空亡填实」取 1989,置信度低。
Q1: B
Q2: C
Q3: B
Q4: A
Q5: A
@@ -0,0 +1,143 @@
# BaziQA contest8_2024 · female_19800921_P007
## 命主信息
- person_id:female_19800921_P007
- 性别:女
- 出生钟表时间:1980-09-21 11:25(当地钟表时间)
- 出生地:马来西亚(脚本解析 Asia/Kuala_Lumpur,UTC+8,无夏令时)
- 真太阳时(主盘):1980-09-21 10:48(巳时)
- 排盘命令:`ZIPEC_EVAL=1 python scripts/cast_chart.py --name female_19800921_P007 --gender 女 --birth "1980-09-21 11:25" --place "马来西亚"`(退出码 0,无 stderr)
## 是否排对照盘及触发原因
**已排对照盘**,两个触发条件同时成立:
1. place = 马来西亚,属境外/模糊地名(任务书点名);
2. 主盘真太阳时 10:48 距时辰边界 11:00(巳/午交界)仅 **12 分钟 < 15 分钟**。
对照盘口径:120°E 不经度修正,`--place "中国大陆"`(副本解析为杭州代理 120.16E),真太阳时 11:32(午时)。
| | 年 | 月 | 日 | 时 |
|---|---|---|---|---|
| **主盘(真太阳时 10:48)** | 庚申 | 乙酉 | 丁酉 | **乙巳** |
| **对照盘(120°E 11:32)** | 庚申 | 乙酉 | 丁酉 | **丙午** |
两盘只差时柱:主盘乙巳(偏印+劫财),对照盘丙午(劫财+比肩/禄)。下文以主盘为准,对照盘结论另列,分歧处标注。
## 命盘要点
- 日主 丁火生酉月(白露后、寒露前),月令酉。
- 年 庚申(正财坐申:庚正财、壬正官、戊伤官)
- 月 乙酉(偏印坐酉:辛偏财)
- 日 丁酉(日主坐酉:辛偏财)
- 时 乙巳(偏印坐巳:丙劫财、庚正财、戊伤官)——子息宫
- 空亡:日柱空亡 **辰巳**(时支巳逢空);时柱空亡 寅卯
- 神煞(命带):月德/月德合、天乙贵人(酉酉)、太极贵人、文昌(酉酉)、将星(酉酉)、桃花(酉)、金舆(申)、十灵日、亡神、劫煞/勾煞(巳);对照盘多禄神(午)与童子煞
- 大运逆行:甲申(4.54 岁,1985)→ 癸未(1995)→ 壬午(2005)→ **辛巳(2015)** → 庚辰(2025)
## 一、取格(按 00_总纲_取格.md §1 六步)
1. 月令酉。2. 日干丁对月令本气辛 = **偏财** → **财格**(正偏财同格,R-财-01)。3. 酉为子午卯酉专气(仅藏辛),无本气不透之藏干变化。4. 会支:主盘巳酉半合金(财愈旺)、巳申六合,格不变;对照盘时支午与酉无会。5. 定格 = **财格**。6. 财格月令自有用神,不通外格闸门。
## 二、成败 / 用神相神 / 高低
- **财旺身弱**:财星根极深(庚透年干,申酉酉三见辛庚,巳中庚),秋金当令;丁火失令,仅赖时支巳(日主帝旺之根)与乙乙两偏印帮身。
- **格**:财格佩印(R-财-07)——透印帮身,本可取贵;然年庚与月乙**相邻相并**(乙庚既合又克),正合 R-财-21「财印相并,两不相能」→ **降格,小富而已,不能取贵**。印又虚浮(乙绝于酉,无根),财坏印。
- **用神**:印(乙)与比劫(巳中丙/午丁)帮身为用;**忌** 财(庚申酉)、官(壬)、食伤(戊己)助财泄身。
- **相神**:帮身之印比为相;相被财并(庚合乙)而减力,故只到小富。
- **高低**:有情(佩印)而非情之至,有力而非力之全。气候(R-候-07 丁火八月):调候宜甲引丁,命中**无甲用乙** → 「富贵皆小,富而不贵者多」,与 R-财-21 小富之说互证。
## 三、行运(90_行运.md §7 先运后年)
- 甲申(1985–1995,4.5–14.5 岁):甲正印透帮身(喜),申财(忌);少年学业有印护。
- 癸未(1995–2005):癸七煞透(忌),未藏丁乙(暗帮)。
- 壬午(2005–2015):壬正官透(女命夫星透清,R-女-24 → 婚缘之成),午为丁禄帮身(喜)——**婚姻应在此运**。
- **辛巳(2015–2025)**:辛偏财透(忌)、巳劫财帮身(喜);**运支巳 = 本命时支伏吟(子女宫)**,子女之事集中此运。
- 庚辰(2025–2035):庚财透、辰伤官(湿土泄火生财),均助财,不美。
## 四、逐题推理
### 第 1 题(题面 Q31)学历状况
考点:印星(学业)之透藏根气与财印关系。丁火以印为学业,命透乙乙两偏印,然**乙绝于酉、无根**,且被年干庚财相邻相并(财坏印,R-财-21)——学业之具受损;但印毕竟两透,命又带**文昌(丁日见酉,酉酉两见)+ 天乙贵人**,且甲申运(5–15 岁)正印透帮身,基础教育可完成。调候见「用乙非甲」主富贵皆小。综合落**中常学历**。
- 排除 A/B(小学、初中辍学):印两透兼文昌、少年有印运,不至辍学。
- 排除 D(博士):财印相并、印无根而财坏印,R-财-21 明言只到小富,不取高学历。
**最倾向 C(专科毕业)。**
### 第 2 题(题面 Q32)婚姻状况
考点:女命夫星(官煞)+ 夫宫(日支)+ 子星(食伤)。
女以官为夫(R-女-04):夫星 = 壬,**藏于年支申**(申为壬之长生),不透而**得财生**(财旺生官,财有源)——夫星虽暗藏而有气,非无夫之象。夫宫 = 日支酉(偏财),命带天乙贵人、将星、文昌,夫宫有贵气。
子星 = 食伤(R-女-20):命局食伤仅 **戊土(申中、巳中各一)**,两见且**皆阳土(伤官)**;依 R-亲-16「子星之男女,总以阳干为男、阴干为女」,两子星皆阳 → **男孩**;命局**无己(阴食神)**,故无女。
- 排除 A(未婚育二女):夫星有根有气、财生官,非无夫;且子星全阳与「二女」不合。
- 排除 C(离婚一子一女)、D(已婚一子一女):命无阴土子星,与「有女」不合(离婚亦无强信号,财生官护夫)。
**最倾向 B(已婚,育有二子)。**
> 口径分歧:对照盘时支午,午中己为食神(阴土)→ 子星一男(申戊)一女(午己),对照盘倾向 D。**按任务书以真太阳时主盘为准,取 B。**
### 第 3 题(题面 Q33)2017 和 2019 年发生了什么事
考点:流年引动子女宫之子息应事。
辛巳运(2015–2025)运支巳与本命**时支(子女宫)伏吟**,此运子女之事为主轴。子女宫巳藏子星戊(伤官),且**巳为日柱空亡(辰巳)**。
- 2017 丁酉:流年支**酉合巳(合空)**,引动子女宫;丁比肩帮身(喜);酉又逢文昌、天乙、桃花、将星。
- 2019 己亥:流年支**亥冲巳(冲空)**,引动子女宫;流年干**己食神透(子星透清)**;亥为正官(夫星现)。
R-煞-13:空亡之支逢合、逢冲为「牵绊而显/冲空则起」,**虚象落实**;R-事-13:子女宫受冲引动,子星得地者多应得子。两度引动子女宫(2017 合、2019 冲),且 2019 子星透、夫星现,正应**生育**之事。
- 排除 B(交通意外):2017 命不带驿马、无车祸凶煞引动。
- 排除 C(考取文凭失利):与子女宫双重引动的结构不合,且非两年均现。
- 排除 D(流产):子星戊于子女宫得地(巳为戊之临官)、空亡逢冲合为「落实」非「破」,取生不取流。
**最倾向 A(开刀生小孩)。** 标低置信(生育与流产两向皆有取象路径,主取「空亡落实得子」一路)。
### 第 4 题(题面 Q34)两名小孩在哪一年出生
承上:子女宫巳于 **2017(酉合)**、**2019(亥冲)** 两度被引动,正合二孩生于此二年之象;子星两见皆戊土(阳)→ 男孩。
- 排除 A(2020 女 2021 男):2020 子、2021 丑虽亦有引动,但子女宫已应于 2017/2019,且性别不合。
- 排除 B(2013、2015 两女):在壬午运(子女宫伏吟不在本运),且性别不合。
- 排除 D(2013 男 2015 女):时点与性别皆不合。
**最倾向 C(2017 年、2019 年两个男孩)。**(与第 3 题同机制,随第 3 题一并标低置信;对照盘子星含阴土,此题目照盘倾向 A/D,按主盘取 C。)
### 第 5 题(题面 Q35)毕业后从事什么行业
考点:财格之职业取象 + 身弱宜稳定专业职。
财格(月令偏财酉)而**身弱用印比**——不宜担经营之重,宜以**印(文书、证书、专业)处理财**之职。命带**文昌两见(酉酉)**(文墨、数字、文书),财星为职业对象,印为专业资格。
- 排除 A(中学教师):教育为印格/文昌独立之象,本命主体是财格;且中学教师需较高学历,与第 1 题「专科」不合。
- 排除 B(公司主管):需官星(官藏不透)与强势之身(此身弱)。
- 排除 C(房屋经纪):需驿马走动(命不带驿马)兼身强任偏财经营(此身弱)。
**最倾向 D(会计)。**(财务领域 + 文书/专业证书为用,身弱宜稳定本职。)标低置信。
## 五、对照盘分列(120°E,午时)
对照盘 = 庚申 乙酉 丁酉 **丙午**。
- 取格、成败、用神相神、行运与原盘同(格局由月令与年日支定,不由时柱变);差异只在时柱:
- 时干由乙(偏印)变**丙(劫财)**,帮身之力更显(身弱得劫,反胜);
- 时支由巳变**午**:午为**禄神(丁禄在午)**,且不落空亡(空亡辰巳,午不空);子女宫不再空亡,子星由**戊(阳土伤官,男)**变为午中**己(阴土食神,女)**。
- 故子息相关题口径分歧:第 2 题对照盘倾向 D(一子一女),第 4 题对照盘倾向 A/D(含女)。**按任务书以真太阳时主盘为准**,取 B、C。
- 学历(第 1 题)、行业(第 5 题)两盘同向(第 1 题对照盘印只一透、更逊,仍取 C;第 5 题取 D)。
## 六、存疑与边界
- 时柱跨时辰边界(真太阳时 10:48,距 11:00 仅 12 分钟),已按任务书排对照盘并声明口径分歧。
- 生育/流产两向皆有取象路径(R-事-11/13),第 3、4 题为此存疑处,已标低置信。
- 第 1、5 题为中等置信,已标低置信。
- 未使用神煞、纳音、空亡入格局四层(遵 95_禁则 R-禁-01);神煞空亡只作流年细节参看。
---
Q1: C # 低置信
Q2: B # 口径分歧: 对照盘=D
Q3: A # 低置信
Q4: C
Q5: D # 低置信
@@ -0,0 +1,102 @@
# contest8_2024 · female_19830326_P006
## 一、命主信息
- person_id:female_19830326_P006(1983 年出生女性)
- 性别:女(大运顺行)
- 出生钟表时间:1983-03-26 13:00(题面自记「未时」)
- 出生地:北京,中国
- 真太阳时(主盘):1983-03-26 12:39
- 对照盘:**已排**。触发原因——题面 place 字符串含「中国」(任务书列为模糊地名口径清单之一),为稳妥按 120°E 口径另排一盘。对照盘(--place「中国大陆」,真太阳时 12:54)四柱与主盘**完全一致**,故本次**无口径分歧**,答案行不作分歧标注。
- 时辰说明:钟表 13:00 按真太阳时(经度修正 −14.36 分 + 均时差 −6.38 分 = 合计 −20.74 分)折为 12:39,落在**午时**(11:00–13:00),非题面所记的「未时」。两盘皆定午时,时柱为戊午。距 13:00 边界 21 分钟(>15 分),未触发时辰边界对照条件。
- 晚子时:否。节气边界:生于惊蛰(03-06)后 20 日、清明(04-05)前 10 日,远离交节,无月令敏感之虞。
## 二、命盘要点
四柱:**癸亥 · 乙卯 · 癸丑 · 戊午**(两盘同)
- 日主癸水,坐丑(冠带);得年支亥(帝旺)为强根,丑中癸为余气根。**有根,非无担**(R-旺-04)。
- 月令卯(乙木本气)当令透干,年支亥与月支卯半合木局 → 食神(乙木)最旺。
- 十神分布:年柱癸亥(比肩、劫财壬、伤官甲);月柱乙卯(食神);日柱癸丑(日主,丑藏七杀己、比肩癸、偏印辛);时柱戊午(正官,午藏偏财丁、七杀己)。
- 官煞并见:**正官戊透时干**(且与日主癸相合,戊癸合);**七杀己藏日支丑、时支午**。夫星混杂。
- 神煞(细节参看层):年亥=驿马;月卯=天乙贵人+文昌+福星+将星+灾煞;日丑=华盖+福星;时午=**桃花**+元辰。
- 空亡:日柱空寅卯(月令卯落空)、时柱空子丑(日支丑落空)。
## 三、取格(依 00_总纲六步)
1. 月令卯。2. 日干癸对卯本气乙 → 食神(水所生、同阴阳)。3. 卯为专气(子午卯酉),本气乙透月干,无余气可透。4. 支会:亥卯半合木,食神之气愈聚。5. 定格完成:**食神格**(R-食-01)。6. 外格闸门:月令自有用神(食神),不转杂格。
**成败(分格文件):**
- 月令食神顺用,本应喜身旺、喜食神生财(R-食-02)。但**时干透正官戊**,命非金水食神(日主为水、食神为木,非金日水月之势)→ 触「**食神忌官**」(R-食-10),用神食神与官相碍,格带忌。
- 且官(戊)透、煞(己)藏丑午并见 → **官煞竞出**(R-食-07):「亦可成局,但不甚贵」。
- 财星丁藏午、不透天干,不构成「食神生财,财透有根」之大贵成格(R-食-02 未满足)。
- 救应:戊癸合(日主自合官星,R-女-10「夫妻相亲,其情愈密」)——官星就我,略缓食神克官之势;然己煞混杂于夫宫、桃花,官煞终不清(R-女-06),格局因之降等。
**用神相神:** 用神=月令食神(乙木);相神=午中丁财(食神生财,然财藏力薄,相神根浅)。
**格局高低:** 食神得令而旺、日主有亥丑之根,似乎「身强食旺」;但财不透、官煞混杂不清、印(辛)藏而弱、调候(二月癸水专用庚辛生身,命中庚无、辛藏)欠缺(R-候-13)→ **有情不足、相神力薄**,格局**中下**(R-纲-13)。食神旺而官不清,主人聪敏有才、能言善文(天乙、文昌坐月令),亦主婚姻多波折(食神泄身、制官)。
## 四、女命叠加(依 97_女命,不回改格局)
- 夫星=官煞:戊正官透而合我,己七杀藏丑(**夫宫**)、午(**桃花**)。**官煞混杂**→ 夫缘不一、多段姻缘(R-女-05、R-女-06)。
- 夫宫=日支丑:坐己七杀(煞)+辛偏印+癸比肩——夫宫坐煞、带印带比。丑午相害(夫宫与桃花相害)。
- 子星=食伤(乙卯旺);子息宫=时柱戊午,时干正官于食神格为破局之神。
- 桃花=时支午,藏丁财己杀——**桃花带财带煞**:对象多有资源或带强势。
- 华盖=日支丑(贴身)——**本人有宗教/玄学/修行之缘(孤高向学、亲近佛道)**。驿马=年支亥(主迁动、远行)。
## 五、行运基线
大运顺行(起运 3 岁 4 个月 20 天):
- 丙辰(1986–1996):正财。辰藏戊官、乙食、癸比。
- 丁巳(1996–2006):偏财+巳(丙财、戊官、庚印)——**财官印并见之运**,主感情萌动、对象多为财官型。
- 戊午(2006–2016):正官+午(丁财、己杀)=**官+桃花财杀**——婚姻成立之运,亦官煞混杂、桃花旺。
- 己未(2016–2026):七杀+未;命亥+命卯+运未**三合木局全**——食伤大旺,七杀透。
- 庚申(2026–2036):庚正印(生身,然偏印夺食之嫌)、申藏壬劫戊官。
喜忌(扶抑参看):日主泄于食神、克于官煞,宜帮身——比劫(水)为直、印(金)次之而防夺食;财(火)承食神所生可顺;官煞混杂(土)为忌。故丁巳、戊午(财官)为「引动婚姻」之运而非纯粹吉运;己未(七杀混杂+食伤旺)为婚姻动荡之运。
## 六、逐题推理
### 第 1 题(1998 开始–1999 结束;运丁巳;虚龄 15–16)
- **引动**:1998 戊寅——流年干戊=**正官(夫星)透**,与日主癸合;支寅与年亥六合(木)、与时午半合火局(**财局旺**)、与月卯半会木东方;寅又填实日柱空亡(寅卯空);逢劫煞(以日支丑查)、亡神、金舆、孤辰、阴差阳错。1999 己卯——流年干己=**七杀透清**(丑午所藏己土透出,属 R-运-22 透清);支卯伏吟月令(文昌、天乙、将星),亥卯半合木,卯再填空亡。
- **推理链**:官星透而逢财局(寅午半合火)→ 对象体面、有财力之象(「高富帅」取材官兼美);官星戊被月干乙食神横克、又日主自合官,情密而气不畅;1999 卯空亡填实+1998 劫煞 → 情缘落空、对方抽身之象。综合取「冷酷、消失不见」。
- **选项**:A(高富帅、冷酷;分手:冷暴力、消失不见)。**低置信**。
### 第 2 题(1999 恋爱–2002 分手;运丁巳;虚龄 16–19)
- **引动**:1999 己卯——七杀透清坐卯(木克土,**杀被食神制而弱**)。2002 壬午——流年干壬=**劫财透**(争);支午=命之**桃花+元辰**,且**伏吟时柱之地支**(时柱戊午)。
- **推理链**:起年夫星为七杀己,坐卯木受克——杀弱不立势,取象为「瘦高(卯木主高瘦)、胆小怕事(杀受制而弱)」;终年 2002 为高考/高中毕业之龄(19 岁),命主升入大学、地分两处;又 2002 桃花伏吟时柱、劫财透——新缘已起,旧缘以两地而终。综合取「毕业后异地发展而分手」。
- **选项**:D(瘦高、胆小怕事;分手:毕业后异地发展)。**低置信**。
### 第 3 题(2002 认识–2006 结婚–2009 离婚;运丁巳→戊午;虚龄 20–27)
- **引动**:2002 壬午(桃花+元辰、时柱伏吟)认识;2006 丙戌(**正财丙透**,财生官——成婚之象;然逢寡宿、丑戌刑**刑夫宫**);2009 己丑(**七杀己透清于夫宫丑**、丑伏吟夫宫、逢华盖、十恶大败)。
- **推理链**:夫星正官戊为阳土,厚重高壮 → 「高大、大男人主义」;官煞混杂(戊官+己杀)本已不清,2009 己丑七杀从**夫宫丑中透清**、夫宫伏吟又逢丑戌之刑 → 婚后冲突升级、夫妻以**钱财起争**(财星午丁被劫、官杀耗之)乃至**家暴**(七杀之暴,杀攻日主之象)。综合取「高大、大男人主义;为钱吵架、家暴」。
- **选项**:C。**低置信**。
### 第 4 题(2012–2013 严重之事+桃花相助;运戊午;虚龄 30–31)
- **引动**:2012 壬辰——劫财壬透,辰逢魁罡、地网、阴差阳错,卯辰相害、丑辰相破。2013 癸巳——巳**逢驿马**(以年支亥查),且巳**冲命之年支亥=冲马**(R-煞-06:「流年支再冲马者,动象尤急」);逢天乙贵人、天德合、太极贵人、地网;巳与丑半合印、与午会火(财)。
- **推理链**:驿马已被冲动、动象尤急 → **远行/赴外地(出国)**之象最显;2012 逢地网(罗网、陷阱)+魁罡 → 误入歧途、被人诱骗;官杀(辰中戊官、己杀)主受制于人;2013 天乙贵人、天德合 → 得贵人解救(暧昧之人施援)。综合取「被骗去国外工作,暧昧同事救出」。
- **选项**:A。**低置信**(对照盘同)。
### 第 5 题(2019 开始–2021 结束;运己未;虚龄 37–39)
- **引动**:2019 己亥——大运己未+流年己,**七杀双重透**;亥伏吟年支(驿马)。2021 辛丑——**辛偏印透**(夺食),丑伏吟夫宫(华盖),情缘终结。
- **推理链**:七杀(偏夫之神)旺而重 → 对象为**非正式/有家室之男**(煞为偏夫,R-女-06);煞主欺瞒 → 「欺骗自己」;2021 辛偏印透而夺食、夫宫丑伏吟(名分不立)→ 终以「对方并未离婚」而散。
- **选项**:B(已婚男;欺骗自己、没离婚)。**低置信**。
## 七、存疑与边界
- 时辰口径:题面记「未时」,真太阳时归午时(时柱戊午)。本盘以真太阳时口径落时柱;若按钟表「未时」作己未时,全盘时柱改易,诸题取象须重推——此为本次最大之单点风险,记此备考。
- 全部五题皆为「对象类型+分手原因」之事类取象题,答案系对真实命主人生的对照,盘面只能给到「最倾向」;本次五题均标**低置信**,属推断而非硬断。
- 未以神煞、纳音、空亡进入取格/成败/用神/高低四层(守 R-禁-01);神煞仅作第五层细节参看。
## 八、答案
Q1: A
Q2: D
Q3: C
Q4: A
Q5: B

Some files were not shown because too many files have changed in this diff Show More