fix(ephemeris): include nutation in the sidereal frame
恒星黄道改为与 Swiss Ephemeris FLG_SIDEREAL 同一套含章动岁差。 产品默认路径不再用平岁差去减含章动的视位置。上升和宫头用同一个岁差。 校正身份升到 rectification-v5-matrix-scoring-12。 BUG-1275。未推送,未部署。v5 先验头名三格下降 1.3 个百分点,不调参。
This commit is contained in:
+9
-9
@@ -17135,16 +17135,16 @@
|
||||
|
||||
## BUG-1275 | 恒星黄道经度少扣章动:所有行星偏约 0.005°,Vimshottari 日期差 2–3 天
|
||||
|
||||
- 状态:investigating(修复单 `docs/tasks/TASK-ephemeris-nutation-20261008.md`)
|
||||
- 状态:resolved(只覆盖恒星黄道经度与同一框架的上升、宫头;v5 77 例评测单独记在进度,未完成时不把红线 3 的评测格写成已关闭)
|
||||
- 首次发现 / 最近更新:2026-10-08 / 2026-10-08
|
||||
- 来源:Claude 验收完整数据版报告时,对比上游 `23be1807` 同盘导出。
|
||||
- 影响面:`scripts/jyotish_engine.py` 的 `_calc_sidereal_planets_for_jd` 与 `_sidereal_calculation_profile` 的 `legacy` 档,以及同样写法的其他调用点(待核)。所有用到恒星黄道行星经度的地方:报告、对话卡、星盘页、大运、生时校正打分。
|
||||
- 现象:乔布斯公开盘(Lahiri,平均交点)月亮 344.51652°,Swiss Ephemeris `FLG_SIDEREAL` 为 344.51148°,上游 344.51°;水星大运起点我方 1958-03-19、上游 1958-03-22。
|
||||
- 影响面:产品默认盘、行运、Bhava Chalit、日运月亮、Shadbala 记录的岁差、KP 宫头展示、生时校正打分。`mean` 档仍去掉章动。西方盘是热带,不适用。Hora / Ghati / Bhava 上升公式未改。
|
||||
- 现象:乔布斯公开盘(Lahiri,平均交点)月亮相对 Swiss Ephemeris `FLG_SIDEREAL` 偏约 0.005°;大运日期可因此差 2–3 天。
|
||||
- 触发条件:任何盘;偏差等于出生时刻的黄经章动 Δψ(最大约 17.2″),符号随年份变化。
|
||||
- 根因:行星取含章动的热带视位置,减去 `swe.get_ayanamsa(jd)` 的不含章动平岁差,两边口径不一致。差值与 `swe.calc_ut(jd, swe.ECL_NUT)` 的 Δψ(0.0050426°)一致。
|
||||
- 修复:未修。
|
||||
- 验证:本机 Swiss Ephemeris 2.10 直接计算(热带视位置 − 平岁差 = 344.516521;`FLG_SIDEREAL` = 344.511478)。
|
||||
- 防复发:待修复单。
|
||||
- 相关记录:2026-10-07 sync6 验收里「虚构盘大运与独立计算差约 2 天」曾被 Claude 判为岁差版本差异,实为本条。BUG-1268(子运起点)。
|
||||
- 根因:行星取含章动的热带视位置,减去 `swe.get_ayanamsa(jd)` 的不含章动平岁差,两边口径不一致。差值与 `swe.calc_ut(jd, swe.ECL_NUT)` 的 Δψ 一致。
|
||||
- 修复:`legacy` 与产品默认路径改为 `get_ayanamsa_ex_ut` 的真岁差,与 `FLG_SIDEREAL` 同一框架。不新增第四档。`mean` 仍用 `FLG_NONUT`。宫制仍是 `sripati` / `b"R"`。同输入分数变化,算法身份升到 `rectification-v5-matrix-scoring-12`。日期窗 SQL 守卫已能接受该代数,没有新迁移。
|
||||
- 验证:`tests/test_sidereal_nutation_frame.py`。乔布斯、奥巴马、爱因斯坦公开盘与虚构盘,Lahiri / Raman / KP,平均交点与真实交点,九星 `degree_raw` 与 `FLG_SIDEREAL` 差 ≤ 1e-6°。PyJHora 4.8.7 只作离线 JSON 对照,pytest 不导入 jhora。
|
||||
- 防复发:上述回归。快速门导入扫描仍禁止运行时 `import jhora`。
|
||||
- 相关记录:2026-10-07 sync6 验收里「虚构盘大运与独立计算差约 2 天」曾被 Claude 判为岁差版本差异,实为本条。BUG-1268(子运起点)。BUG-621(旧校正记录仍只读打开)。
|
||||
- 复发自:无。
|
||||
- 修复版本:无。
|
||||
- 修复版本:本分支 `codex/ephemeris-nutation-20261008`。未推送,未部署。
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"record_version": "reported-offset-native-candidate-date-v3",
|
||||
"frozen_at_utc": "2026-10-08T10:23:32.009270+00:00",
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"radii_minutes": [
|
||||
15,
|
||||
30,
|
||||
60
|
||||
],
|
||||
"offsets_minutes": [
|
||||
-30,
|
||||
-20,
|
||||
-15,
|
||||
-10,
|
||||
-8,
|
||||
-5,
|
||||
-3,
|
||||
0,
|
||||
3,
|
||||
5,
|
||||
8,
|
||||
10,
|
||||
15,
|
||||
20,
|
||||
30
|
||||
],
|
||||
"minute_step": 1,
|
||||
"dataset": "references/real_case_calibration/minute_rectification_holdout_v3.json",
|
||||
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
|
||||
"dataset_benchmark_id": "minute_rectification_fact_ranker_v4_holdout_v3",
|
||||
"implementation_sha256": "511158c8387658d51f6055bd7afd15730b8b25314510d48f52498ed737c824d7",
|
||||
"implementation_sha256_prefix": "511158c8387658d5",
|
||||
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
|
||||
"production_scoring_files": [
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/ashtakavarga.py",
|
||||
"scripts/dasha_analyzer.py",
|
||||
"scripts/divisional_charts_extended.py",
|
||||
"scripts/domain_calculation_service.py",
|
||||
"scripts/functional_benefics.py",
|
||||
"scripts/jaimini.py",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py",
|
||||
"scripts/minute_rectification_feature_facts_v4.py",
|
||||
"scripts/narayana_dasha.py",
|
||||
"scripts/rectification/api_service.py",
|
||||
"scripts/rectification/candidate_contrast.py",
|
||||
"scripts/rectification/candidate_window.py",
|
||||
"scripts/rectification/case_holdout.py",
|
||||
"scripts/rectification/contracts.py",
|
||||
"scripts/rectification/dasha_transition_proximity.py",
|
||||
"scripts/rectification/decision_policy.py",
|
||||
"scripts/rectification/event_probes.py",
|
||||
"scripts/rectification/refinement_packet.py",
|
||||
"scripts/rectification/scoring_service.py",
|
||||
"scripts/shadbala.py",
|
||||
"scripts/varga.py"
|
||||
],
|
||||
"production_scoring_sha256": "b72dbd61feec556c3863cb1b4496ded677c7077324a71b86e31722250a8d1528",
|
||||
"research_files": [
|
||||
"scripts/research/reported_offset_sweep.py",
|
||||
"scripts/research/cluster_width_lib.py",
|
||||
"scripts/research/probe_supply_after_six.py",
|
||||
"scripts/research/sealed_holdout_rerun.py",
|
||||
"scripts/minute_rectification_blind_eval.py",
|
||||
"scripts/minute_rectification_fact_blind_eval_v4.py",
|
||||
"scripts/minute_rectification_holdout_validator.py"
|
||||
],
|
||||
"research_implementation_sha256": "12dc4049d8feeaf9e8f7df54666e7de7e8de6b45f195f52999bdbd52217908d9",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "cdc0e68edc770a2a1810fbdb68cbfd46dcd50b267c739c496fcc078c5e26b5b4",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
"scripts/ashtakavarga.py": "9bfc0b8a06af6122fa6c3881706e64f28b9ba58b53d98ff55957d4741d820f3f",
|
||||
"scripts/dasha_analyzer.py": "5e53b1b4d4c7414c08dd0e7716f120a63c70ec3428ec93547f64d55c580da0e1",
|
||||
"scripts/divisional_charts_extended.py": "e9820e80f14fddc86ab5495d11455d16c2d3c9502a9a242fcf9efc41186e0d11",
|
||||
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
|
||||
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
|
||||
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
|
||||
"scripts/minute_rectification_blind_eval.py": "07aa30d8bad3278669495d5fea8be937aaf6367c8af980ff4f2fe9aa84ccc6ff",
|
||||
"scripts/minute_rectification_fact_blind_eval_v4.py": "bdf460e3467208e8b87345c5beb2128f3e22de7eeffd68f72b281b3ad9affc92",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py": "f1a0d8d2482cd754d2e7f253a9606b0373519435a2bf58cfc3753e2b9ae0fb76",
|
||||
"scripts/minute_rectification_feature_facts_v4.py": "3d899a2cdd4825b8e32062443d487edcd2173a4ea55a36eb9f3abe587c0faf0f",
|
||||
"scripts/minute_rectification_holdout_validator.py": "b60b1c752e58672beaee8b36eb3b2348169726cda070ec969db0f13e7ed715af",
|
||||
"scripts/narayana_dasha.py": "c7aaefd4b7b7ea98a5b94e0f7798e5d0139c7423d10ce4ebfff258a460d4456f",
|
||||
"scripts/rectification/api_service.py": "e316ced0f3796d0378a0fe1aad950ee25922ae8afd53add578ed59ca8b2f0f79",
|
||||
"scripts/rectification/candidate_contrast.py": "eee7da71c0574a08876404b78ca111153fa95fb83ace82b9fdca141d1992e273",
|
||||
"scripts/rectification/candidate_window.py": "2fbc5058b12049b15fca375cdc125b8283e19f9f3e4bedcc291e344501891bef",
|
||||
"scripts/rectification/case_holdout.py": "fe0e699b617d9e216acdfeff87af4221c1d6f4c101bf33e1dbf14e2bcd75a8b5",
|
||||
"scripts/rectification/contracts.py": "c6dc6bd230e38f9f2126c224aae9ddbd6415304c15340f8c7cd3f06f6ef3160f",
|
||||
"scripts/rectification/dasha_transition_proximity.py": "0afba494aa12899621173c3cc941c6c1d0be9cec0bdf4c4a1c9bcd004ab22de8",
|
||||
"scripts/rectification/decision_policy.py": "80e8de4680d19a052213bb821d2a9c94143a2962235aeb27f6ad81374d2e60d5",
|
||||
"scripts/rectification/event_probes.py": "9bbadc246e6b8e94bb047522c3e5645613f508b3473ef40b38a207c77fdad58c",
|
||||
"scripts/rectification/refinement_packet.py": "dbeea5aa780889785ce850f3881e8b7f67bb44594e9bc382c65b2e730884a2f4",
|
||||
"scripts/rectification/scoring_service.py": "fa056fa30d9e6ffa4b75295fc49c793e35b26ebeca64ca843d26c8abef3050f2",
|
||||
"scripts/research/cluster_width_lib.py": "1d8f2ffa7795d62069deebb2de8e16749317037d4ed3f24a2c0092676e5cfcc6",
|
||||
"scripts/research/probe_supply_after_six.py": "098a5b4398d6f8d996917d809c2fc922ad64031d3b70660f8ef7c876aba92438",
|
||||
"scripts/research/reported_offset_sweep.py": "9df602c938f87a7b540e97c6c31a263f07b4ed0ccaeb1d2fac39b0d3d27ba0ed",
|
||||
"scripts/research/sealed_holdout_rerun.py": "a7f8a1c2230e33441e335810f13cfd723f3f8ad5b03a3657cb606e29d8559f19",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "c1f06967c3d4d214edadff139c24aa31e59fb628477174235abe14f799a99076"
|
||||
},
|
||||
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock",
|
||||
"scorer": "native_event_contribution_matrix_not_shadow_fact_ranker",
|
||||
"delivery": "initial_signature_clusters_peak_gap_lt_8_envelope_no_answers_no_elimination",
|
||||
"rank": "score_desc_then_sha256(benchmark_id:case_id:candidate_time)",
|
||||
"grid": "every_minute_inclusive_not_production_two_minute_sampling",
|
||||
"cross_midnight": "date_aware_candidates_distance_and_native_single_matrix",
|
||||
"evaluator_sha256": "9df602c938f87a7b540e97c6c31a263f07b4ed0ccaeb1d2fac39b0d3d27ba0ed",
|
||||
"replay_revision": "native_candidate_date_v3",
|
||||
"supersedes": "candidate_date_grouped_v2_identity_and_path_not_assumed_numerically_wrong",
|
||||
"is_blind_evaluation": false,
|
||||
"truth_hidden_from_ranker": true,
|
||||
"official_valid_independent_blind": false,
|
||||
"official_blind_trial_count": 0,
|
||||
"results_previously_seen": true,
|
||||
"must_not_use_for_tuning": true
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"record_version": "exposed-v3-fixed-protocol-cross-midnight-rerun-v2",
|
||||
"extended_identity": {
|
||||
"historical_artifacts_manifest_sha256": "6102a26a840be207b5858b3a4c0509274468ae9071e86d308cbbac7371d6864e",
|
||||
"production_scoring_files": [
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/ashtakavarga.py",
|
||||
"scripts/dasha_analyzer.py",
|
||||
"scripts/divisional_charts_extended.py",
|
||||
"scripts/domain_calculation_service.py",
|
||||
"scripts/functional_benefics.py",
|
||||
"scripts/jaimini.py",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py",
|
||||
"scripts/minute_rectification_feature_facts_v4.py",
|
||||
"scripts/narayana_dasha.py",
|
||||
"scripts/rectification/api_service.py",
|
||||
"scripts/rectification/candidate_contrast.py",
|
||||
"scripts/rectification/candidate_window.py",
|
||||
"scripts/rectification/case_holdout.py",
|
||||
"scripts/rectification/contracts.py",
|
||||
"scripts/rectification/dasha_transition_proximity.py",
|
||||
"scripts/rectification/decision_policy.py",
|
||||
"scripts/rectification/event_probes.py",
|
||||
"scripts/rectification/refinement_packet.py",
|
||||
"scripts/rectification/scoring_service.py",
|
||||
"scripts/shadbala.py",
|
||||
"scripts/varga.py"
|
||||
],
|
||||
"production_scoring_sha256": "b72dbd61feec556c3863cb1b4496ded677c7077324a71b86e31722250a8d1528",
|
||||
"research_files": [
|
||||
"scripts/research/reported_offset_sweep.py",
|
||||
"scripts/research/cluster_width_lib.py",
|
||||
"scripts/research/probe_supply_after_six.py",
|
||||
"scripts/research/sealed_holdout_rerun.py",
|
||||
"scripts/minute_rectification_blind_eval.py",
|
||||
"scripts/minute_rectification_fact_blind_eval_v4.py",
|
||||
"scripts/minute_rectification_holdout_validator.py"
|
||||
],
|
||||
"research_implementation_sha256": "12dc4049d8feeaf9e8f7df54666e7de7e8de6b45f195f52999bdbd52217908d9",
|
||||
"file_sha256": {
|
||||
"scripts/active_rectification_event_engine.py": "cdc0e68edc770a2a1810fbdb68cbfd46dcd50b267c739c496fcc078c5e26b5b4",
|
||||
"scripts/active_rectification_events.py": "03e333ccf1103caf685dfe50fe890ab1793e945037085f50ce834a4a3b232222",
|
||||
"scripts/ashtakavarga.py": "9bfc0b8a06af6122fa6c3881706e64f28b9ba58b53d98ff55957d4741d820f3f",
|
||||
"scripts/dasha_analyzer.py": "5e53b1b4d4c7414c08dd0e7716f120a63c70ec3428ec93547f64d55c580da0e1",
|
||||
"scripts/divisional_charts_extended.py": "e9820e80f14fddc86ab5495d11455d16c2d3c9502a9a242fcf9efc41186e0d11",
|
||||
"scripts/domain_calculation_service.py": "66923a2bc69daf65c965d2973c4b9234edbec5147909eaf3609b6b377ce3c7ca",
|
||||
"scripts/functional_benefics.py": "cbaac3b8c09b97f8724b5300e9a402cbf77089af6c7db8788550d40fd35ac57b",
|
||||
"scripts/jaimini.py": "6b88658da5404da9b136686d92a04be462d61a39da6e8de4255021e2ed2d1173",
|
||||
"scripts/minute_rectification_blind_eval.py": "07aa30d8bad3278669495d5fea8be937aaf6367c8af980ff4f2fe9aa84ccc6ff",
|
||||
"scripts/minute_rectification_fact_blind_eval_v4.py": "bdf460e3467208e8b87345c5beb2128f3e22de7eeffd68f72b281b3ad9affc92",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py": "f1a0d8d2482cd754d2e7f253a9606b0373519435a2bf58cfc3753e2b9ae0fb76",
|
||||
"scripts/minute_rectification_feature_facts_v4.py": "3d899a2cdd4825b8e32062443d487edcd2173a4ea55a36eb9f3abe587c0faf0f",
|
||||
"scripts/minute_rectification_holdout_validator.py": "b60b1c752e58672beaee8b36eb3b2348169726cda070ec969db0f13e7ed715af",
|
||||
"scripts/narayana_dasha.py": "c7aaefd4b7b7ea98a5b94e0f7798e5d0139c7423d10ce4ebfff258a460d4456f",
|
||||
"scripts/rectification/api_service.py": "e316ced0f3796d0378a0fe1aad950ee25922ae8afd53add578ed59ca8b2f0f79",
|
||||
"scripts/rectification/candidate_contrast.py": "eee7da71c0574a08876404b78ca111153fa95fb83ace82b9fdca141d1992e273",
|
||||
"scripts/rectification/candidate_window.py": "2fbc5058b12049b15fca375cdc125b8283e19f9f3e4bedcc291e344501891bef",
|
||||
"scripts/rectification/case_holdout.py": "fe0e699b617d9e216acdfeff87af4221c1d6f4c101bf33e1dbf14e2bcd75a8b5",
|
||||
"scripts/rectification/contracts.py": "c6dc6bd230e38f9f2126c224aae9ddbd6415304c15340f8c7cd3f06f6ef3160f",
|
||||
"scripts/rectification/dasha_transition_proximity.py": "0afba494aa12899621173c3cc941c6c1d0be9cec0bdf4c4a1c9bcd004ab22de8",
|
||||
"scripts/rectification/decision_policy.py": "80e8de4680d19a052213bb821d2a9c94143a2962235aeb27f6ad81374d2e60d5",
|
||||
"scripts/rectification/event_probes.py": "9bbadc246e6b8e94bb047522c3e5645613f508b3473ef40b38a207c77fdad58c",
|
||||
"scripts/rectification/refinement_packet.py": "dbeea5aa780889785ce850f3881e8b7f67bb44594e9bc382c65b2e730884a2f4",
|
||||
"scripts/rectification/scoring_service.py": "fa056fa30d9e6ffa4b75295fc49c793e35b26ebeca64ca843d26c8abef3050f2",
|
||||
"scripts/research/cluster_width_lib.py": "1d8f2ffa7795d62069deebb2de8e16749317037d4ed3f24a2c0092676e5cfcc6",
|
||||
"scripts/research/probe_supply_after_six.py": "098a5b4398d6f8d996917d809c2fc922ad64031d3b70660f8ef7c876aba92438",
|
||||
"scripts/research/reported_offset_sweep.py": "9df602c938f87a7b540e97c6c31a263f07b4ed0ccaeb1d2fac39b0d3d27ba0ed",
|
||||
"scripts/research/sealed_holdout_rerun.py": "a7f8a1c2230e33441e335810f13cfd723f3f8ad5b03a3657cb606e29d8559f19",
|
||||
"scripts/shadbala.py": "334dc9d8e4292f0c95d40fd4c29285aa89b9e49d4f187fb9498f4bb0ad93bdfc",
|
||||
"scripts/varga.py": "c1f06967c3d4d214edadff139c24aa31e59fb628477174235abe14f799a99076"
|
||||
},
|
||||
"hash_scope": "explicit_identity_file_sets_not_a_transitive_dependency_lock"
|
||||
},
|
||||
"production_identity_scope": "context_only_shadow_scorer_does_not_call_transition_proximity",
|
||||
"frozen_at_utc": "2026-10-08T10:23:31.558176+00:00",
|
||||
"dataset_path": "references/real_case_calibration/minute_rectification_holdout_v3.json",
|
||||
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
|
||||
"algorithm_version": "birth-time-event-fact-ranker-v4-shadow",
|
||||
"implementation_sha256": "511158c8387658d51f6055bd7afd15730b8b25314510d48f52498ed737c824d7",
|
||||
"files": [
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/ashtakavarga.py",
|
||||
"scripts/dasha_analyzer.py",
|
||||
"scripts/divisional_charts_extended.py",
|
||||
"scripts/domain_calculation_service.py",
|
||||
"scripts/jaimini.py",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py",
|
||||
"scripts/minute_rectification_feature_facts_v4.py",
|
||||
"scripts/narayana_dasha.py",
|
||||
"scripts/shadbala.py",
|
||||
"scripts/varga.py"
|
||||
],
|
||||
"historical_frozen_sha256": "f41c298dd6cdcebe7a93e632f7191954be7987f6012ca2a34cecb6e447fbf196",
|
||||
"evaluator_sha256": "a7f8a1c2230e33441e335810f13cfd723f3f8ad5b03a3657cb606e29d8559f19",
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"candidate_radius_minutes": [
|
||||
10
|
||||
],
|
||||
"minute_step": 1,
|
||||
"release_metrics": {
|
||||
"top_1_rate_minimum": 0.6,
|
||||
"top_3_rate_minimum": 0.85,
|
||||
"mean_absolute_minute_error_maximum": 2.0,
|
||||
"false_confirmation_rate_maximum": 0.05,
|
||||
"correct_insufficient_evidence_rejection_rate_minimum": 0.9
|
||||
},
|
||||
"results_previously_seen": true,
|
||||
"official_valid_independent_blind": false,
|
||||
"must_not_use_for_tuning": true,
|
||||
"tie_breaker": "sha256(benchmark_id:case_id:candidate_time); published minute is never passed to the ranker",
|
||||
"metric_rank_definition": "competition_rank_1_plus_strictly_higher_scores_legacy_protocol",
|
||||
"extra_metric_rank_definition": "score_desc_then_existing_opaque_sha256_total_order"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,118 @@
|
||||
# PROGRESS · 恒星黄道章动(2026-10-08)
|
||||
|
||||
工作树:`G:\Ferti\Jyotisha\.worktrees\ephemeris-nutation-20261008`。分支 `codex/ephemeris-nutation-20261008`。开工 HEAD `1a8c97f6`。没有 upstream。未推送,未做 `HEAD:staging`,未改 `.gitea/workflows`,未提升 `main`,未动主检出。未核对 `/api/health`。
|
||||
|
||||
## 开工预检
|
||||
|
||||
`python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45` 退出码 1,用时 144.42 秒。JSON 状态 fail。远端可见。碎片扫描 90 秒超时,定向测试 45 秒超时。外部适配器正常。本机没有仓库 `.venv`(`.venv/bin/python` 与 `.venv/Scripts/python.exe` 均为 WinError 2)。解释器是 `C:\Users\74082\anaconda3\python.exe` 3.11.7。超时退出不算通过。没有另建镜像,没有放宽断言。
|
||||
|
||||
## T0 调用点
|
||||
|
||||
| 调用点 | 开工分类 | 处理 |
|
||||
| --- | --- | --- |
|
||||
| `_sidereal_calculation_profile` 的 `mean` | 一致 | 保持 `FLG_NONUT` |
|
||||
| 同函数 `apparent` | 一致 | 保持真岁差 |
|
||||
| 同函数 `legacy` 的 `get_ayanamsa` | 不一致 | 改为与 `apparent` 相同的 `get_ayanamsa_ex_ut`。不新增第四档 |
|
||||
| `_calc_sidereal_planets_for_jd` | 不一致 | 真岁差,与 `FLG_SIDEREAL` 一致。这是产品默认路径 |
|
||||
| `compute_chart_data` 上升、宫头、行星 | 不一致 | 同一个真岁差。宫位仍用 `houses(..., b'A')`。速度仍取热带,避免岁差变化率改动逆行判断 |
|
||||
| 引擎约 13006 | 不一致,下一行覆盖 | 删掉死赋值 |
|
||||
| `cmd_double_transit_pac` | 不一致 | 真岁差,并用同一套 flags |
|
||||
| `_calc_transit_lon` | 不一致 | 真岁差 |
|
||||
| 政策字段约 13620、13805 | 标签 | 记录的数字改为真岁差,避免和经度框架不一致 |
|
||||
| `cmd_planetary_congregation` | 不一致 | 真岁差 |
|
||||
| 全盘约 16519、16738,`cmd_nakshatra_adv.py`,`consultation_native_layers.py` | 经共享函数,原先不一致 | 随 `_calc_sidereal_planets_for_jd` 一致 |
|
||||
| 全盘 `houses_ex(..., b"R")` | 宫头已是 `FLG_SIDEREAL`;行星和上升来自有偏差的盘 | 宫制仍是 `sripati` / `b"R"`。盘修好后相对误差消失 |
|
||||
| `cmd_bhava_chalit` 读取的 MC | 随函数返回的岁差 | 返回值改为真岁差后一致 |
|
||||
| `bhava_chalit._cusps_swe` | 不一致 | 真岁差。只影响 Placidus / Koch |
|
||||
| `domain_calculation_service.compute_chart` | 经 `compute_chart_data` | 修好后一致 |
|
||||
| `compute_transit_longitude` | 不一致 | 真岁差。`calc_ut` 的 flags 未改 |
|
||||
| `daily_guidance_service._moon_transit` | 不一致 | 真岁差 |
|
||||
| `shadbala` 宫头 | 已是 `FLG_SIDEREAL`,一致 | 不改。Dig 短弧仍是 BUG-1270,不在本轮 |
|
||||
| `shadbala` 的 `ayanamsa_degrees` | 标签是平岁差 | 改记真岁差 |
|
||||
| `western_chart_engine.py` | 不适用(热带;岁差只作显示偏移) | 不改 |
|
||||
| `kp_cusp_observation.py` | 不一致(展示,不计分) | 真岁差 |
|
||||
| `validate_yoga_accuracy.py` 上升 | 不一致(校验脚本) | 上升改为真岁差;行星本来就是 `FLG_SIDEREAL` |
|
||||
| `muhurta` 固定 23.85 | 不适用 | 不改 |
|
||||
| `solar_return.py`、`ephemeris_events.py`、`native_special_lagnas.py` | 已是 `FLG_SIDEREAL`,一致 | 不改 |
|
||||
| `calculate_hora_lagna` / `calculate_ghati_lagna` / `calculate_bhava_lagna` | 红线 | 不改 |
|
||||
| 供应商树与基准脚本里的 `get_ayanamsa` | 不适用 | 不改 |
|
||||
|
||||
Windows 上 `inspect.signature(swe.houses_ex)` 会 `ValueError`。没有去包这个签名。产品盘用热带 `houses` 减去与行星相同标志的真岁差。四盘、三种岁差下,未取整的等宫宫头与 `houses_ex` 的 `FLG_SIDEREAL` 差在 1e-6° 内。
|
||||
|
||||
## 度数差
|
||||
|
||||
相对旧公式(热带视位置减 `get_ayanamsa`),四张盘、Lahiri / Raman / KP 的最大绝对差是 0.005043°。章动范围约 −0.002279° 到 +0.005043°。回归要求的对照是 Swiss Ephemeris `FLG_SIDEREAL`,不是旧公式。`tests/test_sidereal_nutation_frame.py` 24 组(四盘 × 三种岁差 × 两种交点)九星 `degree_raw` 差 ≤ 1e-6°,退出码 0。
|
||||
|
||||
Vimshottari 月亮余额折成日(365.2425):乔布斯公开盘土星 +2.625 天;奥巴马公开盘月亮 −0.624 天;爱因斯坦公开盘水星 +1.926 天;虚构盘金星 +2.299 天。主星都没有换。
|
||||
|
||||
## 换座
|
||||
|
||||
四盘 × Lahiri / Raman / KP × 九星与上升:星座、星宿、D9、D10 都没有换。唯一分盘槽位变化是虚构盘在 Lahiri 下月亮的 D60。
|
||||
|
||||
## PyJHora
|
||||
|
||||
离线生成器 `scripts/research/freeze_sidereal_nutation_pyjhora_fixture.py` 用本机 anaconda 里的 PyJHora 4.8.7。`drik.planetary_positions` 会 `AttributeError`(`planet_list` 是 dict,没有 `index`),所以冻结的是 `drik.sidereal_longitude`。pytest 只读 `tests/fixtures/sidereal_nutation_pyjhora_487.json`,不导入 jhora。真实交点下,引擎与冻结值的最大绝对差是 0.014454°(奥巴马公开盘的水星,三种岁差相同)。差来自 PyJHora 的真位置标志,不是 1e-6° 那条红线。产品运行时不导入 jhora。
|
||||
|
||||
## 算法身份
|
||||
|
||||
同一份公开烟测请求:12:00 由 8.5289 变为 8.5336,12:01 仍是 8.5242,12:02 由 8.0833 变为 8.088。身份升到 `rectification-v5-matrix-scoring-12`。策略仍是 policy-v4。记忆化 golden 新写 v5,v1–v4 逐字节保留。v4 sha256 `8491093281fe9767defea1b46d325237f1a4c6c0d4f076b9a77f07b985b526c3`。v5 的 `source_commit` 在章动修复提交之后写成该提交的 40 位 SHA。
|
||||
|
||||
日期窗合同本来就是代数 ≥ 9。数据库守卫已是 `scoring-(9|[1-9][0-9]+)`,没有新迁移。本机没有把 `npm run test:db` 当 SQL 证据(迁移符号链接)。scoring-11 历史记录在 scoring-12 下只读打开并可以再比(BUG-621)。没有加拒绝打开旧会话的门。
|
||||
|
||||
## ERR-110
|
||||
|
||||
另存,不覆盖 sync6 记录:
|
||||
|
||||
- `docs/research/sealed_holdout_rerun_ephemeris_nutation_2026_10_08.freeze.json`
|
||||
- `docs/research/sealed_holdout_rerun_ephemeris_nutation_2026_10_08.json`
|
||||
- `docs/research/reported_offset_ephemeris_nutation_2026_10_08.freeze.json`
|
||||
|
||||
影子 20 例相对 2026-09-20 历史报告 `changed_trial_count` 为 8。指标 top-1 0.5、top-3 0.5、平均绝对分钟误差 6.65。这不是发布指标,没有调参。合同 `references/rectification_sealed_holdout.v1.json` 的当前树指针改到这份记录;根上的历史 `top_1_rate` 0.15 与 `status: not_ready` 未改。
|
||||
|
||||
报偏移:900 例,退出码 0,约 911 秒。写出 `docs/research/reported_offset_ephemeris_nutation_2026_10_08.json`(sha256 `b433a906280a5b12e4e48fd5e86292b73d21a627f490e3083d719aceea3252c9`)和已有冻结文件(sha256 `bc43921250cdcc160fb51d88ebcae0262d180e18c0ab2b14791605b09d639d39`)。相对 2026-09-20 历史报告 `changed_trial_count` 581。sync6 那次是 235。没有调参。合同当前指针改到这份记录,sync6 放进该对象里的 `previous_reported_offset_replay`。根上原来的 batch1 指针留着。sync6 文件没有覆盖。
|
||||
|
||||
## 三栏
|
||||
|
||||
- `tests/test_cli_smoke.py` 全盘第一段大运起点。原值 `1952-03-19T20:24:47`;新值 `1952-03-22T11:42:07`;原因:章动进入月亮经度后大运起点移动(BUG-1275)。
|
||||
- `tests/test_rectification_engine_memoization.py`、`tests/test_dasha_transition_proximity_cross_midnight.py`、`tests/test_rectification_relative_support.py`:当前身份 scoring-11 → scoring-12。原因:同输入分数变了(BUG-1275)。
|
||||
- `frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts`:回执默认 scoring-12。另有一条 scoring-11 历史在 scoring-12 下只读打开(BUG-621)。
|
||||
- `frontend/tests/rectification-engine-version-cross-midnight.test.ts`:`LIVE_CURRENT` 改为 scoring-12。scoring-11 缓存不再当现行。
|
||||
- `frontend/tests/rectification-midnight-date-anchor.test.ts`:fixture 循环加上 scoring-12。文件由 `midnight_date_anchor_regression.py --golden` 用真实引擎写出,虚构请求。
|
||||
- `frontend/tests/rectification-confirmation-gate.test.ts` 与密封合同:当前冻结重跑路径从 sync6 改到 `ephemeris_nutation_2026_10_08`。
|
||||
- `tests/test_sealed_holdout_contract_freshness.py`:身份排除名单加上这两份新冻结路径。
|
||||
|
||||
报告、对话卡、日运、Bhava Chalit、Shadbala 的定向测试没有把旧平岁差经度钉死。上述集合通过后没有重写那些 JSON。
|
||||
|
||||
## 测试
|
||||
|
||||
| 命令 | 退出码 |
|
||||
| --- | --- |
|
||||
| `pytest tests/test_sidereal_nutation_frame.py tests/test_runtime_jhora_import_scan.py` | 0(30 通过) |
|
||||
| `pytest` 记忆化、岁差四条路径、相对支持、跨午夜、Bhava、日运、星宿、KP 宫头观察 | 0 |
|
||||
| `pytest` 大运、cli 冒烟、Shadbala 完整、分盘、报告读者、密封合同、校正日期过渡、行运、条件大运、领域计算 | 1,仅 `test_full_reading_accepts_second_and_preserves_birth_time_precision`(旧大运起点)。改断言后单测退出码 0 |
|
||||
| 前端 `tsx --test`:日期窗代数、跨午夜、午夜锚、确认门 | 0(55 通过,0 失败,0 取消) |
|
||||
| `pytest tests/test_reported_offset_research.py::test_recorded_specification_and_all_prespecified_cells tests/test_sealed_holdout_contract_freshness.py` | 0(10 通过) |
|
||||
|
||||
Python 全量没有跑完。不把失败名单写成 Linux 62 的子集。已知 Windows 失败 `tests/test_consultation_native_layers.py::test_the_new_layer_leaves_every_existing_output_unchanged` 不是发布依据,本轮没有拿它当门。`scripts/jyotish_api_server.py` 没有加方法体。`page.tsx` 的 useState / useRef 没有增长。
|
||||
|
||||
快速门与 v5 若还在跑,见文末。
|
||||
|
||||
## v5 九格
|
||||
|
||||
对照 sync6 已接受的九格(±10 / ±30 / ±60):先验头名 0.2078 / 0.1169 / 0.0909;六题回放 0.6104 / 0.5325 / 0.3117;线上区间回放 0.6623 / 0.5844 / 0.3896。
|
||||
|
||||
sweep 已打印(77 例,日志里的 `sweep done`)。先验头名 `top1`:0.1948 / 0.1039 / 0.0779。六题回放 `replay_top1`:0.6364 / 0.5455 / 0.3766。和已接受的九格相比,先验头名三格各下降 0.0130(1.3 个百分点),超过 1 个百分点。六题回放三格是上升(+0.0260 / +0.0130 / +0.0649)。按红线停下:不调参,不推送。线上区间回放(cluster width)落笔时还在跑,这一行仍是未跑完。JSON 要等进程结束才写到临时目录,不进仓库。
|
||||
|
||||
命令:`C:\Users\74082\anaconda3\python.exe scripts/research/holdout_v5_baseline.py --dataset v5 --out-dir D:\Users\74082\AppData\Local\Temp\nutation-v5-20261008 --json-out D:\Users\74082\AppData\Local\Temp\nutation-v5-20261008\holdout_v5_baseline.json`
|
||||
|
||||
日志:`C:\Users\74082\.grok\sessions\G%3A%5CFerti%5CJyotisha%5C.worktrees%5Cephemeris-nutation-20261008\01a11af8-5880-78f1-be55-5fe3bf46523a\terminal\call-6ae2fd7a-997e-4a5a-abff-159b4b919895-104.log`
|
||||
|
||||
代码与 scoring-12 落地后才启动。运行中的 `references/real_case_calibration/_holdout_v5_baseline_tmp_minute_rectification_holdout_v5_all.json` 是脚本的临时副本,结束时会删,不提交。
|
||||
|
||||
## 未完成
|
||||
|
||||
- v5 77 例:先验头名三格已下降 1.3 个百分点,停下,不调参,不推送。线上区间回放未跑完。九格没有全部关闭。BUG-1275 的 resolved 只覆盖经度修复。
|
||||
- 报偏移重放:已结束,见 ERR-110。581/900 与历史报告不同,没有调参。
|
||||
- 快速门:`python scripts/run_quality_gate.py --profile quick` 已启动,用 anaconda,并带技能占位的 `NODE_OPTIONS`。日志 `C:\Users\74082\.grok\sessions\G%3A%5CFerti%5CJyotisha%5C.worktrees%5Cephemeris-nutation-20261008\01a11af8-5880-78f1-be55-5fe3bf46523a\terminal\call-fed60a7a-1a0e-4362-a6b9-147749990e50-156.log`。落笔时未结束,不写成通过。
|
||||
- `npm run test:db` 未跑。SQL 守卫没有改。
|
||||
- 记忆化 v5 的 `source_commit` 在章动修复提交之后写成该提交的 40 位 SHA。提交前仍是占位符。
|
||||
@@ -157,3 +157,5 @@ reported-offset:900 例,exit 0,约 804 秒。相对 2026-09-20 历史报
|
||||
| 抽查 | 乔布斯盘 D5/D6/D8/D11、Bhava/Hora/Ghati/Sree/Indu 上升与上游 `23be1807` 一致;Yogini 顺序与结构一致,首段余额差约 0.002 年(月亮约 17 角秒,属岁差细节) |
|
||||
| v5 全表 | 执行方「六题回放 ±10 下降 2.6、线上区间 ±60 下降 1.3」复核无误(列为 ±10 / ±30 / ±60)。全表:先验 +2.6 / +2.6 / +1.3;六题回放 −2.6 / +3.9 / 0;线上区间 0 / +2.6 / −1.3。9 格 5 升 2 平 2 降 |
|
||||
| 产品决定 | 2026-10-07 接受上述评测变化;门禁补修由 Claude 直接执行(分支 `codex/sync6-gate-fix-20261007`:重新生成扫描金样的 `scan`,更新小运起点断言并写三栏,Bug 历史补记) |
|
||||
|
||||
当时「虚构盘大运与独立计算差约 2 天」误判为岁差版本差异,实为 BUG-1275。
|
||||
|
||||
@@ -317,7 +317,7 @@
|
||||
| `TASK-rectification-refresh-r3-r4-20260913.md` | `PROGRESS-rectification-refresh-r3-r4-20260913.md` | 刷新阶段 R3(MIN_BOUNDARY_DAYS 45→30)+ R4(pratyantar 与 D9/D10 上升 Narayana);首轮出题不变。即使放宽仍有 0 题例子,定向补事另线保留(BUG-664/665) | 已实现 `ab1ade59`,已部署;2026-09-13 验收通过(实现单由执行方自拟,无产品决策记录段;收益口径见研究文档) | `codex/rectification-refresh-r3-r4-20260913` |
|
||||
| `TASK-upstream-sync6-20261007.md` | [PROGRESS-upstream-sync6-20261007.md](PROGRESS-upstream-sync6-20261007.md) | **上游同步第六轮(`23be1807`)**:10-05 五个计算修正一行未合——D5/D6/D8/D11 映射(乔布斯盘四张分盘星座全不同)、Vimsopaka 权重、Yogini 顺序与出生余额、Panchadhikari 宫位参照、Narayana 并列、特殊上升、出生秒数、Neecha Bhanga 两条件、首段大运子运、岁差被覆盖;逐项对照原书核实;最先做 | 已验收(门禁补修 `2df6ee72`,已部署 staging) | [PROGRESS-upstream-sync6-20261007.md](PROGRESS-upstream-sync6-20261007.md) |
|
||||
| `TASK-special-lagnas-native-20261008.md` | `PROGRESS-special-lagnas-native-20261008.md` | **特殊上升点原生计算(线上缺陷)**:sync6 U6 运行时调 PyJHora,生产镜像没有 PyJHora → staging 上 Hora/Ghati/Sree/Indu/Pranapada 全 blocked;原生实现、PyJHora 只作冻结对照、快速门禁止运行时 import jhora;最先做 | 已验收(已部署 staging `795b8845`,BUG-1273) | `codex/special-lagnas-native-20261008`(未上线;部署以 `/api/health` 为准) |
|
||||
| `TASK-ephemeris-nutation-20261008.md` | — | **恒星黄道少扣章动(BUG-1275)**:行星 = 含章动热带视位置 − 平岁差,全体偏 Δψ(≤17″),大运日期差 2–3 天;改标准算法、PyJHora 冻结对照、scoring-12、v5 重跑 | 待领取 | — |
|
||||
| `TASK-ephemeris-nutation-20261008.md` | `PROGRESS-ephemeris-nutation-20261008.md` | **恒星黄道少扣章动(BUG-1275)**:行星 = 含章动热带视位置 − 平岁差,全体偏 Δψ(≤17″),大运日期差 2–3 天;改标准算法、PyJHora 冻结对照、scoring-12、v5 重跑 | 待验收 | `codex/ephemeris-nutation-20261008`(未推送,未部署) |
|
||||
| `TASK-sync6-gate-red-20261007.md` | — | **sync6 后门禁仍红**:run 3213 快速门已过,「Frontend and database tests」开跑 20 秒后日志中断、15 分钟后判失败,后续步骤 failure 0 秒;疑运行机掉线;先 Re-run,红则本机带 Docker 跑 `CI=1 npm test` 对照 `0ed45a4b` | 已完成(Re-run 通过,BUG-1271,部署 `2df6ee72`) | — |
|
||||
|
||||
| `TASK-rectification-tie-break-entry-fix-20260913.md` | `PROGRESS-rectification-tie-break-entry-fix-20260913.md` | 修复单:参考题入口只读 `window_scan` 标志位 → 两道答完后仍显示、再点弹「现在没有可答的参考题」;并按产品拍板改成点一次连出 D9+D10(BUG-666~668,Skill 10.0.26) | 已合入(无独立验收记录) | `99127601`(BUG-666~668 resolved;已部署 staging,run 2589) |
|
||||
|
||||
Reference in New Issue
Block a user