jesse-ux
e1cb2efcbe
fix(preset): verify reviewed evidence and match executed branches
2026-11-12 13:55:26 +08:00
Claude and Claude Opus 5.5
209b8ca4b4
chore(preset): import the 2026-11-08 preset library draft unchanged ( #180 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-12 13:12:33 +08:00
jesse-ux
2523dcdc64
test(report): verify Mudda intervals in both report editions
2026-11-12 11:49:45 +08:00
jesse-ux
c4d0b379b7
Merge origin/staging into #191 delivery branch
2026-11-12 11:43:00 +08:00
jesse-ux
54b75988dd
fix(report): show native Mudda intervals and export saved readings
2026-11-12 11:42:59 +08:00
jesse-ux
d78c6e6784
fix(report): strip internal issue refs from reading facts ( #198 )
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m9s
Independent Staging Quality Gate / validate-python (push) Successful in 6m31s
Independent Staging Quality Gate / publish (push) Successful in 2m37s
2026-11-12 11:02:08 +08:00
jesse-ux
380bb8830d
fix(report): show Narayana branches and per-planet Shadbala
Independent Staging Quality Gate / validate-frontend (pull_request) Failing after 3m59s
Independent Staging Quality Gate / validate-python (pull_request) Successful in 7m18s
Independent Staging Quality Gate / publish (pull_request) Skipped
Independent Staging Quality Gate / validate-python (push) Successful in 7m34s
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m2s
Independent Staging Quality Gate / publish (push) Successful in 2m38s
2026-11-12 09:47:04 +08:00
jesse-ux
19475120f9
fix(report): preserve wording and evidence across the new tables
Independent Staging Quality Gate / validate-python (pull_request) Successful in 6m37s
Independent Staging Quality Gate / validate-frontend (pull_request) Successful in 7m1s
Independent Staging Quality Gate / publish (pull_request) Skipped
2026-11-12 02:06:31 +08:00
jesse-ux
ff0acddf2b
merge: align #189 with current staging
2026-11-12 01:50:10 +08:00
jesse-ux
651d0eeed8
fix(report): keep candidate and audit statuses in both editions
2026-11-12 01:49:43 +08:00
jesse-ux
6c2027d337
merge: update #178 to current staging
Independent Staging Quality Gate / validate-frontend (pull_request) Successful in 7m19s
Independent Staging Quality Gate / validate-python (pull_request) Successful in 7m30s
Independent Staging Quality Gate / publish (pull_request) Skipped
2026-11-11 22:37:16 +08:00
jesse-ux
a044c04e17
feat(ondemand): add explicit Prashna chart calculation
2026-11-11 22:35:47 +08:00
jesse-ux
8d9e77ca2f
fix(report): preserve status and field meaning in both cleanup passes
Independent Staging Quality Gate / validate-python (pull_request) Successful in 6m46s
Independent Staging Quality Gate / validate-frontend (pull_request) Successful in 7m23s
Independent Staging Quality Gate / publish (pull_request) Skipped
2026-11-11 18:56:47 +08:00
jesse-ux
a604f4da36
merge: update #188 to current staging
2026-11-11 18:24:23 +08:00
jesse-ux
e491b7b054
fix(report): filter audit wording and show verification limits
2026-11-11 16:50:14 +08:00
jesse-ux
d92cad065e
feat(ondemand): add native dasha calculation for a requested date
Independent Staging Quality Gate / validate-frontend (pull_request) Failing after 3m18s
Independent Staging Quality Gate / validate-python (pull_request) Successful in 6m54s
Independent Staging Quality Gate / publish (pull_request) Skipped
2026-11-11 15:14:06 +08:00
Claude and Claude Opus 5.5
8196387efa
fix(ondemand): varga echoes parashara for D2/D3, labels from VARGA_META, no 0-degree fallback ( #176 acceptance, BUG-1819)
...
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m6s
Independent Staging Quality Gate / validate-python (push) Successful in 6m36s
Independent Staging Quality Gate / publish (push) Successful in 2m57s
- D2/D3 without a variant reported classical_local; the brief asks for
parashara (identical at 3600 sampled points, echo only).
- usage_labels were a hand-written list that disagreed with VARGA_META.area
for D9 and D11; now taken from VARGA_META.
- a missing engine longitude silently became 0 deg Aries; now blocked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-11 14:11:30 +08:00
Claude and Claude Opus 5.5
0a984d6f8c
merge: #176 ondemand-varga into batch5 acceptance
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-11 14:05:55 +08:00
Claude
a641bc32ee
merge: #rect-layer-alias into batch5 acceptance
...
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-11 14:05:36 +08:00
jesse-ux and Grok (agent loop)
243eeb7ac9
feat(ondemand): varga tool with explicit variants ( #176 , BUG-1819)
...
只做后端:
- scripts/ondemand_calc/varga.py:出生资料与岁差必填;divisions 1–6 个、不重复、
必须在 VARGA_META 里;variants 只允许请求里的 D2/D3 且必须是真实变体名,
否则 blocked 并在 reason 里列出可用变体
- 标准分盘走 calc_all_vargas、变体走 calc_varga_with_variant;每盘回显实际方法名与
part_size(取自引擎 _meta,不手写)
- 用途标签只放 usage_labels 并带 tradition_note;raw 里没有把用途当唯一含义的键
- 引擎抛错一律 blocked 且 raw 为空
- registry 加两行注册
Tests: tests/test_ondemand_varga_20261109.py 17 条;连同 solar_return /
transit_window / transit_date / contract / api growth 共 92 条全过。
Co-Authored-By: Grok (agent loop)
2026-11-09 21:32:11 +08:00
Claude and Claude Opus 5.5
c9f2f76f6a
fix(ondemand): beyond_next_return compares UTC with UTC ( #175 acceptance, BUG-1818)
...
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m19s
Independent Staging Quality Gate / validate-python (push) Successful in 6m44s
Independent Staging Quality Gate / publish (push) Successful in 3m6s
Round 2 read coverage.end.local, but _parse_moment cannot parse the
+hh:mm suffix, so that branch never ran and the comparison always fell
back to utc + profile.tz. Convert each Mudda end to UTC with the
solar-return instant's own offset (tajika_mudda.TIME_BASIS) and compare
it with coverage.end.utc. Adds tests for a UTC+8 birth and a New York
birth (±3 h around the next return, plus real rows).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 19:33:24 +08:00
Claude and Claude Opus 5.5
d46df6a42a
refactor(rect): move purpose gate into scripts/rectification_purpose_gate/ ( #186 )
...
Keeps the scripts/ root at the 476-file budget; the import path
rectification_purpose_gate is unchanged and no test is edited.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 19:33:24 +08:00
Claude and Claude Opus 5.5
97a8636f26
merge: accept codex/purpose-gate-contract-20261109 ( #186 , batch 4)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 19:33:24 +08:00
Claude and Claude Opus 5.5
f089ab4d56
merge: accept codex/explicit-profile-20261109 ( #185 , batch 4)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 19:33:24 +08:00
jesse-ux and Grok (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
Claude
b6f470d25c
merge: accept codex/ondemand-solar-return-20261109 (batch 4)
...
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 19:21:34 +08:00
jesse-ux
915d719a64
fix(rect): reject stale purpose bindings before payload validation ( #186 )
...
Verified 16 purpose-gate tests, 38 reference comparisons and 62 privacy checks.
2026-11-09 19:11:15 +08:00
jesse-ux and Grok (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
jesse-ux and Grok (agent loop)
b8a56c48ed
fix(ondemand): beyond_next_return compares on one time basis ( #175 round 2, BUG-1818)
...
打回:Mudda 原始段是返照地点的本地时刻,覆盖区间终点却拿 utc 去比,差一个时区偏移。
- 比较两边都改用 coverage.end.local(没有 local 时退回 utc + 返照地点偏移)
- 新增 4 条测试(北京 +08 与纽约 −05 各 ±3 小时);旧代码上 2 条失败
- 未改 scripts/solar_return.py 或任何冻结文件;既有 16 条未动
Tests: 本文件 20 条,连同 transit_window/transit_date/contract/api growth 共 70 条全过。
Co-Authored-By: Grok (agent loop)
2026-11-09 17:47:07 +08:00
Claude and Claude Opus 5.5
8a958b5a65
fix(narayana): separate AD start step from AD direction in method_status
...
Independent Staging Quality Gate / validate-frontend (push) Successful in 5m19s
Independent Staging Quality Gate / validate-python (push) Successful in 6m49s
Independent Staging Quality Gate / publish (push) Successful in 3m22s
ad_start (小运起点) is its own step: an unresolved MD-vs-7th comparison or its
lord blocks ad_start (ad_direction not_reached); Saturn + Ketu in the MD sign
blocks ad_direction. Card step names, narayanaStepsToName, timing whitelist,
contract wording, golden (TTL=0) and fixtures updated.
占星师 2026-11-09 第七轮回复 R2 选 D;产品负责人同意 (BUG-1830)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 16:21:06 +08:00
jesse-ux and Grok (agent loop)
8a844f3c04
feat(rect): separate the three leader counts ( #184 , BUG-1827, P1 item 2)
...
占星师 2026-11-09 第七轮 P1 第 2 条:候选分钟数、连续区间数、是否唯一时刻要分开,
代表分钟不能冒充唯一解。
- adjudicate_candidate_rows 结果新增 top_candidate_count(同分候选分钟数)、
top_segment_count(连续区间数)、unique_time(是否唯一时刻)
- 空候选分支给同样的三个字段(0 / 0 / false),形状一致
- 新增 tests/test_rectification_layer_alias_bug1827.py 5 条:两分钟连续领先是
1 段但非唯一时刻、单一领先是 1/1/true、两段同分是 2 段、代表时刻只是段、
无候选全零
P1 第 1 条(每项贡献的 event_id / layer / dependency / profile / points /
缺失原因)与第 3 条(missing_mandatory_layers 的字段形状)仍等任务书拆分与
字段形状的裁定,未实施。
Tests: 新增 5 条 + 既有 1801/active_events/1802/technique_contract 合计 40 条全过。
Co-Authored-By: Grok (agent loop)
2026-11-09 16:16:33 +08:00
jesse-ux and Grok (agent loop)
54adb99073
feat(ondemand): solar return for any target year, location chosen by the caller ( #175 , BUG-1818)
...
只做后端:
- scripts/ondemand_calc/solar_return.py:target_year(1900–2100、不早于出生年);
返回地点 birth_place / current_location,没选才回退出生地并写 fallback_note,
current_location 缺项一律 blocked 且不回退
- 岁差必填、节点与位置口径显式传,position_mode=mean 阻塞
- 输出三层:mudda_raw(原始十段,每段标 beyond_next_return)、nominal_year
(365.25)、coverage(到下一次实际回归);harsha_bala 恒 blocked
- 星历降级与引擎抛错都 blocked,不输出任何估算日期
- registry 加两行注册
Tests: tests/test_ondemand_solar_return_20261109.py 16 条;连同 transit_date、
transit_window、contract、api growth 共 66 条全过。合成盘两地返照时刻差 0 秒、
上升不同;覆盖终点与下一年返照时刻差 0.0 秒。
Co-Authored-By: Grok (agent loop)
2026-11-09 15:48:02 +08:00
Claude and Claude Opus 5.5
b416a7d921
feat(narayana): keep the seed as a common field across dual-lord candidates
...
When the seed comparison is unresolved only because a Scorpio / Aquarius lord is
undecided and every candidate lord gives the same seed sign, keep that seed
(seed_common_field); the lord identity stays unresolved and its dependent
length / ADs keep their own steps or branches. Card status line says so.
占星师 2026-11-09 第七轮回复 §1 公共字段规则(R2 选 D;产品负责人同意),BUG-1832
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 15:39:17 +08:00
Claude and Claude Opus 5.5
6131e6c163
feat(narayana): R2 option D default scope with named candidate branches
...
- Default strength scope seed_ad_start_p43d_v1 (same Rule 3 at seed, AD start, p.43 (d));
unresolved is never equal. Algorithm version narayana_rath:2026-11-09:r8d.
- narayana_branches: seed / seed order / MD length timeline branches and per-MD AD
start / direction branches, each with branch_id and preceding assumptions; never
spliced; enumeration cap with candidates_exhausted; used_for_scoring false.
- seed_only_v0 kept only as legacy_conditional_branch (假设跳过 Rule 3 时的结果),
never overrides the main status, no vote.
- Evidence card: narayana.branches (question window) and legacy_conditional;
contract rule A-12.
- Tests per branch case, never-splice, not-exhausted, legacy branch; golden TTL=0.
占星师 2026-11-09 第七轮回复 R2 选 D;产品负责人同意 (BUG-1829..1831)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 15:39:06 +08:00
jesse-ux and Grok (agent loop)
494c85e001
feat(rect): purpose-use decision contract, ported from the astrologer's reference ( #186 , BUG-1833)
...
只交付合同与测试,不接入任何流程:
- scripts/rectification_purpose_gate.py:assess_use(assessment, expected_binding)
与参考代码逐行等价(七项绑定、必填层覆盖三态、scan/branch 枚举、两个布尔、
两个 claim 列表;刻意没有区间宽度与分数差门槛)
can_use_interval 只在 scope_ready 为真;can_modify_birth_record 与
representative_is_birth_truth 恒为假
- tests/test_rectification_purpose_gate.py:13 条参考测试 + 2 条新增
- 没有任何现有代码 import 新模块
Tests: 15 过 / 0 败;与参考模块对 12 个合成场景比较返回值 0 处不一致。
Co-Authored-By: Grok (agent loop)
2026-11-09 15:34:55 +08:00
jesse-ux and Grok (agent loop)
f58cd93ee4
feat(api): native calculation takes explicit node/position modes — backend half ( #185 , BUG-1828)
...
- 新增模块级 _request_calculation_modes(body):常量从 ondemand_calc.contract 取,
缺省 mean / apparent 并标 product_default_explicit;非法值 400;
position_mode=mean 400 且消息含 position_mode_unsupported
- 5 处隐式 body.get(..., 'mean') 改为显式口径(缓存键、高严谨 birth payload、
主题报告、_compute_chart_sync 三处);主题报告不再把非法值静默改成 mean
- 缓存键加 calculation.position_mode,cache_schema_version 8 → 9(三栏注释)
- execute_consultation_workflow 的两条返回路径都带 calculation_profile
未动:declared_window_chart 与其余不在本单范围的入口(保持原隐式默认);
domain_calculation_service.py 等冻结文件未改。
Tests: tests/test_explicit_calculation_modes_bug1828.py(11 条);连同
api_server_growth_contract 与 ondemand contract 共 27 条全过。
前端部分(schema / toolInput / 预热 / 回执)下一轮继续。
Co-Authored-By: Grok (agent loop)
2026-11-09 15:17:39 +08:00
Claude and Claude Opus 5.5
35c87349e3
fix(accept): #174 ingress to_sign/direction and per-time outside-window flags
...
- to_sign was taken from the JD instead of a longitude, and direction read a
direct 0° Aries ingress as retrograde; both now come from the step's
longitudes.
- shadow_entry / shadow_exit / both stations carry outside_requested_window
as the brief requires; the window end uses the end day's UTC offset.
- 3 regression tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 14:42:27 +08:00
jesse-ux and Grok (agent loop)
78c34c09ab
feat(ondemand): transit window — ingress, stations, retrograde loops, target longitude ( #174 , BUG-1817)
...
按 #173 的合同加第二个按需工具,只做后端:
- scripts/ondemand_calc/transit_window.py:四类事件(ingress / station /
retrograde_loop / target_longitude),黄经与日速度来自
_calc_sidereal_planets_for_jd(先配星历路径),口径由调用方显式传
- 事件二分到 ≤1 分钟;逆行往返给两个停滞、retrograde_span、影子期进出,
区间外每侧最多 400 天并标 outside_requested_window
- 节点不报停滞:partial + node_station_not_supported 的 gap
- 位置口径 mean 阻塞;缺项返回 blocked 信封并点名,不编任何日期
- registry 加两行注册
Tests: tests/test_ondemand_transit_window_20261109.py 17 条;连同 transit_date、
contract、api growth 共 47 条全过。2026 水星逆行停滞与直接 SwissEph 速度二分
相差 1.41 分钟。
Co-Authored-By: Grok (agent loop)
2026-11-09 14:18:39 +08:00
Claude and Claude 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 and Claude Opus 5.5
c84d143088
fix(accept): #173 natal Moon is never the transit Moon; unknown ayanamsa blocks
...
transit_date counted house_from_moon from the transit Moon when the caller gave
no natal Moon; the natal reference is now only what the caller supplied.
resolve_profile now refuses an unsupported ayanamsa name instead of passing it
to the engine.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-09 09:58:59 +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-ux and Grok (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
jesse-ux and Grok (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
jesse-ux and Grok (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-ux and Grok (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-ux and Grok (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