From d46f9675aa71fa66d71a91506f57b45e0ff2c233 Mon Sep 17 00:00:00 2001 From: jesse-ux Date: Wed, 7 Oct 2026 17:47:00 +0800 Subject: [PATCH] fix(rectification): bump scoring identity to scoring-11 after D5/D11 (BUG-1260) --- .../rectification-agentic/v9/engine-client.ts | 2 +- ...ate-anchor.delivery.scoring-11.native.json | 5099 +++++++++++++++++ ...ated-algorithm-generation-20261002.test.ts | 20 +- ...tion-engine-version-cross-midnight.test.ts | 30 +- ...rectification-midnight-date-anchor.test.ts | 6 +- scripts/rectification/scoring_service.py | 5 +- .../rectification_engine_memoization_v4.json | 1792 ++++++ ...sha_transition_proximity_cross_midnight.py | 6 +- .../test_rectification_engine_memoization.py | 47 +- tests/test_rectification_relative_support.py | 4 +- 10 files changed, 6978 insertions(+), 33 deletions(-) create mode 100644 frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-11.native.json create mode 100644 tests/golden/rectification_engine_memoization_v4.json diff --git a/frontend/src/lib/rectification-agentic/v9/engine-client.ts b/frontend/src/lib/rectification-agentic/v9/engine-client.ts index 369157fd..af224898 100644 --- a/frontend/src/lib/rectification-agentic/v9/engine-client.ts +++ b/frontend/src/lib/rectification-agentic/v9/engine-client.ts @@ -1071,7 +1071,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-10"; + process.env.RECTIFICATION_ENGINE_VERSION?.trim() || "rectification-v5-matrix-scoring-11"; export type V9RangeReading = Readonly<{ stableThemes: readonly string[]; diff --git a/frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-11.native.json b/frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-11.native.json new file mode 100644 index 00000000..08bb3c65 --- /dev/null +++ b/frontend/tests/fixtures/rectification-midnight-date-anchor.delivery.scoring-11.native.json @@ -0,0 +1,5099 @@ +{ + "provenance": { + "kind": "unmocked_native_engine", + "facts": "explicitly_fictional", + "generator": "scripts/research/midnight_date_anchor_regression.py --baseline --golden", + "algorithm": "rectification-v5-matrix-scoring-11" + }, + "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": "02ff7e05-430f-526d-bc0e-a5420a39986e", + "algorithm_version": "rectification-v5-matrix-scoring-11", + "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": 1.0813, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "23:59", + "score": 0.9213, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "00:00", + "score": 0.7347, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "00:01", + "score": 0.5747, + "supporting_event_ids": [ + "00000000-0000-4000-8000-000000000001" + ], + "conflicting_event_ids": [] + }, + { + "time": "00:02", + "score": 0.4547, + "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": "5a7108e6-ef9e-5459-8d1f-1c4320a98a75", + "rank": 1, + "time": "23:58", + "relative_support": 44, + "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": "b0195b47-cb64-5f08-aba5-3372498ddb7c", + "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": "2c5c38ea-b84d-5c5c-8e96-dbb32b92f6e7", + "rank": 3, + "time": "00:02", + "relative_support": 19, + "tied_minute_count": 1, + "cluster_times": [ + "00:02" + ], + "cluster_start": "00:02", + "cluster_end": "00:02" + } + ], + "candidate_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": "5a7108e6-ef9e-5459-8d1f-1c4320a98a75", + "representative_time": "23:58", + "overall_confidence": "low", + "margin_percent": 14.797, + "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": 14.797, + "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": "2026-10", + "to": "2026-10" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ], + "23:59": [ + { + "domain": "career", + "from": "2026-10", + "to": "2026-10" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ], + "00:02": [ + { + "domain": "career", + "from": "2026-12", + "to": "2026-12" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ] + }, + "column_compare_ms": 2.5, + "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.1453, + "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": 12, + "month_hi": 12, + "domain": "any", + "split": { + "left": 1, + "right": 1 + } + }, + { + "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": 3, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 9, + "month_hi": 10, + "domain": "any", + "split": { + "left": 3, + "right": 2 + } + }, + { + "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 年 1 月附近", + "user_meaning": "候选 B 预测下一次事业变动更可能在 2027 年 1 月附近。这是预测窗口,不是承诺;下次发生时回来补一条,可进一步分辨。", + "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": "" + }, + "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": "5a7108e6-ef9e-5459-8d1f-1c4320a98a75", + "representative_time": "23:58", + "overall_confidence": "low", + "margin_percent": 14.797, + "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": 14.797, + "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": "2026-10", + "to": "2026-10" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ], + "23:59": [ + { + "domain": "career", + "from": "2026-10", + "to": "2026-10" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ], + "00:02": [ + { + "domain": "career", + "from": "2026-12", + "to": "2026-12" + }, + { + "domain": "career", + "from": "2027-01", + "to": "2027-01" + } + ] + }, + "column_compare_ms": 2.5, + "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.1453, + "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": 12, + "month_hi": 12, + "domain": "any", + "split": { + "left": 1, + "right": 1 + } + }, + { + "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": 3, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 9, + "month_hi": 10, + "domain": "any", + "split": { + "left": 3, + "right": 2 + } + }, + { + "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 年 1 月附近", + "user_meaning": "候选 B 预测下一次事业变动更可能在 2027 年 1 月附近。这是预测窗口,不是承诺;下次发生时回来补一条,可进一步分辨。", + "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" + ] + }, + { + "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": "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" + ] + } + ], + "event_contribution_matrix": { + "00000000-0000-4000-8000-000000000001": { + "23:58": { + "points": 1.0813, + "rule_ids": [ + "event_kind:career_entry", + "event_kind_profile:career_entry:support", + "narayana_transition_proximity_ad", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_transition_proximity_pd" + ], + "technique_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary" + ] + }, + "23:59": { + "points": 0.9213, + "rule_ids": [ + "event_kind:career_entry", + "event_kind_profile:career_entry:support", + "narayana_transition_proximity_ad", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_transition_proximity_pd" + ], + "technique_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary" + ] + }, + "00:00": { + "points": 0.7347, + "rule_ids": [ + "event_kind:career_entry", + "event_kind_profile:career_entry:support", + "narayana_transition_proximity_ad", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_transition_proximity_pd" + ], + "technique_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary" + ] + }, + "00:01": { + "points": 0.5747, + "rule_ids": [ + "event_kind:career_entry", + "event_kind_profile:career_entry:support", + "narayana_transition_proximity_ad", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary", + "vim_transition_proximity_pd" + ], + "technique_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary" + ] + }, + "00:02": { + "points": 0.4547, + "rule_ids": [ + "event_kind:career_entry", + "event_kind_profile:career_entry:support", + "narayana_transition_proximity_ad", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary" + ], + "technique_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_auxiliary" + ] + } + } + }, + "candidate_feature_snapshot": { + "calculation_spec_hash": "3d616e634005a69c83977a7768272fbdcd198a49c42f490c12d398d019c62225", + "algorithm_version": "rectification-v5-matrix-scoring-11", + "candidate_count": 5, + "feature_hash": "2539b728ce35b7412604f1649dcf9641b88f258e89e398e7fa0f051118b0b98f", + "features": [ + { + "time": "23:58", + "ascendant_degree": 227.812, + "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.4625, + "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.1388, + "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.4591, + "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.1101, + "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.5996, + "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.2651, + "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.4625, + "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.1388, + "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.4591, + "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.1101, + "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.5996, + "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.2651, + "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": 9 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 3 + }, + "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": "4b9536455424be19b93ed005f5f7c8ca6231dc7a90f0ed601923c66f5b34db13", + "vargas": "8eafbc7f892fbd5dde5e5c3ec791c83f91161f4e1d8ba670ef69a4e430c9b2d7", + "arudha": "462ad5e62ffdcc0fd21679b693661c9ee4965f25249ed3ec74e8981a7eda2ea2", + "ashtakavarga": "7e26efbe44c8e1b715905684b6a57e2325ac6b0b8ca322cd438d66a717108931", + "shadbala": "b7bc9d5f6b3b7c13e54c5450cdd151b22bad65d13a8f100f1b349acfde6ec578", + "static": "096d31f110102abbd09b12fc5051976be614b05d480982631e124b79607fd314" + } + }, + { + "time": "23:59", + "ascendant_degree": 228.0469, + "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.6976, + "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.3699, + "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.7045, + "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.377, + "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.8719, + "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.5198, + "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.6976, + "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.3699, + "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.7045, + "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.377, + "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.8719, + "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.5198, + "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": 9 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 3 + }, + "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": "5bc259814c6b6336c03c1e072ed28ce8ca1901006943559f84c294d6b9070278", + "vargas": "305111735862a0867d1d1ac404f44be7d9709f30e77f032d123802338fe7b674", + "arudha": "462ad5e62ffdcc0fd21679b693661c9ee4965f25249ed3ec74e8981a7eda2ea2", + "ashtakavarga": "7e26efbe44c8e1b715905684b6a57e2325ac6b0b8ca322cd438d66a717108931", + "shadbala": "ab0fd1e8f58b13ae34395454dfdfeb56bd0035bba2bc97b8b7d4fed557d8abd5", + "static": "c93c65233000d124b947eac2768fbbf28ace61cb1a129ab5c0c434bfa018dfef" + } + }, + { + "time": "00:00", + "ascendant_degree": 228.2817, + "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.9322, + "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.6006, + "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.9497, + "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.6436, + "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.1437, + "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.7739, + "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.9322, + "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.6006, + "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.9497, + "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.6436, + "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.1437, + "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.7739, + "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": 9 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 3 + }, + "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": "7f4e61c27a0a0d7fb1f096da02e6ad16033886a355a2e9eeed882f715c73ba9e", + "vargas": "305111735862a0867d1d1ac404f44be7d9709f30e77f032d123802338fe7b674", + "arudha": "462ad5e62ffdcc0fd21679b693661c9ee4965f25249ed3ec74e8981a7eda2ea2", + "ashtakavarga": "7e26efbe44c8e1b715905684b6a57e2325ac6b0b8ca322cd438d66a717108931", + "shadbala": "e1efb6a97d868afe45304c8471169991b5cbe826f2647505bb68da9955dc79a7", + "static": "1dca854b2d9138bc00f4999a0a4523b3fbc98568440c2670ee97db3079118d96" + } + }, + { + "time": "00:01", + "ascendant_degree": 228.5163, + "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.1667, + "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.8314, + "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.195, + "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.9103, + "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.4154, + "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.0279, + "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.1667, + "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.8314, + "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.195, + "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.9103, + "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.4154, + "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.0279, + "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": 9 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 3 + }, + "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": "5fc87bcfc3ea056d20430e11cd62fd2739250b9508894f9e0eab2992a463d32c", + "vargas": "305111735862a0867d1d1ac404f44be7d9709f30e77f032d123802338fe7b674", + "arudha": "462ad5e62ffdcc0fd21679b693661c9ee4965f25249ed3ec74e8981a7eda2ea2", + "ashtakavarga": "7e26efbe44c8e1b715905684b6a57e2325ac6b0b8ca322cd438d66a717108931", + "shadbala": "6437f3b0ee5a3a7f4344ad2098772f2dd196d8ce3ce223c27fab7aa6faa2cee9", + "static": "9594b0292f70ddec982029a025716ad2d88cb2bb0260b95633964b6b014d784d" + } + }, + { + "time": "00:02", + "ascendant_degree": 228.7509, + "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.4015, + "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.0626, + "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.441, + "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.1776, + "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.6875, + "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.282, + "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.4015, + "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.0626, + "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.441, + "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.1776, + "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.6875, + "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.282, + "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": 9 + }, + "arudha_signs": { + "A7": 5, + "A10": 1, + "UL": 3 + }, + "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": "a80c442089372004d00da22d820514f7a5f8d46014797bf7a4e1407d40e1c064", + "vargas": "b618a36202e2565a2025b55d404695d77f1f00e9cfc6c05e71c0cb2852b483ad", + "arudha": "462ad5e62ffdcc0fd21679b693661c9ee4965f25249ed3ec74e8981a7eda2ea2", + "ashtakavarga": "7e26efbe44c8e1b715905684b6a57e2325ac6b0b8ca322cd438d66a717108931", + "shadbala": "a6fdbd7e4d690255e5dac02d92b73da9a0f9d2cf8461136abd2be5e9beebbc01", + "static": "e88020586fb0c044f5b1a70c5e4e486b36b7b5f22668a72170f28954afb4ca1a" + } + } + ] + }, + "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": 14.797, + "cluster_mass_ratio": 0.2870682560331324, + "unstable_event_ids": [], + "most_discriminating_layers": [ + "d1-rashi", + "d10-dashamsa", + "dasha-transition-proximity", + "shadbala_sthana_drik_naisargika_support_auxiliary", + "vim_md_functional_benefic_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" + ], + "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" + ] + } + ], + "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" + ] + } + ], + "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": "5a7108e6-ef9e-5459-8d1f-1c4320a98a75", + "representative_time": "23:58", + "overall_confidence": "low", + "margin_percent": 14.797, + "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 8a583aef..fd25c6a9 100644 --- a/frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts +++ b/frontend/tests/rectification-dated-algorithm-generation-20261002.test.ts @@ -22,13 +22,14 @@ test("dated contract is a generation threshold, not one literal", () => { } }); -test("receipt default and Python identity agree on scoring-10", (t) => { +test("receipt default and Python identity agree on scoring-11", (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; }); - assert.equal(v9EngineVersion(), "rectification-v5-matrix-scoring-10"); + // 原值: rectification-v5-matrix-scoring-10;新值: ...-scoring-11;原因: D5/D11 改变同输入分数(BUG-1260)。 + assert.equal(v9EngineVersion(), "rectification-v5-matrix-scoring-11"); const python = readFileSync(new URL("../../scripts/rectification/scoring_service.py", import.meta.url), "utf8"); - assert.match(python, /^ALGORITHM_VERSION = "rectification-v5-matrix-scoring-10"$/m); + assert.match(python, /^ALGORITHM_VERSION = "rectification-v5-matrix-scoring-11"$/m); }); test("no source file compares the algorithm identity with a scoring-N literal", () => { @@ -73,3 +74,16 @@ test("a scoring-9 history opens read-only under scoring-10 and offers a recompar // Its candidates still parse as dated (generation >= 9), so the opened history keeps civil dates. assert.ok(dossier.latestResult!.candidates.every((candidate) => typeof candidate.candidate_date === "string")); }); + +test("a scoring-10 history opens read-only under scoring-11 and offers a recompare (BUG-621)", () => { + const historical = JSON.parse(readFileSync(new URL("./fixtures/rectification-midnight-date-anchor.delivery.scoring-10.native.json", import.meta.url), "utf8")).response; + assert.equal(historical.algorithm_version, "rectification-v5-matrix-scoring-10"); + const latest = { ...historical, candidates: historical.candidate_decisions }; + const dossier = parseV9CaseDossier(dossierFixture({ stage: "minute", latestResult: latest })); + assert.ok(dossier); + assert.equal(dossier.latestResult?.algorithmVersion, "rectification-v5-matrix-scoring-10"); + const policyVersion = historical.decision_policy_version; + const underEleven = resultIdentityView(dossier, { algorithmVersion: "rectification-v5-matrix-scoring-11", policyVersion }); + assert.deepEqual([underEleven.read_only, underEleven.can_recompare, underEleven.algorithm_version], [true, true, "rectification-v5-matrix-scoring-10"]); + assert.ok(dossier.latestResult!.candidates.every((candidate) => typeof candidate.candidate_date === "string")); +}); diff --git a/frontend/tests/rectification-engine-version-cross-midnight.test.ts b/frontend/tests/rectification-engine-version-cross-midnight.test.ts index 3f86daf9..660b1a17 100644 --- a/frontend/tests/rectification-engine-version-cross-midnight.test.ts +++ b/frontend/tests/rectification-engine-version-cross-midnight.test.ts @@ -31,18 +31,21 @@ const golden = JSON.parse(readFileSync(new URL( // Historical golden identity stays fixed; it must not be relabeled as the live engine. const CURRENT = "rectification-v5-matrix-scoring-8"; const PREVIOUS = "rectification-v5-matrix-scoring-7"; -// 原值: LIVE_CURRENT = "rectification-v5-matrix-scoring-9"(liveGolden 同时充当「当前版本」) -// 新值: LIVE_CURRENT = "...-scoring-10";scoring-9 的 dated golden 留作历史(DATED_HISTORICAL), -// 当前版本另有真实引擎生成的 scoring-10 dated golden(currentGolden) -// 原因: 功能吉凶 v2 改变同输入分数,按「打分语义变化必须 bump」升算法身份(BUG-1181) -const LIVE_CURRENT = "rectification-v5-matrix-scoring-10"; +// 原值: LIVE_CURRENT = "rectification-v5-matrix-scoring-10";新值: "...-scoring-11"; +// scoring-10 dated golden 留作历史,当前版本另有真实引擎生成的 scoring-11 golden。 +// 原因: D5/D11 改变同输入分数(BUG-1260),按 BUG-1181 升算法身份。 +const LIVE_CURRENT = "rectification-v5-matrix-scoring-11"; const DATED_HISTORICAL = "rectification-v5-matrix-scoring-9"; +const SCORING_10 = "rectification-v5-matrix-scoring-10"; const liveGolden = JSON.parse(readFileSync(new URL( "./fixtures/rectification-midnight-date-anchor.delivery.native.json", import.meta.url, ), "utf8")); -const currentGolden = JSON.parse(readFileSync(new URL( +const scoring10Golden = JSON.parse(readFileSync(new URL( "./fixtures/rectification-midnight-date-anchor.delivery.scoring-10.native.json", import.meta.url, ), "utf8")); +const currentGolden = JSON.parse(readFileSync(new URL( + "./fixtures/rectification-midnight-date-anchor.delivery.scoring-11.native.json", import.meta.url, +), "utf8")); const envKeys = [ "RECTIFICATION_ENGINE_VERSION", "RECTIFICATION_ALGORITHM_VERSION", "RECTIFICATION_DECISION_POLICY_VERSION", @@ -69,8 +72,9 @@ 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-10"/); + assert.match(python, /ALGORITHM_VERSION = "rectification-v5-matrix-scoring-11"/); assert.equal(liveGolden.response.algorithm_version, DATED_HISTORICAL); + assert.equal(scoring10Golden.response.algorithm_version, SCORING_10); assert.equal(currentGolden.response.algorithm_version, LIVE_CURRENT); const fingerprints = { evidenceLedgerFingerprint: "e".repeat(64), candidateRangeFingerprint: "c".repeat(64) }; const live = { @@ -79,9 +83,17 @@ test("receipt default matches the cross-midnight native scoring version without }; const historical = { ...fingerprints, algorithmVersion: CURRENT, policyVersion: golden.versions.decision_policy_version }; assert.equal(cachedEngineScoreIsReusable(historical, fingerprints, live), false); - // BUG-1181: a scoring-9 cache (old functional grouping) is not current under scoring-10. + // BUG-1181 / BUG-1260: scoring-9 and scoring-10 caches are not current under scoring-11. assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: DATED_HISTORICAL }, fingerprints, live), false); - assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: LIVE_CURRENT }, fingerprints, live), true); + assert.equal(cachedEngineScoreIsReusable({ ...historical, algorithmVersion: SCORING_10 }, fingerprints, live), false); + // 原值: 只把 algorithmVersion 改成 LIVE_CURRENT 即可复用(当时 golden 的策略与旧 fixture 相同) + // 新值: 复用还要带上当前 golden 的 policyVersion + // 原因: scoring-11 回执的策略是 policy-v4,旧跨午夜 fixture 的策略不是这一版(BUG-1260) + assert.equal(cachedEngineScoreIsReusable({ + ...historical, + algorithmVersion: LIVE_CURRENT, + policyVersion: live.policyVersion, + }, fingerprints, live), true); assert.equal(historical.algorithmVersion, CURRENT, "checking live identity never relabels history"); // A receipt default must not become an environment override for cache identity. assert.deepEqual(liveEngineScoringIdentityFromEnv({}), { algorithmVersion: null, policyVersion: null }); diff --git a/frontend/tests/rectification-midnight-date-anchor.test.ts b/frontend/tests/rectification-midnight-date-anchor.test.ts index bca8d258..894e7cd3 100644 --- a/frontend/tests/rectification-midnight-date-anchor.test.ts +++ b/frontend/tests/rectification-midnight-date-anchor.test.ts @@ -97,9 +97,9 @@ for (const option of ["A", "B", "C", "skip_probe"] as const) test(`D1 initial no assert.equal(midnightSideChoice(current.case.candidate_range), null); }); -// BUG-1181: the scoring-10 golden (real engine, functional profile v2) must parse as dated too; -// a literal "=== scoring-9" check would have turned it into a legacy same-day result. -for (const fixture of ["rectification-midnight-date-anchor.delivery.native.json", "rectification-midnight-date-anchor.delivery.scoring-10.native.json"]) test(`native golden crosses engine parsing, inference and dated delivery without reanchoring (${fixture})`, async () => { +// BUG-1181: scoring-9 and later goldens must parse as dated. +// 原值: native + scoring-10;新值: 再加 scoring-11;原因: D5/D11 升到 scoring-11(BUG-1260),旧文件仍要按日期窗打开。 +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"]) 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 63ae1112..68c56496 100644 --- a/scripts/rectification/scoring_service.py +++ b/scripts/rectification/scoring_service.py @@ -18,7 +18,10 @@ from scripts.rectification.case_holdout import holdout_event_ids # *_functional_benefic_auxiliary / *_functional_malefic_auxiliary rules, so identical # input scores differently; cached scoring-9 results must not be reused as # current. The dated candidate-window contract is unchanged (scoring-9+). -ALGORITHM_VERSION = "rectification-v5-matrix-scoring-10" +# scoring-11 (2026-10-07, BUG-1260): D5/D11 sign mappings change education and +# finance varga points for the same input. Cached scoring-10 results must not +# be reused as current. Policy and the dated window contract stay as they are. +ALGORITHM_VERSION = "rectification-v5-matrix-scoring-11" INPUT_CONTRACT_VERSION = "rectification-calculation-spec-v5" PRECISION_WEIGHTS = { "day": 1.0, diff --git a/tests/golden/rectification_engine_memoization_v4.json b/tests/golden/rectification_engine_memoization_v4.json new file mode 100644 index 00000000..f3bb8ba2 --- /dev/null +++ b/tests/golden/rectification_engine_memoization_v4.json @@ -0,0 +1,1792 @@ +{ + "source_commit": "db68e90816d462b0c17b4f84a0d19df83010fbce", + "candidate_scores": [ + { + "time": "12:00", + "score": 8.5289, + "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.0833, + "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": "5a03b871-4c62-53eb-86be-ffad1739adce", + "representative_time": "12:00", + "overall_confidence": "low", + "margin_percent": 5.2246, + "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.2246, + "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": "\u6469\u7faf\u5ea7", + "to_sign": "\u5929\u874e\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.886, + "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": 1, + "right": 2 + } + }, + { + "year": 2026, + "month_lo": 3, + "month_hi": 3, + "domain": "any", + "split": { + "left": 1, + "right": 2 + } + }, + { + "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-11", + "candidate_count": 3, + "feature_hash": "96f8c3fc05eb3c78f0c809aec9928fcaebeb0fe4e29bd5c7cc908c2bc3d477f0", + "features": [ + { + "time": "12:00", + "ascendant_degree": 349.5527, + "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.2035, + "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.072, + "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.3992, + "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.7617, + "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.1596, + "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.1819, + "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.2035, + "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.072, + "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.3992, + "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.7617, + "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.1596, + "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.1819, + "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": 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": "4a2eb3968825626f6126f1441f6d471cbe35858c43b4019fcc8c37ac819a57b2", + "vargas": "e3e020d8162b23f5798719aa613c51dd91f41e854648a499d0df56c87fd95ad9", + "arudha": "134795db88292046a494171e37fc7b5867546ebbed3f814f0cd919ddd42e8ec0", + "ashtakavarga": "5131abf66bb1d5ff6ab7cec48d35b21665837aa23ff65baa91a08cf809e0d6f1", + "shadbala": "6f96c2f2af89d0f0beb836f4773588381ee01aca686aef9ecf447a59b568dd12", + "static": "7b43953a61f9dae2ae59dbceb65785a7cdd4b822e9cac6bcf15f51d062a28f19" + } + }, + { + "time": "12:01", + "ascendant_degree": 349.9746, + "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.625, + "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.3705, + "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.6406, + "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.9921, + "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.4163, + "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.5135, + "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.625, + "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.3705, + "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.6406, + "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.9921, + "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.4163, + "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.5135, + "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": 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": "83f363379c9d02a3db8f7017828ce464602b1232235593ee9daf619a9eb11614", + "vargas": "e3e020d8162b23f5798719aa613c51dd91f41e854648a499d0df56c87fd95ad9", + "arudha": "134795db88292046a494171e37fc7b5867546ebbed3f814f0cd919ddd42e8ec0", + "ashtakavarga": "5131abf66bb1d5ff6ab7cec48d35b21665837aa23ff65baa91a08cf809e0d6f1", + "shadbala": "19cea6d1aeb30837204820cce18ea04b30236463de9cc472e510b97cc37f87db", + "static": "b02d94808087ef14df6fe30a499eae389ef62545de943cc61a5544a6770a3ca7" + } + }, + { + "time": "12:02", + "ascendant_degree": 350.3959, + "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.0467, + "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.6689, + "sign": "Aries", + "rasi_lord": "Mars", + "nakshatra": "Krittika", + "nakshatra_lord": "Sun", + "pada": 1, + "sub_lord": "Sun", + "sub_sub_lord": "Sun", + "sub_index": 2 + }, + "3": { + "cusp_degree": 51.882, + "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.2229, + "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.6738, + "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.8461, + "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.0467, + "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.6689, + "sign": "Libra", + "rasi_lord": "Venus", + "nakshatra": "Vishakha", + "nakshatra_lord": "Jupiter", + "pada": 3, + "sub_lord": "Venus", + "sub_sub_lord": "Venus", + "sub_index": 1 + }, + "9": { + "cusp_degree": 231.882, + "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.2229, + "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.6738, + "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.8461, + "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": 7 + }, + "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": "74ccb8598f5c4501360d86d95ecf1c04c74b7cfa9fb7c8988e88bcb047b5148b", + "vargas": "5275d1788a42bda04e89c4eddbbd58f8513f61b48a959a5384c06b8786fa1955", + "arudha": "134795db88292046a494171e37fc7b5867546ebbed3f814f0cd919ddd42e8ec0", + "ashtakavarga": "5131abf66bb1d5ff6ab7cec48d35b21665837aa23ff65baa91a08cf809e0d6f1", + "shadbala": "304839082c5285726b55d7dcfcce0e8783155c28f5526b5bc9b8752e9deee6bb", + "static": "dadb685ae0b80138b6c77a4be0de3d71fbf1fe245596af14e33524ed706766f7" + } + } + ] + } +} diff --git a/tests/test_dasha_transition_proximity_cross_midnight.py b/tests/test_dasha_transition_proximity_cross_midnight.py index cdb7bbe2..048492ac 100644 --- a/tests/test_dasha_transition_proximity_cross_midnight.py +++ b/tests/test_dasha_transition_proximity_cross_midnight.py @@ -31,9 +31,9 @@ def test_fixed_scoring_identity_is_exposed_without_changing_input_contract(): ALGORITHM_VERSION, INPUT_CONTRACT_VERSION, calculation_spec, sha256, ) - # 原值: "rectification-v5-matrix-scoring-9";新值: "...-scoring-10";原因: 功能吉凶 v2 改变同输入分数, - # 按「打分语义变化必须 bump」先例升算法身份(BUG-1181);输入合同 v5 与日期窗合同不变。 - assert engine_scoring_versions()["algorithm_version"] == ALGORITHM_VERSION == "rectification-v5-matrix-scoring-10" + # 原值: "rectification-v5-matrix-scoring-10";新值: "...-scoring-11";原因: D5/D11 映射改变学业与财务分盘得分 + # (BUG-1260),同输入分数变了,按 BUG-1181 升算法身份;输入合同 v5 与日期窗合同不变。 + assert engine_scoring_versions()["algorithm_version"] == ALGORITHM_VERSION == "rectification-v5-matrix-scoring-11" 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 419e1623..b4d6707d 100644 --- a/tests/test_rectification_engine_memoization.py +++ b/tests/test_rectification_engine_memoization.py @@ -30,6 +30,12 @@ rectification-candidate-policy-v3 -> v4, event_quality / domain_diversity minimum 3/2 -> 4/3, and the representative candidate UUID (its namespace carries the policy version). v2 is frozen by sha256 below. +Current golden tests/golden/rectification_engine_memoization_v4.json +(2026-10-07, BUG-1260) was written by ``write_golden`` after the D5/D11 +mappings changed education and finance varga points for this same request. +The algorithm is rectification-v5-matrix-scoring-11. Policy stays v4. +v3 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 (TASK-rectification-engine-memoization-fix-20260915). Equivalence of the @@ -68,20 +74,24 @@ import scripts.rectification.scoring_service as scoring_service import shadbala ROOT = Path(__file__).resolve().parents[1] -GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v3.json" +GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v4.json" +V3_GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v3.json" +V3_GOLDEN_SHA256 = "7064f30bea3a7bcd8058fdcb6b52484a96a09767c0c289e0d71f3e2368fc8d45" +V3_SOURCE_COMMIT = "7fb165ecf66ba1726f2fc74ffa2353fadc65ba39" PREVIOUS_GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v2.json" PREVIOUS_GOLDEN_SHA256 = "abb15efae4d86387d930cd463b82a22fe95ccd1779e85ca6cc4cdf07a063cb73" PREVIOUS_SOURCE_COMMIT = "57782aea8ae28f5dd165a08d221ec27dbef391f8" HISTORICAL_GOLDEN_PATH = ROOT / "tests" / "golden" / "rectification_engine_memoization_v1.json" HISTORICAL_GOLDEN_SHA256 = "6266e448d7dad204b264cbe8f9bcf4c36e02286794764a94edb9e2ce4d0e3015" -CURRENT_ALGORITHM_VERSION = "rectification-v5-matrix-scoring-10" +# 原值: rectification-v5-matrix-scoring-10;新值: ...-scoring-11;原因: D5/D11 改变同输入分数(BUG-1260)。 +CURRENT_ALGORITHM_VERSION = "rectification-v5-matrix-scoring-11" FROZEN_TODAY = date(2026, 9, 16) TIMING_KEYS = frozenset({"column_compare_ms"}) HISTORICAL_SOURCE_COMMIT = "a8d29d1b6cc37ff865ddec6c8bccdf9aa889ee53" CURRENT_POLICY_VERSION = "rectification-candidate-policy-v4" -# Engine code of the v3 golden: upstream-sync5 tip before R1; the policy-v4 -# receipt (R1, BUG-1193) is the commit that adds the v3 file on top. -SOURCE_COMMIT = "7fb165ecf66ba1726f2fc74ffa2353fadc65ba39" +# D5/D11 mapping commit that moves these scores (BUG-1260). The v4 file is +# written later on this branch; v3 keeps its own source commit below. +SOURCE_COMMIT = "db68e90816d462b0c17b4f84a0d19df83010fbce" CACHE_LAYER_KEYS = ( "ashtakavarga_result", "shadbala_result", @@ -265,7 +275,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-10 / policy-v4 golden; identity is spelled out, not trusted.""" + """Compare with the scoring-11 / 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"}], @@ -300,7 +310,7 @@ def _assert_dated_payload_against_golden(actual: dict[str, Any], expected: dict[ def test_historical_scoring_8_golden_is_frozen_and_no_longer_current() -> None: - """BUG-1181: the old golden stays byte-identical; current scores moved, hence scoring-10.""" + """BUG-1181: the scoring-8 golden stays byte-identical and is not the current payload.""" raw = HISTORICAL_GOLDEN_PATH.read_bytes() assert hashlib.sha256(raw).hexdigest() == HISTORICAL_GOLDEN_SHA256 historical = json.loads(raw) @@ -313,14 +323,15 @@ def test_historical_scoring_8_golden_is_frozen_and_no_longer_current() -> None: def test_previous_policy_v3_golden_is_frozen_with_identical_scores() -> None: - """BUG-1193: v2 stays byte-identical; scores equal v3 (no scoring-11), only the receipt policy moved.""" + """BUG-1193: v2 stays byte-identical; scores equal v3 (both scoring-10), only the receipt policy moved.""" raw = PREVIOUS_GOLDEN_PATH.read_bytes() assert hashlib.sha256(raw).hexdigest() == PREVIOUS_GOLDEN_SHA256 previous = json.loads(raw) - current = json.loads(GOLDEN_PATH.read_text(encoding="utf-8")) + current = json.loads(V3_GOLDEN_PATH.read_text(encoding="utf-8")) assert previous["source_commit"] == PREVIOUS_SOURCE_COMMIT - assert previous["candidate_feature_snapshot"]["algorithm_version"] == CURRENT_ALGORITHM_VERSION - assert current["candidate_feature_snapshot"]["algorithm_version"] == CURRENT_ALGORITHM_VERSION + # 原值: 与 CURRENT_ALGORITHM_VERSION 相同;新值: 两者都是 scoring-10;原因: 当前身份已是 scoring-11,v2/v3 仍是当时的 scoring-10。 + assert previous["candidate_feature_snapshot"]["algorithm_version"] == "rectification-v5-matrix-scoring-10" + assert current["candidate_feature_snapshot"]["algorithm_version"] == "rectification-v5-matrix-scoring-10" _assert_tiered_equal(current["candidate_scores"], previous["candidate_scores"], path="candidate_scores") assert previous["decision_receipt"]["policy_version"] == "rectification-candidate-policy-v3" assert current["decision_receipt"]["policy_version"] == CURRENT_POLICY_VERSION @@ -332,6 +343,20 @@ def test_previous_policy_v3_golden_is_frozen_with_identical_scores() -> None: _assert_memoization_payloads(current, previous) +def test_scoring_10_golden_is_frozen_and_scores_moved() -> None: + """BUG-1260: v3 stays byte-identical; D5/D11 moved this request, hence scoring-11.""" + raw = V3_GOLDEN_PATH.read_bytes() + assert hashlib.sha256(raw).hexdigest() == V3_GOLDEN_SHA256 + previous = json.loads(raw) + current = json.loads(GOLDEN_PATH.read_text(encoding="utf-8")) + assert previous["source_commit"] == V3_SOURCE_COMMIT + assert previous["candidate_feature_snapshot"]["algorithm_version"] == "rectification-v5-matrix-scoring-10" + assert current["candidate_feature_snapshot"]["algorithm_version"] == CURRENT_ALGORITHM_VERSION + assert current["source_commit"] == SOURCE_COMMIT + with pytest.raises(AssertionError): + _assert_memoization_payloads(current, previous) + + 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 06fb1a3d..578d15cb 100644 --- a/tests/test_rectification_relative_support.py +++ b/tests/test_rectification_relative_support.py @@ -21,8 +21,8 @@ class RelativeSupportScaleTest(unittest.TestCase): # 原值: policy-v3;新值: policy-v4;原因: R1 区间门槛 4 件 3 域(BUG-1193),相对支持口径不变。 self.assertEqual(POLICY_VERSION, "rectification-candidate-policy-v4") # Explicit date windows: scoring identity -8 -> -9, not a prior/policy change. - # 原值: -9;新值: -10;原因: 功能吉凶 v2 改变打分(BUG-1181),策略 v3 与相对支持口径不变。 - self.assertEqual(ALGORITHM_VERSION, "rectification-v5-matrix-scoring-10") + # 原值: -10;新值: -11;原因: D5/D11 改变同输入分数(BUG-1260),策略 v4 与相对支持口径不变。 + self.assertEqual(ALGORITHM_VERSION, "rectification-v5-matrix-scoring-11") self.assertEqual(RELATIVE_SUPPORT_MODE, "proportional") def test_offset_top_two_lead_is_at_least_proportional(self) -> None: