diff --git a/frontend/src/lib/rectification-agentic/v9/engine-client.ts b/frontend/src/lib/rectification-agentic/v9/engine-client.ts index d2ead969..de2bd462 100644 --- a/frontend/src/lib/rectification-agentic/v9/engine-client.ts +++ b/frontend/src/lib/rectification-agentic/v9/engine-client.ts @@ -1095,7 +1095,7 @@ export async function runV9Diagnostics(input: { // Keep the receipt default aligned with Python's ALGORITHM_VERSION; persisted // receipts retain their original identity (this is not a Skill/open gate). export const v9EngineVersion = (): string => - process.env.RECTIFICATION_ENGINE_VERSION?.trim() || "rectification-v5-matrix-scoring-14"; + process.env.RECTIFICATION_ENGINE_VERSION?.trim() || "rectification-v5-matrix-scoring-15"; export type V9RangeReading = Readonly<{ stableThemes: readonly string[]; diff --git a/frontend/tests/database-adopted-birth-date.test.ts b/frontend/tests/database-adopted-birth-date.test.ts index bbeefbe4..e0573fba 100644 --- a/frontend/tests/database-adopted-birth-date.test.ts +++ b/frontend/tests/database-adopted-birth-date.test.ts @@ -134,7 +134,7 @@ test(`dated adoption ${declaration.time} persists date/spec atomically and rejec if sqlerrm <> 'agentic_rectification_candidate_state_inconsistent' then raise; end if; end; end $$; select 'rejected';`); - for (const version of ["rectification-v5-matrix-scoring-10", "rectification-v5-matrix-scoring-11", "rectification-v5-matrix-scoring-12", "rectification-v5-matrix-scoring-13", "rectification-v5-matrix-scoring-14"]) { + for (const version of ["rectification-v5-matrix-scoring-10", "rectification-v5-matrix-scoring-11", "rectification-v5-matrix-scoring-12", "rectification-v5-matrix-scoring-13", "rectification-v5-matrix-scoring-14", "rectification-v5-matrix-scoring-15"]) { setVersion(version); assert.match(rejects(), /rejected/, `${version} must not pass as legacy`); } diff --git a/frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-15.native.json b/frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-15.native.json new file mode 100644 index 00000000..9232336b --- /dev/null +++ b/frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-15.native.json @@ -0,0 +1,3514 @@ +{ + "provenance": { + "kind": "unmocked_native_engine", + "facts": "explicitly_fictional", + "generator": "scripts/research/midnight_date_anchor_regression.py --baseline --golden", + "algorithm": "rectification-v5-matrix-scoring-15" + }, + "request": { + "birth_date": "2000-03-01", + "start_time": "23:58", + "end_time": "00:02", + "lat": 0.0, + "lon": 0.0, + "tz": 0.0, + "candidate_intervals": [ + { + "start_at": "2000-02-29T23:58", + "end_at": "2000-03-01T00:02" + } + ], + "events": [ + { + "id": "00000000-0000-4000-8000-000000000001", + "domain": "career", + "event_kind": "career_entry", + "date_start": "2020-01-01", + "date_end": "2020-01-01", + "precision": "day", + "summary": "Fictional career entry for date-contract testing" + } + ] + }, + "response": { + "result_id": "b8eebef2-4830-52de-bced-a681fb4aa858", + "algorithm_version": "rectification-v5-matrix-scoring-15", + "event_contract_version": "rectification-event-contract-v2", + "decision_policy_version": "rectification-candidate-policy-v4", + "calculation_spec": { + "version": "rectification-calculation-spec-v5", + "birthDate": "2000-03-01", + "candidateRange": { + "start": "23:58", + "end": "00:02" + }, + "latitude": 0, + "longitude": 0, + "timezoneOffsetHours": 0, + "ayanamsa": "raman", + "nodeMode": "mean", + "minuteStep": 1, + "candidateIntervals": [ + { + "start_at": "2000-02-29T23:58", + "end_at": "2000-03-01T00:02" + } + ] + }, + "calculation_spec_hash": "3d616e634005a69c83977a7768272fbdcd198a49c42f490c12d398d019c62225", + "candidate_scores": [ + { + "time": "23:58", + "score": 0.8693, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "23:59", + "score": 0.7093, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "00:00", + "score": 0.5227, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "00:01", + "score": 0.3227, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "00:02", + "score": 0.3227, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + } + ], + "candidate_decisions": [ + { + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "cluster_intervals": [ + { + "segment_index": 0, + "start_index": 0, + "end_index": 0, + "start_offset_minutes": 0, + "end_offset_minutes": 0, + "start_at": "2000-02-29T23:58", + "end_at": "2000-02-29T23:58" + } + ], + "candidate_id": "5ff8942f-9715-5678-8f67-12f865eb0017", + "rank": 1, + "time": "23:58", + "relative_support": 46, + "tied_minute_count": 1, + "cluster_times": [ + "23:58" + ], + "cluster_start": "23:58", + "cluster_end": "23:58" + }, + { + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "cluster_intervals": [ + { + "segment_index": 0, + "start_index": 1, + "end_index": 3, + "start_offset_minutes": 1, + "end_offset_minutes": 3, + "start_at": "2000-02-29T23:59", + "end_at": "2000-03-01T00:01" + } + ], + "candidate_id": "22c56883-42da-5c9e-b35a-10d6f16fcdbb", + "rank": 2, + "time": "23:59", + "relative_support": 37, + "tied_minute_count": 1, + "cluster_times": [ + "23:59", + "00:00", + "00:01" + ], + "cluster_start": "23:59", + "cluster_end": "00:01" + }, + { + "candidate_date": "2000-03-01", + "window_index": 4, + "window_offset_minutes": 4, + "segment_index": 0, + "cluster_intervals": [ + { + "segment_index": 0, + "start_index": 4, + "end_index": 4, + "start_offset_minutes": 4, + "end_offset_minutes": 4, + "start_at": "2000-03-01T00:02", + "end_at": "2000-03-01T00:02" + } + ], + "candidate_id": "39f6489a-ca94-54c7-8ed8-96a2fd0332b1", + "rank": 3, + "time": "00:02", + "relative_support": 17, + "tied_minute_count": 2, + "cluster_times": [ + "00:02" + ], + "cluster_start": "00:02", + "cluster_end": "00:02" + } + ], + "decision_receipt": { + "receipt_version": "candidate-decision-receipt-v2", + "contract_version": "v2", + "event_contract_version": "rectification-event-contract-v2", + "policy_version": "rectification-candidate-policy-v4", + "decision_policy_version": "rectification-candidate-policy-v4", + "display_allowed": true, + "selection_allowed": false, + "acceptance_allowed": false, + "propose_allowed": false, + "confirmation_allowed": false, + "accept_allowed": false, + "confirm_allowed": false, + "representative_candidate_id": "5ff8942f-9715-5678-8f67-12f865eb0017", + "representative_time": "23:58", + "overall_confidence": "low", + "margin_percent": 18.4056, + "reasons": [ + "insufficient_events", + "insufficient_domain_diversity", + "insufficient_confirmation_events", + "insufficient_confirmation_domains", + "insufficient_confirmation_margin", + "engine_exact_confirmation_not_granted", + "external_validation_not_passed", + "public_aa_holdout_not_ready" + ], + "acceptance_reasons": [ + "insufficient_events", + "insufficient_domain_diversity" + ], + "confirmation_reasons": [ + "insufficient_confirmation_events", + "insufficient_confirmation_domains", + "insufficient_confirmation_margin", + "engine_exact_confirmation_not_granted", + "external_validation_not_passed", + "public_aa_holdout_not_ready" + ], + "tie_policy": { + "score_quantum": 0.0001, + "absolute_tolerance": 0.0001, + "rounding": "ROUND_HALF_UP" + }, + "gates": { + "candidate_presence": { + "passed": true, + "candidate_count": 3 + }, + "event_quality": { + "passed": false, + "scoreable_event_count": 1, + "training_event_count": 1, + "minimum": 4 + }, + "domain_diversity": { + "passed": false, + "scoreable_domain_count": 1, + "minimum": 3, + "domains": [ + "career" + ] + }, + "date_quality": { + "passed": true, + "precision_weight_total": 1.0, + "precision_weight_mean": 1.0, + "minimum_precision_weight_mean": 0.65, + "low_reliability_event_ids": [], + "unresolved_conflict_event_ids": [] + }, + "unique_top": { + "passed": true, + "tied_minute_count": 1 + }, + "diagnostic_quality": { + "passed": true, + "minimum_retention": 0.75, + "minimum_margin_percent": 10.0, + "margin_percent": 18.4056, + "leave_one_event_out_retention_rate": 1.0, + "leave_one_domain_out_retention_rate": 1.0, + "date_sensitivity_retention_rate": 1.0 + }, + "required_layers": { + "passed": true, + "missing_layers": [], + "skipped_by_policy": [] + }, + "exact_confirmation": { + "passed": false, + "fail_closed": true, + "engine_granted": false, + "adjacent_passed": true, + "indistinguishable_width_minutes": 5, + "max_confirmation_width_minutes": 5, + "external_validation_status": "not_evaluated", + "unique_minute_path": "closed_at_representative", + "required_scoreable_events": 4, + "required_scoreable_domains": 3, + "reason": "engine_and_external_validation_must_explicitly_pass", + "holdout": { + "sealed_benchmark_id": "minute_rectification_fact_ranker_v4_holdout_v3", + "status": "not_ready", + "valid_public_aa_cases": 20, + "required_cases": 20, + "top_1_rate": 0.15, + "confirmation_coverage_rate": 0.0 + } + } + }, + "house_table": { + "time": "23:58", + "lagna": "天蝎座", + "houses": [ + { + "house": 1, + "sign": "天蝎座", + "occupants": [] + }, + { + "house": 2, + "sign": "射手座", + "occupants": [ + "月亮" + ] + }, + { + "house": 3, + "sign": "摩羯座", + "occupants": [ + "金星", + "计都" + ] + }, + { + "house": 4, + "sign": "水瓶座", + "occupants": [ + "太阳", + "水星" + ] + }, + { + "house": 5, + "sign": "双鱼座", + "occupants": [ + "火星" + ] + }, + { + "house": 6, + "sign": "白羊座", + "occupants": [ + "木星", + "土星" + ] + }, + { + "house": 7, + "sign": "金牛座", + "occupants": [] + }, + { + "house": 8, + "sign": "双子座", + "occupants": [] + }, + { + "house": 9, + "sign": "巨蟹座", + "occupants": [ + "罗睺" + ] + }, + { + "house": 10, + "sign": "狮子座", + "occupants": [] + }, + { + "house": 11, + "sign": "处女座", + "occupants": [] + }, + { + "house": 12, + "sign": "天秤座", + "occupants": [] + } + ] + }, + "natal_recast": { + "time": "23:58", + "lagna": "天蝎座", + "user_meaning": "本命宫位已按 23:58 重算(上升 天蝎座)。下面是本轮实际执行的技法,不能当作唯一分钟确认。", + "unique_minute_claim": false, + "confirmation_allowed": false + }, + "house_tables_by_time": { + "23:58": { + "time": "23:58", + "lagna": "天蝎座", + "houses": [ + { + "house": 1, + "sign": "天蝎座", + "occupants": [] + }, + { + "house": 2, + "sign": "射手座", + "occupants": [ + "月亮" + ] + }, + { + "house": 3, + "sign": "摩羯座", + "occupants": [ + "金星", + "计都" + ] + }, + { + "house": 4, + "sign": "水瓶座", + "occupants": [ + "太阳", + "水星" + ] + }, + { + "house": 5, + "sign": "双鱼座", + "occupants": [ + "火星" + ] + }, + { + "house": 6, + "sign": "白羊座", + "occupants": [ + "木星", + "土星" + ] + }, + { + "house": 7, + "sign": "金牛座", + "occupants": [] + }, + { + "house": 8, + "sign": "双子座", + "occupants": [] + }, + { + "house": 9, + "sign": "巨蟹座", + "occupants": [ + "罗睺" + ] + }, + { + "house": 10, + "sign": "狮子座", + "occupants": [] + }, + { + "house": 11, + "sign": "处女座", + "occupants": [] + }, + { + "house": 12, + "sign": "天秤座", + "occupants": [] + } + ] + }, + "23:59": { + "time": "23:59", + "lagna": "天蝎座", + "houses": [ + { + "house": 1, + "sign": "天蝎座", + "occupants": [] + }, + { + "house": 2, + "sign": "射手座", + "occupants": [ + "月亮" + ] + }, + { + "house": 3, + "sign": "摩羯座", + "occupants": [ + "金星", + "计都" + ] + }, + { + "house": 4, + "sign": "水瓶座", + "occupants": [ + "太阳", + "水星" + ] + }, + { + "house": 5, + "sign": "双鱼座", + "occupants": [ + "火星" + ] + }, + { + "house": 6, + "sign": "白羊座", + "occupants": [ + "木星", + "土星" + ] + }, + { + "house": 7, + "sign": "金牛座", + "occupants": [] + }, + { + "house": 8, + "sign": "双子座", + "occupants": [] + }, + { + "house": 9, + "sign": "巨蟹座", + "occupants": [ + "罗睺" + ] + }, + { + "house": 10, + "sign": "狮子座", + "occupants": [] + }, + { + "house": 11, + "sign": "处女座", + "occupants": [] + }, + { + "house": 12, + "sign": "天秤座", + "occupants": [] + } + ] + }, + "00:00": { + "time": "00:00", + "lagna": "天蝎座", + "houses": [ + { + "house": 1, + "sign": "天蝎座", + "occupants": [] + }, + { + "house": 2, + "sign": "射手座", + "occupants": [ + "月亮" + ] + }, + { + "house": 3, + "sign": "摩羯座", + "occupants": [ + "金星", + "计都" + ] + }, + { + "house": 4, + "sign": "水瓶座", + "occupants": [ + "太阳", + "水星" + ] + }, + { + "house": 5, + "sign": "双鱼座", + "occupants": [ + "火星" + ] + }, + { + "house": 6, + "sign": "白羊座", + "occupants": [ + "木星", + "土星" + ] + }, + { + "house": 7, + "sign": "金牛座", + "occupants": [] + }, + { + "house": 8, + "sign": "双子座", + "occupants": [] + }, + { + "house": 9, + "sign": "巨蟹座", + "occupants": [ + "罗睺" + ] + }, + { + "house": 10, + "sign": "狮子座", + "occupants": [] + }, + { + "house": 11, + "sign": "处女座", + "occupants": [] + }, + { + "house": 12, + "sign": "天秤座", + "occupants": [] + } + ] + }, + "00:01": { + "time": "00:01", + "lagna": "天蝎座", + "houses": [ + { + "house": 1, + "sign": "天蝎座", + "occupants": [] + }, + { + "house": 2, + "sign": "射手座", + "occupants": [ + "月亮" + ] + }, + { + "house": 3, + "sign": "摩羯座", + "occupants": [ + "金星", + "计都" + ] + }, + { + "house": 4, + "sign": "水瓶座", + "occupants": [ + "太阳", + "水星" + ] + }, + { + "house": 5, + "sign": "双鱼座", + "occupants": [ + "火星" + ] + }, + { + "house": 6, + "sign": "白羊座", + "occupants": [ + "木星", + "土星" + ] + }, + { + "house": 7, + "sign": "金牛座", + "occupants": [] + }, + { + "house": 8, + "sign": "双子座", + "occupants": [] + }, + { + "house": 9, + "sign": "巨蟹座", + "occupants": [ + "罗睺" + ] + }, + { + "house": 10, + "sign": "狮子座", + "occupants": [] + }, + { + "house": 11, + "sign": "处女座", + "occupants": [] + }, + { + "house": 12, + "sign": "天秤座", + "occupants": [] + } + ] + }, + "00:02": { + "time": "00:02", + "lagna": "天蝎座", + "houses": [ + { + "house": 1, + "sign": "天蝎座", + "occupants": [] + }, + { + "house": 2, + "sign": "射手座", + "occupants": [ + "月亮" + ] + }, + { + "house": 3, + "sign": "摩羯座", + "occupants": [ + "金星", + "计都" + ] + }, + { + "house": 4, + "sign": "水瓶座", + "occupants": [ + "太阳", + "水星" + ] + }, + { + "house": 5, + "sign": "双鱼座", + "occupants": [ + "火星" + ] + }, + { + "house": 6, + "sign": "白羊座", + "occupants": [ + "木星", + "土星" + ] + }, + { + "house": 7, + "sign": "金牛座", + "occupants": [] + }, + { + "house": 8, + "sign": "双子座", + "occupants": [] + }, + { + "house": 9, + "sign": "巨蟹座", + "occupants": [ + "罗睺" + ] + }, + { + "house": 10, + "sign": "狮子座", + "occupants": [] + }, + { + "house": 11, + "sign": "处女座", + "occupants": [] + }, + { + "house": 12, + "sign": "天秤座", + "occupants": [] + } + ] + } + }, + "technique_audit_table": [ + { + "technique": "D1 本命盘", + "status": "executed", + "note": "本轮已按该分钟重算本命宫位。" + }, + { + "technique": "D10 事业分盘", + "status": "executed", + "note": "本轮已对照事业主题,可用 D10 上升类型表作校时方法,不是命运承诺。" + }, + { + "technique": "Vimshottari", + "status": "executed", + "note": "本轮已对照主限。" + }, + { + "technique": "Shadbala", + "status": "executed", + "note": "本轮已做已核验的 Shadbala 分量辅助对照。" + }, + { + "technique": "换运贴近度", + "status": "executed", + "note": "本轮已对照日级事件与候选换运日期的贴近程度。" + }, + { + "technique": "KP 宫头", + "status": "executed", + "note": "已按 Swiss Ephemeris Placidus + Krishnamurti 观察 12 宫头;不计分,不参与提出门或确认门。" + }, + { + "technique": "VedAstro 分钟级校验", + "status": "blocked", + "note": "官方分钟敏感校验尚未跑通。未调用不等于失败,但缺这一层不能写确认。" + }, + { + "technique": "唯一分钟确认", + "status": "blocked", + "note": "本会话以代表性时间收口,不确认唯一分钟。" + } + ], + "window_scan": { + "scanned": true, + "confirmation_allowed": false, + "unique_minute_claim": false, + "transitions": [ + { + "layer": "d1", + "at": "23:58", + "user_meaning": "本命上升 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "天蝎座", + "to_sign": "天蝎座" + }, + { + "layer": "d9", + "at": "23:58", + "user_meaning": "D9 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "d10", + "at": "23:58", + "user_meaning": "D10 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "d4", + "at": "23:58", + "user_meaning": "D4 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "金牛座", + "to_sign": "金牛座" + }, + { + "layer": "d5", + "at": "23:58", + "user_meaning": "D5 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双鱼座", + "to_sign": "双鱼座" + }, + { + "layer": "d7", + "at": "23:58", + "user_meaning": "D7 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "处女座", + "to_sign": "处女座" + }, + { + "layer": "d12", + "at": "23:58", + "user_meaning": "D12 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双子座", + "to_sign": "双子座" + }, + { + "layer": "d24", + "at": "23:58", + "user_meaning": "D24 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "处女座", + "to_sign": "处女座" + }, + { + "layer": "d2", + "at": "23:58", + "user_meaning": "D2 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "狮子座", + "to_sign": "狮子座" + }, + { + "layer": "d11", + "at": "23:58", + "user_meaning": "D11 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双鱼座", + "to_sign": "双鱼座" + }, + { + "layer": "d30", + "at": "23:58", + "user_meaning": "D30 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双鱼座", + "to_sign": "双鱼座" + }, + { + "layer": "pada", + "at": "23:58", + "user_meaning": "Nakshatra pada 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true + }, + { + "layer": "hora", + "at": "23:58", + "user_meaning": "Hora Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "狮子座", + "to_sign": "狮子座" + }, + { + "layer": "ghati", + "at": "23:58", + "user_meaning": "Ghati Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "狮子座", + "to_sign": "狮子座" + }, + { + "layer": "bhava", + "at": "23:58", + "user_meaning": "Bhava Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "摩羯座", + "to_sign": "摩羯座" + }, + { + "layer": "pranapada", + "at": "23:58", + "user_meaning": "Pranapada Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "kp1", + "at": "23:58", + "user_meaning": "KP 1宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "天秤座", + "to_sign": "天秤座" + }, + { + "layer": "kp4", + "at": "23:58", + "user_meaning": "KP 4宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "kp7", + "at": "23:58", + "user_meaning": "KP 7宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "天蝎座", + "to_sign": "天蝎座" + }, + { + "layer": "kp10", + "at": "23:58", + "user_meaning": "KP 10宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "d10", + "at": "23:59", + "user_meaning": "D10 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "射手座", + "to_sign": "摩羯座" + }, + { + "layer": "d5", + "at": "23:59", + "user_meaning": "D5 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "双鱼座", + "to_sign": "摩羯座" + }, + { + "layer": "kp1", + "at": "23:59", + "user_meaning": "KP 1宫子主 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "天秤座", + "to_sign": "射手座" + }, + { + "layer": "kp10", + "at": "23:59", + "user_meaning": "KP 10宫子主 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "射手座", + "to_sign": "金牛座" + }, + { + "layer": "d24", + "at": "00:02", + "user_meaning": "D24 在 00:02 发生变化", + "candidate_date": "2000-03-01", + "window_index": 4, + "window_offset_minutes": 4, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "处女座", + "to_sign": "天秤座" + } + ], + "d1_lagna_count": 1, + "d1_candidates_differ": false, + "d9_lagna_count": 1, + "d9_candidates_differ": false, + "d10_lagna_count": 2, + "d10_candidates_differ": true, + "d4_lagna_count": 1, + "d4_candidates_differ": false, + "d5_lagna_count": 2, + "d5_candidates_differ": true, + "d7_lagna_count": 1, + "d7_candidates_differ": false, + "d12_lagna_count": 1, + "d12_candidates_differ": false, + "d24_lagna_count": 2, + "d24_candidates_differ": true, + "d2_lagna_count": 1, + "d2_candidates_differ": false, + "d11_lagna_count": 1, + "d11_candidates_differ": false, + "d30_lagna_count": 1, + "d30_candidates_differ": false, + "pada_count": 1, + "pada_candidates_differ": false, + "hora_count": 1, + "hora_candidates_differ": false, + "ghati_count": 1, + "ghati_candidates_differ": false, + "bhava_count": 1, + "bhava_candidates_differ": false, + "pranapada_count": 1, + "pranapada_candidates_differ": false, + "kp1_count": 2, + "kp1_candidates_differ": true, + "kp4_count": 1, + "kp4_candidates_differ": false, + "kp7_count": 1, + "kp7_candidates_differ": false, + "kp10_count": 2, + "kp10_candidates_differ": true, + "d9_sign_names": [ + "射手座" + ], + "d10_sign_names": [ + "射手座", + "摩羯座" + ] + }, + "event_dasha_ledger": [ + { + "summary": "Fictional career entry for date-contract testing", + "match": "weak", + "match_label": "弱关联", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "Fictional career entry for date-contract:弱关联(主限、分盘大运;Gochara 未见对应)", + "domain": "career", + "year_month": "2020-01" + } + ], + "event_dasha_ledger_by_time": { + "23:58": [ + { + "summary": "Fictional career entry for date-contract testing", + "match": "weak", + "match_label": "弱关联", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "Fictional career entry for date-contract:弱关联(主限、分盘大运;Gochara 未见对应)", + "domain": "career", + "year_month": "2020-01" + } + ], + "23:59": [ + { + "summary": "Fictional career entry for date-contract testing", + "match": "weak", + "match_label": "弱关联", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "Fictional career entry for date-contract:弱关联(主限、分盘大运;Gochara 未见对应)", + "domain": "career", + "year_month": "2020-01" + } + ], + "00:02": [ + { + "summary": "Fictional career entry for date-contract testing", + "match": "weak", + "match_label": "弱关联", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "Fictional career entry for date-contract:弱关联(主限、分盘大运;Gochara 未见对应)", + "domain": "career", + "year_month": "2020-01" + } + ] + }, + "prospective_windows_by_time": { + "23:58": [ + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + }, + { + "domain": "career", + "from": "2027-02", + "to": "2027-02" + } + ], + "23:59": [ + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + }, + { + "domain": "career", + "from": "2027-02", + "to": "2027-02" + } + ], + "00:02": [ + { + "domain": "career", + "from": "2026-12", + "to": "2026-12" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ] + }, + "column_compare_ms": 1.8, + "event_fit_rate": { + "matched": 0, + "total": 1, + "percent": 0, + "band": "low", + "label": "低度吻合(事件吻合率 <60%)", + "unique_minute_claim": false, + "user_meaning": "当前窗 0/1 件已确认事件与 Dasha/Gochara 吻合,低度吻合(事件吻合率 <60%)。这是相对拟合,不是已确认唯一出生分钟。" + }, + "dasha_agreement": { + "status": "agree", + "vimshottari_top": "23:58", + "narayana_top": "23:58", + "user_meaning": "主限和分盘大运都更支持同一段代表性时间。这仍不是唯一分钟确认。" + }, + "lagna_contrast": null, + "nakshatra_boundary": { + "near_boundary": true, + "distance_degrees": 1.1491, + "options": [ + { + "key": "A", + "time_bias": "earlier", + "traits": [ + "计划乱了会先整理清单" + ] + }, + { + "key": "B", + "time_bias": "later", + "traits": [ + "两边关系都想维持住" + ] + } + ], + "user_meaning": "升点靠近两段日常节奏的交界。哪一组更像你近年的处事方式?A:计划乱了会先整理清单。B:两边关系都想维持住。这只用来偏置时间窗,不能确认唯一分钟。" + }, + "precision_stage": { + "current": "d10_refine", + "can_stop": true, + "user_meaning": "关系盘已较稳,事业盘仍会换升。可再补一件记得时间的工作变化。", + "unique_minute_claim": false + }, + "oos_blind_prompts": [ + { + "domain": "relationship", + "user_meaning": "校时还没用过感情这条线。有没有一件没提过、但记得大概时间的关系变化?", + "used_for_scoring": false + }, + { + "domain": "family", + "user_meaning": "校时还没用过家人这条线。有没有一件没提过、但记得大概时间的家人变化?", + "used_for_scoring": false + }, + { + "domain": "education", + "user_meaning": "校时还没用过学习这条线。有没有一件没提过、但记得大概时间的学业变化?", + "used_for_scoring": false + } + ], + "discriminating_event_probes": [], + "guided_collect_windows": [ + { + "year": 2026, + "month_lo": 1, + "month_hi": 1, + "domain": "any", + "split": { + "left": 3, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 4, + "month_hi": 4, + "domain": "any", + "split": { + "left": 3, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 6, + "month_hi": 7, + "domain": "any", + "split": { + "left": 2, + "right": 3 + } + }, + { + "year": 2026, + "month_lo": 9, + "month_hi": 10, + "domain": "any", + "split": { + "left": 3, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 12, + "month_hi": 12, + "domain": "any", + "split": { + "left": 2, + "right": 1 + } + }, + { + "year": 2025, + "month_lo": 1, + "month_hi": 1, + "domain": "any", + "split": { + "left": 3, + "right": 2 + } + } + ], + "event_clarification_probes": [], + "evidence_collection_probes": [ + { + "year": 2017, + "year_label": "2017 年前后", + "domain": "education", + "event_family": "升学、转学或换学习环境", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "时间范围锁定 2017 年前后;领域锁定 education;语义目标是 升学、转学或换学习环境。结合最近对话,只选一个容易回答的口语入口,写一句自然的是/否题;不要逐字复述语义目标,不要把所有例子堆进一句,不得改时间范围。", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "education.2017", + "information_gain": 0.0, + "candidate_split_hash": "education:2017", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "明确发生且时间吻合", + "answer_class": "yes" + }, + { + "label": "发生过但程度较弱", + "answer_class": "weak_yes" + }, + { + "label": "明确没有发生", + "answer_class": "no" + }, + { + "label": "这段记不清楚", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2021, + "year_label": "2021 年前后", + "domain": "relocation", + "event_family": "搬家或长期住到外地", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "时间范围锁定 2021 年前后;领域锁定 relocation;语义目标是 搬家或长期住到外地。结合最近对话,只选一个容易回答的口语入口,写一句自然的是/否题;不要逐字复述语义目标,不要把所有例子堆进一句,不得改时间范围。", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "relocation.2021", + "information_gain": 0.0, + "candidate_split_hash": "relocation:2021", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "明确发生且时间吻合", + "answer_class": "yes" + }, + { + "label": "发生过但程度较弱", + "answer_class": "weak_yes" + }, + { + "label": "明确没有发生", + "answer_class": "no" + }, + { + "label": "这段记不清楚", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2023, + "year_label": "2023 年前后", + "domain": "relationship", + "event_family": "开始一段认真关系、分手或结婚", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "时间范围锁定 2023 年前后;领域锁定 relationship;语义目标是 开始一段认真关系、分手或结婚。结合最近对话,只选一个容易回答的口语入口,写一句自然的是/否题;不要逐字复述语义目标,不要把所有例子堆进一句,不得改时间范围。", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "relationship.2023", + "information_gain": 0.0, + "candidate_split_hash": "relationship:2023", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "明确发生且时间吻合", + "answer_class": "yes" + }, + { + "label": "发生过但程度较弱", + "answer_class": "weak_yes" + }, + { + "label": "明确没有发生", + "answer_class": "no" + }, + { + "label": "这段记不清楚", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2024, + "year_label": "2024 年前后", + "domain": "family", + "event_family": "家人结婚、添丁或住院", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "时间范围锁定 2024 年前后;领域锁定 family;语义目标是 家人结婚、添丁或住院。结合最近对话,只选一个容易回答的口语入口,写一句自然的是/否题;不要逐字复述语义目标,不要把所有例子堆进一句,不得改时间范围。", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "family.2024", + "information_gain": 0.0, + "candidate_split_hash": "family:2024", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "明确发生且时间吻合", + "answer_class": "yes" + }, + { + "label": "发生过但程度较弱", + "answer_class": "weak_yes" + }, + { + "label": "明确没有发生", + "answer_class": "no" + }, + { + "label": "这段记不清楚", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + } + ], + "candidate_contrast_opportunities": [], + "holdout_validation_probes": [ + { + "domain": "relationship", + "user_meaning": "校时还没用过感情这条线。有没有一件没提过、但记得大概时间的关系变化?", + "used_for_scoring": false, + "phase": "holdout_validation", + "role": "holdout", + "source": "oos_blind" + }, + { + "domain": "family", + "user_meaning": "校时还没用过家人这条线。有没有一件没提过、但记得大概时间的家人变化?", + "used_for_scoring": false, + "phase": "holdout_validation", + "role": "holdout", + "source": "oos_blind" + }, + { + "domain": "education", + "user_meaning": "校时还没用过学习这条线。有没有一件没提过、但记得大概时间的学业变化?", + "used_for_scoring": false, + "phase": "holdout_validation", + "role": "holdout", + "source": "oos_blind" + } + ], + "dropped_probes": [], + "dropped_asked_probe_keys": 0, + "prospective_probes": [ + { + "candidate_label": "A", + "domain": "career", + "window_label": "2027 年 1 月附近", + "user_meaning": "候选 A 预测下一次事业变动更可能在 2027 年 1 月附近。这是预测窗口,不是承诺;下次发生时回来补一条,可进一步分辨。", + "used_for_scoring": false + }, + { + "candidate_label": "B", + "domain": "career", + "window_label": "2027 年 2 月附近", + "user_meaning": "候选 B 预测下一次事业变动更可能在 2027 年 2 月附近。这是预测窗口,不是承诺;下次发生时回来补一条,可进一步分辨。", + "used_for_scoring": false + }, + { + "candidate_label": "C", + "domain": "career", + "window_label": "2027 年 1 月附近", + "user_meaning": "候选 C 预测下一次事业变动更可能在 2027 年 1 月附近。这是预测窗口,不是承诺;下次发生时回来补一条,可进一步分辨。", + "used_for_scoring": false + } + ], + "horary_observation": { + "status": "skipped", + "user_meaning": "没有第一次问起这件事的时间,占问观察未执行。", + "unique_minute_claim": false + }, + "unique_minute_claim": false, + "candidate_window_contract": "dated-v1", + "candidate_intervals": [ + { + "start_at": "2000-02-29T23:58", + "end_at": "2000-03-01T00:02" + } + ], + "candidate_timezone_offset": 0.0, + "candidate_timezone_id": "" + }, + "execution_ledger_version": "rectification-execution-ledger-v2", + "execution_ledger": [ + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "event_scoring", + "status": "executed", + "source": "python-engine", + "event_id": "00000000-0000-4000-8000-000000000001", + "domain": "career", + "event_kind": "career_entry", + "date_precision": "day", + "precision_weight": 1.0, + "sampled_date_count": 1, + "candidate_count": 5, + "technique_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_pd_functional_malefic_auxiliary" + ] + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "technique_layer", + "method": "d1-rashi", + "status": "executed", + "source": "python-engine" + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "technique_layer", + "method": "d10-dashamsa", + "status": "executed", + "source": "python-engine" + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "technique_layer", + "method": "dasha-transition-proximity", + "status": "executed", + "source": "python-engine" + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "technique_layer", + "method": "shadbala_sthana_drik_naisargika_support_auxiliary", + "status": "executed", + "source": "python-engine" + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "technique_layer", + "method": "vim_md_functional_benefic_auxiliary", + "status": "executed", + "source": "python-engine" + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "technique_layer", + "method": "vim_pd_functional_malefic_auxiliary", + "status": "executed", + "source": "python-engine" + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "candidate_ranking", + "status": "executed", + "source": "python-decision-policy", + "candidate_count": 3 + }, + { + "ledger_version": "rectification-execution-ledger-v2", + "stage": "diagnostics", + "status": "executed", + "source": "python-engine", + "metrics": [ + "candidate_splits", + "cluster_mass_ratio", + "date_sensitivity_retention_rate", + "event_date_sensitivity", + "leave_one_domain_out", + "leave_one_domain_out_retention_rate", + "leave_one_event_out", + "leave_one_event_out_retention_rate", + "most_discriminating_layers", + "neighbor_support_minutes", + "primary_cluster_retention_rate", + "primary_secondary_margin_percent", + "unstable_event_ids", + "window_scan" + ] + } + ], + "candidate_feature_snapshot": { + "calculation_spec_hash": "3d616e634005a69c83977a7768272fbdcd198a49c42f490c12d398d019c62225", + "algorithm_version": "rectification-v5-matrix-scoring-15", + "candidate_count": 5, + "feature_hash": "a3ada6c8d9f604b770a84b6aaa5eaefc562fa2dc541529858ffe900f69fb28da", + "features": [ + { + "time": "23:58", + "ascendant_degree": 227.8158, + "ascendant_sign_index": 7, + "pada_index": 68, + "bhava_sign_index": 9, + "hora_sign_index": 4, + "ghati_sign_index": 4, + "pranapada_sign_index": 8, + "kp1_sub_index": 6, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 8, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 226.4663, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Anuradha", + "nakshatra_lord": "Saturn", + "pada": 4, + "sub_lord": "Jupiter", + "sub_sub_lord": "Rahu", + "sub_index": 6 + }, + "2": { + "cusp_degree": 254.1427, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Purva Ashadha", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Rahu", + "sub_index": 1 + }, + "3": { + "cusp_degree": 282.4629, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Shravana", + "nakshatra_lord": "Moon", + "pada": 1, + "sub_lord": "Rahu", + "sub_sub_lord": "Saturn", + "sub_index": 5 + }, + "4": { + "cusp_degree": 313.1139, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Shatabhisha", + "nakshatra_lord": "Rahu", + "pada": 2, + "sub_lord": "Mercury", + "sub_sub_lord": "Venus", + "sub_index": 8 + }, + "5": { + "cusp_degree": 345.6034, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Uttara Bhadrapada", + "nakshatra_lord": "Saturn", + "pada": 4, + "sub_lord": "Jupiter", + "sub_sub_lord": "Mercury", + "sub_index": 6 + }, + "6": { + "cusp_degree": 17.2689, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 2, + "sub_lord": "Moon", + "sub_sub_lord": "Venus", + "sub_index": 3 + }, + "7": { + "cusp_degree": 46.4663, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 2, + "sub_lord": "Saturn", + "sub_sub_lord": "Venus", + "sub_index": 7 + }, + "8": { + "cusp_degree": 74.1427, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Jupiter", + "sub_index": 8 + }, + "9": { + "cusp_degree": 102.4629, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 3, + "sub_lord": "Mars", + "sub_sub_lord": "Saturn", + "sub_index": 4 + }, + "10": { + "cusp_degree": 133.1139, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Magha", + "nakshatra_lord": "Ketu", + "pada": 4, + "sub_lord": "Mercury", + "sub_sub_lord": "Saturn", + "sub_index": 8 + }, + "11": { + "cusp_degree": 165.6034, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 2, + "sub_lord": "Jupiter", + "sub_sub_lord": "Rahu", + "sub_index": 6 + }, + "12": { + "cusp_degree": 197.2689, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Swati", + "nakshatra_lord": "Rahu", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Mercury", + "sub_index": 1 + } + }, + "indices": { + "kp1_sub_index": 6, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 8 + }, + "note": "已按 Swiss Ephemeris Placidus + Krishnamurti 观察 12 宫头;不计分,不参与提出门或确认门。" + }, + "varga_ascendants": { + "D2": 4, + "D3": 11, + "D4": 1, + "D5": 11, + "D7": 5, + "D9": 8, + "D10": 8, + "D11": 11, + "D12": 2, + "D24": 5, + "D30": 11 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 9 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "3a9c9d6339ef4bafdf62d2e38aff2e6db5237b52e3abfc67ee1472888e09152f", + "vargas": "056c45c1127366db92f5bd41d8ca0acd27dd42120f0282b8611fbfdf965fa40b", + "arudha": "67f5884a3d94a78bb7d53207c3c9455d6d19bd6ce380d842eb3666692ad52f72", + "ashtakavarga": "7937752a45e6606d55be5611568069ed7946af095048790a1279e30f0724c5e6", + "shadbala": "9996bfc8bd9151e05eb0c98e2947b07162dcd36f32e52c3c5729218daabd8cc6", + "static": "6c51968e3ba7042ddc671afba510a757dec7278fdde417af2de44b54fab2601a" + } + }, + { + "time": "23:59", + "ascendant_degree": 228.0507, + "ascendant_sign_index": 7, + "pada_index": 68, + "bhava_sign_index": 9, + "hora_sign_index": 4, + "ghati_sign_index": 4, + "pranapada_sign_index": 8, + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 226.7014, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Mercury", + "sub_index": 8 + }, + "2": { + "cusp_degree": 254.3737, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Purva Ashadha", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Rahu", + "sub_index": 1 + }, + "3": { + "cusp_degree": 282.7083, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Shravana", + "nakshatra_lord": "Moon", + "pada": 1, + "sub_lord": "Rahu", + "sub_sub_lord": "Saturn", + "sub_index": 5 + }, + "4": { + "cusp_degree": 313.3808, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Shatabhisha", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Moon", + "sub_index": 8 + }, + "5": { + "cusp_degree": 345.8757, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Uttara Bhadrapada", + "nakshatra_lord": "Saturn", + "pada": 4, + "sub_lord": "Jupiter", + "sub_sub_lord": "Venus", + "sub_index": 6 + }, + "6": { + "cusp_degree": 17.5236, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 2, + "sub_lord": "Mars", + "sub_sub_lord": "Jupiter", + "sub_index": 4 + }, + "7": { + "cusp_degree": 46.7014, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Saturn", + "sub_sub_lord": "Venus", + "sub_index": 7 + }, + "8": { + "cusp_degree": 74.3737, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Saturn", + "sub_index": 8 + }, + "9": { + "cusp_degree": 102.7083, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 3, + "sub_lord": "Mars", + "sub_sub_lord": "Venus", + "sub_index": 4 + }, + "10": { + "cusp_degree": 133.3808, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Purva Phalguni", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Venus", + "sub_index": 1 + }, + "11": { + "cusp_degree": 165.8757, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 2, + "sub_lord": "Saturn", + "sub_sub_lord": "Saturn", + "sub_index": 7 + }, + "12": { + "cusp_degree": 197.5236, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Swati", + "nakshatra_lord": "Rahu", + "pada": 4, + "sub_lord": "Sun", + "sub_sub_lord": "Moon", + "sub_index": 2 + } + }, + "indices": { + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1 + }, + "note": "已按 Swiss Ephemeris Placidus + Krishnamurti 观察 12 宫头;不计分,不参与提出门或确认门。" + }, + "varga_ascendants": { + "D2": 4, + "D3": 11, + "D4": 1, + "D5": 9, + "D7": 5, + "D9": 8, + "D10": 9, + "D11": 11, + "D12": 2, + "D24": 5, + "D30": 11 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 9 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "8aebc1a0721de9ed08ae32aef78f84aab9c8be6b064ffab64bd702776e365ddb", + "vargas": "289f439c46151507aaecfdbb632c92d37a232c2d38df5a27eeb980b67d41ef31", + "arudha": "67f5884a3d94a78bb7d53207c3c9455d6d19bd6ce380d842eb3666692ad52f72", + "ashtakavarga": "7937752a45e6606d55be5611568069ed7946af095048790a1279e30f0724c5e6", + "shadbala": "9cb203ec2f64671cc9f759d77d82d6d2ce401d206137fba9191fe21d2282f42c", + "static": "665f2fc0e421f4530fc0a5975865547688e87f695dbc4c917f7037aa8ead1af4" + } + }, + { + "time": "00:00", + "ascendant_degree": 228.2855, + "ascendant_sign_index": 7, + "pada_index": 68, + "bhava_sign_index": 9, + "hora_sign_index": 4, + "ghati_sign_index": 4, + "pranapada_sign_index": 8, + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 226.936, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Ketu", + "sub_index": 8 + }, + "2": { + "cusp_degree": 254.6044, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Purva Ashadha", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Jupiter", + "sub_index": 1 + }, + "3": { + "cusp_degree": 282.9535, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Shravana", + "nakshatra_lord": "Moon", + "pada": 1, + "sub_lord": "Rahu", + "sub_sub_lord": "Mercury", + "sub_index": 5 + }, + "4": { + "cusp_degree": 313.6474, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Shatabhisha", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Rahu", + "sub_index": 8 + }, + "5": { + "cusp_degree": 346.1475, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Uttara Bhadrapada", + "nakshatra_lord": "Saturn", + "pada": 4, + "sub_lord": "Jupiter", + "sub_sub_lord": "Sun", + "sub_index": 6 + }, + "6": { + "cusp_degree": 17.7778, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 2, + "sub_lord": "Mars", + "sub_sub_lord": "Mercury", + "sub_index": 4 + }, + "7": { + "cusp_degree": 46.936, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Saturn", + "sub_sub_lord": "Moon", + "sub_index": 7 + }, + "8": { + "cusp_degree": 74.6044, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Ketu", + "sub_sub_lord": "Venus", + "sub_index": 0 + }, + "9": { + "cusp_degree": 102.9535, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 3, + "sub_lord": "Rahu", + "sub_sub_lord": "Rahu", + "sub_index": 5 + }, + "10": { + "cusp_degree": 133.6474, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Purva Phalguni", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Venus", + "sub_index": 1 + }, + "11": { + "cusp_degree": 166.1475, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 2, + "sub_lord": "Saturn", + "sub_sub_lord": "Mercury", + "sub_index": 7 + }, + "12": { + "cusp_degree": 197.7778, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Swati", + "nakshatra_lord": "Rahu", + "pada": 4, + "sub_lord": "Sun", + "sub_sub_lord": "Saturn", + "sub_index": 2 + } + }, + "indices": { + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1 + }, + "note": "已按 Swiss Ephemeris Placidus + Krishnamurti 观察 12 宫头;不计分,不参与提出门或确认门。" + }, + "varga_ascendants": { + "D2": 4, + "D3": 11, + "D4": 1, + "D5": 9, + "D7": 5, + "D9": 8, + "D10": 9, + "D11": 11, + "D12": 2, + "D24": 5, + "D30": 11 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 9 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "89d86dc70476f77ac0cf09fc0ebd67715d3d0df52d6bdd2d0c4b129e84d7e548", + "vargas": "289f439c46151507aaecfdbb632c92d37a232c2d38df5a27eeb980b67d41ef31", + "arudha": "67f5884a3d94a78bb7d53207c3c9455d6d19bd6ce380d842eb3666692ad52f72", + "ashtakavarga": "7937752a45e6606d55be5611568069ed7946af095048790a1279e30f0724c5e6", + "shadbala": "79cacf798e3d9bbb95eaf66ad32aef323e0353ac0bba2b54c7e4fa3644526393", + "static": "f46cc960e1c1421be47191264338dbb550d9b80821cd7f6752e69baa8aa9231b" + } + }, + { + "time": "00:01", + "ascendant_degree": 228.5202, + "ascendant_sign_index": 7, + "pada_index": 68, + "bhava_sign_index": 9, + "hora_sign_index": 4, + "ghati_sign_index": 4, + "pranapada_sign_index": 8, + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 227.1706, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Venus", + "sub_index": 8 + }, + "2": { + "cusp_degree": 254.8352, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Purva Ashadha", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Saturn", + "sub_index": 1 + }, + "3": { + "cusp_degree": 283.1989, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Shravana", + "nakshatra_lord": "Moon", + "pada": 1, + "sub_lord": "Rahu", + "sub_sub_lord": "Venus", + "sub_index": 5 + }, + "4": { + "cusp_degree": 313.9141, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Shatabhisha", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Jupiter", + "sub_index": 8 + }, + "5": { + "cusp_degree": 346.4193, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Uttara Bhadrapada", + "nakshatra_lord": "Saturn", + "pada": 4, + "sub_lord": "Jupiter", + "sub_sub_lord": "Rahu", + "sub_index": 6 + }, + "6": { + "cusp_degree": 18.0317, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 2, + "sub_lord": "Mars", + "sub_sub_lord": "Sun", + "sub_index": 4 + }, + "7": { + "cusp_degree": 47.1706, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Saturn", + "sub_sub_lord": "Mars", + "sub_index": 7 + }, + "8": { + "cusp_degree": 74.8352, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Ketu", + "sub_sub_lord": "Rahu", + "sub_index": 0 + }, + "9": { + "cusp_degree": 103.1989, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 3, + "sub_lord": "Rahu", + "sub_sub_lord": "Jupiter", + "sub_index": 5 + }, + "10": { + "cusp_degree": 133.9141, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Purva Phalguni", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Moon", + "sub_index": 1 + }, + "11": { + "cusp_degree": 166.4193, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 2, + "sub_lord": "Saturn", + "sub_sub_lord": "Ketu", + "sub_index": 7 + }, + "12": { + "cusp_degree": 198.0317, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Swati", + "nakshatra_lord": "Rahu", + "pada": 4, + "sub_lord": "Sun", + "sub_sub_lord": "Venus", + "sub_index": 2 + } + }, + "indices": { + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1 + }, + "note": "已按 Swiss Ephemeris Placidus + Krishnamurti 观察 12 宫头;不计分,不参与提出门或确认门。" + }, + "varga_ascendants": { + "D2": 4, + "D3": 11, + "D4": 1, + "D5": 9, + "D7": 5, + "D9": 8, + "D10": 9, + "D11": 11, + "D12": 2, + "D24": 5, + "D30": 11 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 9 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "98041eaec589a2aa9858dfb16785abc50f90e8d7ca6794b1438ad121307385a8", + "vargas": "289f439c46151507aaecfdbb632c92d37a232c2d38df5a27eeb980b67d41ef31", + "arudha": "67f5884a3d94a78bb7d53207c3c9455d6d19bd6ce380d842eb3666692ad52f72", + "ashtakavarga": "7937752a45e6606d55be5611568069ed7946af095048790a1279e30f0724c5e6", + "shadbala": "836db4f5a528f12832ef913bcd4dd11eecf5e17f7e3898c19c4541ff393e830f", + "static": "4b0f7cac1b16921ca605f28c7ee36243eb368a24744380cb0064586e8f9a314a" + } + }, + { + "time": "00:02", + "ascendant_degree": 228.7547, + "ascendant_sign_index": 7, + "pada_index": 68, + "bhava_sign_index": 9, + "hora_sign_index": 4, + "ghati_sign_index": 4, + "pranapada_sign_index": 8, + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 227.4053, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Sun", + "sub_index": 8 + }, + "2": { + "cusp_degree": 255.0664, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Purva Ashadha", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Saturn", + "sub_index": 1 + }, + "3": { + "cusp_degree": 283.4448, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Shravana", + "nakshatra_lord": "Moon", + "pada": 2, + "sub_lord": "Rahu", + "sub_sub_lord": "Venus", + "sub_index": 5 + }, + "4": { + "cusp_degree": 314.1814, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Shatabhisha", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Saturn", + "sub_index": 8 + }, + "5": { + "cusp_degree": 346.6913, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Revati", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Mercury", + "sub_index": 8 + }, + "6": { + "cusp_degree": 18.2859, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 2, + "sub_lord": "Rahu", + "sub_sub_lord": "Rahu", + "sub_index": 5 + }, + "7": { + "cusp_degree": 47.4053, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Saturn", + "sub_sub_lord": "Rahu", + "sub_index": 7 + }, + "8": { + "cusp_degree": 75.0664, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 3, + "sub_lord": "Ketu", + "sub_sub_lord": "Saturn", + "sub_index": 0 + }, + "9": { + "cusp_degree": 103.4448, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 4, + "sub_lord": "Rahu", + "sub_sub_lord": "Jupiter", + "sub_index": 5 + }, + "10": { + "cusp_degree": 134.1814, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Purva Phalguni", + "nakshatra_lord": "Venus", + "pada": 1, + "sub_lord": "Venus", + "sub_sub_lord": "Rahu", + "sub_index": 1 + }, + "11": { + "cusp_degree": 166.6913, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Saturn", + "sub_sub_lord": "Venus", + "sub_index": 7 + }, + "12": { + "cusp_degree": 198.2859, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Swati", + "nakshatra_lord": "Rahu", + "pada": 4, + "sub_lord": "Moon", + "sub_sub_lord": "Rahu", + "sub_index": 3 + } + }, + "indices": { + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 7, + "kp10_sub_index": 1 + }, + "note": "已按 Swiss Ephemeris Placidus + Krishnamurti 观察 12 宫头;不计分,不参与提出门或确认门。" + }, + "varga_ascendants": { + "D2": 4, + "D3": 11, + "D4": 1, + "D5": 9, + "D7": 5, + "D9": 8, + "D10": 9, + "D11": 11, + "D12": 2, + "D24": 6, + "D30": 11 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 9 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "03e66fc999351154a82307c28471ac24a4e2f233c5a017dea1efaf0da9e63ab4", + "vargas": "bf19f170f16c34380090595c2fcdb9c60f1620f27c4f84eb0661d8e79a8ebe08", + "arudha": "67f5884a3d94a78bb7d53207c3c9455d6d19bd6ce380d842eb3666692ad52f72", + "ashtakavarga": "7937752a45e6606d55be5611568069ed7946af095048790a1279e30f0724c5e6", + "shadbala": "6f08cd784d3e4e8bcc925a7c5c2c26a78b676ea078b792aae50d663c188d59f6", + "static": "5f7fc58350dc3ebc961df70493550cdfd287de748518abf46a2729b0c8ae0a9d" + } + } + ] + }, + "diagnostics": { + "primary_cluster_retention_rate": 1.0, + "leave_one_event_out_retention_rate": 1.0, + "leave_one_domain_out_retention_rate": 1.0, + "date_sensitivity_retention_rate": 1.0, + "neighbor_support_minutes": 1, + "primary_secondary_margin_percent": 18.4056, + "cluster_mass_ratio": 0.3164888775621655, + "unstable_event_ids": [], + "most_discriminating_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_pd_functional_malefic_auxiliary" + ], + "event_date_sensitivity": [ + { + "event_id": "00000000-0000-4000-8000-000000000001", + "declared_date_range": { + "start": "2020-01-01", + "end": "2020-01-01", + "precision": "day" + }, + "sample_dates": [ + "2020-01-01" + ], + "winner_retention_rate": 1.0, + "score_variance": 0.0, + "candidate_cluster_retention_rate": 1.0 + } + ], + "candidate_splits": [ + { + "left_cluster": { + "start": "23:58", + "end": "23:58" + }, + "right_cluster": { + "start": "23:59", + "end": "23:59" + }, + "technique_layers": [ + "D10", + "D5", + "Shadbala" + ], + "event_ids": [ + "00000000-0000-4000-8000-000000000001" + ] + } + ], + "leave_one_event_out": [ + { + "removed_event_id": "00000000-0000-4000-8000-000000000001", + "winner": "23:58", + "retained": true + } + ], + "leave_one_domain_out": [ + { + "removed_domain": "career", + "winner": "23:58", + "retained": true + } + ], + "window_scan": { + "scanned": true, + "confirmation_allowed": false, + "unique_minute_claim": false, + "transitions": [ + { + "layer": "d1", + "at": "23:58", + "user_meaning": "本命上升 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "天蝎座", + "to_sign": "天蝎座" + }, + { + "layer": "d9", + "at": "23:58", + "user_meaning": "D9 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "d10", + "at": "23:58", + "user_meaning": "D10 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "d4", + "at": "23:58", + "user_meaning": "D4 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "金牛座", + "to_sign": "金牛座" + }, + { + "layer": "d5", + "at": "23:58", + "user_meaning": "D5 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双鱼座", + "to_sign": "双鱼座" + }, + { + "layer": "d7", + "at": "23:58", + "user_meaning": "D7 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "处女座", + "to_sign": "处女座" + }, + { + "layer": "d12", + "at": "23:58", + "user_meaning": "D12 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双子座", + "to_sign": "双子座" + }, + { + "layer": "d24", + "at": "23:58", + "user_meaning": "D24 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "处女座", + "to_sign": "处女座" + }, + { + "layer": "d2", + "at": "23:58", + "user_meaning": "D2 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "狮子座", + "to_sign": "狮子座" + }, + { + "layer": "d11", + "at": "23:58", + "user_meaning": "D11 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双鱼座", + "to_sign": "双鱼座" + }, + { + "layer": "d30", + "at": "23:58", + "user_meaning": "D30 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "双鱼座", + "to_sign": "双鱼座" + }, + { + "layer": "pada", + "at": "23:58", + "user_meaning": "Nakshatra pada 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true + }, + { + "layer": "hora", + "at": "23:58", + "user_meaning": "Hora Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "狮子座", + "to_sign": "狮子座" + }, + { + "layer": "ghati", + "at": "23:58", + "user_meaning": "Ghati Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "狮子座", + "to_sign": "狮子座" + }, + { + "layer": "bhava", + "at": "23:58", + "user_meaning": "Bhava Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "摩羯座", + "to_sign": "摩羯座" + }, + { + "layer": "pranapada", + "at": "23:58", + "user_meaning": "Pranapada Lagna 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "kp1", + "at": "23:58", + "user_meaning": "KP 1宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "天秤座", + "to_sign": "天秤座" + }, + { + "layer": "kp4", + "at": "23:58", + "user_meaning": "KP 4宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "kp7", + "at": "23:58", + "user_meaning": "KP 7宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "天蝎座", + "to_sign": "天蝎座" + }, + { + "layer": "kp10", + "at": "23:58", + "user_meaning": "KP 10宫子主 在这一段起点的状态", + "candidate_date": "2000-02-29", + "window_index": 0, + "window_offset_minutes": 0, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "segment_start": true, + "from_sign": "射手座", + "to_sign": "射手座" + }, + { + "layer": "d10", + "at": "23:59", + "user_meaning": "D10 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "射手座", + "to_sign": "摩羯座" + }, + { + "layer": "d5", + "at": "23:59", + "user_meaning": "D5 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "双鱼座", + "to_sign": "摩羯座" + }, + { + "layer": "kp1", + "at": "23:59", + "user_meaning": "KP 1宫子主 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "天秤座", + "to_sign": "射手座" + }, + { + "layer": "kp10", + "at": "23:59", + "user_meaning": "KP 10宫子主 在 23:59 发生变化", + "candidate_date": "2000-02-29", + "window_index": 1, + "window_offset_minutes": 1, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "射手座", + "to_sign": "金牛座" + }, + { + "layer": "d24", + "at": "00:02", + "user_meaning": "D24 在 00:02 发生变化", + "candidate_date": "2000-03-01", + "window_index": 4, + "window_offset_minutes": 4, + "segment_index": 0, + "segment_start_at": "2000-02-29T23:58", + "segment_end_at": "2000-03-01T00:02", + "from_sign": "处女座", + "to_sign": "天秤座" + } + ], + "d1_lagna_count": 1, + "d1_candidates_differ": false, + "d9_lagna_count": 1, + "d9_candidates_differ": false, + "d10_lagna_count": 2, + "d10_candidates_differ": true, + "d4_lagna_count": 1, + "d4_candidates_differ": false, + "d5_lagna_count": 2, + "d5_candidates_differ": true, + "d7_lagna_count": 1, + "d7_candidates_differ": false, + "d12_lagna_count": 1, + "d12_candidates_differ": false, + "d24_lagna_count": 2, + "d24_candidates_differ": true, + "d2_lagna_count": 1, + "d2_candidates_differ": false, + "d11_lagna_count": 1, + "d11_candidates_differ": false, + "d30_lagna_count": 1, + "d30_candidates_differ": false, + "pada_count": 1, + "pada_candidates_differ": false, + "hora_count": 1, + "hora_candidates_differ": false, + "ghati_count": 1, + "ghati_candidates_differ": false, + "bhava_count": 1, + "bhava_candidates_differ": false, + "pranapada_count": 1, + "pranapada_candidates_differ": false, + "kp1_count": 2, + "kp1_candidates_differ": true, + "kp4_count": 1, + "kp4_candidates_differ": false, + "kp7_count": 1, + "kp7_candidates_differ": false, + "kp10_count": 2, + "kp10_candidates_differ": true, + "d9_sign_names": [ + "射手座" + ], + "d10_sign_names": [ + "射手座", + "摩羯座" + ] + } + }, + "candidate_summary": { + "claim_status": "candidate_range_not_birth_time_truth", + "candidate_range": { + "start_time": "23:58", + "end_time": "23:58", + "candidate_intervals": [ + { + "start_at": "2000-02-29T23:58", + "end_at": "2000-02-29T23:58" + } + ], + "representative_time": "23:58", + "width_minutes": 1, + "representative_is_unique": false + }, + "supporting_evidence": [ + { + "domain": "career", + "event_count": 1, + "rule_ids": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_pd_functional_malefic_auxiliary" + ], + "total_points": 1.0 + } + ], + "unconfirmed_evidence": [], + "contradictory_evidence": [], + "reasons": [ + "insufficient_events", + "insufficient_domain_diversity", + "insufficient_confirmation_events", + "insufficient_confirmation_domains", + "insufficient_confirmation_margin", + "engine_exact_confirmation_not_granted", + "external_validation_not_passed", + "public_aa_holdout_not_ready" + ], + "next_step_codes": [ + "collect_at_least_five_events", + "do_not_apply_as_birth_time_truth" + ], + "stability": { + "label": "low" + }, + "report": { + "candidate_range": { + "start_time": "23:58", + "end_time": "23:58", + "candidate_intervals": [ + { + "start_at": "2000-02-29T23:58", + "end_at": "2000-02-29T23:58" + } + ], + "representative_time": "23:58", + "width_minutes": 1, + "representative_is_unique": false + }, + "representative_time": "23:58", + "representative_label": "代表性候选,不是唯一解", + "confidence": "low", + "evidence": [ + { + "event_id": "00000000-0000-4000-8000-000000000001", + "summary": "Fictional career entry for date-contract testing", + "domain": "career", + "date": { + "start": "2020-01-01", + "end": "2020-01-01", + "precision": "day" + }, + "status": "supporting", + "supports_candidate_time": "23:58", + "methods": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_pd_functional_malefic_auxiliary" + ] + } + ], + "excluded_candidates": [ + { + "time": "23:59", + "reason": "not_the_leading_candidate", + "representative_time": "23:58" + }, + { + "time": "00:02", + "reason": "not_the_leading_candidate", + "representative_time": "23:58" + } + ], + "next_step_codes": [ + "collect_at_least_five_events", + "do_not_apply_as_birth_time_truth" + ], + "confirmation_gate_blockers": [ + { + "technique": "VedAstro 分钟级校验", + "status": "blocked", + "user_meaning": "官方分钟敏感校验尚未跑通。未调用不等于失败,但缺这一层不能写确认。" + }, + { + "technique": "唯一分钟确认", + "status": "blocked", + "user_meaning": "本会话以代表性时间收口,不确认唯一分钟。" + } + ], + "limitations": [ + "官方分钟敏感校验尚未跑通。未调用不等于失败,但缺这一层不能写确认。", + "本会话以代表性时间收口,不确认唯一分钟。" + ], + "claim_status": "candidate_range_not_birth_time_truth" + } + }, + "next_step_codes": [ + "collect_at_least_five_events", + "do_not_apply_as_birth_time_truth" + ], + "stability": { + "label": "low" + }, + "rectification_report": { + "candidate_range": { + "start_time": "23:58", + "end_time": "23:58", + "candidate_intervals": [ + { + "start_at": "2000-02-29T23:58", + "end_at": "2000-02-29T23:58" + } + ], + "representative_time": "23:58", + "width_minutes": 1, + "representative_is_unique": false + }, + "representative_time": "23:58", + "representative_label": "代表性候选,不是唯一解", + "confidence": "low", + "evidence": [ + { + "event_id": "00000000-0000-4000-8000-000000000001", + "summary": "Fictional career entry for date-contract testing", + "domain": "career", + "date": { + "start": "2020-01-01", + "end": "2020-01-01", + "precision": "day" + }, + "status": "supporting", + "supports_candidate_time": "23:58", + "methods": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_pd_functional_malefic_auxiliary" + ] + } + ], + "excluded_candidates": [ + { + "time": "23:59", + "reason": "not_the_leading_candidate", + "representative_time": "23:58" + }, + { + "time": "00:02", + "reason": "not_the_leading_candidate", + "representative_time": "23:58" + } + ], + "next_step_codes": [ + "collect_at_least_five_events", + "do_not_apply_as_birth_time_truth" + ], + "confirmation_gate_blockers": [ + { + "technique": "VedAstro 分钟级校验", + "status": "blocked", + "user_meaning": "官方分钟敏感校验尚未跑通。未调用不等于失败,但缺这一层不能写确认。" + }, + { + "technique": "唯一分钟确认", + "status": "blocked", + "user_meaning": "本会话以代表性时间收口,不确认唯一分钟。" + } + ], + "limitations": [ + "官方分钟敏感校验尚未跑通。未调用不等于失败,但缺这一层不能写确认。", + "本会话以代表性时间收口,不确认唯一分钟。" + ], + "claim_status": "candidate_range_not_birth_time_truth" + }, + "robustness": { + "neighbor_support_minutes": 1, + "leave_one_out_retention_rate": 1.0, + "leave_one_domain_out_retention_rate": 1.0, + "date_sensitivity_retention_rate": 1.0 + }, + "missing_layers": [], + "display_allowed": true, + "selection_allowed": false, + "acceptance_allowed": false, + "propose_allowed": false, + "confirmation_allowed": false, + "representative_candidate_id": "5ff8942f-9715-5678-8f67-12f865eb0017", + "representative_time": "23:58", + "overall_confidence": "low", + "margin_percent": 18.4056, + "can_confirm_exact_minute": false + } +} \ No newline at end of file diff --git a/frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts b/frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts index fe96411e..b30b50ba 100644 --- a/frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts +++ b/frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts @@ -13,7 +13,7 @@ import { dossierFixture } from "./rectification-v9-test-support.ts"; test("dated contract is a generation threshold, not one literal", () => { assert.equal(FIRST_DATED_SCORING_GENERATION, 9); - for (const version of ["rectification-v5-matrix-scoring-9", "rectification-v5-matrix-scoring-10", "rectification-v5-matrix-scoring-11", "rectification-v5-matrix-scoring-12", "rectification-v5-matrix-scoring-13", "rectification-v5-matrix-scoring-14", "rectification-v5-matrix-scoring-100"]) { + for (const version of ["rectification-v5-matrix-scoring-9", "rectification-v5-matrix-scoring-10", "rectification-v5-matrix-scoring-11", "rectification-v5-matrix-scoring-12", "rectification-v5-matrix-scoring-13", "rectification-v5-matrix-scoring-14", "rectification-v5-matrix-scoring-15", "rectification-v5-matrix-scoring-100"]) { assert.equal(isDatedScoringAlgorithmVersion(version), true, version); } for (const version of ["rectification-v5-matrix-scoring-8", "rectification-v5-matrix-scoring-1", "rectification-v5-matrix-scoring-09", @@ -22,15 +22,16 @@ test("dated contract is a generation threshold, not one literal", () => { } }); -test("receipt default and Python identity agree on scoring-14", (t) => { +test("receipt default and Python identity agree on scoring-15", (t) => { const saved = process.env.RECTIFICATION_ENGINE_VERSION; delete process.env.RECTIFICATION_ENGINE_VERSION; t.after(() => { if (saved === undefined) delete process.env.RECTIFICATION_ENGINE_VERSION; else process.env.RECTIFICATION_ENGINE_VERSION = saved; }); // 原值: rectification-v5-matrix-scoring-12;新值: ...-scoring-13;原因: D30 偶数星座按 BPHS、白羊 / 天蝎金星功能凶改变同输入分数(BUG-1560 / BUG-1570)。 // 原值: ...-scoring-13;新值: ...-scoring-14;原因: #166 占星师裁定(Shadbala Sthana / Drik、jaimini.py Arudha 例外,BUG-1583~1588)改变同输入分数。 - assert.equal(v9EngineVersion(), "rectification-v5-matrix-scoring-14"); + // 原值: ...-scoring-14;新值: ...-scoring-15;原因: #166 第二批(第 4 条:双子 / 处女上升土星改为混合,BUG-1590)改变同输入分数。 + assert.equal(v9EngineVersion(), "rectification-v5-matrix-scoring-15"); const python = readFileSync(new URL("../../scripts/rectification/scoring_service.py", import.meta.url), "utf8"); - assert.match(python, /^ALGORITHM_VERSION = "rectification-v5-matrix-scoring-14"$/m); + assert.match(python, /^ALGORITHM_VERSION = "rectification-v5-matrix-scoring-15"$/m); }); test("no source file compares the algorithm identity with a scoring-N literal", () => { @@ -119,6 +120,16 @@ test("a scoring-12 history opens read-only under scoring-13 and offers a recompa assert.ok(dossier.latestResult!.candidates.every((candidate) => typeof candidate.candidate_date === "string")); }); +test("a scoring-14 history opens read-only under scoring-15 and offers a recompare (BUG-621)", () => { + const historical = JSON.parse(readFileSync(new URL("./fixtures/rectification-midnight-date-anchor.delivery.scoring-14.native.json", import.meta.url), "utf8")).response; + assert.equal(historical.algorithm_version, "rectification-v5-matrix-scoring-14"); + const latest = { ...historical, candidates: historical.candidate_decisions }; + const dossier = parseV9CaseDossier(dossierFixture({ stage: "minute", latestResult: latest })); + assert.ok(dossier); + const view = resultIdentityView(dossier, { algorithmVersion: "rectification-v5-matrix-scoring-15", policyVersion: historical.decision_policy_version }); + assert.deepEqual([view.read_only, view.can_recompare, view.algorithm_version], [true, true, "rectification-v5-matrix-scoring-14"]); +}); + test("a scoring-13 history opens read-only under scoring-14 and offers a recompare (BUG-621)", () => { const historical = JSON.parse(readFileSync(new URL("./fixtures/rectification-midnight-date-anchor.delivery.scoring-13.native.json", import.meta.url), "utf8")).response; assert.equal(historical.algorithm_version, "rectification-v5-matrix-scoring-13"); diff --git a/frontend/tests/rectification-engine-version-cross-midnight.test.ts b/frontend/tests/rectification-engine-version-cross-midnight.test.ts index 7d036aa9..fef5a0b5 100644 --- a/frontend/tests/rectification-engine-version-cross-midnight.test.ts +++ b/frontend/tests/rectification-engine-version-cross-midnight.test.ts @@ -37,12 +37,14 @@ const PREVIOUS = "rectification-v5-matrix-scoring-7"; // 原值: LIVE_CURRENT = "rectification-v5-matrix-scoring-13";新值: "...-scoring-14"; // scoring-13 dated golden 留作历史,当前版本另有真实引擎生成的 scoring-14 golden。 // 原因: #166 占星师裁定(Shadbala Sthana / Drik、jaimini.py Arudha 例外,BUG-1583~1588)改变同输入分数,按 BUG-1181 升算法身份。 -const LIVE_CURRENT = "rectification-v5-matrix-scoring-14"; +// 原值: "...-scoring-14";新值: "...-scoring-15";原因: #166 第二批(第 4 条:双子 / 处女上升土星改为混合,BUG-1590)改变同输入分数,按 BUG-1181 升算法身份;scoring-14 golden 留作历史。 +const LIVE_CURRENT = "rectification-v5-matrix-scoring-15"; const DATED_HISTORICAL = "rectification-v5-matrix-scoring-9"; const SCORING_10 = "rectification-v5-matrix-scoring-10"; const SCORING_11 = "rectification-v5-matrix-scoring-11"; const SCORING_12 = "rectification-v5-matrix-scoring-12"; const SCORING_13 = "rectification-v5-matrix-scoring-13"; +const SCORING_14 = "rectification-v5-matrix-scoring-14"; const liveGolden = JSON.parse(readFileSync(new URL( "./fixtures/rectification-midnight-date-anchor.delivery.native.json", import.meta.url, ), "utf8")); @@ -58,9 +60,12 @@ const scoring12Golden = JSON.parse(readFileSync(new URL( const scoring13Golden = JSON.parse(readFileSync(new URL( "./fixtures/rectification-midnight-date-anchor.delivery.scoring-13.native.json", import.meta.url, ), "utf8")); -const currentGolden = JSON.parse(readFileSync(new URL( +const scoring14Golden = JSON.parse(readFileSync(new URL( "./fixtures/rectification-midnight-date-anchor.delivery.scoring-14.native.json", import.meta.url, ), "utf8")); +const currentGolden = JSON.parse(readFileSync(new URL( + "./fixtures/rectification-midnight-date-anchor.delivery.scoring-15.native.json", import.meta.url, +), "utf8")); const envKeys = [ "RECTIFICATION_ENGINE_VERSION", "RECTIFICATION_ALGORITHM_VERSION", "RECTIFICATION_DECISION_POLICY_VERSION", @@ -87,12 +92,13 @@ test("receipt default matches the cross-midnight native scoring version without assert.equal(golden.score.algorithm_version, CURRENT); assert.equal(golden.versions.algorithm_version, CURRENT); const python = readFileSync(new URL("../../scripts/rectification/scoring_service.py", import.meta.url), "utf8"); - assert.match(python, /ALGORITHM_VERSION = "rectification-v5-matrix-scoring-14"/); + assert.match(python, /ALGORITHM_VERSION = "rectification-v5-matrix-scoring-15"/); assert.equal(liveGolden.response.algorithm_version, DATED_HISTORICAL); assert.equal(scoring10Golden.response.algorithm_version, SCORING_10); assert.equal(scoring11Golden.response.algorithm_version, SCORING_11); assert.equal(scoring12Golden.response.algorithm_version, SCORING_12); assert.equal(scoring13Golden.response.algorithm_version, SCORING_13); + assert.equal(scoring14Golden.response.algorithm_version, SCORING_14); assert.equal(currentGolden.response.algorithm_version, LIVE_CURRENT); const fingerprints = { evidenceLedgerFingerprint: "e".repeat(64), candidateRangeFingerprint: "c".repeat(64) }; const live = { @@ -107,6 +113,7 @@ test("receipt default matches the cross-midnight native scoring version without assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: SCORING_11 }, fingerprints, live), false); assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: SCORING_12 }, fingerprints, live), false); assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: SCORING_13 }, fingerprints, live), false); + assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: SCORING_14 }, fingerprints, live), false); // 原值: 只把 algorithmVersion 改成 LIVE_CURRENT 即可复用(当时 golden 的策略与旧 fixture 相同) // 新值: 复用还要带上当前 golden 的 policyVersion // 原因: scoring-11 回执的策略是 policy-v4,旧跨午夜 fixture 的策略不是这一版(BUG-1260) diff --git a/frontend/tests/rectification-midnight-date-anchor.test.ts b/frontend/tests/rectification-midnight-date-anchor.test.ts index 3fc178d7..310c9f86 100644 --- a/frontend/tests/rectification-midnight-date-anchor.test.ts +++ b/frontend/tests/rectification-midnight-date-anchor.test.ts @@ -101,7 +101,7 @@ for (const option of ["A", "B", "C", "skip_probe"] as const) test(`D1 initial no // 原值: native + scoring-10 + scoring-11;新值: 再加 scoring-12;原因: 章动修正升到 scoring-12(BUG-1275),旧文件仍要按日期窗打开。 // 原值: 到 scoring-13;新值: 再加 scoring-14;原因: #166 占星师裁定(Shadbala Sthana / Drik、jaimini.py Arudha 例外,BUG-1583~1588)改变同输入分数,旧文件仍要按日期窗打开。 // 原值: 到 scoring-12;新值: 再加 scoring-13;原因: D30 / 金星功能凶升到 scoring-13(BUG-1560 / BUG-1570),旧文件仍要按日期窗打开。 -for (const fixture of ["rectification-midnight-date-anchor.delivery.native.json", "rectification-midnight-date-anchor.delivery.scoring-10.native.json", "rectification-midnight-date-anchor.delivery.scoring-11.native.json", "rectification-midnight-date-anchor.delivery.scoring-12.native.json", "rectification-midnight-date-anchor.delivery.scoring-13.native.json", "rectification-midnight-date-anchor.delivery.scoring-14.native.json"]) test(`native golden crosses engine parsing, inference and dated delivery without reanchoring (${fixture})`, async () => { +for (const fixture of ["rectification-midnight-date-anchor.delivery.native.json", "rectification-midnight-date-anchor.delivery.scoring-10.native.json", "rectification-midnight-date-anchor.delivery.scoring-11.native.json", "rectification-midnight-date-anchor.delivery.scoring-12.native.json", "rectification-midnight-date-anchor.delivery.scoring-13.native.json", "rectification-midnight-date-anchor.delivery.scoring-14.native.json", "rectification-midnight-date-anchor.delivery.scoring-15.native.json"]) test(`native golden crosses engine parsing, inference and dated delivery without reanchoring (${fixture})`, async () => { const golden = JSON.parse(readFileSync(new URL(`./fixtures/${fixture}`, import.meta.url), "utf8")); const originalFetch = globalThis.fetch; globalThis.fetch = (async () => new Response(JSON.stringify(golden.response), { status: 200 })) as typeof fetch; diff --git a/scripts/rectification/scoring_service.py b/scripts/rectification/scoring_service.py index a05050a8..09c286f4 100644 --- a/scripts/rectification/scoring_service.py +++ b/scripts/rectification/scoring_service.py @@ -31,7 +31,9 @@ from scripts.rectification.case_holdout import holdout_event_ids # whole-sign Kendradi) and Drik (BPHS 26 special aspects, Mercury with any malefic) # feed the Shadbala auxiliary; jaimini.py Arudha 1/7 exception counts from the # first-count pada. Same input scores differently. Policy and dated contract unchanged. -ALGORITHM_VERSION = "rectification-v5-matrix-scoring-14" +# scoring-15 (2026-11-04, #166 batch 2, BUG-1590): functional roles make Gemini +# Saturn (8, 9) and Virgo Saturn (5, 6) mixed, which the *_functional_* rules read. +ALGORITHM_VERSION = "rectification-v5-matrix-scoring-15" INPUT_CONTRACT_VERSION = "rectification-calculation-spec-v5" PRECISION_WEIGHTS = { "day": 1.0, diff --git a/tests/golden/rectification_engine_memoization_v8.json b/tests/golden/rectification_engine_memoization_v8.json new file mode 100644 index 00000000..540790b2 --- /dev/null +++ b/tests/golden/rectification_engine_memoization_v8.json @@ -0,0 +1,1792 @@ +{ + "source_commit": "4b223eb8eaf28db7c22364b50c17af7941c1d606", + "candidate_scores": [ + { + "time": "12:00", + "score": 8.5336, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001", + "00000000-0000-4000-8000-000000000002" + ], + "conflicting_event_ids": [] + }, + { + "time": "12:01", + "score": 8.5242, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001", + "00000000-0000-4000-8000-000000000002" + ], + "conflicting_event_ids": [] + }, + { + "time": "12:02", + "score": 8.088, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001", + "00000000-0000-4000-8000-000000000002" + ], + "conflicting_event_ids": [] + } + ], + "decision_receipt": { + "receipt_version": "candidate-decision-receipt-v2", + "contract_version": "v2", + "event_contract_version": "rectification-event-contract-v2", + "policy_version": "rectification-candidate-policy-v4", + "decision_policy_version": "rectification-candidate-policy-v4", + "display_allowed": true, + "selection_allowed": false, + "acceptance_allowed": false, + "propose_allowed": false, + "confirmation_allowed": false, + "accept_allowed": false, + "confirm_allowed": false, + "representative_candidate_id": "628ce4e7-6fe6-5068-80db-c557cda12dc6", + "representative_time": "12:00", + "overall_confidence": "low", + "margin_percent": 5.2217, + "reasons": [ + "insufficient_events", + "insufficient_domain_diversity", + "insufficient_diagnostic_stability", + "insufficient_confirmation_events", + "insufficient_confirmation_domains", + "insufficient_confirmation_margin", + "engine_exact_confirmation_not_granted", + "external_validation_not_passed", + "public_aa_holdout_not_ready" + ], + "acceptance_reasons": [ + "insufficient_events", + "insufficient_domain_diversity" + ], + "confirmation_reasons": [ + "insufficient_diagnostic_stability", + "insufficient_confirmation_events", + "insufficient_confirmation_domains", + "insufficient_confirmation_margin", + "engine_exact_confirmation_not_granted", + "external_validation_not_passed", + "public_aa_holdout_not_ready" + ], + "tie_policy": { + "score_quantum": 0.0001, + "absolute_tolerance": 0.0001, + "rounding": "ROUND_HALF_UP" + }, + "gates": { + "candidate_presence": { + "passed": true, + "candidate_count": 2 + }, + "event_quality": { + "passed": false, + "scoreable_event_count": 2, + "training_event_count": 2, + "minimum": 4 + }, + "domain_diversity": { + "passed": false, + "scoreable_domain_count": 2, + "minimum": 3, + "domains": [ + "career", + "education" + ] + }, + "date_quality": { + "passed": true, + "precision_weight_total": 1.3, + "precision_weight_mean": 0.65, + "minimum_precision_weight_mean": 0.65, + "low_reliability_event_ids": [], + "unresolved_conflict_event_ids": [] + }, + "unique_top": { + "passed": true, + "tied_minute_count": 1 + }, + "diagnostic_quality": { + "passed": false, + "minimum_retention": 0.75, + "minimum_margin_percent": 10.0, + "margin_percent": 5.2217, + "leave_one_event_out_retention_rate": 1.0, + "leave_one_domain_out_retention_rate": 1.0, + "date_sensitivity_retention_rate": 0.9583333333333333 + }, + "required_layers": { + "passed": true, + "missing_layers": [], + "skipped_by_policy": [] + }, + "exact_confirmation": { + "passed": false, + "fail_closed": true, + "engine_granted": false, + "adjacent_passed": true, + "indistinguishable_width_minutes": 3, + "max_confirmation_width_minutes": 5, + "external_validation_status": "not_evaluated", + "unique_minute_path": "closed_at_representative", + "required_scoreable_events": 4, + "required_scoreable_domains": 3, + "reason": "engine_and_external_validation_must_explicitly_pass", + "holdout": { + "sealed_benchmark_id": "minute_rectification_fact_ranker_v4_holdout_v3", + "status": "not_ready", + "valid_public_aa_cases": 20, + "required_cases": 20, + "top_1_rate": 0.15, + "confirmation_coverage_rate": 0.0 + } + } + }, + "house_table": { + "time": "12:00", + "lagna": "\u53cc\u9c7c\u5ea7", + "houses": [ + { + "house": 1, + "sign": "\u53cc\u9c7c\u5ea7", + "occupants": [] + }, + { + "house": 2, + "sign": "\u767d\u7f8a\u5ea7", + "occupants": [] + }, + { + "house": 3, + "sign": "\u91d1\u725b\u5ea7", + "occupants": [] + }, + { + "house": 4, + "sign": "\u53cc\u5b50\u5ea7", + "occupants": [ + "\u6728\u661f" + ] + }, + { + "house": 5, + "sign": "\u5de8\u87f9\u5ea7", + "occupants": [ + "\u8ba1\u90fd" + ] + }, + { + "house": 6, + "sign": "\u72ee\u5b50\u5ea7", + "occupants": [] + }, + { + "house": 7, + "sign": "\u5904\u5973\u5ea7", + "occupants": [] + }, + { + "house": 8, + "sign": "\u5929\u79e4\u5ea7", + "occupants": [] + }, + { + "house": 9, + "sign": "\u5929\u874e\u5ea7", + "occupants": [ + "\u706b\u661f" + ] + }, + { + "house": 10, + "sign": "\u5c04\u624b\u5ea7", + "occupants": [ + "\u592a\u9633", + "\u571f\u661f" + ] + }, + { + "house": 11, + "sign": "\u6469\u7faf\u5ea7", + "occupants": [ + "\u6c34\u661f", + "\u91d1\u661f", + "\u7f57\u777a" + ] + }, + { + "house": 12, + "sign": "\u6c34\u74f6\u5ea7", + "occupants": [ + "\u6708\u4eae" + ] + } + ] + }, + "natal_recast": { + "time": "12:00", + "lagna": "\u53cc\u9c7c\u5ea7", + "user_meaning": "\u672c\u547d\u5bab\u4f4d\u5df2\u6309 12:00 \u91cd\u7b97\uff08\u4e0a\u5347 \u53cc\u9c7c\u5ea7\uff09\u3002\u4e0b\u9762\u662f\u672c\u8f6e\u5b9e\u9645\u6267\u884c\u7684\u6280\u6cd5\uff0c\u4e0d\u80fd\u5f53\u4f5c\u552f\u4e00\u5206\u949f\u786e\u8ba4\u3002", + "unique_minute_claim": false, + "confirmation_allowed": false + }, + "house_tables_by_time": { + "12:00": { + "time": "12:00", + "lagna": "\u53cc\u9c7c\u5ea7", + "houses": [ + { + "house": 1, + "sign": "\u53cc\u9c7c\u5ea7", + "occupants": [] + }, + { + "house": 2, + "sign": "\u767d\u7f8a\u5ea7", + "occupants": [] + }, + { + "house": 3, + "sign": "\u91d1\u725b\u5ea7", + "occupants": [] + }, + { + "house": 4, + "sign": "\u53cc\u5b50\u5ea7", + "occupants": [ + "\u6728\u661f" + ] + }, + { + "house": 5, + "sign": "\u5de8\u87f9\u5ea7", + "occupants": [ + "\u8ba1\u90fd" + ] + }, + { + "house": 6, + "sign": "\u72ee\u5b50\u5ea7", + "occupants": [] + }, + { + "house": 7, + "sign": "\u5904\u5973\u5ea7", + "occupants": [] + }, + { + "house": 8, + "sign": "\u5929\u79e4\u5ea7", + "occupants": [] + }, + { + "house": 9, + "sign": "\u5929\u874e\u5ea7", + "occupants": [ + "\u706b\u661f" + ] + }, + { + "house": 10, + "sign": "\u5c04\u624b\u5ea7", + "occupants": [ + "\u592a\u9633", + "\u571f\u661f" + ] + }, + { + "house": 11, + "sign": "\u6469\u7faf\u5ea7", + "occupants": [ + "\u6c34\u661f", + "\u91d1\u661f", + "\u7f57\u777a" + ] + }, + { + "house": 12, + "sign": "\u6c34\u74f6\u5ea7", + "occupants": [ + "\u6708\u4eae" + ] + } + ] + }, + "12:01": { + "time": "12:01", + "lagna": "\u53cc\u9c7c\u5ea7", + "houses": [ + { + "house": 1, + "sign": "\u53cc\u9c7c\u5ea7", + "occupants": [] + }, + { + "house": 2, + "sign": "\u767d\u7f8a\u5ea7", + "occupants": [] + }, + { + "house": 3, + "sign": "\u91d1\u725b\u5ea7", + "occupants": [] + }, + { + "house": 4, + "sign": "\u53cc\u5b50\u5ea7", + "occupants": [ + "\u6728\u661f" + ] + }, + { + "house": 5, + "sign": "\u5de8\u87f9\u5ea7", + "occupants": [ + "\u8ba1\u90fd" + ] + }, + { + "house": 6, + "sign": "\u72ee\u5b50\u5ea7", + "occupants": [] + }, + { + "house": 7, + "sign": "\u5904\u5973\u5ea7", + "occupants": [] + }, + { + "house": 8, + "sign": "\u5929\u79e4\u5ea7", + "occupants": [] + }, + { + "house": 9, + "sign": "\u5929\u874e\u5ea7", + "occupants": [ + "\u706b\u661f" + ] + }, + { + "house": 10, + "sign": "\u5c04\u624b\u5ea7", + "occupants": [ + "\u592a\u9633", + "\u571f\u661f" + ] + }, + { + "house": 11, + "sign": "\u6469\u7faf\u5ea7", + "occupants": [ + "\u6c34\u661f", + "\u91d1\u661f", + "\u7f57\u777a" + ] + }, + { + "house": 12, + "sign": "\u6c34\u74f6\u5ea7", + "occupants": [ + "\u6708\u4eae" + ] + } + ] + }, + "12:02": { + "time": "12:02", + "lagna": "\u53cc\u9c7c\u5ea7", + "houses": [ + { + "house": 1, + "sign": "\u53cc\u9c7c\u5ea7", + "occupants": [] + }, + { + "house": 2, + "sign": "\u767d\u7f8a\u5ea7", + "occupants": [] + }, + { + "house": 3, + "sign": "\u91d1\u725b\u5ea7", + "occupants": [] + }, + { + "house": 4, + "sign": "\u53cc\u5b50\u5ea7", + "occupants": [ + "\u6728\u661f" + ] + }, + { + "house": 5, + "sign": "\u5de8\u87f9\u5ea7", + "occupants": [ + "\u8ba1\u90fd" + ] + }, + { + "house": 6, + "sign": "\u72ee\u5b50\u5ea7", + "occupants": [] + }, + { + "house": 7, + "sign": "\u5904\u5973\u5ea7", + "occupants": [] + }, + { + "house": 8, + "sign": "\u5929\u79e4\u5ea7", + "occupants": [] + }, + { + "house": 9, + "sign": "\u5929\u874e\u5ea7", + "occupants": [ + "\u706b\u661f" + ] + }, + { + "house": 10, + "sign": "\u5c04\u624b\u5ea7", + "occupants": [ + "\u592a\u9633", + "\u571f\u661f" + ] + }, + { + "house": 11, + "sign": "\u6469\u7faf\u5ea7", + "occupants": [ + "\u6c34\u661f", + "\u91d1\u661f", + "\u7f57\u777a" + ] + }, + { + "house": 12, + "sign": "\u6c34\u74f6\u5ea7", + "occupants": [ + "\u6708\u4eae" + ] + } + ] + } + }, + "technique_audit_table": [ + { + "technique": "D1 \u672c\u547d\u76d8", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u6309\u8be5\u5206\u949f\u91cd\u7b97\u672c\u547d\u5bab\u4f4d\u3002" + }, + { + "technique": "D5 \u6210\u5c31\u5206\u76d8", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u5bf9\u7167\u5b66\u4e1a\u6216\u88ab\u59d4\u4ee5\u8d23\u4efb\u7684\u53d8\u5316\u3002" + }, + { + "technique": "D10 \u4e8b\u4e1a\u5206\u76d8", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u5bf9\u7167\u4e8b\u4e1a\u4e3b\u9898\uff0c\u53ef\u7528 D10 \u4e0a\u5347\u7c7b\u578b\u8868\u4f5c\u6821\u65f6\u65b9\u6cd5\uff0c\u4e0d\u662f\u547d\u8fd0\u627f\u8bfa\u3002" + }, + { + "technique": "D24 \u6559\u80b2\u5206\u76d8", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u5bf9\u7167\u5b66\u4e1a\u4e3b\u9898\u3002" + }, + { + "technique": "Vimshottari", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u5bf9\u7167\u4e3b\u9650\u3002" + }, + { + "technique": "Narayana", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u5bf9\u7167\u5206\u76d8\u5927\u8fd0\u3002" + }, + { + "technique": "Ashtakavarga", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u505a Ashtakavarga \u8f85\u52a9\u5bf9\u7167\u3002" + }, + { + "technique": "Shadbala", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u505a\u5df2\u6838\u9a8c\u7684 Shadbala \u5206\u91cf\u8f85\u52a9\u5bf9\u7167\u3002" + }, + { + "technique": "\u6362\u8fd0\u8d34\u8fd1\u5ea6", + "status": "executed", + "note": "\u672c\u8f6e\u5df2\u5bf9\u7167\u65e5\u7ea7\u4e8b\u4ef6\u4e0e\u5019\u9009\u6362\u8fd0\u65e5\u671f\u7684\u8d34\u8fd1\u7a0b\u5ea6\u3002" + }, + { + "technique": "KP \u5bab\u5934", + "status": "executed", + "note": "\u5df2\u6309 Swiss Ephemeris Placidus + Krishnamurti \u89c2\u5bdf 12 \u5bab\u5934\uff1b\u4e0d\u8ba1\u5206\uff0c\u4e0d\u53c2\u4e0e\u63d0\u51fa\u95e8\u6216\u786e\u8ba4\u95e8\u3002" + }, + { + "technique": "VedAstro \u5206\u949f\u7ea7\u6821\u9a8c", + "status": "blocked", + "note": "\u5b98\u65b9\u5206\u949f\u654f\u611f\u6821\u9a8c\u5c1a\u672a\u8dd1\u901a\u3002\u672a\u8c03\u7528\u4e0d\u7b49\u4e8e\u5931\u8d25\uff0c\u4f46\u7f3a\u8fd9\u4e00\u5c42\u4e0d\u80fd\u5199\u786e\u8ba4\u3002" + }, + { + "technique": "\u552f\u4e00\u5206\u949f\u786e\u8ba4", + "status": "blocked", + "note": "\u672c\u4f1a\u8bdd\u4ee5\u4ee3\u8868\u6027\u65f6\u95f4\u6536\u53e3\uff0c\u4e0d\u786e\u8ba4\u552f\u4e00\u5206\u949f\u3002" + } + ], + "window_scan": { + "scanned": true, + "confirmation_allowed": false, + "unique_minute_claim": false, + "transitions": [ + { + "layer": "kp1", + "at": "12:01", + "user_meaning": "KP 1\u5bab\u5b50\u4e3b \u5728 12:01 \u53d1\u751f\u53d8\u5316", + "from_sign": "\u5c04\u624b\u5ea7", + "to_sign": "\u767d\u7f8a\u5ea7" + }, + { + "layer": "d9", + "at": "12:02", + "user_meaning": "D9 \u5728 12:02 \u53d1\u751f\u53d8\u5316", + "from_sign": "\u5c04\u624b\u5ea7", + "to_sign": "\u6469\u7faf\u5ea7" + }, + { + "layer": "d12", + "at": "12:02", + "user_meaning": "D12 \u5728 12:02 \u53d1\u751f\u53d8\u5316", + "from_sign": "\u5929\u79e4\u5ea7", + "to_sign": "\u5929\u874e\u5ea7" + }, + { + "layer": "d24", + "at": "12:02", + "user_meaning": "D24 \u5728 12:02 \u53d1\u751f\u53d8\u5316", + "from_sign": "\u5929\u79e4\u5ea7", + "to_sign": "\u5929\u874e\u5ea7" + }, + { + "layer": "d30", + "at": "12:02", + "user_meaning": "D30 \u5728 12:02 \u53d1\u751f\u53d8\u5316", + "from_sign": "\u53cc\u9c7c\u5ea7", + "to_sign": "\u6469\u7faf\u5ea7" + }, + { + "layer": "pada", + "at": "12:02", + "user_meaning": "Nakshatra pada \u5728 12:02 \u53d1\u751f\u53d8\u5316" + } + ], + "d1_lagna_count": 1, + "d1_candidates_differ": false, + "d9_lagna_count": 2, + "d9_candidates_differ": true, + "d10_lagna_count": 1, + "d10_candidates_differ": false, + "d4_lagna_count": 1, + "d4_candidates_differ": false, + "d5_lagna_count": 1, + "d5_candidates_differ": false, + "d7_lagna_count": 1, + "d7_candidates_differ": false, + "d12_lagna_count": 2, + "d12_candidates_differ": true, + "d24_lagna_count": 2, + "d24_candidates_differ": true, + "d2_lagna_count": 1, + "d2_candidates_differ": false, + "d11_lagna_count": 1, + "d11_candidates_differ": false, + "d30_lagna_count": 2, + "d30_candidates_differ": true, + "pada_count": 2, + "pada_candidates_differ": true, + "hora_count": 1, + "hora_candidates_differ": false, + "ghati_count": 1, + "ghati_candidates_differ": false, + "bhava_count": 1, + "bhava_candidates_differ": false, + "pranapada_count": 1, + "pranapada_candidates_differ": false, + "kp1_count": 2, + "kp1_candidates_differ": true, + "kp4_count": 1, + "kp4_candidates_differ": false, + "kp7_count": 1, + "kp7_candidates_differ": false, + "kp10_count": 1, + "kp10_candidates_differ": false, + "d9_sign_names": [ + "\u5c04\u624b\u5ea7", + "\u6469\u7faf\u5ea7" + ], + "d10_sign_names": [ + "\u91d1\u725b\u5ea7" + ] + }, + "event_dasha_ledger": [ + { + "summary": "\u5165\u5b66", + "match": "strong", + "match_label": "\u5f3a\u76f8\u5173", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "\u5165\u5b66\uff1a\u5f3a\u76f8\u5173\uff08\u4e3b\u9650\u3001\u5206\u76d8\u5927\u8fd0\uff1bGochara \u672a\u89c1\u5bf9\u5e94\uff09", + "domain": "education", + "year_month": "2008-01" + }, + { + "summary": "\u5165\u804c", + "match": "strong", + "match_label": "\u5f3a\u76f8\u5173", + "tracks": [ + "vimshottari" + ], + "gochara": "not_seen", + "user_meaning": "\u5165\u804c\uff1a\u5f3a\u76f8\u5173\uff08\u4e3b\u9650\uff1bGochara \u672a\u89c1\u5bf9\u5e94\uff09", + "domain": "career", + "year_month": "2012-06" + } + ], + "event_dasha_ledger_by_time": { + "12:00": [ + { + "summary": "\u5165\u5b66", + "match": "strong", + "match_label": "\u5f3a\u76f8\u5173", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "\u5165\u5b66\uff1a\u5f3a\u76f8\u5173\uff08\u4e3b\u9650\u3001\u5206\u76d8\u5927\u8fd0\uff1bGochara \u672a\u89c1\u5bf9\u5e94\uff09", + "domain": "education", + "year_month": "2008-01" + }, + { + "summary": "\u5165\u804c", + "match": "strong", + "match_label": "\u5f3a\u76f8\u5173", + "tracks": [ + "vimshottari" + ], + "gochara": "not_seen", + "user_meaning": "\u5165\u804c\uff1a\u5f3a\u76f8\u5173\uff08\u4e3b\u9650\uff1bGochara \u672a\u89c1\u5bf9\u5e94\uff09", + "domain": "career", + "year_month": "2012-06" + } + ], + "12:02": [ + { + "summary": "\u5165\u5b66", + "match": "strong", + "match_label": "\u5f3a\u76f8\u5173", + "tracks": [ + "vimshottari", + "narayana" + ], + "gochara": "not_seen", + "user_meaning": "\u5165\u5b66\uff1a\u5f3a\u76f8\u5173\uff08\u4e3b\u9650\u3001\u5206\u76d8\u5927\u8fd0\uff1bGochara \u672a\u89c1\u5bf9\u5e94\uff09", + "domain": "education", + "year_month": "2008-01" + }, + { + "summary": "\u5165\u804c", + "match": "strong", + "match_label": "\u5f3a\u76f8\u5173", + "tracks": [ + "vimshottari" + ], + "gochara": "not_seen", + "user_meaning": "\u5165\u804c\uff1a\u5f3a\u76f8\u5173\uff08\u4e3b\u9650\uff1bGochara \u672a\u89c1\u5bf9\u5e94\uff09", + "domain": "career", + "year_month": "2012-06" + } + ] + }, + "prospective_windows_by_time": { + "12:00": [ + { + "domain": "career", + "from": "2027-02", + "to": "2027-02" + }, + { + "domain": "career", + "from": "2027-06", + "to": "2027-06" + } + ], + "12:02": [ + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + }, + { + "domain": "career", + "from": "2027-06", + "to": "2027-06" + } + ] + }, + "event_fit_rate": { + "matched": 2, + "total": 2, + "percent": 100, + "band": "high", + "label": "\u9ad8\u5ea6\u543b\u5408\uff08\u4e8b\u4ef6\u543b\u5408\u7387 \u226580%\uff09", + "unique_minute_claim": false, + "user_meaning": "\u5f53\u524d\u7a97 2/2 \u4ef6\u5df2\u786e\u8ba4\u4e8b\u4ef6\u4e0e Dasha/Gochara \u543b\u5408\uff0c\u9ad8\u5ea6\u543b\u5408\uff08\u4e8b\u4ef6\u543b\u5408\u7387 \u226580%\uff09\u3002\u8fd9\u662f\u76f8\u5bf9\u62df\u5408\uff0c\u4e0d\u662f\u5df2\u786e\u8ba4\u552f\u4e00\u51fa\u751f\u5206\u949f\u3002" + }, + "dasha_agreement": { + "status": "agree", + "vimshottari_top": "12:00", + "narayana_top": "12:00", + "user_meaning": "\u4e3b\u9650\u548c\u5206\u76d8\u5927\u8fd0\u90fd\u66f4\u652f\u6301\u540c\u4e00\u6bb5\u4ee3\u8868\u6027\u65f6\u95f4\u3002\u8fd9\u4ecd\u4e0d\u662f\u552f\u4e00\u5206\u949f\u786e\u8ba4\u3002" + }, + "lagna_contrast": null, + "nakshatra_boundary": { + "near_boundary": false, + "distance_degrees": 2.8828, + "user_meaning": null, + "options": [] + }, + "precision_stage": { + "current": "d9_refine", + "can_stop": true, + "user_meaning": "\u672c\u547d\u4e0a\u5347\u5df2\u8f83\u7a33\uff0c\u5173\u7cfb\u76d8\u4ecd\u4f1a\u6362\u5347\u3002\u53ef\u518d\u8865\u4e00\u4ef6\u8bb0\u5f97\u65f6\u95f4\u7684\u611f\u60c5\u6216\u5173\u7cfb\u53d8\u5316\u3002", + "unique_minute_claim": false + }, + "oos_blind_prompts": [ + { + "domain": "relationship", + "user_meaning": "\u6821\u65f6\u8fd8\u6ca1\u7528\u8fc7\u611f\u60c5\u8fd9\u6761\u7ebf\u3002\u6709\u6ca1\u6709\u4e00\u4ef6\u6ca1\u63d0\u8fc7\u3001\u4f46\u8bb0\u5f97\u5927\u6982\u65f6\u95f4\u7684\u5173\u7cfb\u53d8\u5316\uff1f", + "used_for_scoring": false + }, + { + "domain": "family", + "user_meaning": "\u6821\u65f6\u8fd8\u6ca1\u7528\u8fc7\u5bb6\u4eba\u8fd9\u6761\u7ebf\u3002\u6709\u6ca1\u6709\u4e00\u4ef6\u6ca1\u63d0\u8fc7\u3001\u4f46\u8bb0\u5f97\u5927\u6982\u65f6\u95f4\u7684\u5bb6\u4eba\u53d8\u5316\uff1f", + "used_for_scoring": false + }, + { + "domain": "finance", + "user_meaning": "\u6821\u65f6\u8fd8\u6ca1\u7528\u8fc7\u8d22\u52a1\u8fd9\u6761\u7ebf\u3002\u6709\u6ca1\u6709\u4e00\u4ef6\u6ca1\u63d0\u8fc7\u3001\u4f46\u8bb0\u5f97\u5927\u6982\u65f6\u95f4\u7684\u6536\u5165\u6216\u8d44\u4ea7\u53d8\u5316\uff1f", + "used_for_scoring": false + } + ], + "discriminating_event_probes": [], + "guided_collect_windows": [ + { + "year": 2026, + "month_lo": 1, + "month_hi": 1, + "domain": "any", + "split": { + "left": 2, + "right": 1 + } + }, + { + "year": 2026, + "month_lo": 3, + "month_hi": 3, + "domain": "any", + "split": { + "left": 2, + "right": 1 + } + }, + { + "year": 2026, + "month_lo": 9, + "month_hi": 9, + "domain": "any", + "split": { + "left": 2, + "right": 1 + } + }, + { + "year": 2026, + "month_lo": 9, + "month_hi": 9, + "domain": "relationship", + "split": { + "left": 1, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 12, + "month_hi": 12, + "domain": "relationship", + "split": { + "left": 1, + "right": 2 + } + }, + { + "year": 2025, + "month_lo": 2, + "month_hi": 2, + "domain": "any", + "split": { + "left": 2, + "right": 1 + } + } + ], + "event_clarification_probes": [ + { + "year": 2008, + "year_label": "2008 \u5e74\u524d\u540e", + "domain": "education", + "event_family": "\u5b66\u4e1a\u6216\u8003\u8bd5\u53d1\u6325\u5931\u5e38\u3001\u538b\u529b\u7279\u522b\u5927", + "source": "known_event_quality", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": true, + "unique_minute_claim": false, + "user_meaning": "\u65f6\u95f4\u8303\u56f4\u9501\u5b9a 2008 \u5e74\u524d\u540e\uff1b\u9886\u57df\u9501\u5b9a education\uff1b\u8bed\u4e49\u76ee\u6807\u662f \u5b66\u4e1a\u6216\u8003\u8bd5\u53d1\u6325\u5931\u5e38\u3001\u538b\u529b\u7279\u522b\u5927\u3002\u7ed3\u5408\u6700\u8fd1\u5bf9\u8bdd\uff0c\u53ea\u9009\u4e00\u4e2a\u5bb9\u6613\u56de\u7b54\u7684\u53e3\u8bed\u5165\u53e3\u6765\u6838\u5bf9\u4f53\u9a8c\uff1b\u4e0d\u8981\u9010\u5b57\u590d\u8ff0\u8bed\u4e49\u76ee\u6807\uff0c\u4e0d\u8981\u5806\u53e0\u4f8b\u5b50\uff0c\u4e0d\u5f97\u6539\u65f6\u95f4\u8303\u56f4\u3002", + "role": "clarify", + "phase": "event_clarification", + "semantic_key": "education.2008", + "information_gain": 0.0, + "candidate_split_hash": "education:2008", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "event_quality", + "style_options": [ + { + "label": "\u53d1\u6325\u660e\u663e\u5931\u5e38\u6216\u538b\u529b\u5f88\u5927", + "answer_class": "yes" + }, + { + "label": "\u6709\u538b\u529b\u4f46\u4e0d\u7b97\u660e\u663e\u5931\u5e38", + "answer_class": "weak_yes" + }, + { + "label": "\u53d1\u6325\u6b63\u5e38\u3001\u6ca1\u6709\u660e\u663e\u5931\u5e38", + "answer_class": "no" + }, + { + "label": "\u8fd9\u6bb5\u8bb0\u4e0d\u6e05\u695a", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + } + ], + "evidence_collection_probes": [ + { + "year": 2011, + "year_label": "2011 \u5e74\u524d\u540e", + "domain": "relocation", + "event_family": "\u642c\u5bb6\u6216\u957f\u671f\u4f4f\u5230\u5916\u5730", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "\u65f6\u95f4\u8303\u56f4\u9501\u5b9a 2011 \u5e74\u524d\u540e\uff1b\u9886\u57df\u9501\u5b9a relocation\uff1b\u8bed\u4e49\u76ee\u6807\u662f \u642c\u5bb6\u6216\u957f\u671f\u4f4f\u5230\u5916\u5730\u3002\u7ed3\u5408\u6700\u8fd1\u5bf9\u8bdd\uff0c\u53ea\u9009\u4e00\u4e2a\u5bb9\u6613\u56de\u7b54\u7684\u53e3\u8bed\u5165\u53e3\uff0c\u5199\u4e00\u53e5\u81ea\u7136\u7684\u662f/\u5426\u9898\uff1b\u4e0d\u8981\u9010\u5b57\u590d\u8ff0\u8bed\u4e49\u76ee\u6807\uff0c\u4e0d\u8981\u628a\u6240\u6709\u4f8b\u5b50\u5806\u8fdb\u4e00\u53e5\uff0c\u4e0d\u5f97\u6539\u65f6\u95f4\u8303\u56f4\u3002", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "relocation.2011", + "information_gain": 0.0, + "candidate_split_hash": "relocation:2011", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "\u660e\u786e\u53d1\u751f\u4e14\u65f6\u95f4\u543b\u5408", + "answer_class": "yes" + }, + { + "label": "\u53d1\u751f\u8fc7\u4f46\u7a0b\u5ea6\u8f83\u5f31", + "answer_class": "weak_yes" + }, + { + "label": "\u660e\u786e\u6ca1\u6709\u53d1\u751f", + "answer_class": "no" + }, + { + "label": "\u8fd9\u6bb5\u8bb0\u4e0d\u6e05\u695a", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2013, + "year_label": "2013 \u5e74\u524d\u540e", + "domain": "relationship", + "event_family": "\u5f00\u59cb\u4e00\u6bb5\u8ba4\u771f\u5173\u7cfb\u3001\u5206\u624b\u6216\u7ed3\u5a5a", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "\u65f6\u95f4\u8303\u56f4\u9501\u5b9a 2013 \u5e74\u524d\u540e\uff1b\u9886\u57df\u9501\u5b9a relationship\uff1b\u8bed\u4e49\u76ee\u6807\u662f \u5f00\u59cb\u4e00\u6bb5\u8ba4\u771f\u5173\u7cfb\u3001\u5206\u624b\u6216\u7ed3\u5a5a\u3002\u7ed3\u5408\u6700\u8fd1\u5bf9\u8bdd\uff0c\u53ea\u9009\u4e00\u4e2a\u5bb9\u6613\u56de\u7b54\u7684\u53e3\u8bed\u5165\u53e3\uff0c\u5199\u4e00\u53e5\u81ea\u7136\u7684\u662f/\u5426\u9898\uff1b\u4e0d\u8981\u9010\u5b57\u590d\u8ff0\u8bed\u4e49\u76ee\u6807\uff0c\u4e0d\u8981\u628a\u6240\u6709\u4f8b\u5b50\u5806\u8fdb\u4e00\u53e5\uff0c\u4e0d\u5f97\u6539\u65f6\u95f4\u8303\u56f4\u3002", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "relationship.2013", + "information_gain": 0.0, + "candidate_split_hash": "relationship:2013", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "\u660e\u786e\u53d1\u751f\u4e14\u65f6\u95f4\u543b\u5408", + "answer_class": "yes" + }, + { + "label": "\u53d1\u751f\u8fc7\u4f46\u7a0b\u5ea6\u8f83\u5f31", + "answer_class": "weak_yes" + }, + { + "label": "\u660e\u786e\u6ca1\u6709\u53d1\u751f", + "answer_class": "no" + }, + { + "label": "\u8fd9\u6bb5\u8bb0\u4e0d\u6e05\u695a", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2014, + "year_label": "2014 \u5e74\u524d\u540e", + "domain": "family", + "event_family": "\u5bb6\u4eba\u7ed3\u5a5a\u3001\u6dfb\u4e01\u6216\u4f4f\u9662", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "\u65f6\u95f4\u8303\u56f4\u9501\u5b9a 2014 \u5e74\u524d\u540e\uff1b\u9886\u57df\u9501\u5b9a family\uff1b\u8bed\u4e49\u76ee\u6807\u662f \u5bb6\u4eba\u7ed3\u5a5a\u3001\u6dfb\u4e01\u6216\u4f4f\u9662\u3002\u7ed3\u5408\u6700\u8fd1\u5bf9\u8bdd\uff0c\u53ea\u9009\u4e00\u4e2a\u5bb9\u6613\u56de\u7b54\u7684\u53e3\u8bed\u5165\u53e3\uff0c\u5199\u4e00\u53e5\u81ea\u7136\u7684\u662f/\u5426\u9898\uff1b\u4e0d\u8981\u9010\u5b57\u590d\u8ff0\u8bed\u4e49\u76ee\u6807\uff0c\u4e0d\u8981\u628a\u6240\u6709\u4f8b\u5b50\u5806\u8fdb\u4e00\u53e5\uff0c\u4e0d\u5f97\u6539\u65f6\u95f4\u8303\u56f4\u3002", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "family.2014", + "information_gain": 0.0, + "candidate_split_hash": "family:2014", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "\u660e\u786e\u53d1\u751f\u4e14\u65f6\u95f4\u543b\u5408", + "answer_class": "yes" + }, + { + "label": "\u53d1\u751f\u8fc7\u4f46\u7a0b\u5ea6\u8f83\u5f31", + "answer_class": "weak_yes" + }, + { + "label": "\u660e\u786e\u6ca1\u6709\u53d1\u751f", + "answer_class": "no" + }, + { + "label": "\u8fd9\u6bb5\u8bb0\u4e0d\u6e05\u695a", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2017, + "year_label": "2017 \u5e74\u524d\u540e", + "domain": "finance", + "event_family": "\u6536\u5165\u660e\u663e\u53d8\u5316\u3001\u5927\u7b14\u652f\u51fa\u6216\u6b20\u503a", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "\u65f6\u95f4\u8303\u56f4\u9501\u5b9a 2017 \u5e74\u524d\u540e\uff1b\u9886\u57df\u9501\u5b9a finance\uff1b\u8bed\u4e49\u76ee\u6807\u662f \u6536\u5165\u660e\u663e\u53d8\u5316\u3001\u5927\u7b14\u652f\u51fa\u6216\u6b20\u503a\u3002\u7ed3\u5408\u6700\u8fd1\u5bf9\u8bdd\uff0c\u53ea\u9009\u4e00\u4e2a\u5bb9\u6613\u56de\u7b54\u7684\u53e3\u8bed\u5165\u53e3\uff0c\u5199\u4e00\u53e5\u81ea\u7136\u7684\u662f/\u5426\u9898\uff1b\u4e0d\u8981\u9010\u5b57\u590d\u8ff0\u8bed\u4e49\u76ee\u6807\uff0c\u4e0d\u8981\u628a\u6240\u6709\u4f8b\u5b50\u5806\u8fdb\u4e00\u53e5\uff0c\u4e0d\u5f97\u6539\u65f6\u95f4\u8303\u56f4\u3002", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "finance.2017", + "information_gain": 0.0, + "candidate_split_hash": "finance:2017", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "\u660e\u786e\u53d1\u751f\u4e14\u65f6\u95f4\u543b\u5408", + "answer_class": "yes" + }, + { + "label": "\u53d1\u751f\u8fc7\u4f46\u7a0b\u5ea6\u8f83\u5f31", + "answer_class": "weak_yes" + }, + { + "label": "\u660e\u786e\u6ca1\u6709\u53d1\u751f", + "answer_class": "no" + }, + { + "label": "\u8fd9\u6bb5\u8bb0\u4e0d\u6e05\u695a", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + }, + { + "year": 2018, + "year_label": "2018 \u5e74\u524d\u540e", + "domain": "health_pressure", + "event_family": "\u751f\u75c5\u3001\u53d7\u4f24\u6216\u538b\u529b\u7279\u522b\u5927", + "source": "age_band", + "tracks": [ + "vimshottari", + "narayana" + ], + "tracks_agree": false, + "unique_minute_claim": false, + "user_meaning": "\u65f6\u95f4\u8303\u56f4\u9501\u5b9a 2018 \u5e74\u524d\u540e\uff1b\u9886\u57df\u9501\u5b9a health_pressure\uff1b\u8bed\u4e49\u76ee\u6807\u662f \u751f\u75c5\u3001\u53d7\u4f24\u6216\u538b\u529b\u7279\u522b\u5927\u3002\u7ed3\u5408\u6700\u8fd1\u5bf9\u8bdd\uff0c\u53ea\u9009\u4e00\u4e2a\u5bb9\u6613\u56de\u7b54\u7684\u53e3\u8bed\u5165\u53e3\uff0c\u5199\u4e00\u53e5\u81ea\u7136\u7684\u662f/\u5426\u9898\uff1b\u4e0d\u8981\u9010\u5b57\u590d\u8ff0\u8bed\u4e49\u76ee\u6807\uff0c\u4e0d\u8981\u628a\u6240\u6709\u4f8b\u5b50\u5806\u8fdb\u4e00\u53e5\uff0c\u4e0d\u5f97\u6539\u65f6\u95f4\u8303\u56f4\u3002", + "role": "collect", + "phase": "evidence_collection", + "semantic_key": "health_pressure.2018", + "information_gain": 0.0, + "candidate_split_hash": "health_pressure:2018", + "expected_outcomes": [], + "candidate_ids": [], + "choice_kind": "existence", + "style_options": [ + { + "label": "\u660e\u786e\u53d1\u751f\u4e14\u65f6\u95f4\u543b\u5408", + "answer_class": "yes" + }, + { + "label": "\u53d1\u751f\u8fc7\u4f46\u7a0b\u5ea6\u8f83\u5f31", + "answer_class": "weak_yes" + }, + { + "label": "\u660e\u786e\u6ca1\u6709\u53d1\u751f", + "answer_class": "no" + }, + { + "label": "\u8fd9\u6bb5\u8bb0\u4e0d\u6e05\u695a", + "answer_class": "unsure" + } + ], + "question_contract_version": "probe-question-v1" + } + ], + "candidate_contrast_opportunities": [], + "holdout_validation_probes": [ + { + "domain": "relationship", + "user_meaning": "\u6821\u65f6\u8fd8\u6ca1\u7528\u8fc7\u611f\u60c5\u8fd9\u6761\u7ebf\u3002\u6709\u6ca1\u6709\u4e00\u4ef6\u6ca1\u63d0\u8fc7\u3001\u4f46\u8bb0\u5f97\u5927\u6982\u65f6\u95f4\u7684\u5173\u7cfb\u53d8\u5316\uff1f", + "used_for_scoring": false, + "phase": "holdout_validation", + "role": "holdout", + "source": "oos_blind" + }, + { + "domain": "family", + "user_meaning": "\u6821\u65f6\u8fd8\u6ca1\u7528\u8fc7\u5bb6\u4eba\u8fd9\u6761\u7ebf\u3002\u6709\u6ca1\u6709\u4e00\u4ef6\u6ca1\u63d0\u8fc7\u3001\u4f46\u8bb0\u5f97\u5927\u6982\u65f6\u95f4\u7684\u5bb6\u4eba\u53d8\u5316\uff1f", + "used_for_scoring": false, + "phase": "holdout_validation", + "role": "holdout", + "source": "oos_blind" + }, + { + "domain": "finance", + "user_meaning": "\u6821\u65f6\u8fd8\u6ca1\u7528\u8fc7\u8d22\u52a1\u8fd9\u6761\u7ebf\u3002\u6709\u6ca1\u6709\u4e00\u4ef6\u6ca1\u63d0\u8fc7\u3001\u4f46\u8bb0\u5f97\u5927\u6982\u65f6\u95f4\u7684\u6536\u5165\u6216\u8d44\u4ea7\u53d8\u5316\uff1f", + "used_for_scoring": false, + "phase": "holdout_validation", + "role": "holdout", + "source": "oos_blind" + } + ], + "dropped_probes": [], + "dropped_asked_probe_keys": 0, + "prospective_probes": [ + { + "candidate_label": "A", + "domain": "career", + "window_label": "2027 \u5e74 1 \u6708\u9644\u8fd1", + "user_meaning": "\u5019\u9009 A \u9884\u6d4b\u4e0b\u4e00\u6b21\u4e8b\u4e1a\u53d8\u52a8\u66f4\u53ef\u80fd\u5728 2027 \u5e74 1 \u6708\u9644\u8fd1\u3002\u8fd9\u662f\u9884\u6d4b\u7a97\u53e3\uff0c\u4e0d\u662f\u627f\u8bfa\uff1b\u4e0b\u6b21\u53d1\u751f\u65f6\u56de\u6765\u8865\u4e00\u6761\uff0c\u53ef\u8fdb\u4e00\u6b65\u5206\u8fa8\u3002", + "used_for_scoring": false + }, + { + "candidate_label": "B", + "domain": "career", + "window_label": "2027 \u5e74 1 \u6708\u9644\u8fd1", + "user_meaning": "\u5019\u9009 B \u9884\u6d4b\u4e0b\u4e00\u6b21\u4e8b\u4e1a\u53d8\u52a8\u66f4\u53ef\u80fd\u5728 2027 \u5e74 1 \u6708\u9644\u8fd1\u3002\u8fd9\u662f\u9884\u6d4b\u7a97\u53e3\uff0c\u4e0d\u662f\u627f\u8bfa\uff1b\u4e0b\u6b21\u53d1\u751f\u65f6\u56de\u6765\u8865\u4e00\u6761\uff0c\u53ef\u8fdb\u4e00\u6b65\u5206\u8fa8\u3002", + "used_for_scoring": false + } + ], + "horary_observation": { + "status": "skipped", + "user_meaning": "\u6ca1\u6709\u7b2c\u4e00\u6b21\u95ee\u8d77\u8fd9\u4ef6\u4e8b\u7684\u65f6\u95f4\uff0c\u5360\u95ee\u89c2\u5bdf\u672a\u6267\u884c\u3002", + "unique_minute_claim": false + }, + "unique_minute_claim": false, + "candidate_window_contract": "dated-v1", + "candidate_intervals": [ + { + "start_at": "1990-01-01T12:00", + "end_at": "1990-01-01T12:02" + } + ], + "candidate_timezone_offset": 8.0, + "candidate_timezone_id": "" + }, + "candidate_feature_snapshot": { + "calculation_spec_hash": "e03dfc555a247e78549768cc0b487cb427414633982212debd9cd6e60bb67292", + "algorithm_version": "rectification-v5-matrix-scoring-15", + "candidate_count": 3, + "feature_hash": "b473e287b0b007dda939977ff6136d7d4cb65eebb8ef3b78ed5f3388ef760fc9", + "features": [ + { + "time": "12:00", + "ascendant_degree": 349.5495, + "ascendant_sign_index": 11, + "pada_index": 104, + "bhava_sign_index": 10, + "hora_sign_index": 1, + "ghati_sign_index": 1, + "pranapada_sign_index": 2, + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 8, + "kp10_sub_index": 8, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 348.2002, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Revati", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Jupiter", + "sub_index": 8 + }, + "2": { + "cusp_degree": 26.0687, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 4, + "sub_lord": "Ketu", + "sub_sub_lord": "Sun", + "sub_index": 0 + }, + "3": { + "cusp_degree": 51.3959, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Rahu", + "sub_index": 1 + }, + "4": { + "cusp_degree": 72.7584, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 2, + "sub_lord": "Mercury", + "sub_sub_lord": "Mercury", + "sub_index": 8 + }, + "5": { + "cusp_degree": 95.1563, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 1, + "sub_lord": "Saturn", + "sub_sub_lord": "Rahu", + "sub_index": 7 + }, + "6": { + "cusp_degree": 124.1786, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Magha", + "nakshatra_lord": "Ketu", + "pada": 2, + "sub_lord": "Moon", + "sub_sub_lord": "Saturn", + "sub_index": 3 + }, + "7": { + "cusp_degree": 168.2002, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Venus", + "sub_index": 8 + }, + "8": { + "cusp_degree": 206.0687, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Vishakha", + "nakshatra_lord": "Jupiter", + "pada": 2, + "sub_lord": "Ketu", + "sub_sub_lord": "Mars", + "sub_index": 0 + }, + "9": { + "cusp_degree": 231.3959, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 2, + "sub_lord": "Venus", + "sub_sub_lord": "Mercury", + "sub_index": 1 + }, + "10": { + "cusp_degree": 252.7584, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Mula", + "nakshatra_lord": "Ketu", + "pada": 4, + "sub_lord": "Mercury", + "sub_sub_lord": "Rahu", + "sub_index": 8 + }, + "11": { + "cusp_degree": 275.1563, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Uttara Ashadha", + "nakshatra_lord": "Sun", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Mercury", + "sub_index": 8 + }, + "12": { + "cusp_degree": 304.1786, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Dhanishta", + "nakshatra_lord": "Mars", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Saturn", + "sub_index": 1 + } + }, + "indices": { + "kp1_sub_index": 8, + "kp4_sub_index": 8, + "kp7_sub_index": 8, + "kp10_sub_index": 8 + }, + "note": "\u5df2\u6309 Swiss Ephemeris Placidus + Krishnamurti \u89c2\u5bdf 12 \u5bab\u5934\uff1b\u4e0d\u8ba1\u5206\uff0c\u4e0d\u53c2\u4e0e\u63d0\u51fa\u95e8\u6216\u786e\u8ba4\u95e8\u3002" + }, + "varga_ascendants": { + "D2": 4, + "D3": 3, + "D4": 5, + "D5": 9, + "D7": 9, + "D9": 8, + "D10": 1, + "D11": 8, + "D12": 6, + "D24": 6, + "D30": 11 + }, + "arudha_signs": { + "A7": 1, + "A10": 5, + "UL": 6 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "5c878c64626b943c92973a278a9c8520a07d43c1486b84c6a4be68b99c2b713f", + "vargas": "394c58f65e71e627ea7de6e83709afec7be09449061c88374aeaa386f4cbaa7f", + "arudha": "134795db88292046a494171e37fc7b5867546ebbed3f814f0cd919ddd42e8ec0", + "ashtakavarga": "1b63da5aa863f7febc5dd756062f34e59218f7c4c9ef0e92ac3a9927fb09618c", + "shadbala": "955b3b12c6e88d34bd0d69716f187e00b6bd3097171ef296410cb60375da8a5d", + "static": "280e8dfa7096c22b4c4490547348c54abc5b47f949c135b7decc25f04e0f174c" + } + }, + { + "time": "12:01", + "ascendant_degree": 349.9713, + "ascendant_sign_index": 11, + "pada_index": 104, + "bhava_sign_index": 10, + "hora_sign_index": 1, + "ghati_sign_index": 1, + "pranapada_sign_index": 2, + "kp1_sub_index": 0, + "kp4_sub_index": 8, + "kp7_sub_index": 8, + "kp10_sub_index": 8, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 348.6217, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Revati", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Ketu", + "sub_sub_lord": "Venus", + "sub_index": 0 + }, + "2": { + "cusp_degree": 26.3672, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 4, + "sub_lord": "Ketu", + "sub_sub_lord": "Jupiter", + "sub_index": 0 + }, + "3": { + "cusp_degree": 51.6373, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Jupiter", + "sub_index": 1 + }, + "4": { + "cusp_degree": 72.9888, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 2, + "sub_lord": "Mercury", + "sub_sub_lord": "Venus", + "sub_index": 8 + }, + "5": { + "cusp_degree": 95.4131, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 1, + "sub_lord": "Saturn", + "sub_sub_lord": "Jupiter", + "sub_index": 7 + }, + "6": { + "cusp_degree": 124.5102, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Magha", + "nakshatra_lord": "Ketu", + "pada": 2, + "sub_lord": "Moon", + "sub_sub_lord": "Ketu", + "sub_index": 3 + }, + "7": { + "cusp_degree": 168.6217, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Moon", + "sub_index": 8 + }, + "8": { + "cusp_degree": 206.3672, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Vishakha", + "nakshatra_lord": "Jupiter", + "pada": 2, + "sub_lord": "Ketu", + "sub_sub_lord": "Saturn", + "sub_index": 0 + }, + "9": { + "cusp_degree": 231.6373, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 2, + "sub_lord": "Sun", + "sub_sub_lord": "Moon", + "sub_index": 2 + }, + "10": { + "cusp_degree": 252.9888, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Mula", + "nakshatra_lord": "Ketu", + "pada": 4, + "sub_lord": "Mercury", + "sub_sub_lord": "Jupiter", + "sub_index": 8 + }, + "11": { + "cusp_degree": 275.4131, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Uttara Ashadha", + "nakshatra_lord": "Sun", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Ketu", + "sub_index": 8 + }, + "12": { + "cusp_degree": 304.5102, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Dhanishta", + "nakshatra_lord": "Mars", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Mercury", + "sub_index": 1 + } + }, + "indices": { + "kp1_sub_index": 0, + "kp4_sub_index": 8, + "kp7_sub_index": 8, + "kp10_sub_index": 8 + }, + "note": "\u5df2\u6309 Swiss Ephemeris Placidus + Krishnamurti \u89c2\u5bdf 12 \u5bab\u5934\uff1b\u4e0d\u8ba1\u5206\uff0c\u4e0d\u53c2\u4e0e\u63d0\u51fa\u95e8\u6216\u786e\u8ba4\u95e8\u3002" + }, + "varga_ascendants": { + "D2": 4, + "D3": 3, + "D4": 5, + "D5": 9, + "D7": 9, + "D9": 8, + "D10": 1, + "D11": 8, + "D12": 6, + "D24": 6, + "D30": 11 + }, + "arudha_signs": { + "A7": 1, + "A10": 5, + "UL": 6 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "33908d45e80bfb95421bc42f2b46a636d2c25d23fdc53d12df0f79072d3792b0", + "vargas": "394c58f65e71e627ea7de6e83709afec7be09449061c88374aeaa386f4cbaa7f", + "arudha": "134795db88292046a494171e37fc7b5867546ebbed3f814f0cd919ddd42e8ec0", + "ashtakavarga": "1b63da5aa863f7febc5dd756062f34e59218f7c4c9ef0e92ac3a9927fb09618c", + "shadbala": "e7326c2be62255bc216f1b414aaf6fdecbe30ce2ae5c68c06f86a6342e0d24fd", + "static": "585f2600d3e98d28eb81dc49741adbdcf05da27f842e28754c799cc7a3a91249" + } + }, + { + "time": "12:02", + "ascendant_degree": 350.3926, + "ascendant_sign_index": 11, + "pada_index": 105, + "bhava_sign_index": 10, + "hora_sign_index": 1, + "ghati_sign_index": 1, + "pranapada_sign_index": 2, + "kp1_sub_index": 0, + "kp4_sub_index": 8, + "kp7_sub_index": 8, + "kp10_sub_index": 8, + "kp_cusps": { + "status": "executed", + "house_system": "placidus", + "ayanamsa": "krishnamurti", + "houses": { + "1": { + "cusp_degree": 349.0434, + "sign": "Pisces", + "rasi_lord": "Jupiter", + "nakshatra": "Revati", + "nakshatra_lord": "Mercury", + "pada": 1, + "sub_lord": "Ketu", + "sub_sub_lord": "Jupiter", + "sub_index": 0 + }, + "2": { + "cusp_degree": 26.6656, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Bharani", + "nakshatra_lord": "Venus", + "pada": 4, + "sub_lord": "Ketu", + "sub_sub_lord": "Mercury", + "sub_index": 0 + }, + "3": { + "cusp_degree": 51.8787, + "sign": "Taurus", + "rasi_lord": "Venus", + "nakshatra": "Rohini", + "nakshatra_lord": "Moon", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Saturn", + "sub_index": 1 + }, + "4": { + "cusp_degree": 73.2196, + "sign": "Gemini", + "rasi_lord": "Mercury", + "nakshatra": "Ardra", + "nakshatra_lord": "Rahu", + "pada": 2, + "sub_lord": "Mercury", + "sub_sub_lord": "Venus", + "sub_index": 8 + }, + "5": { + "cusp_degree": 95.6705, + "sign": "Cancer", + "rasi_lord": "Moon", + "nakshatra": "Pushya", + "nakshatra_lord": "Saturn", + "pada": 1, + "sub_lord": "Mercury", + "sub_sub_lord": "Mercury", + "sub_index": 8 + }, + "6": { + "cusp_degree": 124.8428, + "sign": "Leo", + "rasi_lord": "Sun", + "nakshatra": "Magha", + "nakshatra_lord": "Ketu", + "pada": 2, + "sub_lord": "Mars", + "sub_sub_lord": "Rahu", + "sub_index": 4 + }, + "7": { + "cusp_degree": 169.0434, + "sign": "Virgo", + "rasi_lord": "Mercury", + "nakshatra": "Hasta", + "nakshatra_lord": "Moon", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Rahu", + "sub_index": 8 + }, + "8": { + "cusp_degree": 206.6656, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Vishakha", + "nakshatra_lord": "Jupiter", + "pada": 2, + "sub_lord": "Venus", + "sub_sub_lord": "Venus", + "sub_index": 1 + }, + "9": { + "cusp_degree": 231.8787, + "sign": "Scorpio", + "rasi_lord": "Mars", + "nakshatra": "Jyeshtha", + "nakshatra_lord": "Mercury", + "pada": 2, + "sub_lord": "Sun", + "sub_sub_lord": "Saturn", + "sub_index": 2 + }, + "10": { + "cusp_degree": 253.2196, + "sign": "Sagittarius", + "rasi_lord": "Jupiter", + "nakshatra": "Mula", + "nakshatra_lord": "Ketu", + "pada": 4, + "sub_lord": "Mercury", + "sub_sub_lord": "Saturn", + "sub_index": 8 + }, + "11": { + "cusp_degree": 275.6705, + "sign": "Capricorn", + "rasi_lord": "Saturn", + "nakshatra": "Uttara Ashadha", + "nakshatra_lord": "Sun", + "pada": 3, + "sub_lord": "Mercury", + "sub_sub_lord": "Venus", + "sub_index": 8 + }, + "12": { + "cusp_degree": 304.8428, + "sign": "Aquarius", + "rasi_lord": "Saturn", + "nakshatra": "Dhanishta", + "nakshatra_lord": "Mars", + "pada": 4, + "sub_lord": "Venus", + "sub_sub_lord": "Ketu", + "sub_index": 1 + } + }, + "indices": { + "kp1_sub_index": 0, + "kp4_sub_index": 8, + "kp7_sub_index": 8, + "kp10_sub_index": 8 + }, + "note": "\u5df2\u6309 Swiss Ephemeris Placidus + Krishnamurti \u89c2\u5bdf 12 \u5bab\u5934\uff1b\u4e0d\u8ba1\u5206\uff0c\u4e0d\u53c2\u4e0e\u63d0\u51fa\u95e8\u6216\u786e\u8ba4\u95e8\u3002" + }, + "varga_ascendants": { + "D2": 4, + "D3": 7, + "D4": 5, + "D5": 9, + "D7": 9, + "D9": 9, + "D10": 1, + "D11": 8, + "D12": 7, + "D24": 7, + "D30": 9 + }, + "arudha_signs": { + "A7": 1, + "A10": 5, + "UL": 6 + }, + "available_layers": [ + "A10", + "A7", + "Ashtakavarga", + "D1", + "D10", + "D11", + "D12", + "D2", + "D24", + "D3", + "D30", + "D4", + "D5", + "D7", + "D9", + "KP_cusps", + "Shadbala", + "UL" + ], + "blocked_layers": [], + "fingerprints": { + "natal": "d4663460a8561ba7a0cb664dcd490c527ac1d70390d1edaac64804638ccbafcf", + "vargas": "ce8048c9fb65290077e40329b5dfc1f3b3b3956957cb9ade3fbe60572794a846", + "arudha": "134795db88292046a494171e37fc7b5867546ebbed3f814f0cd919ddd42e8ec0", + "ashtakavarga": "1b63da5aa863f7febc5dd756062f34e59218f7c4c9ef0e92ac3a9927fb09618c", + "shadbala": "6a096c9783417dc53c43adc97893ed83fc67466b124c80314f99c99b0affcc9a", + "static": "5e51f2a3a1d84184da7f01787794c131d13dedabc95fab8ef9d5d2b7f2294a74" + } + } + ] + } +} diff --git a/tests/test_dasha_transition_proximity_cross_midnight.py b/tests/test_dasha_transition_proximity_cross_midnight.py index 15237344..69003576 100644 --- a/tests/test_dasha_transition_proximity_cross_midnight.py +++ b/tests/test_dasha_transition_proximity_cross_midnight.py @@ -36,7 +36,8 @@ def test_fixed_scoring_identity_is_exposed_without_changing_input_contract(): # 原值: "rectification-v5-matrix-scoring-12";新值: "...-scoring-13";原因: varga.py 偶数星座 D30 按 BPHS 改正、 # 白羊 / 天蝎上升金星判功能凶(BUG-1560 / BUG-1570,产品 2026-11-04 决定),同输入分数变了,按 BUG-1181 升算法身份。 # 原值: "rectification-v5-matrix-scoring-13";新值: "...-scoring-14";原因: 同输入分数变了(#166 占星师裁定:Shadbala Sthana / Drik 按具名 BPHS 口径、jaimini.py Arudha 例外从初算落点数,BUG-1583~1588),按 BUG-1181 升算法身份。 - assert engine_scoring_versions()["algorithm_version"] == ALGORITHM_VERSION == "rectification-v5-matrix-scoring-14" + # 原值: "...-scoring-14";新值: "...-scoring-15";原因: #166 第二批(第 4 条:双子 / 处女上升土星改为混合,BUG-1590)改变同输入分数,按 BUG-1181 升算法身份。 + assert engine_scoring_versions()["algorithm_version"] == ALGORITHM_VERSION == "rectification-v5-matrix-scoring-15" assert INPUT_CONTRACT_VERSION == "rectification-calculation-spec-v5" request = {"birth_date": "2000-03-01", "start_time": "00:00", "end_time": "00:02", "lat": 0.0, "lon": 0.0, "tz": 0.0, "events": []} diff --git a/tests/test_rectification_engine_memoization.py b/tests/test_rectification_engine_memoization.py index 878d7cee..ad9f4d47 100644 --- a/tests/test_rectification_engine_memoization.py +++ b/tests/test_rectification_engine_memoization.py @@ -52,14 +52,20 @@ window transition and the feature hashes moved; other inputs score differently, hence rectification-v5-matrix-scoring-13. Policy stays v4. v5 stays byte-for-byte and is pinned below. v6 is now frozen the same way. -Current golden tests/golden/rectification_engine_memoization_v7.json +Golden tests/golden/rectification_engine_memoization_v7.json (2026-11-04, #166 astrologer rulings, BUG-1583..1588, product decision) was written by ``write_golden`` after Shadbala Sthana / Drik followed the named BPHS version (Saptavargaja values, Moolatrikona 3 / 15 deg, whole-sign Kendradi, BPHS 26 special aspects, Mercury with any malefic) and the jaimini.py Arudha 1/7 exception counted from the first-count pada. Both feed the rectification score, hence rectification-v5-matrix-scoring-14. Policy -stays v4. v6 stays byte-for-byte and is pinned below. +stays v4. v6 stays byte-for-byte and is pinned below. v7 is now frozen the same way. + +Current golden tests/golden/rectification_engine_memoization_v8.json +(2026-11-04, #166 batch 2, BUG-1590) was written by ``write_golden`` after +the functional roles made Gemini Saturn (8, 9) and Virgo Saturn (5, 6) mixed, +which the *_functional_* rules read; hence rectification-v5-matrix-scoring-15. +Policy stays v4. v7 stays byte-for-byte and is pinned below. Do not compare that payload with a whole-structure ``==``. Cross-machine libm / pyswisseph rounding already drifted ``margin_percent`` by 1.1e-3 @@ -99,7 +105,10 @@ import scripts.rectification.scoring_service as scoring_service import shadbala ROOT = Path(__file__).resolve().parents[1] -GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v7.json" +GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v8.json" +V7_GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v7.json" +V7_GOLDEN_SHA256 = "708e084b4401fd2f516e15224ef794ac4a037b67e40e534473b5c701e8008626" +V7_SOURCE_COMMIT = "78f98eba93034ad3de8ea348c53f9e4b02241d4c" V6_GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v6.json" V6_GOLDEN_SHA256 = "f8d63b807293464eb20585ecf8c2408f0cbf310bad4bf71f3e61671eac0e1f4b" V6_SOURCE_COMMIT = "18c685c428a06f4530e43218588c03ca9ce1dea3" @@ -120,14 +129,14 @@ HISTORICAL_GOLDEN_SHA256 = "6266e448d7dad204b264cbe8f9bcf4c36e02286794764a94edb9 # 原值: rectification-v5-matrix-scoring-11;新值: ...-scoring-12;原因: 章动修正改变同输入分数(BUG-1275)。 # 原值: rectification-v5-matrix-scoring-12;新值: ...-scoring-13;原因: D30 偶数星座与白羊 / 天蝎金星功能凶改变同输入分数(BUG-1560 / BUG-1570)。 # 原值: rectification-v5-matrix-scoring-13;新值: ...-scoring-14;原因: #166 占星师裁定改了 Shadbala Sthana / Drik 与 jaimini.py Arudha 例外,同输入分数变(BUG-1583~1588)。 -CURRENT_ALGORITHM_VERSION = "rectification-v5-matrix-scoring-14" +# 原值: ...-scoring-14;新值: ...-scoring-15;原因: #166 第二批(第 4 条:双子 / 处女上升土星改为混合,BUG-1590)改变同输入分数。 +CURRENT_ALGORITHM_VERSION = "rectification-v5-matrix-scoring-15" FROZEN_TODAY = date(2026, 9, 16) TIMING_KEYS = frozenset({"column_compare_ms"}) HISTORICAL_SOURCE_COMMIT = "a8d29d1b6cc37ff865ddec6c8bccdf9aa889ee53" CURRENT_POLICY_VERSION = "rectification-candidate-policy-v4" -# #166 rulings commit that moves these scores (BUG-1583..1588). -# v6 keeps V6_SOURCE_COMMIT. -SOURCE_COMMIT = "78f98eba93034ad3de8ea348c53f9e4b02241d4c" +# #166 batch 2 commit that moves these scores (BUG-1590). v7 keeps V7_SOURCE_COMMIT. +SOURCE_COMMIT = "4b223eb8eaf28db7c22364b50c17af7941c1d606" # 原值: 4 个缓存键(ashtakavarga / shadbala / vimshottari / narayana_periods) # 新值: 再加 functional_profile、narayana_antardasha_by_md,共 6 个 # 原因: BUG-1324。这两项只依赖候选分钟,放在静态上下文顶层;置 None 仍现算,输出应相同 @@ -316,7 +325,7 @@ def _contexts_with_layer_cache_cleared(contexts: list[dict[str, Any]]) -> list[d def _assert_dated_payload_against_golden(actual: dict[str, Any], expected: dict[str, Any]) -> None: - """Compare with the scoring-14 / policy-v4 golden; identity is spelled out, not trusted.""" + """Compare with the scoring-15 / policy-v4 golden; identity is spelled out, not trusted.""" metadata = { "candidate_window_contract": "dated-v1", "candidate_intervals": [{"start_at": "1990-01-01T12:00", "end_at": "1990-01-01T12:02"}], @@ -440,6 +449,18 @@ def test_scoring_13_golden_is_frozen_and_scores_moved() -> None: _assert_memoization_payloads(current, previous) +def test_scoring_14_golden_is_frozen() -> None: + """#166 batch 2 (BUG-1590): v7 stays byte-identical; the identity moved to scoring-15.""" + raw = V7_GOLDEN_PATH.read_bytes() + assert hashlib.sha256(raw).hexdigest() == V7_GOLDEN_SHA256 + previous = json.loads(raw) + current = json.loads(GOLDEN_PATH.read_text(encoding="utf-8")) + assert previous["source_commit"] == V7_SOURCE_COMMIT + assert previous["candidate_feature_snapshot"]["algorithm_version"] == "rectification-v5-matrix-scoring-14" + assert current["candidate_feature_snapshot"]["algorithm_version"] == CURRENT_ALGORITHM_VERSION + assert current["source_commit"] == SOURCE_COMMIT + + def test_score_candidates_matches_baseline_golden() -> None: expected = json.loads(GOLDEN_PATH.read_text(encoding="utf-8")) actual = json.loads(json.dumps(_golden_payload(), ensure_ascii=True)) diff --git a/tests/test_rectification_relative_support.py b/tests/test_rectification_relative_support.py index 8906c7a8..2dac0506 100644 --- a/tests/test_rectification_relative_support.py +++ b/tests/test_rectification_relative_support.py @@ -24,7 +24,8 @@ class RelativeSupportScaleTest(unittest.TestCase): # 原值: -11;新值: -12;原因: 章动修正改变同输入分数(BUG-1275),策略 v4 与相对支持口径不变。 # 原值: -12;新值: -13;原因: D30 偶数星座与白羊 / 天蝎金星功能凶改变同输入分数(BUG-1560 / BUG-1570),策略 v4 与相对支持口径不变。 # 原值: -13;新值: -14;原因: 同输入分数变了(#166 占星师裁定:Shadbala Sthana / Drik 按具名 BPHS 口径、jaimini.py Arudha 例外从初算落点数,BUG-1583~1588),策略 v4 与相对支持口径不变。 - self.assertEqual(ALGORITHM_VERSION, "rectification-v5-matrix-scoring-14") + # 原值: -14;新值: -15;原因: #166 第二批(第 4 条:双子 / 处女上升土星改为混合,BUG-1590)改变同输入分数,策略 v4 不变。 + self.assertEqual(ALGORITHM_VERSION, "rectification-v5-matrix-scoring-15") self.assertEqual(RELATIVE_SUPPORT_MODE, "proportional") def test_offset_top_two_lead_is_at_least_proportional(self) -> None: