Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b32d61df6 | ||
|
|
474caca7d2 | ||
|
|
dfac783494 | ||
|
|
a2c0e560b1 | ||
|
|
63af951c27 |
@@ -1,5 +1,9 @@
|
||||
# 印度占星 Skill 更新日志
|
||||
|
||||
## 2026-11-14 — 生时纠正只提供包含参照时刻的收窄建议
|
||||
|
||||
- 问卷结果只在答题段包含填写时刻或范围中点时展示答题提示与匹配依据,该段更窄时可以选择收窄。沿用当前 Skill 版本(BUG-1886)。
|
||||
|
||||
## 2026-11-14 — 年运附录增加 KP 宫头和子主
|
||||
|
||||
- 按主题列出 Placidus 宫头及子主。记录出生时间误差范围内的变化,误差未知时标注参考取样。沿用当前 Skill 版本(BUG-1884)。
|
||||
|
||||
@@ -25463,3 +25463,15 @@
|
||||
- 验证与防复发:真实引擎和公开盘、同年多根与后继缺失、Satabdika 三种状态及旧快照回读。十个写作区段证据哈希和转折卡与 staging 对照。详见 [#269 进度](tasks/PROGRESS-annual-pravesha-20261114.md)。
|
||||
- 关联记录:#269、BUG-1857、BUG-1868、BUG-1869。
|
||||
- 修复版本:`codex/annual-pravesha-20261114`,待独立验收。
|
||||
|
||||
## BUG-1886 | 问卷建议改用不含参照时刻的区间
|
||||
|
||||
- 状态:fixed-pending-verify(待独立验收)。
|
||||
- 首次发现 / 最近更新:2026-11-14 / 2026-11-14。
|
||||
- 影响面:生时纠正问卷结果页。
|
||||
- 现象及触发:答题区间未包含填写时刻或范围中点时,结果仍突出该段、显示匹配事件并提供「改用」按钮。
|
||||
- 根因:FIX-4 把显式采纳作为保护措施,未按答题段是否包含参照时刻限制建议。同宽度回放中,不含填写时刻的问卷段仅命中 7 / 33。
|
||||
- 修复:范围带显示原范围与参照时刻。答题段包含参照时刻时展示答题提示、区间高亮和匹配依据。答题段同时更窄时提供收窄。
|
||||
- 验证及防复发:真实引擎夹具覆盖填写钟点和范围中点的两种关系。390 像素 Chromium 验证默认保存及收窄提交。见 [#260 进度](tasks/PROGRESS-rect-adaptive-20261114.md)。
|
||||
- 关联记录:#260、BUG-1881。
|
||||
- 修复版本:`codex/rect-adaptive-20261114`,待独立验收。
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# #260 退回 2:去掉「你的经历更像…」和「改用这段」(2026-11-14,Claude)
|
||||
|
||||
本文件补充 FIX-0 至 FIX-4。冲突时以本文件为准。Bug 编号 BUG-1886。
|
||||
|
||||
## 为什么改
|
||||
|
||||
`rect-adaptive-replay.md` 的回放里,问卷选出的段不包含填写时间的 33 例中,只有 7 例命中(21.2%)。这时让用户「改用」答题选出的段,大多数情况是把对的时间改错。产品负责人 11-14 同意去掉。
|
||||
|
||||
包含填写时间的 44 例中有 38 例命中,「收窄」保留。
|
||||
|
||||
## 改法(只改结果页,`frontend/src/components/chart-choice/chart-choice-page.tsx` 的 `FinalStep` 问卷分支)
|
||||
|
||||
1. **问卷选出的段包含参照时间**(参照时间 = 填的时间;没填时间时 = 范围中点):保持现状。
|
||||
- 提示「你的回答和填的时间对得上。」(没填时间时不要说「填的时间」,改成「你的回答落在范围中间这段。」);
|
||||
- 主按钮「用 05:00」,次按钮「收窄到 …」。
|
||||
2. **问卷选出的段不包含参照时间:**
|
||||
- 不显示「你的经历更像 … 这段」,也不换成别的说法,提示句整句不出;
|
||||
- 不显示次按钮,只剩主按钮「用 05:00」;
|
||||
- `SelectedBand` 不画答题选出的段,只画原范围和参照时间;
|
||||
- `matchedEvidence` 那句「…和这段时间的大运对得上」不显示(它说的是答题选出的那段)。
|
||||
3. 「改用」两个字在这个组件里不再出现。`onUseAnswerWindow` 只在包含参照时间、且段比原范围窄时传下去。
|
||||
4. 后端、保存来源、迁移、报告链路都不改。`user_choice_from_answers` 仍只由「收窄」写入。
|
||||
|
||||
## 文档
|
||||
|
||||
- `docs/BUG_HISTORY.md` 新增 BUG-1886(只在文件末尾追加这一节,不批量替换):现象、根因(回放 21% 命中)、修复、验证、防复发。不写出生资料或案例名。
|
||||
- `rect-adaptive-replay.md` 结论段补一句:「不包含填写时间时不再给改用建议(BUG-1886)」。
|
||||
- 更新 `PROGRESS-rect-adaptive-20261114.md`。
|
||||
|
||||
## 验收
|
||||
|
||||
- 测试(`frontend/tests/` 下新增或扩 `chart-choice-rounds-page-20261113.test.tsx`):
|
||||
- 段不包含参照时间:渲染里没有「更像」「改用」,没有次按钮,没有「大运对得上」;
|
||||
- 段包含参照时间且更窄:有「收窄到」,点击走 `onUseAnswerWindow`;
|
||||
- 没填时间的情况各一例。
|
||||
- 门禁:Python quick gate、前端相关测试、`tsc`、`npx eslint .` 0 errors。
|
||||
- 截图:390 宽度,包含 / 不包含两种结果页。
|
||||
@@ -0,0 +1,49 @@
|
||||
# #260 退回 3:按占星师 11-14 裁定收口文案和「收窄」(2026-11-14,Claude)
|
||||
|
||||
本文件补充 FIX-0 至 FIX-5。冲突时以本文件为准。仍记在 BUG-1886 下(同一问题:结果页把未验证的答题结果说得太确定),在该节补充,不新开编号。
|
||||
|
||||
## 依据
|
||||
|
||||
占星师 11-14 对回测的裁定(要点,原文由产品负责人保管,不入库):
|
||||
|
||||
- 原始出生记录不自动覆盖;用户的任何选择另存为「分析假设」,可撤销,不改出生时间、来源,也不置 minute_confirmed。
|
||||
- 问卷用于收集事实、展示候选差异。未校准的排序不能发布「已校正」「你的真实时间更可能是某一分钟」。
|
||||
- 停用「吻合率 → 准确率 / 高置信度」的转换。low / medium / high 只能作内部标签,不转换成用户看到的把握或概率;源里本来也没有「倾向」这一档。
|
||||
- 她给的文案:「现有信息不足以确认更准确的出生时间。……你可以选择一个用于比较,不代表真实时间已被证实。」
|
||||
|
||||
## 改法
|
||||
|
||||
1. **把握分级不再给用户看。**
|
||||
- 删掉 `CONFIDENCE_LABEL` 在首页(`HomeView`)和结果页的所有显示,「把握 高/中/低」「倾向」都不出现。
|
||||
- 后端 `evidence_summary.confidence` 保留,只作内部字段和回放统计。
|
||||
2. **结果页(问卷分支):**
|
||||
- 标题下第一句固定为「现有信息不足以确认更准确的出生时间。」,放在「范围 …」之后。
|
||||
- 删掉「你的回答和填的时间对得上。」「你的回答落在范围中间这段。」两句。
|
||||
- 删掉 `matchedEvidence` 那句「…和这段时间的大运对得上」。问卷分支不再显示任何「对得上 / 吻合」类的话;已有的事件列表照常显示。
|
||||
- 次按钮文案从「收窄到 X」改为「按 X 这段比较」。按钮下加一行小字:「只用于比较,不代表真实时间已被证实,随时可以改回。」只有 `canNarrow` 时才出现,条件不变。
|
||||
3. **首页:**
|
||||
- 当前来源是 `user_choice_from_answers` 时:
|
||||
- 标签从「当前使用」改为「你选的比较范围」;
|
||||
- 下加一行「你填的 05:00 没有改」;
|
||||
- 加次按钮「改回填的时间」,一点即保存 `reported_time_default`(没填时间时用 `window_midpoint_default`,按钮文案「改回原范围」),不重新答题。
|
||||
- 其他来源保持 FIX-1 的样子。
|
||||
4. **报告链路:**
|
||||
- 写一条测试:来源为 `user_choice_from_answers` 时,无论区间多窄,`reading_minute_confirmed` 都不能为 true,`birth_time_accuracy` 不能被改成 `confirmed`(`frontend/src/lib/personal-report-longform-birth.ts` 第 146 行附近)。
|
||||
- 如果现在会变成 true,就修掉。
|
||||
5. 除第 3 条的「改回」保存外,后端、迁移、保存来源都不改。
|
||||
|
||||
## 文档
|
||||
|
||||
- BUG-1886 一节补「11-14 占星师裁定」:把握分级不外露、比较文案、可撤销、minute_confirmed 测试。
|
||||
- `rect-adaptive-replay.md` 加一句:「low/medium/high 是旧算法内部标签,不代表准确率(占星师 11-14)。」
|
||||
- 更新 PROGRESS。
|
||||
|
||||
## 验收
|
||||
|
||||
- 测试:
|
||||
- 首页和结果页都不出现「把握」「倾向」「对得上」「更像」「改用」;
|
||||
- 「按 X 这段比较」只在段包含参照时间且比原范围窄时出现;
|
||||
- 「改回填的时间」保存 `reported_time_default`;
|
||||
- 第 4 条的 minute_confirmed 测试。
|
||||
- 门禁:Python quick gate、前端相关测试、`tsc`、`npx eslint .` 0 errors。
|
||||
- 截图(390 宽):结果页包含 / 不包含两种;首页默认态;首页「你选的比较范围」态。
|
||||
@@ -34,3 +34,18 @@
|
||||
- 前端全量 3734 条,3654 通过、43 失败、37 跳过、0 取消。全部失败测试名均可在同机对照找到,没有既有测试名缺失。Docker Desktop 的 Linux 引擎不可用,容器数据库套件留待独立验收。
|
||||
- 新迁移只扩充 v2 写入函数的来源允许值,兼容已经部署的写入及历史复用。已在隔离 PostgreSQL 实施迁移,验证旧来源、两种新来源、报告区间和历史复用。迁移版本唯一性检查在同机 staging 和本分支均检出同样三组历史重号,新迁移版本无冲突。
|
||||
- 77 例回放中问卷命中 45 例,填写时间居中的同宽区间命中 54 例,随机同宽区间期望命中 49.49 例。两种健康题配置下,44 个候选段包含填报时刻,其中命中 38 个,其余段命中 7 / 33。见[回放报告](rect-adaptive-replay.md)。
|
||||
|
||||
## FIX-5 返工(BUG-1886)
|
||||
|
||||
- 基于修复任务书提交 `63af951c` 和 staging `c18a094a` 更新 PR #265。问卷结果页按填写时刻或范围中点检查答题段。包含参照时刻时显示答题依据,且答题段更窄时才显示「收窄到」。其余结果显示原范围、参照时刻和主按钮。
|
||||
- 使用真实引擎补齐无填写时刻的两份合成样本。前端定向 29 项通过。390 像素 Chromium 核对两种时间带、默认保存与收窄提交,截图随 PR 提供。
|
||||
- TypeScript 与生产构建通过,ESLint 0 错误,63 条既有警告。首页保持静态。两边按首页 HTML 中的唯一脚本和样式文件测得 gzip JS 519350 字节、CSS 93367 字节。
|
||||
- 本机 Docker Desktop 响应 HTTP 500。以相同的进程 PATH 和并发度对照全量前端测试。两边均为 3739 项,3656 通过、46 失败、37 跳过、0 取消,失败名称一致。下表涉及的断言所在测试已按新行为改名,其余测试名称一致。
|
||||
- Python 选盘及仓库隐私回归共 110 项通过。
|
||||
- Python 快速门 1496 通过、4 失败、2 跳过,另有 29 个子测试通过。在 staging `c18a094a` 单独复跑两个相关测试文件,复现同样四项失败。分别涉及 Kaala / PyJHora 和 VedAstro 咨询层。快速门在 Python 阶段退出,前端各项已单独执行。
|
||||
- 总预检确认远端可见和引擎适配器可用。目录扫描与预检定向测试分别达到 90 秒和 45 秒预算,与本工单先前记录一致。
|
||||
|
||||
| 既有断言原值 | 新值 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| 答题段排除填写时刻时显示「你的经历更像」和「改用」 | 隐藏答题提示、候选带高亮与匹配依据。操作区只有默认保存 | FIX-5 根据回放限制收窄建议 |
|
||||
| 答题段包含填写时刻时显示原提示和「收窄到」 | 保留两项,并校验时间带及匹配依据。增加范围中点内外两组引擎响应 | 验证缺钟点时采用范围中点的同一规则 |
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
# 生时纠正回测复验包与配对重跑(2026-11-14,Claude)
|
||||
|
||||
## 背景
|
||||
|
||||
占星师 11-14 审了 #260 的回测,认可负面结论,但指出三件事:
|
||||
|
||||
1. 我们只给了汇总表,她无法复现;
|
||||
2. 77 例每人只分到一种偏差,偏差分组里混着人物差异;
|
||||
3. 随机基线的口径要写清。
|
||||
|
||||
她要一份「最小复验包」,并定了下一轮回测的方案(见下文「她定的方案」)。本任务只做**在现有 77 人上能做的部分**。
|
||||
|
||||
- **不改评分公式,不调参数。**
|
||||
- 77 人已被 11-06 和 11-14 两轮分析用过,一律称「开发 / 诊断集」,不再叫 holdout。
|
||||
- 新留出集要另外收人,不在本任务内。
|
||||
|
||||
## 要交的东西
|
||||
|
||||
全部放在 `references/real_case_calibration/rect_repro_20261114/` 下,并写一份说明 `docs/research/rect-repro-20261114.md`。
|
||||
|
||||
### 1. 运行快照
|
||||
|
||||
- 网站代码 commit(#260 最终 commit);
|
||||
- 每个运行文件的 sha256;
|
||||
- Python 依赖锁(`pip freeze`)和一条可直接跑的命令。
|
||||
|
||||
### 2. 数据
|
||||
|
||||
- `minute_rectification_holdout_v5.json` 的 sha256;
|
||||
- 人物数和试验数,明确写出;
|
||||
- 每人一行:
|
||||
- AA 来源说明(source notes 原文或链接);
|
||||
- 记录时间的分辨率(到分钟 / 到 5 分钟 / 整点 / 半点);
|
||||
- 时区和夏令时;
|
||||
- 坐标;
|
||||
- 数据集里有没有标「已被纠正过」。
|
||||
- 都是公开名人数据,不含网站用户。
|
||||
|
||||
### 3. 映射表
|
||||
|
||||
- **事件到答题:** 原始事件事实 → 领域 → 模拟答案 → 日期精度(日 / 月 / 年)。答不了的标 unknown,不当「没有发生」。重复链(毕业→入职→搬家)要标出来。
|
||||
- **题目到计分:** 每个题目类别实际调用的分盘、宫位、事件星层,和 upstream 的对照(她核出的 upstream 映射:education D24 / 4、5、9;relocation D4 / 4、12;relationship D9 / 7;career D10 / 10;finance D2+D11 / 2、11;parent D12 / 4、9;sibling D3 / 3、11;health D6+D8+D30 / 6、8、12)。有出入的逐条列出,不修。
|
||||
- **中文标签:** 网站把握标签和源枚举的对应(含「倾向」= `tendency_only` 的来历)。
|
||||
|
||||
### 4. 配对重跑
|
||||
|
||||
- **试验设计:** 每人跑全部 8 个有符号偏差(±1、±2、±5、±10),共 616 次试验,窗口 ±15 分钟不变。
|
||||
- **每次试验输出一行 JSONL:**
|
||||
- 每题出题前后的候选集合、题目、回答来源;
|
||||
- 规则贡献(Vimshottari MD/AD/PD、Narayana MD/AD、功能吉凶加减分各自的分数);
|
||||
- 缺失层、停止原因;
|
||||
- 最终返回的集合:多段就保留多段和所有并列项,不填补间隙;
|
||||
- 是否命中,以及「原窗口包含真值却被排除」。
|
||||
- **基线:** 按分钟网格枚举合法起点,逐例算覆盖概率再求和。不抽样,所以不需要 seed。
|
||||
- 多段候选按集合覆盖和总长度算。
|
||||
- 同宽中心基线用同一套窗口截断规则。
|
||||
- 另加「不操作」(原窗口)基线。
|
||||
- 公式和端点约定写进说明文档。46.5(我早先的估计)和 49.49(连续口径)这两个数也要在文档里解释清楚。
|
||||
- **报告:**
|
||||
- 问卷对同宽中心的人物级配对差异,用按人物聚类的 bootstrap 给 95% 区间;
|
||||
- 按偏差分组;
|
||||
- 覆盖—宽度曲线和固定宽度曲线;
|
||||
- 伤害率(原窗口包含真值、结果把它排除的比例);
|
||||
- 弃权率(停在「没有可区分的问题」的比例)。
|
||||
- **消融:** 在同一 616 次试验上,按以下固定顺序各跑一次,不增不减:
|
||||
1. 去掉 PD;
|
||||
2. 去掉 Narayana;
|
||||
3. 去掉功能吉凶加减分。
|
||||
|
||||
事件日期按区间处理(不再取 15 日 / 7 月 1 日)要改引擎,留到下一轮,这次只在文档里标为未做。
|
||||
|
||||
### 5. 源码差异(只列,不改)
|
||||
|
||||
- 网站 `narayana_rath` 和 upstream 5fb8379c(`calc_narayana_mahadasha` / 365.2425)、HEAD 8aaf6099(`narayana_report_with_variants` / 365.25)逐项比较:种子、方向、余数、共主、年长、AD、缺失传播。
|
||||
- upstream 5fb8379c → 8aaf6099 在 `active_rectification_questions.py` 和 `active_rectification_selector.py` 上的改动,逐条说明对网站的影响。
|
||||
- upstream 仓库在 `/workspace/yinduzhanxing`。
|
||||
|
||||
## 她定的方案(下一轮才全做,这里只记录)
|
||||
|
||||
1. 人物级划分开发 / 验证 / 最终留出,新收的人作最终留出。
|
||||
2. 按记录分辨率保留标签区间。
|
||||
3. 固定 profile 和代码哈希;模拟器只读事件事实。
|
||||
4. 配对偏差,加整点舍入、时辰不明两种来源情景。
|
||||
5. 完整轨迹。
|
||||
6. 消融次序固定。
|
||||
7. 报覆盖—宽度曲线和伤害率。
|
||||
8. 用途稳定性另测。
|
||||
|
||||
## 验收
|
||||
|
||||
- 一条命令从干净 checkout 复现全部数字。
|
||||
- 说明文档每个数字都指向 JSONL 字段。
|
||||
- 测试:基线函数对几个手算例(含 w = L、贴边、多段)断言正确。
|
||||
- 不改 `scripts/chart_choice/` 的评分行为:现有 fixture 测试全过。
|
||||
@@ -36,3 +36,5 @@
|
||||
| +10 | 9 | 7 | 4.29 | 3 |
|
||||
|
||||
问卷段包含填写时间 44 / 77(57.1%),其中命中 38 / 44(86.4%)。其余 33 段命中 7 段(21.2%)。这些是同一次回放的分组统计。问卷不优于随机,默认采用填写时间并保留原窗口。
|
||||
|
||||
不包含填写时间时不再给改用建议(BUG-1886)。
|
||||
|
||||
+1
-1
@@ -358,7 +358,7 @@ The self-profile editor in 星盘资料 (`ChartLibraryPanel`) owns the ayanamsa
|
||||
|
||||
- **按盘选盘(#239,BUG-1873):** 范围、答题、结果和当前记录用平面布局,靠留白和细线分组。答题用 36px 时间带、22px 衬线标题和浅底选项,选项内的 8px 小带表示覆盖范围。事件选项原地展开年份和类别,展开 0.32 秒,遵循系统的减少动态效果设置。结果突出候选段,六盘用细带展示段内换座,并列出证据与冲突。首页保留星盘、重做和按未定盘续问。
|
||||
- **自适应生时纠正(#260,BUG-1881):** 题目随候选范围变化。细进度条对应已确认盘数,年龄旁附公历年份。选项以同色底、1.5px 内描边和强调色文字及细带表示选中。事件类别用细边框与实心选中态,年份加减器保持透明底,展开仍为 0.32 秒。深色模式的选项和细带使用反转表面 token。刻度标签接近时移到另一侧,腾出靠近的端点。当前记录用代表时刻作标题,紧随范围与把握分级。结果仅列出匹配的事件依据。
|
||||
- **#260 返工:** 结果首屏标题是「按你填的 HH:MM」,下方显示原答题范围和答题参考。六盘按主按钮时刻显示,跨换座线的盘标「还没定」和换座时刻。全宽主按钮为「用 HH:MM」,下方描边按钮根据候选段是否包含该时刻显示「收窄到」或「改用」;两个范围相同时隐藏次按钮。没有填写钟点时,标题明确说「按范围中点」。保存后首页仍先显示采用时刻,再显示保存范围与六盘状态。
|
||||
- **#260 返工:** 结果首屏标题是「按你填的 HH:MM」或「按范围中点 HH:MM」。范围带显示原范围和参照时刻。答题段包含参照时刻时,显示答题提示和匹配依据,在时间带中标出答题段。该段比原范围窄时,全宽「用 HH:MM」主按钮下出现描边「收窄到」按钮。六盘按主按钮时刻显示,跨换座线的盘标「还没定」和换座时刻。保存后首页先显示采用时刻,再显示保存范围与六盘状态。
|
||||
|
||||
The birth-time rectification session is the consultation transcript plus a house board; questions live inside the assistant message that asked them. It shares every waiting vocabulary with the consultation surface; nothing here spins or says "loading" after the reveal.
|
||||
|
||||
|
||||
@@ -978,7 +978,6 @@ export function FinalStep({ packet, decision, pending, onBack, onAccept, onUseAn
|
||||
readonly onUseAnswerWindow?: () => void;
|
||||
}) {
|
||||
const evidence = matchedEvidence(decision);
|
||||
const confidence = CONFIDENCE_LABEL[decision.evidence_summary?.confidence ?? ""];
|
||||
const seconds = decision.saved_at.length === 19 && !decision.saved_at.endsWith(":00");
|
||||
const saved = clockLabel(decision.saved_at, packet.reported_at, seconds);
|
||||
if (packet.status === "questionnaire") {
|
||||
@@ -990,30 +989,31 @@ export function FinalStep({ packet, decision, pending, onBack, onAccept, onUseAn
|
||||
const starts = minutesFrom(decision.segment.start_at);
|
||||
const ends = minutesFrom(decision.segment.end_at);
|
||||
const containsReference = starts <= reportedTime && reportedTime <= ends;
|
||||
const sameWindow = starts === minutesFrom(defaultWindow.start_at) && ends === minutesFrom(defaultWindow.end_at);
|
||||
const defaultWidth = minutesFrom(defaultWindow.end_at) - minutesFrom(defaultWindow.start_at);
|
||||
const canNarrow = containsReference && ends - starts < defaultWidth;
|
||||
const clock = clockLabel(reference);
|
||||
const range = segmentLabel(decision.segment, reference);
|
||||
const advisory = hasReportedTime && containsReference
|
||||
? "你的回答和填的时间对得上。"
|
||||
: `你的经历更像 ${range} 这段${confidence ? `(${confidence})` : ""}。`;
|
||||
const advisory = hasReportedTime ? "你的回答和填的时间对得上。" : "你的回答落在范围中间这段。";
|
||||
return <section className="chart-choice-flat chart-choice-result-flat">
|
||||
{!pending ? <BackLink onClick={onBack}>改答案</BackLink> : null}
|
||||
<div className="chart-choice-flat-section">
|
||||
<h2 className="chart-choice-heading">{hasReportedTime ? `按你填的 ${clock}` : `按范围中点 ${clock}`}</h2>
|
||||
<p className="chart-choice-fine">范围 {segmentLabel(defaultWindow, reference)}</p>
|
||||
<p className="chart-choice-note">{advisory}</p>
|
||||
<SelectedBand window={defaultWindow} segment={decision.segment} reportedAt={reference} />
|
||||
{containsReference ? <>
|
||||
<p className="chart-choice-note">{advisory}</p>
|
||||
<SelectedBand window={defaultWindow} segment={decision.segment} reportedAt={reference} />
|
||||
</> : <ChoiceBand window={defaultWindow} reportedAt={reference} segments={[1]} />}
|
||||
</div>
|
||||
{reported ? <div className="chart-choice-flat-section">
|
||||
<h3 className="chart-choice-fine">按 {clock} 看六张盘</h3>
|
||||
<KeyCharts charts={reported.key_charts} undetermined={reported.undetermined_charts}
|
||||
reference={reported.saved_at} segment={reported.segment} />
|
||||
</div> : null}
|
||||
{evidence ? <p className="chart-choice-note chart-choice-flat-section is-ruled">{evidence}</p> : null}
|
||||
{containsReference && evidence ? <p className="chart-choice-note chart-choice-flat-section is-ruled">{evidence}</p> : null}
|
||||
<div className="chart-choice-full-action chart-choice-result-actions">
|
||||
<Primary disabled={pending} onClick={onAccept}>用 {clock}</Primary>
|
||||
{!sameWindow && onUseAnswerWindow ? <Secondary disabled={pending} onClick={onUseAnswerWindow}>
|
||||
{containsReference ? "收窄到" : "改用"} {range}
|
||||
{canNarrow && onUseAnswerWindow ? <Secondary disabled={pending} onClick={onUseAnswerWindow}>
|
||||
收窄到 {range}
|
||||
</Secondary> : null}
|
||||
</div>
|
||||
</section>;
|
||||
|
||||
@@ -23,6 +23,8 @@ const questionnaire = JSON.parse(readFileSync(new URL("./fixtures/chart-choice-q
|
||||
};
|
||||
const adaptiveAdoption = JSON.parse(readFileSync(new URL("./fixtures/chart-choice-adaptive-adoption-20261114.json", import.meta.url), "utf8")) as
|
||||
Record<"inside" | "outside", { packet: ChartChoiceQuestionnaire; answers: ChartChoiceChartAnswers; result: Complete }>;
|
||||
const adaptiveMidpoint = JSON.parse(readFileSync(new URL("./fixtures/chart-choice-adaptive-midpoint-20261114.json", import.meta.url), "utf8")) as
|
||||
Record<"inside" | "outside", { packet: ChartChoiceQuestionnaire; result: Complete }>;
|
||||
|
||||
test("real chart choice packets render minor lines, three rounds and the final evidence", () => {
|
||||
const packet = fixture.packets[0];
|
||||
@@ -104,16 +106,36 @@ test("questionnaire displays age years and hides rejected constraints from the r
|
||||
assert.doesNotMatch(adaptiveQuestion, /第 1 题/);
|
||||
});
|
||||
|
||||
test("adaptive results offer a secondary action for an answer window on either side of the reported time", () => {
|
||||
for (const [kind, { packet, result }] of Object.entries(adaptiveAdoption)) {
|
||||
const final = renderToStaticMarkup(<FinalStep packet={packet} decision={result.decision}
|
||||
pending={false} onBack={noop} onAccept={noop} onUseAnswerWindow={noop} />);
|
||||
assert.match(final, kind === "inside" ? /你的回答和填的时间对得上/ : /你的经历更像/);
|
||||
assert.match(final, kind === "inside" ? />收窄到 .*<\/button>/ : />改用 .*<\/button>/);
|
||||
assert.match(final, kind === "inside" ? />用 04:55<\/button>/ : />用 05:00<\/button>/);
|
||||
assert.doesNotMatch(final, /出生时间在|已验证|准确/);
|
||||
const reported = result.decision.reported_choice!;
|
||||
assert.equal((final.match(/换)/g) ?? []).length, reported.undetermined_charts.length);
|
||||
test("adaptive results offer narrowing only when the answer window contains the reference time", () => {
|
||||
for (const [cases, knowsTime] of [[adaptiveAdoption, true], [adaptiveMidpoint, false]] as const) {
|
||||
for (const [kind, { packet, result }] of Object.entries(cases)) {
|
||||
const reported = result.decision.reported_choice!;
|
||||
assert.equal(reported.reported_known, knowsTime);
|
||||
assert.ok(result.decision.events_detail?.some((event) => event.matched));
|
||||
const final = renderToStaticMarkup(<FinalStep packet={packet} decision={result.decision}
|
||||
pending={false} onBack={noop} onAccept={noop} onUseAnswerWindow={noop} />);
|
||||
const clock = kind === "inside" ? "04:55" : "05:00";
|
||||
const band = final.match(/class="chart-choice-band-segments"[^>]*>(.*?)<\/div>/)?.[1];
|
||||
const actions = final.match(/class="chart-choice-full-action chart-choice-result-actions">(.*?)<\/div>/)?.[1];
|
||||
assert.ok(band);
|
||||
assert.ok(actions);
|
||||
assert.ok(final.includes(`>用 ${clock}</button>`));
|
||||
assert.ok(final.includes(`${knowsTime ? "按你填的" : "按范围中点"} ${clock}`));
|
||||
assert.doesNotMatch(final, /出生时间在|已验证|准确|你的经历更像|改用/);
|
||||
assert.equal((final.match(/换)/g) ?? []).length, reported.undetermined_charts.length);
|
||||
if (kind === "inside") {
|
||||
assert.match(final, knowsTime ? /你的回答和填的时间对得上/ : /你的回答落在范围中间这段/);
|
||||
assert.match(actions, />收窄到 .*<\/button>/);
|
||||
assert.match(final, /和这段时间的大运对得上/);
|
||||
assert.match(band, /is-highlighted/);
|
||||
} else {
|
||||
assert.doesNotMatch(final, /你的回答|收窄到|大运对得上/);
|
||||
assert.equal((actions.match(/<button\b/g) ?? []).length, 1);
|
||||
assert.doesNotMatch(band, /is-highlighted/);
|
||||
assert.equal((band.match(/<span\b/g) ?? []).length, 1);
|
||||
assert.match(final, /▲ 05:00/);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,874 @@
|
||||
{
|
||||
"inside": {
|
||||
"packet": {
|
||||
"engine_version": "chart-choice-v2",
|
||||
"window": {
|
||||
"start_at": "1997-08-08T04:40",
|
||||
"end_at": "1997-08-08T05:10"
|
||||
},
|
||||
"reported_at": "1997-08-08T04:55",
|
||||
"reported_known": false,
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"status": "questionnaire",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T04:40:00",
|
||||
"end_at": "1997-08-08T05:10:00"
|
||||
},
|
||||
"remaining_key_lines": 5,
|
||||
"ordered_lines": [
|
||||
{
|
||||
"at": "1997-08-08T04:51:30",
|
||||
"degree": 13.333333,
|
||||
"charts": [
|
||||
"D9"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:07:55",
|
||||
"degree": 16.666667,
|
||||
"charts": [
|
||||
"D9"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:59:43",
|
||||
"degree": 15.0,
|
||||
"charts": [
|
||||
"D10",
|
||||
"D2",
|
||||
"D6",
|
||||
"D8",
|
||||
"D4",
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:44:57",
|
||||
"degree": 12.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:41:16",
|
||||
"degree": 11.25,
|
||||
"charts": [
|
||||
"D8",
|
||||
"D24"
|
||||
]
|
||||
}
|
||||
],
|
||||
"minor_lines": [
|
||||
{
|
||||
"at": "1997-08-08T04:47:24",
|
||||
"charts": [
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:53:33",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:05:52",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
}
|
||||
],
|
||||
"question_charts": [
|
||||
{
|
||||
"chart": "D9",
|
||||
"possibilities": 3
|
||||
},
|
||||
{
|
||||
"chart": "D10",
|
||||
"possibilities": 3
|
||||
},
|
||||
{
|
||||
"chart": "D2",
|
||||
"possibilities": 2
|
||||
},
|
||||
{
|
||||
"chart": "D6",
|
||||
"possibilities": 2
|
||||
},
|
||||
{
|
||||
"chart": "D8",
|
||||
"possibilities": 3
|
||||
}
|
||||
],
|
||||
"chart_questions": [
|
||||
{
|
||||
"id": "D24-education-1",
|
||||
"chart": "D24",
|
||||
"kind": "event",
|
||||
"domain": "education",
|
||||
"prompt": "你在哪个年龄段有过升学、毕业或换专业的经历?",
|
||||
"options": [
|
||||
{
|
||||
"value": "age-20-20",
|
||||
"text": "20 岁",
|
||||
"ages": [
|
||||
20,
|
||||
20
|
||||
],
|
||||
"possibilities": [
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "age-28-28",
|
||||
"text": "28 岁",
|
||||
"ages": [
|
||||
28,
|
||||
28
|
||||
],
|
||||
"possibilities": [
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "age-29-29",
|
||||
"text": "29 岁",
|
||||
"ages": [
|
||||
29,
|
||||
29
|
||||
],
|
||||
"possibilities": [
|
||||
3
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "none",
|
||||
"text": "都没有"
|
||||
},
|
||||
{
|
||||
"value": "unsure",
|
||||
"text": "记不清"
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"id": "education",
|
||||
"value": "education",
|
||||
"text": "升学 / 考试 / 毕业"
|
||||
}
|
||||
],
|
||||
"possibilities": [
|
||||
{
|
||||
"start_at": "1997-08-08T04:40:00",
|
||||
"end_at": "1997-08-08T04:41:15",
|
||||
"sign": "双鱼"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T04:41:16",
|
||||
"end_at": "1997-08-08T04:47:23",
|
||||
"sign": "白羊"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T04:47:24",
|
||||
"end_at": "1997-08-08T04:53:32",
|
||||
"sign": "金牛"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T04:53:33",
|
||||
"end_at": "1997-08-08T04:59:42",
|
||||
"sign": "双子"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T04:59:43",
|
||||
"end_at": "1997-08-08T05:05:51",
|
||||
"sign": "巨蟹"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T05:05:52",
|
||||
"end_at": "1997-08-08T05:10:00",
|
||||
"sign": "狮子"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"confirmed_charts": 1
|
||||
},
|
||||
"result": {
|
||||
"engine_version": "chart-choice-v2",
|
||||
"window": {
|
||||
"start_at": "1997-08-08T04:40",
|
||||
"end_at": "1997-08-08T05:10"
|
||||
},
|
||||
"reported_at": "1997-08-08T04:55",
|
||||
"reported_known": false,
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"status": "complete",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T04:53:33",
|
||||
"end_at": "1997-08-08T04:59:42"
|
||||
},
|
||||
"remaining_key_lines": 0,
|
||||
"ordered_lines": [],
|
||||
"minor_lines": [
|
||||
{
|
||||
"at": "1997-08-08T04:47:24",
|
||||
"charts": [
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:53:33",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:05:52",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
}
|
||||
],
|
||||
"question_charts": [],
|
||||
"chart_questions": [],
|
||||
"confirmed_charts": 6,
|
||||
"saved_at": "1997-08-08T04:55",
|
||||
"decision": {
|
||||
"saved_at": "1997-08-08T04:55",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T04:53:33",
|
||||
"end_at": "1997-08-08T04:59:42"
|
||||
},
|
||||
"rounds": [],
|
||||
"undetermined_charts": [],
|
||||
"events": [
|
||||
{
|
||||
"date": "2026",
|
||||
"category": "education"
|
||||
}
|
||||
],
|
||||
"key_charts": [
|
||||
{
|
||||
"chart": "D1",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D9",
|
||||
"sign": "天蝎",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D10",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D2",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D6",
|
||||
"sign": "射手",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D8",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
}
|
||||
],
|
||||
"events_detail": [
|
||||
{
|
||||
"date": "2026",
|
||||
"category": "education",
|
||||
"matched": true
|
||||
}
|
||||
],
|
||||
"evidence_summary": {
|
||||
"event_count": 1,
|
||||
"matched": 1,
|
||||
"confidence": "tendency_only",
|
||||
"coverage": {
|
||||
"event_count": 1,
|
||||
"category_count": 1,
|
||||
"group_count": 1,
|
||||
"groups": [
|
||||
"education"
|
||||
],
|
||||
"year_span": 0,
|
||||
"level": "thin"
|
||||
},
|
||||
"caveat": "这一步按占星师的方法计算,结果只作参考,不是验证结果。2026-11-06 我们在 77 个出生时间有可靠记录的案例上回测过同类的事件打分:30 分钟范围里头名命中 19%,随机挑也是 20%,直接用报的时间是 34%。"
|
||||
},
|
||||
"remaining_key_lines": 0,
|
||||
"has_next": false,
|
||||
"rule": "stopped",
|
||||
"reported_choice": {
|
||||
"saved_at": "1997-08-08T04:55",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T04:40",
|
||||
"end_at": "1997-08-08T05:10"
|
||||
},
|
||||
"reported_known": false,
|
||||
"key_charts": [
|
||||
{
|
||||
"chart": "D1",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D9",
|
||||
"sign": "天蝎",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:51:30"
|
||||
},
|
||||
{
|
||||
"chart": "D10",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:44:57"
|
||||
},
|
||||
{
|
||||
"chart": "D2",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:59:43"
|
||||
},
|
||||
{
|
||||
"chart": "D6",
|
||||
"sign": "射手",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:59:43"
|
||||
},
|
||||
{
|
||||
"chart": "D8",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:41:16"
|
||||
}
|
||||
],
|
||||
"undetermined_charts": [
|
||||
"D9",
|
||||
"D10",
|
||||
"D2",
|
||||
"D6",
|
||||
"D8"
|
||||
],
|
||||
"remaining_key_lines": 5
|
||||
},
|
||||
"asked": [
|
||||
{
|
||||
"id": "D24-education-1",
|
||||
"chart": "D24",
|
||||
"answer": {
|
||||
"choice": "age-29-29",
|
||||
"date": "2026",
|
||||
"category": "education"
|
||||
},
|
||||
"before": [
|
||||
{
|
||||
"start_at": "1997-08-08T04:40:00",
|
||||
"end_at": "1997-08-08T05:10:00"
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"start_at": "1997-08-08T04:53:33",
|
||||
"end_at": "1997-08-08T04:59:42"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"conflict": [],
|
||||
"resolved": [],
|
||||
"stop_reason": "stopped"
|
||||
}
|
||||
}
|
||||
},
|
||||
"outside": {
|
||||
"packet": {
|
||||
"engine_version": "chart-choice-v2",
|
||||
"window": {
|
||||
"start_at": "1997-08-08T04:30",
|
||||
"end_at": "1997-08-08T05:30"
|
||||
},
|
||||
"reported_at": "1997-08-08T05:00",
|
||||
"reported_known": false,
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"status": "questionnaire",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T04:30:00",
|
||||
"end_at": "1997-08-08T05:30:00"
|
||||
},
|
||||
"remaining_key_lines": 11,
|
||||
"ordered_lines": [
|
||||
{
|
||||
"at": "1997-08-08T05:07:55",
|
||||
"degree": 16.666667,
|
||||
"charts": [
|
||||
"D9"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:51:30",
|
||||
"degree": 13.333333,
|
||||
"charts": [
|
||||
"D9"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:24:22",
|
||||
"degree": 20.0,
|
||||
"charts": [
|
||||
"D9",
|
||||
"D6",
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:35:08",
|
||||
"degree": 10.0,
|
||||
"charts": [
|
||||
"D9",
|
||||
"D6",
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:59:43",
|
||||
"degree": 15.0,
|
||||
"charts": [
|
||||
"D10",
|
||||
"D2",
|
||||
"D6",
|
||||
"D8",
|
||||
"D4",
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:14:30",
|
||||
"degree": 18.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:44:57",
|
||||
"degree": 12.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:29:18",
|
||||
"degree": 21.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:30:14",
|
||||
"degree": 9.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:18:12",
|
||||
"degree": 18.75,
|
||||
"charts": [
|
||||
"D8",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:41:16",
|
||||
"degree": 11.25,
|
||||
"charts": [
|
||||
"D8",
|
||||
"D24"
|
||||
]
|
||||
}
|
||||
],
|
||||
"minor_lines": [
|
||||
{
|
||||
"at": "1997-08-08T04:47:24",
|
||||
"charts": [
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:53:33",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:05:52",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:12:02",
|
||||
"charts": [
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
}
|
||||
],
|
||||
"question_charts": [
|
||||
{
|
||||
"chart": "D9",
|
||||
"possibilities": 5
|
||||
},
|
||||
{
|
||||
"chart": "D10",
|
||||
"possibilities": 6
|
||||
},
|
||||
{
|
||||
"chart": "D2",
|
||||
"possibilities": 2
|
||||
},
|
||||
{
|
||||
"chart": "D6",
|
||||
"possibilities": 4
|
||||
},
|
||||
{
|
||||
"chart": "D8",
|
||||
"possibilities": 4
|
||||
}
|
||||
],
|
||||
"chart_questions": [
|
||||
{
|
||||
"id": "D9-divorce-1",
|
||||
"chart": "D9",
|
||||
"kind": "event",
|
||||
"domain": "relationship",
|
||||
"prompt": "你在哪个年龄段有过分开的经历?",
|
||||
"options": [
|
||||
{
|
||||
"value": "age-20-20",
|
||||
"text": "20 岁",
|
||||
"ages": [
|
||||
20,
|
||||
20
|
||||
],
|
||||
"possibilities": [
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "none",
|
||||
"text": "都没有"
|
||||
},
|
||||
{
|
||||
"value": "unsure",
|
||||
"text": "记不清"
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"id": "divorce",
|
||||
"value": "divorce",
|
||||
"text": "离婚 / 分开"
|
||||
}
|
||||
],
|
||||
"possibilities": [
|
||||
{
|
||||
"start_at": "1997-08-08T04:30:00",
|
||||
"end_at": "1997-08-08T04:35:07",
|
||||
"sign": "处女"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T04:35:08",
|
||||
"end_at": "1997-08-08T04:51:29",
|
||||
"sign": "天秤"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T04:51:30",
|
||||
"end_at": "1997-08-08T05:07:54",
|
||||
"sign": "天蝎"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T05:07:55",
|
||||
"end_at": "1997-08-08T05:24:21",
|
||||
"sign": "射手"
|
||||
},
|
||||
{
|
||||
"start_at": "1997-08-08T05:24:22",
|
||||
"end_at": "1997-08-08T05:30:00",
|
||||
"sign": "摩羯"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"confirmed_charts": 1
|
||||
},
|
||||
"result": {
|
||||
"engine_version": "chart-choice-v2",
|
||||
"window": {
|
||||
"start_at": "1997-08-08T04:30",
|
||||
"end_at": "1997-08-08T05:30"
|
||||
},
|
||||
"reported_at": "1997-08-08T05:00",
|
||||
"reported_known": false,
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"status": "complete",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T05:24:22",
|
||||
"end_at": "1997-08-08T05:30:00"
|
||||
},
|
||||
"remaining_key_lines": 5,
|
||||
"ordered_lines": [
|
||||
{
|
||||
"at": "1997-08-08T04:59:43",
|
||||
"degree": 15.0,
|
||||
"charts": [
|
||||
"D10",
|
||||
"D2",
|
||||
"D6",
|
||||
"D8",
|
||||
"D4",
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:14:30",
|
||||
"degree": 18.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:44:57",
|
||||
"degree": 12.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:29:18",
|
||||
"degree": 21.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:30:14",
|
||||
"degree": 9.0,
|
||||
"charts": [
|
||||
"D10"
|
||||
]
|
||||
}
|
||||
],
|
||||
"minor_lines": [
|
||||
{
|
||||
"at": "1997-08-08T04:47:24",
|
||||
"charts": [
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T04:53:33",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:05:52",
|
||||
"charts": [
|
||||
"D24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"at": "1997-08-08T05:12:02",
|
||||
"charts": [
|
||||
"D12",
|
||||
"D24"
|
||||
]
|
||||
}
|
||||
],
|
||||
"question_charts": [
|
||||
{
|
||||
"chart": "D10",
|
||||
"possibilities": 2
|
||||
}
|
||||
],
|
||||
"chart_questions": [],
|
||||
"confirmed_charts": 5,
|
||||
"saved_at": "1997-08-08T05:26",
|
||||
"decision": {
|
||||
"saved_at": "1997-08-08T05:26",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T05:24:22",
|
||||
"end_at": "1997-08-08T05:30:00"
|
||||
},
|
||||
"rounds": [],
|
||||
"undetermined_charts": [
|
||||
"D10"
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"date": "2017",
|
||||
"category": "divorce"
|
||||
}
|
||||
],
|
||||
"key_charts": [
|
||||
{
|
||||
"chart": "D1",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D9",
|
||||
"sign": "摩羯",
|
||||
"decided_by": "event"
|
||||
},
|
||||
{
|
||||
"chart": "D10",
|
||||
"sign": "处女",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T05:29:18"
|
||||
},
|
||||
{
|
||||
"chart": "D2",
|
||||
"sign": "狮子",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D6",
|
||||
"sign": "水瓶",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D8",
|
||||
"sign": "处女",
|
||||
"decided_by": null
|
||||
}
|
||||
],
|
||||
"events_detail": [
|
||||
{
|
||||
"date": "2017",
|
||||
"category": "divorce",
|
||||
"matched": true
|
||||
}
|
||||
],
|
||||
"evidence_summary": {
|
||||
"event_count": 1,
|
||||
"matched": 1,
|
||||
"confidence": "tendency_only",
|
||||
"coverage": {
|
||||
"event_count": 1,
|
||||
"category_count": 1,
|
||||
"group_count": 1,
|
||||
"groups": [
|
||||
"relationship"
|
||||
],
|
||||
"year_span": 0,
|
||||
"level": "thin"
|
||||
},
|
||||
"caveat": "这一步按占星师的方法计算,结果只作参考,不是验证结果。2026-11-06 我们在 77 个出生时间有可靠记录的案例上回测过同类的事件打分:30 分钟范围里头名命中 19%,随机挑也是 20%,直接用报的时间是 34%。"
|
||||
},
|
||||
"remaining_key_lines": 5,
|
||||
"has_next": false,
|
||||
"rule": "stopped",
|
||||
"reported_choice": {
|
||||
"saved_at": "1997-08-08T05:00",
|
||||
"segment": {
|
||||
"start_at": "1997-08-08T04:30",
|
||||
"end_at": "1997-08-08T05:30"
|
||||
},
|
||||
"reported_known": false,
|
||||
"key_charts": [
|
||||
{
|
||||
"chart": "D1",
|
||||
"sign": "巨蟹",
|
||||
"decided_by": null
|
||||
},
|
||||
{
|
||||
"chart": "D9",
|
||||
"sign": "天蝎",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:35:08"
|
||||
},
|
||||
{
|
||||
"chart": "D10",
|
||||
"sign": "狮子",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:30:14"
|
||||
},
|
||||
{
|
||||
"chart": "D2",
|
||||
"sign": "狮子",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:59:43"
|
||||
},
|
||||
{
|
||||
"chart": "D6",
|
||||
"sign": "摩羯",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:35:08"
|
||||
},
|
||||
{
|
||||
"chart": "D8",
|
||||
"sign": "狮子",
|
||||
"decided_by": null,
|
||||
"flips_at": "1997-08-08T04:41:16"
|
||||
}
|
||||
],
|
||||
"undetermined_charts": [
|
||||
"D9",
|
||||
"D10",
|
||||
"D2",
|
||||
"D6",
|
||||
"D8"
|
||||
],
|
||||
"remaining_key_lines": 11
|
||||
},
|
||||
"asked": [
|
||||
{
|
||||
"id": "D9-divorce-1",
|
||||
"chart": "D9",
|
||||
"answer": {
|
||||
"choice": "age-20-20",
|
||||
"date": "2017",
|
||||
"category": "divorce"
|
||||
},
|
||||
"before": [
|
||||
{
|
||||
"start_at": "1997-08-08T04:30:00",
|
||||
"end_at": "1997-08-08T05:30:00"
|
||||
}
|
||||
],
|
||||
"after": [
|
||||
{
|
||||
"start_at": "1997-08-08T05:24:22",
|
||||
"end_at": "1997-08-08T05:30:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"conflict": [],
|
||||
"resolved": [],
|
||||
"stop_reason": "stopped"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user