fix(rectification): 候选分钟不变量记忆化(BUG-721)
Independent Staging Quality Gate / validate (push) Canceled after 1m57s
Independent Staging Quality Gate / publish (push) Canceled after 0s

Shadbala / Ashtakavarga / Dasha 时间轴进 static context;过境盘按事件日期缓存 chart;探针网格相同时只算一次。打分与决策回执与基线 golden 逐字相同(剔除计时字段)。
This commit is contained in:
jesse-ux
2026-09-16 07:11:07 +08:00
parent 8b982baf64
commit 53a37ce944
7 changed files with 2296 additions and 39 deletions
+15 -8
View File
@@ -697,7 +697,11 @@ def build_refinement_packet(
"unique_minute_claim": False,
"confirmation_allowed": False,
}
from scripts.rectification.candidate_contrast import PROBE_PHASE_HOLDOUT_VALIDATION, event_year
from scripts.rectification.candidate_contrast import (
PROBE_PHASE_HOLDOUT_VALIDATION,
event_year,
opportunity_from_probe,
)
from scripts.rectification.case_holdout import reserved_holdout_events
from scripts.rectification.event_probes import (
candidate_contrast_opportunities,
@@ -729,13 +733,16 @@ def build_refinement_packet(
dropped = list(bundle["dropped"])
clarification = event_clarification_probes(request)
collection = evidence_collection_probes(request)
opportunities = candidate_contrast_opportunities(
request,
built,
scan=scan,
candidate_times=grid_times,
representative_time=representative_time,
)
if probe_times == grid_times:
opportunities = [opportunity_from_probe(probe) for probe in probes]
else:
opportunities = candidate_contrast_opportunities(
request,
built,
scan=scan,
candidate_times=grid_times,
representative_time=representative_time,
)
reserved = reserved_holdout_events(request.get("events") or [])
holdout = [
{
-6
View File
@@ -5,7 +5,6 @@ import json
from collections import defaultdict
from collections.abc import Callable, Sequence
from datetime import date, timedelta
from functools import lru_cache
from typing import Any
from scripts.active_rectification_event_engine import compute_candidate_static_contexts, compute_event_candidate_rows
@@ -126,11 +125,6 @@ def _canonical(value: Any) -> str:
return json.dumps(value, ensure_ascii=True, sort_keys=True, separators=(",", ":"))
@lru_cache(maxsize=4096)
def _cached_rows(serialized: str) -> tuple[CandidateScoreRow, ...]:
return tuple(compute_event_candidate_rows(json.loads(serialized)))
_SUPPORT_RULES = (
"functional_benefic_auxiliary",
"arudha_auxiliary",