fix(rectification): route follow-ups by method layer and rescore when evidence changes
Independent Staging Quality Gate / validate (push) Successful in 9m12s
Independent Staging Quality Gate / publish (push) Successful in 7m28s

Web was round-robinning missing domains and waiting to score until the user said they had no more events. Server follow-up now uses the eight-method plan, rescored snapshots stay candidates, and D9/D10 observations never become user labels.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-19 09:56:54 +08:00
co-authored by Cursor
parent f708edf365
commit 233c728176
27 changed files with 1516 additions and 80 deletions
@@ -98,6 +98,30 @@ class RectificationDiagnosticsClustersTest(unittest.TestCase):
self.assertEqual(result["candidate_splits"][0]["technique_layers"], ["D24"])
self.assertEqual(result["candidate_splits"][0]["event_ids"], [separating_event])
def test_window_scan_reports_d9_diversity_without_sign_names(self):
built = {
"date_sensitivity": [],
"matrix": {},
"static_contexts": [
{"feature": {"time": "05:13", "varga_ascendants": {"D9": 1, "D10": 4}}},
{"feature": {"time": "05:14", "varga_ascendants": {"D9": 7, "D10": 4}}},
],
}
result = run_diagnostics({"events": []}, [row("05:13", 100), row("05:14", 90)], built)
scan = result["window_scan"]
self.assertEqual(scan["scanned"], True)
self.assertEqual(scan["confirmation_allowed"], False)
self.assertEqual(scan["unique_minute_claim"], False)
self.assertEqual(scan["d9_lagna_count"], 2)
self.assertEqual(scan["d10_lagna_count"], 1)
self.assertEqual(scan["d9_candidates_differ"], True)
self.assertEqual(scan["d10_candidates_differ"], False)
encoded = str(scan)
self.assertNotIn("白羊", encoded)
self.assertNotIn("天蝎", encoded)
self.assertNotIn("Aries", encoded)
self.assertNotIn("Scorpio", encoded)
if __name__ == "__main__":
unittest.main()