fix(rectification): bump scoring identity to scoring-10 for functional profile v2; dated contract by generation (BUG-1181)

Functional roles feed the *_functional_*_auxiliary rules, so 57782aea changes
candidate scores for identical input (memoization fixture 12:00: 8.6274 ->
8.4977). Per the "scoring semantics change => bump ALGORITHM_VERSION"
precedent (scoring-7 -> 8 -> 9), the identity moves to scoring-10; policy v3,
input contract v5 and Skill versions are unchanged, history is not relabeled.

Five frontend sites and one SQL guard tested `=== "...scoring-9"` for the
dated candidate-window contract; they now use isDatedScoringAlgorithmVersion /
a generation regex (>= 9). Migration 20261002010000 only recreates
validate_dated_rectification_candidate (one-line guard change).

Memoization golden v2 written by the test's own write_golden; v1 (scoring-8)
frozen by sha256. Real-engine scoring-10 cross-midnight golden added. Research
records re-frozen per ERR-110 (label functional_v2_2026_10_02) and
scripts/functional_benefics.py added to the frozen production identity
(ERR-114: 57782aea changed scores without tripping it).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-02 12:31:50 +08:00
co-authored by Claude Opus 5.5
parent 57782aea8a
commit 3733b9787b
25 changed files with 51388 additions and 355 deletions
+2 -2
View File
@@ -30,8 +30,8 @@ from scripts.research.sealed_holdout_rerun import (
OFFSETS = (-30, -20, -15, -10, -8, -5, -3, 0, 3, 5, 8, 10, 15, 20, 30)
RADII = (15, 30, 60)
MINUTE_STEP = 1
FREEZE = ROOT / "docs/research/reported_offset_quality_wording_2026_09_29.freeze.json"
REPORT = ROOT / "docs/research/reported_offset_quality_wording_2026_09_29.json"
FREEZE = ROOT / "docs/research/reported_offset_functional_v2_2026_10_02.freeze.json"
REPORT = ROOT / "docs/research/reported_offset_functional_v2_2026_10_02.json"
LEGACY_REPORT = ROOT / "docs/research/reported_offset_2026_09_20.json"
+5 -2
View File
@@ -27,8 +27,8 @@ from scripts.minute_rectification_feature_facts_v4 import build_feature_fact_row
from scripts.minute_rectification_holdout_validator import validate
DATASET = ROOT / "references/real_case_calibration/minute_rectification_holdout_v3.json"
FREEZE = ROOT / "docs/research/sealed_holdout_rerun_quality_wording_2026_09_29.freeze.json"
REPORT = ROOT / "docs/research/sealed_holdout_rerun_quality_wording_2026_09_29.json"
FREEZE = ROOT / "docs/research/sealed_holdout_rerun_functional_v2_2026_10_02.freeze.json"
REPORT = ROOT / "docs/research/sealed_holdout_rerun_functional_v2_2026_10_02.json"
LEGACY_REPORT = ROOT / "docs/research/sealed_holdout_rerun_2026_09_20.json"
ARCHIVE = ROOT / "docs/research/history/rectification_pre_cross_midnight_2026_09_20"
PRODUCTION_FILES = [
@@ -42,6 +42,9 @@ PRODUCTION_FILES = [
"scripts/rectification/decision_policy.py",
"scripts/rectification/refinement_packet.py",
"scripts/rectification/api_service.py",
# BUG-1181: functional roles feed *_functional_*_auxiliary scoring rules;
# 57782aea changed scores without tripping this identity.
"scripts/functional_benefics.py",
]
RESEARCH_FILES = [
"scripts/research/reported_offset_sweep.py",