Commit Graph
2474 Commits
Author SHA1 Message Date
jesse-uxandGrok (agent loop) 52b19d7a82 fix(rect): after excluding the indivisible MD/AD unit, compare on the rest (#184 round 3, BUG-1827)
打回:单元拿掉了,但 Narayana_AD 仍算 unexplained,又落回 not_reducible,
且那个分支不输出 excluded_contributions。

- 新增 _explained_by_exclusion:差异层被「所有带它的候选的不可拆 MD/AD 项」
  覆盖且没有别的缺失层时,视为已由排除解释
- not_reducible 分支也输出 excluded_contributions(非空时)
- 旧形状行(无 contributions)不受影响

Tests: 新增 4 条真实形状用例(只缺小运→common_coverage、再加一个缺失层→
not_reducible 但仍报排除、旧形状行不报、负分照计);本文件 20 条 + 既有四套
合计 56 条全过。

Co-Authored-By: Grok (agent loop)
2026-11-09 19:31:41 +08:00
ClaudeandClaude Opus 5.5 603f3e654f docs(task): FIX-rect-layer-alias-3.md — #184 review fail: exclusion does not reach common coverage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 19:27:21 +08:00
jesse-uxandGrok (agent loop) 446420d720 feat(rect): per-contribution evidence, consistent MD/AD exclusion, real missing fields (#184 round 2, BUG-1827)
按占星师第七轮 P1 与 FIX-rect-layer-alias-2:

- 引擎行追加 contributions(event_id / layer / dependency / profile / points /
  decomposable / missing_reason);整件不计分的事也记一项,points 为 null
- 任一候选的 dasha_varga_core 贡献 decomposable 为假时,对所有候选一致排除该
  单元并写 excluded_contributions(缺的不当 0、全的也不计)
- 新增顶层 missing_mandatory_layers([{candidate_time, layer, event_ids}],
  排序、永不为 null,旧形状行标 legacy_row_without_contributions);
  reasons 里那一条当且仅当列表非空
- 层名对照 ASTROLOGER_EVENT_LAYER_ALIASES(只在整件事缺失且无其他门控层时套用),
  记 layer_aliases_applied;产品的 Narayana_AD(只缺小运)仍 not_reducible
- 三个计数(top_candidate_count / top_segment_count / unique_time)保留

Tests: 测试文件 17 条(含真实引擎行:贡献分值之和等于 score、layer_points 与
contributions 一一对应),连同 1801/active_events/1802/technique_contract 共 52 条全过。

Co-Authored-By: Grok (agent loop)
2026-11-09 18:03:35 +08:00
ClaudeandClaude Opus 5.5 8eea87eb1a docs(task): FIX-rect-layer-alias-2.md — #184 review fail + rulings on split and missing_mandatory_layers shape
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 17:33:51 +08:00
ClaudeandClaude Opus 5.5 66c2bab6b8 docs(task): FIX-rect-layer-alias-1.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 14:37:49 +08:00
ClaudeandClaude Opus 5.5 a3f941586f docs(task): brief for rect-layer-alias (2026-11-09)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 14:03:27 +08:00
ClaudeandClaude Opus 5.5 afac4ea92f fix(accept): #179 module moves into scripts/ondemand_calc (scripts-root budget)
Independent Staging Quality Gate / validate-frontend (push) Successful in 6m51s
Independent Staging Quality Gate / validate-python (push) Successful in 8m26s
Independent Staging Quality Gate / publish (push) Successful in 3m1s
test_python_hygiene_budget forbids new root-level scripts/*.py; the brief named
scripts/muhurta_search_api.py. Same code at scripts/ondemand_calc/muhurta_search.py;
route, CLI import and tests follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 10:07:39 +08:00
Claude 8213aadad6 merge: codex/ondemand-transit-date-20261109 into acceptance batch 1109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8

# Conflicts:
#	docs/BUG_HISTORY.md
#	scripts/jyotish_api_server.py
2026-11-09 09:58:55 +08:00
Claude 5967b394eb merge: codex/counterexamples-20261109 into acceptance batch 1109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8

# Conflicts:
#	docs/BUG_HISTORY.md
2026-11-09 09:58:54 +08:00
Claude 1860b74e84 merge: codex/muhurta-20261109 into acceptance batch 1109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8

# Conflicts:
#	docs/BUG_HISTORY.md
2026-11-09 09:58:54 +08:00
Claude 137b964d80 merge: codex/dasha-dates-engine-only-20261109 into acceptance batch 1109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8

# Conflicts:
#	docs/BUG_HISTORY.md
2026-11-09 09:58:54 +08:00
Claude c723f7333d merge: codex/reports-no-web-wording-20261109 into acceptance batch 1109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8

# Conflicts:
#	docs/BUG_HISTORY.md
2026-11-09 09:58:53 +08:00
jesse-uxandGrok (agent loop) 99273b8ec2 fix(muhurta): per-day windows, per-window verdicts, per-day offsets (#179 round 2, BUG-1822)
按 FIX-muhurta-1 改掉打回的四点:

- 候选日不再由「日出 + 6 小时」单点分数筛选:每天单独取当天报告,用
  _select_recommended_windows 取候选;单点分数只留在 legacy_reference(not_final)
- 每个时段在起止两端各调一次 check_activity_muhurta,写 verdict_at_start /
  verdict_at_end / window_verdict;两端不同写 mixed 并点名变化要素;每天写
  rejected_windows(不吉时段、判定不宜、被 time_window 裁掉)
- 跨夏令时:每天用自己的偏移取日出与当天报告;profile 改为 tz_policy=per_day
  + first_day_offset
- time_window 生效并校验格式;删掉死代码
- CLI 打印时区策略与每段判定

Tests: 20 条(+6),api_server_growth_contract 9 条;pytest -k muhurta 122 过
5 败(5 条为基线既有失败,已在基线 commit 复现)。

Co-Authored-By: Grok (agent loop)
2026-11-09 09:21:11 +08:00
ClaudeandClaude Opus 5.5 2726b96a1b docs(task): fix brief FIX-muhurta-1 for #179 (review fail on 28c719cb)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 09:09:35 +08:00
jesse-uxandGrok (agent loop) 8dcc6537af feat(ondemand): shared on-demand calculation skeleton + transit on a date (#173, BUG-1816)
产品 2026-11-09 拍板 C 方案:本单只做后端共用模块与信封,前端另开单。

- scripts/ondemand_calc/contract.py:信封 jyotish.ondemand_calc.v1;必填校验不猜
  默认值;节点/位置口径缺省用产品默认值 mean/apparent 并标 profile_source;
  输入指纹 sha256;失败只留缺口,不回显推断日期
- registry.py:TOOLS + ondemand_calc_api 分派;未知 tool 阻塞并点名
- transit_date.py:九曜黄经/星座/度数/星宿与 pada/逆行/日速度,按传入的本命
  参考算宫位,UTC 与当地时间都给;position_mode=mean 返回 blocked
- 薄路由 /api/ondemand_calc(_load_local_module,无新增类方法)

Tests: contract 8 条、transit 12 条、api_server_growth_contract 9 条全过。

Co-Authored-By: Grok (agent loop)
2026-11-09 09:09:16 +08:00
ClaudeandClaude Opus 5.5 53b0609846 docs(task): #173 decision — backend shared module only (option C), explicit product defaults, mean position blocked
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 09:03:41 +08:00
jesse-uxandGrok (agent loop) 28c719cbde feat(muhurta): location-exact on-demand muhurta search (BUG-1822)
原做法把参考时刻当 UT 12:00、不用地点、五要素只取「日出 + 6 小时」一个点。

- 新增 scripts/muhurta_search_api.py:必填 activity/日期/地点/tz 或 timezone_id/
  岁差/交点,缺一项报错;每天取实际日出日落,取不到整天 blocked;每个候选时段
  在起止两端各取一次五要素与 Hora,时段内变化标出变化时刻;现有单点评分放进
  legacy_reference 并标 not_final
- 薄路由 /api/muhurta_search(_load_local_module,无新增类方法)
- CLI 加 --lat --lon --tz --timezone-id --ayanamsa --node-mode;无地点时首行写明
  近似值、不给推荐时段,并去掉 int(hour_from_sunrise + 6) 冒充 UT
- 全局时区推断收紧为「lat/lon 都给了才推断」,否则择时不给地点会崩

Tests: tests/test_muhurta_search_api_20261109.py 14 条;
test_api_server_growth_contract 9 条通过;pytest -k muhurta 116 过 5 败,
5 条在基线 b453505d 上同样失败(无关)。

Co-Authored-By: Grok (agent loop)
2026-11-09 08:50:19 +08:00
jesse-uxandGrok (agent loop) 74a739b2dc feat(card): seven acceptance counterexamples end to end (BUG-1812)
- career layer gets the D1 longitudes, so the paksha has one source (Obama
  base vs career mismatch fixed)
- card carries movable_lagna_moon.reason, Narayana ad_status / ad_reason and
  the mahadasha cycle_index; running line says "sub-period undecided"
- engine keeps the MD when the AD is undecided; timingFollowing skips
  zero_duration rows explicitly
- timingKeys allowlist: adstatus / adreason / cycleindex / zeroduration
- fixtures + capture script, 16 engine tests, 7 card tests, PROGRESS, BUG-1812

Co-Authored-By: Grok (agent loop)
2026-11-09 08:38:56 +08:00
jesse-uxandGrok (agent loop) 152b298dd3 fix(chart): Chara dasha dates come from the engine, not the page (BUG-1811)
占星师 2026-11-08 第五轮裁定 5:所有大运日期必须由原生大运引擎生成,显示层
不得自己按年数比例重算。BUG-1752 只修了星盘页的 Vimshottari 轨;Chara 轨仍在
浏览器里按 365.25 天/年从出生日推大运、按年数比例切分运,与报告页的公历周年
口径最多差一天。

- 新增 scripts/chart_dasha/chara_dates.py:给 jaimini 的十二段与每段十二个
  分运写 start / end(本地日历日)与 start_ts / end_ts(UTC 秒);[start, end),
  末段终点钉在父段终点,0 年段保留 start == end,平年 2 月 29 日落 28 日。
- /api/dasha/chara 返回前写这些字段并带 date_basis。
- rashi_dashas_native._chara 改读同一模块(报告输出不变,已与旧版逐段对照)。
- 星盘页 charaTrack 只复制引擎日期;删掉 addYears;没有日期的行不显示。
- 文案 CHARA_ANTARDASHA_DATE_NOTE 改为「与大运同一套边界」。
- 两份真实引擎响应 fixture 的 chara 段用 _compute_chara_dasha 重抓。
- BUG_HISTORY BUG-1811;PROGRESS-dasha-dates-engine-only-20261109。

验证:pytest 新用例 6 passed,相关 63 passed;node --test 新用例 4 pass、
既有 105 pass;tsc exit 0;lint 0 error。

Co-Authored-By: Grok (agent loop)
2026-11-09 08:32:21 +08:00
jesse-uxandGrok (agent loop) 2e9ca2d73a fix(reports): drop web-verification wording from user-visible report text (BUG-1810)
产品负责人 2026-11-08:用户看到的报告文字不出现「联网 / 外部资料 / 外部核验 /
MEVG / 真实案例 / Real Case / Global Web」,后台记录保留。

- 个人报告写作提示词:依据与边界改为「没有用户经历可对照」,置信度封顶 B 不变
- 年报:技法执行情况跳过 MEVG / Real Case 两行;没有纳入的删掉对应条目
- 合盘:技法执行情况删掉「外部资料与真实案例核对:未进行」整行
- 产品导出审计章节:这两行不再渲染,证据边界同类一句删除,packet 原样保留
- 质量门:只要求 Functional Benefic/Malefic 渲染;新增后台检查,要求 packet
  仍带这两行且它们没有出现在 markdown 里

Tests: 新增 frontend/tests/report-no-web-wording-20261109.test.ts(4)与
tests/test_report_no_web_wording_20261109.py(3);更新年报、合盘、审计章节、
质量门既有断言(原值/新值/原因已注明)。

Co-Authored-By: Grok (agent loop)
2026-11-09 08:20:50 +08:00
ClaudeandClaude Opus 5.5 c032823f9e research(rectification): reseal round7_integration_2026_11_09 on staging b453505d (BUG-1809)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m18s
Independent Staging Quality Gate / validate-python (push) Successful in 6m37s
Independent Staging Quality Gate / publish (push) Successful in 2m27s
Product owner approved 2026-11-09 ("agree new result"). Same protocol as
BUG-1720 / BUG-1759: c1a69445^ replay tree + float_split + round5 overlays +
b453505d scripts/references + a small replay overlay (new tag paths, retired
scorer zero-row adapter, RuntimeError guards). Product default strength scope
seed_only_v0, comparability policy common_evidence_coverage_v1.

- sealed 20: top-1 0.35 -> 0.30, top-3 0.45 -> 0.45, mean error 6.80 -> 6.75
- offset 900: top-1 0.0156 -> 0.0100, coverage 0.900 -> 0.883 (164/900 vs
  round5 tag; 57/900 over 4 cases vs pre-integration staging)
- live v5 231: best = truth 8 -> 8; 124 changes vs round5 tag, 115 vs
  pre-integration staging
- leaders: sealed 40/40 comparable; offset 863 comparable / 35 provisional /
  2 no single leader; live 226 / 5

Trial-for-trial identical to the integration agent's seed_only runs.
Sensitivity only, not accuracy (event scoring near chance, BUG-1644).
Older tags unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 07:28:04 +08:00
ClaudeandClaude Opus 5.5 7cdf83106a docs: task brief for #179 muhurta (2026-11-09)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 07:18:34 +08:00
ClaudeandClaude Opus 5.5 f5356c62c1 docs: task brief for #173 ondemand-transit-date (2026-11-09)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 07:18:29 +08:00
ClaudeandClaude Opus 5.5 41862634f3 docs: task brief for #169 counterexamples (2026-11-09)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 07:18:12 +08:00
ClaudeandClaude Opus 5.5 ae714e0349 fix(narayana): default strength scope back to seed_only_v0 pending the astrologer (BUG-1784)
Owner 2026-11-09: the R2 widening is on hold until the astrologer rules on it.
STRENGTH_SCOPE_DEFAULT returns to seed_only_v0. All R2 code stays: local
propagation, the selected / equal / unresolved statuses, and
seed_ad_start_p43d_v1 as a named non-default profile. profile_config and the
cache keys record strength_scope = seed_only_v0. R1 and R3 are unchanged.
Tests that pinned the widened scope now pass it explicitly, with
原值 / 新值 / 原因 notes. Evidence-card golden recaptured (TTL=0; only the
profile labels changed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 00:21:12 +08:00
ClaudeandClaude Opus 5.5 8feabcc588 docs(task): brief for dasha-dates-engine-only-20261109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 00:14:47 +08:00
ClaudeandClaude Opus 5.5 9c7b35ef63 docs(task): brief for reports-no-web-wording-20261109
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 00:14:42 +08:00
ClaudeandClaude Opus 5.5 b7ba7f4e4f fix(consult): R3 witness fields and Narayana profile_config reach the real card (BUG-1786, BUG-1783)
Found in the round-7 cross-branch check: on public charts (Zidane, Obama)
the Neecha Bhanga row never reached yogas_detail. The compact detector entry
dropped formation_evidence, and the row sat past the 30-row cap. Keep the
witness fields when compacting and never cut a row that carries them (the
cap stays 30). The card's Narayana method_status also dropped the engine's
profile_config (timing key allowlist); carry it through.

Evidence-card golden recaptured with TTL=0 (Obama: row 30 is now Neecha
Bhanga); the load-dependent VedAstro closure reason is kept as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 00:03:21 +08:00
ClaudeandClaude Opus 5.5 b1a83761b3 feat(consult): 解读依据 rows read the receipt's result_line / display_status (BUG-1793)
The 简明解读 list's grey line is the receipt row's result_line (fallback: what
the layer computed); firm → 已算, conditional → 有条件. One backstage filter
(isBackstageAuditRow: external / MEVG / real-case, plus provider, engine,
packet, calibration, Western) is shared by withTechniqueEvidence and the list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 23:46:30 +08:00
ClaudeandClaude Opus 5.5 a9111fae20 merge: codex/chat-mode-ui-1108 into round7 integration (BUG-1795..1798)
Contract keeps BUG-1794 (no web / external / MEVG / real-case wording in either
mode) with BUG-1795's 深度解读 / 简明解读 names; the missing-audit-table repair
prompt keeps BUG-1794's "no verification rows" wording under the new name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 23:43:49 +08:00
ClaudeandClaude Opus 5.5 8aa0d0cbcd merge: codex/round7-rect-kp-1108 into round7 integration (BUG-1801..1804)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 23:41:07 +08:00
ClaudeandClaude Opus 5.5 94d5bd8008 merge: codex/round7-evidence-1108 into round7 integration (BUG-1789..1794)
Evidence card independence keeps both the engine's R3 `self_reference_only`
name list and the evidence branch's `self_reference` notes map.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 23:40:37 +08:00
ClaudeandClaude Opus 5.5 5b0c206ee8 docs: BUG-1789..1794 history with r8 blind-eval results
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 23:31:06 +08:00
ClaudeandClaude Opus 5.5 fc319ab5ec docs: BUG-1801..1804 rectification comparability, API guard, lookup budget, KP note
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:41:31 +08:00
ClaudeandClaude Opus 5.5 f60e49c59f docs: BUG-1785 rectification sensitivity of round-6 R1 + R2, grouped by case
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:39:01 +08:00
ClaudeandClaude Opus 5.5 d784e99867 feat(narayana): round-6 R1 default AD direction, R2 strength scope and local propagation, R3 self-reference
- R1: default AD direction rath_p50_md_parity_v1 (start parity kept as a research
  profile); full profile config + algorithm version on every Narayana output, cache
  keys (consult, api chart, probes, long report, synastry) and the rectification run.
- R2: one strength profile at the seed, AD start and p.43 (d); selected / equal /
  unresolved kept apart; unresolved nodes block only what depends on them (seed
  candidates kept, dated MDs before an unresolved length kept, AD-only loss in
  rectification keeps the MD).
- R3: Neecha Bhanga witness fields (reference, relative_house, self_reference,
  independent_confirmation_allowed, self_reference_only) from the main detector to
  the evidence card yogas_detail rows; self-reference-only never counts as support.
- Sync her b54812c3 KP clock validation; port her round-5 / round-6 tests.
- BUG-1783..1787; golden recaptured with TTL 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:38:00 +08:00
ClaudeandClaude Opus 5.5 d9306658fb docs: BUG-1798 capability-audit note
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:10:23 +08:00
ClaudeandClaude Opus 5.5 9795033da7 feat(consult): 解读方式 pill, 解读依据 list, no 联网 rows (BUG-1795..1798)
Owner-approved chat answer-mode UI (2026-11-08):
- Modes named 深度解读 (professional, default) / 简明解读 (plain) in the UI,
  the model-facing mode line and the runtime contract (names only).
- 解读方式 pill left of send (常用问题 pill look); menu reuses the preset
  popup rows; 功能吉凶口径 (PVR 表 30 / BPHS 例外表) under 深度解读 only;
  Drawer on phone. Remembered per user in localStorage; applies from the
  next question; 重新生成 uses the current choice.
- Mode resolution: this question's words -> pill -> 深度解读; history no
  longer sets the mode. Request carries answerMode (+ functionalProfile
  only under 深度解读); engine gets analysis_mode / functional_profile.
- Receipt records answerMode / functionalProfile; 简明解读 answers show a
  collapsed 解读依据 hairline list built from the receipt audit rows.
- External verification rows (联网 / MEVG / 真实案例) are dropped from the
  rendered 深度解读 audit table and never listed.
- Composer stacks when the single-row field would be under 64px (320px).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 22:07:21 +08:00
ClaudeandClaude Opus 5.5 04b4960933 docs: BUG-1773 / BUG-1774 history with r7 blind-eval results
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m9s
Independent Staging Quality Gate / validate-python (push) Successful in 6m47s
Independent Staging Quality Gate / publish (push) Successful in 2m51s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 21:13:44 +08:00
ClaudeandClaude Opus 5.5 d889617f2a fix(consult): backstop audit section starts its own paragraph (BUG-1765)
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m15s
Independent Staging Quality Gate / validate-python (push) Successful in 6m50s
Independent Staging Quality Gate / publish (push) Successful in 3m15s
The missing-section continuation shared the length-continuation splice, so a
table written after an answer that ended mid-line was glued to the last
sentence and its H2 did not render.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 18:41:35 +08:00
Claude 528eaefb6a Merge branch 'codex/round6-engine-1108' into codex/round6-fixes-1108
# Conflicts:
#	docs/BUG_HISTORY.md
#	frontend/tests/fixtures/consult-evidence-card-golden.json
2026-11-08 16:52:48 +08:00
ClaudeandClaude Opus 5.5 a1241cbfcd docs: r5 and plain-mode r1 blind-eval evidence for BUG-1758/1763/1764
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 16:52:14 +08:00
ClaudeandClaude Opus 5.5 473d3fe2f3 docs: BUG-1768..1772 for the round-5 item reply (N1-N5, K1-K3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 15:22:11 +08:00
ClaudeandClaude Opus 5.5 d610756966 fix: chart dasha exact boundaries as UTC seconds (BUG-1752 privacy marker collision)
The first exact-boundary format printed local clock times; a generated
hour:minute collided with a private marker the repo scan forbids. Boundaries
are now start_ts / end_ts (UTC epoch seconds) beside the engine's local days;
no time string is printed. Goldens recaptured (evidence card TTL=0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 15:11:10 +08:00
ClaudeandClaude Opus 5.5 d676292343 fix: astrologer acceptance for BUG-1758/1763/1752 (source ledger, audit acceptance, engine boundaries)
- BUG-1758: the card's affliction layer is a source ledger: one entry per fact
  with its input, effect (conflicts / not_executed) and every house it bears
  on; a fact shared by two houses is one source, never two votes.
- BUG-1763: output acceptance after the one repair: a professional answer
  without the Technique Audit Table, or any answer without the engine audit
  rows (plain mode's evidence entry), fails as incomplete (kept text, no charge).
- BUG-1752: engine rows carry exact local start/end with UTC offset, parent
  start, cycle, and a meta block (365.25-day years, zone, [start, end)); the
  chart page copies them. Tests: midnight crossing, birth balance, second
  cycle, zero-length rows and 0-year Narayana / Chara MDs never current.
- Goldens recaptured (evidence card TTL=0; chart-view dasha from the engine).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 14:59:50 +08:00
ClaudeandClaude Opus 5.5 dd2cd83c3e fix: affliction sources not counts, audit-table backstop, chart page engine AD/PD (BUG-1758, BUG-1763, BUG-1764, BUG-1752)
- BUG-1758: the model card drops affliction_evidence.houses.*.signal_count
  (backend field kept); S-09, the pressure basis line and the professional
  voice name the sources and never a count.
- BUG-1763: a professional answer that stopped on its own without the
  Technique Audit Table gets one table-only continuation.
- BUG-1764: the backtest harness passes the answer mode (agent context,
  user-turn shape, length continuation); CONSULT_BACKTEST_ANSWER_MODE=plain.
- BUG-1752: /api/chart carries dasha.antardasha_timeline from
  chart_dasha.birth_moment.sub_period_timeline; the chart page copies the
  engine AD/PD rows and no longer cuts periods by year proportions.
- Goldens: chart-view golden dasha recomputed from birth_moment; evidence-card
  golden recaptured with TTL=0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 14:43:50 +08:00
Claude 55d3396615 Merge branch 'codex/rect-r5-measure-1108' into codex/round5-integration-1108
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m15s
Independent Staging Quality Gate / validate-python (push) Successful in 6m29s
Independent Staging Quality Gate / publish (push) Successful in 2m58s
# Conflicts:
#	docs/BUG_HISTORY.md
2026-11-08 13:50:07 +08:00
ClaudeandClaude Opus 5.5 742bdd214f docs: r4 evidence for BUG-1754
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 13:49:36 +08:00
ClaudeandClaude Opus 5.5 4f3a45e9ac docs: r4 blind-eval evidence for BUG-1753/1754; record BUG-1758
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 13:49:29 +08:00
ClaudeandClaude Opus 5.5 17d932a517 fix(rectification): PVR functional default + source-version Narayana, reseal round5_pvr_narayana_2026_11_08 (BUG-1759)
Product approved 2026-11-08 (astrologer round-5 rulings 1, 3; same basis as
the report and the chat card):
- functional roles: drop the bphs_exception_profile pin at the three scoring
  call sites (+ research mirror); default pvr_table_30 with Moon paksha.
- Narayana: narayana_rath.calc_narayana_rath (two cycles) / antardasha, ages
  via narayana_age from the candidate birth moment; probes date from the birth
  moment. A blocked source step makes the layer unavailable, never the old
  algorithm. Blocked count on all three datasets: 0.
- Reseal: sealed 20, offset 900, live v5 231 under the new tag; identical to
  measurement variant (c) trial by trial. float_split / 166d kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-08 13:12:03 +08:00