fix(rectification): stop unwritten-evidence claims and same-cluster dasha false conflicts (BUG-635–640)
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled

Host only says 记下了 after a real write; Mastra schema rejections fail closed. Ledger year keys no longer drop quality probes, dual-dasha agreement is per cluster, width uses cluster span, and public house tables follow the inference minute.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-10 17:38:37 +08:00
co-authored by Cursor
parent 301827ad59
commit a998b6ec53
38 changed files with 1437 additions and 124 deletions
+11 -2
View File
@@ -156,8 +156,16 @@ def indistinguishable_width_minutes(candidates: Sequence[dict[str, Any]]) -> int
return 0
ranked = sorted(candidates, key=lambda row: int(row.get("rank") or 0))
top = ranked[0]
minutes = [value for value in (_clock_minutes(row.get("time")) for row in ranked) if value is not None]
span = (max(minutes) - min(minutes) + 1) if minutes else 0
starts: list[int] = []
ends: list[int] = []
for row in ranked:
start = _clock_minutes(row.get("cluster_start") or row.get("time"))
end = _clock_minutes(row.get("cluster_end") or row.get("time"))
if start is not None:
starts.append(start)
if end is not None:
ends.append(end)
span = (max(ends) - min(starts) + 1) if starts and ends else 0
tied = int(top.get("tied_minute_count") or 1)
return max(tied, span, 1)
@@ -606,6 +614,7 @@ def build_decision_receipt(
cluster_width_minutes=width,
include_discriminators=int(request.get("minute_step") or 1) <= 1,
column_times=_column_times_for_packet(request, candidate_decisions),
clusters=candidate_decisions,
)
if packet["dasha_agreement"]["status"] == "conflict":
if overall_confidence == "high":