research(rectification): add reported-offset evaluation and frozen rerun integrity
Preserve closed confirmation gates and previously-exposed dataset boundaries. Add auditable 900-trial sensitivity results, current scorer freshness checks, and the v5 collection protocol. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -12870,3 +12870,52 @@
|
||||
- 相关记录:BUG-970
|
||||
- 复发自:无
|
||||
- 修复版本:`8dc460da`
|
||||
|
||||
## BUG-978 | 封存契约当前打分身份与资料审计状态过期
|
||||
|
||||
- 状态:resolved/partial
|
||||
- 首次发现:2026-09-20
|
||||
- 最近更新:2026-09-20
|
||||
- 影响面:封存 holdout 契约、当前实现评测身份与离线成绩归属。
|
||||
- 用户现象:历史冻结值、历史 sidecar 当前值、当前代码实测哈希互不相同;契约仍写旧资料审计状态与评测日期,当前成绩无法正确归属。
|
||||
- 触发条件:打分文件发生变化而契约未刷新,再读取契约判断当前引擎验证状态。
|
||||
- 根因:人工维护契约;既有测试仅与旧报告相互核对,没有断言真实当前树身份与数据集状态。
|
||||
- 修复:本轮新增固定口径重跑与 freshness 回归;执行与证据见 `docs/tasks/PROGRESS-rectification-validation-20260920.md`。保持发布六键与确认门不变。
|
||||
- 验证:freshness 与确认门相关定向通过;独立复算逐例结果及汇总与冻结重跑 JSON 一致,六个 runtime 键未变。新增测试通过既有快速门 glob 桥接实际收集。旧 v2 哈希测试与 quick 环境失败与基线相同,详见进度。独立盲测因案例曾曝光仍 blocked,固定实现重跑不恢复未见性;resolved 仅指元数据过期与可追溯缺口,partial 指新独立盲测未完成。
|
||||
- 防复发:当前打分文件 SHA-256、源审计状态与契约必须一致;新鲜度检查须进入实际快速门收集范围,不能仅存在于测试目录。新盲测还必须有未曝光样本和独立标注审核。
|
||||
- 相关记录:BUG-098、BUG-427、BUG-428。
|
||||
- 复发自:BUG-098 的独立 holdout 边界与 BUG-427 的身份绑定缺口;前者要求未被落实为独立封存流程,后者没有当前树 freshness 检查,旧 sidecar 自洽仍可过测试。
|
||||
- 修复版本:本轮执行分支,未交付。
|
||||
|
||||
## BUG-979 | 真值中心候选窗掩盖申报偏差导致的真值出窗
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-20
|
||||
- 最近更新:2026-09-20
|
||||
- 影响面:离线候选窗评测与生产申报中心搜索窗的可比性。
|
||||
- 用户现象:离线评测真值永在候选窗中心,无法衡量真实申报偏差大于搜索半径时的失败模式。
|
||||
- 触发条件:用户申报偏离独立记录且偏差超过候选窗半径。
|
||||
- 根因:旧评测从真值构窗,缺少独立的申报偏移变量和真值在窗覆盖指标。
|
||||
- 修复:并行新增偏移敏感性评测,不修改历史候选函数;排名后才揭示真值,用既有 opaque 哈希破同分。
|
||||
- 验证:完整修正版 900 组合、45 格,排除 0;新增偏差与 freshness/桥接回归 28/28 通过(包含桥接重复收集),真实引擎跨日分组与逐候选重算相同。报告见 `docs/research/reported_offset_2026_09_20.md`,口径与哈希见同名 JSON。resolved 仅指离线缺少偏差维度的缺口,不代表产品分钟准确或生产跨日问题已修。
|
||||
- 防复发:锁定零偏移、窗外、口径字段、非真值破同分与跨日行为;窗口覆盖与排序命中分开记录,不以敏感性代替真实用户准确率。
|
||||
- 独立审查追加:首版偏差评测的矩阵为全窗共用一个日期,跨日时辅助 transition proximity 有偏差。已在离线适配层按候选日期分组计算并与逐候选真实引擎结果对照,不修改生产打分;原初扫统计作废。生产同类日期处理不在本单修复范围,记入 BLOCKED,不能声称生产端到端等价。
|
||||
- 相关记录:BUG-098、BUG-978。
|
||||
- 复发自:BUG-098;既有防复发聚焦候选公开门与同案稳定性,没有离线与生产窗心可比性的测试。
|
||||
- 修复版本:本轮执行分支,未交付。
|
||||
|
||||
## BUG-980 | 缺少事件丰富且从未曝光的独立封存集
|
||||
|
||||
- 状态:investigating
|
||||
- 首次发现:2026-09-20
|
||||
- 最近更新:2026-09-20
|
||||
- 影响面:分钟级评测可推广性与独立发布证据。
|
||||
- 用户现象:旧封存集事件少;事件丰富的开放集用于调参、成绩已见,不能替代新的独立验证。
|
||||
- 触发条件:把开放评价集或真值方向最佳答案回放当成产品分钟级准确率。
|
||||
- 根因:开放集建设之后未建立独立采集、未曝光、独立人审的封存孪生集。
|
||||
- 修复:本轮仅制定 v5 采集协议与不重叠公开候选池,不采事件、不生成新成绩。
|
||||
- 验证:协议含事件/领域目标、独立来源、人审封存、曝光日志、工作量和发布边界;备选池与旧集去重通过(仅候选资格筛查,原文准入仍需复核)。v5 未建成,保持 investigating。
|
||||
- 防复发:采集、标注、评分权限分隔,调参前封存,首次揭晓前不得以事件内容调参;拒绝自动置真人审标志和重新封存已曝光案例。
|
||||
- 相关记录:BUG-098、BUG-428、BUG-978、BUG-979。
|
||||
- 复发自:BUG-098;原记录明确延期独立分区与校准,本轮仍无真正独立样本,不能将文档协议写成验证完成。
|
||||
- 修复版本:协议执行分支;数据集未就绪,不标 resolved。
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
|
||||
This file is the small index for the current engineering fronts that still drive code changes.
|
||||
|
||||
## 生时校正验证完整性(2026-09-20)
|
||||
|
||||
- [申报偏差敏感性](reported_offset_2026_09_20.md):申报中心搜索窗与真值出窗,不能当真实用户准确率。
|
||||
- [固定口径重跑与契约](sealed_holdout_rerun_2026_09_20.md):已曝光 v3 的当前实现成绩,不是新的独立盲测;确认门关闭。
|
||||
- [v5 独立封存采集协议](sealed_holdout_v5_protocol_2026_09_20.md):本轮只出协议,不采事件。
|
||||
- 前置结论:[分钟分辨率两轮研究](rectification_minute_resolution_closure_2026_09_14.md)。不重走已证伪的加权重与簇合并假设。
|
||||
- 执行状态:[本轮进度](../tasks/PROGRESS-rectification-validation-20260920.md)。
|
||||
|
||||
## Shortest-Path Closure Order (2026-06-29)
|
||||
|
||||
To avoid scope drift, current work stays inside these four closure lanes only:
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
|
||||
Purpose: read this file before substantial project work. It exists to stop repeat mistakes caused by multiple Codex windows, WorkBuddy mirrors, local drafts, backup folders, and partial cloud-git visibility.
|
||||
|
||||
## 2026-09-20 · 校正验证补缺的本机验收复现
|
||||
|
||||
- 基线与实现工作树均使用 Python 3.11.7(无项目 `.venv`;`python3` launcher 退出 49)。开工预检远端 verified,但同一碎片镜像路径断言失败;不得把同步成功写成预检通过。
|
||||
- quick 两侧均在 `interpretation_source_inventory_gate.py` 退出 1,缺 `mcp`;两侧输出的 46 条缺引用消息逐项相同,不冒写快速门通过。历史 v2 封存哈希测试在基线已失败,未改历史记录或冻结文件消除它。
|
||||
- 前端构建两侧均因外部 node_modules junction 被 Turbopack 拒绝,不能出具 Static/gzip 验收。全量并发测试存在文件级资源失败,需保留基线逐项对照与定向复验,不以较少失败数宣称全部通过。
|
||||
- 防复发与补验见 `docs/tasks/PROGRESS-rectification-validation-20260920.md`、`docs/testing/rectification-validation-20260920.md`。本轮未修改环境权限、依赖、workflow 或运行主仓。
|
||||
|
||||
## 2026-09-19 · 私人资料清理的索引依赖预检缺口
|
||||
|
||||
- 本轮基线 `35ca7299c`。删除前独立审计发现:主 Skill/MCP 入口无直接引用,不等于台账无读者。证据包索引仍登记全部拟删台账,完整性检查会验证目标路径;派生视图和研究矩阵也保留引用。原清单直接删除会造成缺失路径回归,初期因此暂缓;产品补充授权后已完成精确删除与引用修复,索引缺失路径仍为零。交付状态见本轮进度记录。
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,64 @@
|
||||
# 申报偏差敏感性评测(2026-09-20)
|
||||
|
||||
## 结论与边界
|
||||
|
||||
**默认半径 ±15 分钟时,申报误差绝对值超过 15 分钟,记录真值就不在候选窗内;按整数分钟,第 16 分钟开始出窗。** 这是搜索窗几何边界,不需要知道真实用户偏差分布。
|
||||
|
||||
本轮完整评测预先固定 15 个偏移 × 3 档半径 × 20 例,共 900 组合。修正版全部运行完成,validator 排除 0 例;实测结果以下列最终 JSON 为准,不能用中途旧版本初扫代替。
|
||||
|
||||
**区间覆盖不等于分钟命中,模拟偏差敏感性不等于真实用户准确率。** 不运行六题真值方向回放,不以用户认可作真值,不调参、不改生产打分、不打开确认门。
|
||||
|
||||
## 口径
|
||||
|
||||
| 项目 | 口径 |
|
||||
| --- | --- |
|
||||
| 数据集 | `references/real_case_calibration/minute_rectification_holdout_v3.json`,20 例公开 AA,每例 3 件事件,已曝光 |
|
||||
| ayanamsa / node mode | `raman` / `mean` |
|
||||
| 申报偏移 | 0、±3、±5、±8、±10、±15、±20、±30 分钟 |
|
||||
| 搜索半径 | ±15 / ±30 / ±60 分钟;±120 仅说明几何边界,未评分 |
|
||||
| 候选步长 | 1 分钟,含两端;不是生产 2 分钟抽样 |
|
||||
| 12 文件历史身份 | `b15d9ea15227cd58`(完整值见 JSON) |
|
||||
| 实际评分路径 | 原生 event contribution matrix;不是 T2 的 shadow fact ranker |
|
||||
| 额外身份 | JSON 的 `production_scoring_sha256` 与 `research_implementation_sha256` 分别绑定扩展评分文件和研究适配文件;显式文件清单不是完整传递依赖锁 |
|
||||
| 头名与排名 | 分数降序,再用既有 `_opaque_winner` 同源 SHA-256 规则排同分;不选择最接近真值的候选 |
|
||||
| 交付区间 | 初始未答题:signature clusters 中落后头名不足 8 分的仍有效簇外包范围;无新回答、无淘汰,不是完整问答链交付效果 |
|
||||
| 跨午夜 | 候选、误差及区间使用完整日期;离线矩阵按候选日期分组,合并后全窗排序/聚类 |
|
||||
| 独立性 | `is_blind_evaluation=false`,已曝光集;评分/区间定稿后才揭示标签,仅证明程序标签隔离 |
|
||||
|
||||
## 实测表
|
||||
|
||||
每格依次为 **真值在窗比例 / 哈希头名命中 / 初始交付区间覆盖**,分母均为 20 例。列为申报偏移分钟,行为搜索半径。统一口径:v3、raman/mean、1 分钟步长;历史打分身份 `b15d9ea15227cd58`,扩展原生评分身份 `115c3fbcffdaff49`,研究适配身份 `8d0c613dc0900adb`。
|
||||
|
||||
| 半径 | -30 | -20 | -15 | -10 | -8 | -5 | -3 | 0 | +3 | +5 | +8 | +10 | +15 | +20 | +30 |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| ±15 | 0/0/0 | 0/0/0 | 100/10/95 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/95 | 100/15/95 | 0/0/0 | 0/0/0 |
|
||||
| ±30 | 100/10/95 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/95 | 100/15/95 |
|
||||
| ±60 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 | 100/5/100 |
|
||||
|
||||
表内全部数字单位为 %。这只是 20 例公开已曝光案例的条件敏感性,不附会总体置信度。即使真值在候选窗中,±15 的 -15/+10/+15 档及 ±30 的 -30/+20/+30 档仍各有一例未被初始交付范围覆盖;窗口包含与交付覆盖必须分开。±60 的所有采样偏移虽保持覆盖,但真正选中的头名只有 5%,不能用宽区间覆盖声称分钟准确。
|
||||
|
||||
修正版与错误初版的汇总比例恰好相同,不表示初版评分正确;身份、逐候选计算与跨日回归以修正版为准。
|
||||
|
||||
## 放宽能救回什么
|
||||
|
||||
- 真值在候选窗的条件始终是 `abs(offset) <= radius`。本次偏移最大绝对值 30,因此半径 30 / 60 / 120 在几何上都能包含本次所有偏移标签。
|
||||
- 对 ±15 已出窗的 ±20 / ±30 两组偏移,放宽到 ±30 可把**候选窗包含率**从 0 恢复到 100%;±60 / ±120 对这些特定偏移不再增加几何包含率。
|
||||
- 半径 ±30 自第 31 个整数分钟偏移出窗,±60 自第 61 个、±120 自第 121 个。放宽不是无条件保证,更不代表排名命中或交付覆盖同样恢复。
|
||||
- ±120 未跑评分,不报告其头名命中率或交付覆盖率。真实用户申报偏差分布未知,不估算现实用户中有多少人能被放宽救回。
|
||||
|
||||
## 初扫作废与独立复核
|
||||
|
||||
首版正确枚举了跨日候选,但矩阵内 transition proximity 仍共用窗口起日,独立审查发现跨日候选得分偏移。因此旧初扫作废,修正版标记 `replay_revision=candidate_date_grouped_v2`,并登记 `supersedes=initial_sweep_invalidated_cross_midnight_transition_anchor`。
|
||||
|
||||
修复仅在本次新脚本 `score_window()` 做按日期分组适配,未改冻结打分文件。实引擎回归验证跨日窗口的分组计算与逐候选独立重算相同;聚类和交付范围在合并后全窗运行。**生产日期处理未在本单修复,不能称为生产端到端回放。**
|
||||
|
||||
## 可复算产物与验收
|
||||
|
||||
```bash
|
||||
python scripts/research/reported_offset_sweep.py --json
|
||||
python -m pytest tests/test_reported_offset_research.py tests/test_rectification_validation_integrity_gate.py -q
|
||||
```
|
||||
|
||||
`reported_offset_2026_09_20.json` 保留逐例四项必要输出:真值是否在窗、真值排名、头名分钟误差、交付区间覆盖,以及每个格子的分母、全部参数和实现哈希。仅保存公开集序号,不保存出生分钟、坐标或事件正文。
|
||||
|
||||
排名不能与 T2 的竞争排名 top-1/top-3 混比:T2 按旧协议允许并列多个分钟同时算第一;本表把同分完全按哈希打破。最终测试数字与已知基线失败见 [进度](../tasks/PROGRESS-rectification-validation-20260920.md)。真实分布采集与新未曝光样本见 [v5 协议](sealed_holdout_v5_protocol_2026_09_20.md)。
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"record_version": "exposed-v3-fixed-protocol-rerun-v1",
|
||||
"frozen_at_utc": "2026-09-20T03:27:26.670869+00:00",
|
||||
"dataset_path": "references/real_case_calibration/minute_rectification_holdout_v3.json",
|
||||
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
|
||||
"algorithm_version": "birth-time-event-fact-ranker-v4-shadow",
|
||||
"implementation_sha256": "b15d9ea15227cd58b3097555537fa7c37fb5a993905ada4f5aa04f52de1f8f18",
|
||||
"files": [
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/ashtakavarga.py",
|
||||
"scripts/dasha_analyzer.py",
|
||||
"scripts/divisional_charts_extended.py",
|
||||
"scripts/domain_calculation_service.py",
|
||||
"scripts/jaimini.py",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py",
|
||||
"scripts/minute_rectification_feature_facts_v4.py",
|
||||
"scripts/narayana_dasha.py",
|
||||
"scripts/shadbala.py",
|
||||
"scripts/varga.py"
|
||||
],
|
||||
"historical_frozen_sha256": "f41c298dd6cdcebe7a93e632f7191954be7987f6012ca2a34cecb6e447fbf196",
|
||||
"evaluator_sha256": "3bf35de5f8a0b9588808178d47ba2457c398cf2fd2d2fcb03c5c71420f998da5",
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"candidate_radius_minutes": [
|
||||
10
|
||||
],
|
||||
"minute_step": 1,
|
||||
"release_metrics": {
|
||||
"top_1_rate_minimum": 0.6,
|
||||
"top_3_rate_minimum": 0.85,
|
||||
"mean_absolute_minute_error_maximum": 2.0,
|
||||
"false_confirmation_rate_maximum": 0.05,
|
||||
"correct_insufficient_evidence_rejection_rate_minimum": 0.9
|
||||
},
|
||||
"results_previously_seen": true,
|
||||
"official_valid_independent_blind": false,
|
||||
"must_not_use_for_tuning": true,
|
||||
"tie_breaker": "sha256(benchmark_id:case_id:candidate_time); published minute is never passed to the ranker",
|
||||
"metric_rank_definition": "competition_rank_1_plus_strictly_higher_scores_legacy_protocol",
|
||||
"extra_metric_rank_definition": "score_desc_then_existing_opaque_sha256_total_order"
|
||||
}
|
||||
@@ -0,0 +1,626 @@
|
||||
{
|
||||
"scope": "fixed_protocol_previously_exposed_v3_rerun",
|
||||
"evaluated_on": "2026-09-20",
|
||||
"frozen_record": {
|
||||
"record_version": "exposed-v3-fixed-protocol-rerun-v1",
|
||||
"frozen_at_utc": "2026-09-20T03:27:26.670869+00:00",
|
||||
"dataset_path": "references/real_case_calibration/minute_rectification_holdout_v3.json",
|
||||
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
|
||||
"algorithm_version": "birth-time-event-fact-ranker-v4-shadow",
|
||||
"implementation_sha256": "b15d9ea15227cd58b3097555537fa7c37fb5a993905ada4f5aa04f52de1f8f18",
|
||||
"files": [
|
||||
"scripts/active_rectification_event_engine.py",
|
||||
"scripts/active_rectification_events.py",
|
||||
"scripts/ashtakavarga.py",
|
||||
"scripts/dasha_analyzer.py",
|
||||
"scripts/divisional_charts_extended.py",
|
||||
"scripts/domain_calculation_service.py",
|
||||
"scripts/jaimini.py",
|
||||
"scripts/minute_rectification_fact_ranker_v4.py",
|
||||
"scripts/minute_rectification_feature_facts_v4.py",
|
||||
"scripts/narayana_dasha.py",
|
||||
"scripts/shadbala.py",
|
||||
"scripts/varga.py"
|
||||
],
|
||||
"historical_frozen_sha256": "f41c298dd6cdcebe7a93e632f7191954be7987f6012ca2a34cecb6e447fbf196",
|
||||
"evaluator_sha256": "3bf35de5f8a0b9588808178d47ba2457c398cf2fd2d2fcb03c5c71420f998da5",
|
||||
"ayanamsa": "raman",
|
||||
"node_mode": "mean",
|
||||
"candidate_radius_minutes": [
|
||||
10
|
||||
],
|
||||
"minute_step": 1,
|
||||
"release_metrics": {
|
||||
"top_1_rate_minimum": 0.6,
|
||||
"top_3_rate_minimum": 0.85,
|
||||
"mean_absolute_minute_error_maximum": 2.0,
|
||||
"false_confirmation_rate_maximum": 0.05,
|
||||
"correct_insufficient_evidence_rejection_rate_minimum": 0.9
|
||||
},
|
||||
"results_previously_seen": true,
|
||||
"official_valid_independent_blind": false,
|
||||
"must_not_use_for_tuning": true,
|
||||
"tie_breaker": "sha256(benchmark_id:case_id:candidate_time); published minute is never passed to the ranker",
|
||||
"metric_rank_definition": "competition_rank_1_plus_strictly_higher_scores_legacy_protocol",
|
||||
"extra_metric_rank_definition": "score_desc_then_existing_opaque_sha256_total_order"
|
||||
},
|
||||
"implementation_hash_matches_at_replay": true,
|
||||
"dataset_hash_matches_at_replay": true,
|
||||
"source_audit_status": "corrected_known_date_errors",
|
||||
"validation_status": "blocked_awaiting_public_aa_cases",
|
||||
"valid_public_aa_cases": 20,
|
||||
"excluded_cases": [],
|
||||
"trial_count": 20,
|
||||
"trials": [
|
||||
{
|
||||
"case_ordinal": 1,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 5,
|
||||
"opaque_true_rank": 8,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 2,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 2,
|
||||
"opaque_true_rank": 8,
|
||||
"minute_error": 3,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 3,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 12,
|
||||
"minute_error": 5,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 4,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 1,
|
||||
"minute_error": 0,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 5,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 10,
|
||||
"minute_error": 1,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 6,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 7,
|
||||
"opaque_true_rank": 12,
|
||||
"minute_error": 6,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 7,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 5,
|
||||
"opaque_true_rank": 7,
|
||||
"minute_error": 9,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 8,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 5,
|
||||
"opaque_true_rank": 8,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 9,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 3,
|
||||
"minute_error": 1,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"missing_mandatory_layers",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"missing_mandatory_layers",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 10,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 8,
|
||||
"minute_error": 5,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 11,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 6,
|
||||
"opaque_true_rank": 17,
|
||||
"minute_error": 5,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 12,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 4,
|
||||
"minute_error": 5,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 13,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 5,
|
||||
"opaque_true_rank": 7,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 14,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 17,
|
||||
"opaque_true_rank": 19,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 15,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 7,
|
||||
"minute_error": 9,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"missing_mandatory_layers",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"missing_mandatory_layers",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 16,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 12,
|
||||
"opaque_true_rank": 12,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 17,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 6,
|
||||
"opaque_true_rank": 6,
|
||||
"minute_error": 6,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 18,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 11,
|
||||
"opaque_true_rank": 14,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 19,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 6,
|
||||
"minute_error": 4,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
},
|
||||
{
|
||||
"case_ordinal": 20,
|
||||
"candidate_count": 21,
|
||||
"event_count": 3,
|
||||
"true_rank": 1,
|
||||
"opaque_true_rank": 7,
|
||||
"minute_error": 10,
|
||||
"would_confirm": false,
|
||||
"false_confirmation": false,
|
||||
"insufficient_evidence_rejected": true,
|
||||
"full_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
],
|
||||
"sparse_trial_reasons": [
|
||||
"unique_minute_not_found",
|
||||
"insufficient_events",
|
||||
"insufficient_domains",
|
||||
"neighbor_stability_not_passed",
|
||||
"leave_one_event_out_not_passed",
|
||||
"top_candidate_feature_not_unique",
|
||||
"fact_ranker_v4_holdout_not_ready"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metrics": {
|
||||
"top_1_rate": 0.45,
|
||||
"top_3_rate": 0.5,
|
||||
"mean_absolute_minute_error": 6.45,
|
||||
"false_confirmation_rate": 0.0,
|
||||
"correct_insufficient_evidence_rejection_rate": 1.0,
|
||||
"confirmation_coverage_rate": 0.0
|
||||
},
|
||||
"metric_gates_passed": false,
|
||||
"opaque_exact_top_1_rate": 0.05,
|
||||
"opaque_exact_top_3_rate": 0.1,
|
||||
"official_valid_independent_blind": false,
|
||||
"official_blind_trial_count": 0,
|
||||
"is_blind_evaluation": false,
|
||||
"truth_hidden_from_ranker": true,
|
||||
"results_previously_seen": true,
|
||||
"verified_minute_claim_allowed": false,
|
||||
"status": "blocked_independent_blind_evidence",
|
||||
"boundary": "Three-event low-information protocol, not a mathematical accuracy lower bound and not representative of real sessions. Historical v3/v4 exposure cannot be undone by freezing today's scorer. No tuning or release claims."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
# 当前冻结实现的 v3 固定口径重跑(2026-09-20)
|
||||
|
||||
## 结论
|
||||
|
||||
**已补上当前实现可归属、可复算的成绩;没有补成新的独立官方盲测。** 既有 v3/v4 人物与成绩已经曝光,重新冻结今天的打分文件不能消除曝光。任务书 T2 中「首次口径干净的官方盲测」在既有 BUG-427 / BUG-428 红线下仍为 **blocked**,不得改名通过。确认门保持关闭。
|
||||
|
||||
这是每例只有 3 件事的低信息量(任务书称「下限」)口径,不代表真实会话;事件少不等于数学上保证成绩更低,因此也不是准确率下界。
|
||||
|
||||
## 固定口径与可审计文件
|
||||
|
||||
| 项目 | 本次实际值 |
|
||||
| --- | --- |
|
||||
| 数据集 | `references/real_case_calibration/minute_rectification_holdout_v3.json` |
|
||||
| 数据集 SHA-256 | `45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea` |
|
||||
| 计算规格 | ayanamsa `raman` / node mode `mean` |
|
||||
| 半径 / 步长 | ±10 分钟 / 1 分钟,含两端;真值为窗心 |
|
||||
| 算法 | `birth-time-event-fact-ranker-v4-shadow`,不是生产 V9 问答链 |
|
||||
| 当前打分身份 | `b15d9ea15227cd58b3097555537fa7c37fb5a993905ada4f5aa04f52de1f8f18`(前缀 `b15d9ea15227cd58`) |
|
||||
| 样本 / 事件 | 20 例 / 每例 3 件;validator 排除 0 例 |
|
||||
| 资料审计状态 | `corrected_known_date_errors`,不等同全新独立人工重审 |
|
||||
| 排名标签隔离 | 排序和稀疏证据判定完成后才读取真值标签 |
|
||||
| 独立官方盲测 | `official_valid_independent_blind=false`;有效官方盲测试次仍为 0 |
|
||||
|
||||
冻结记录:`sealed_holdout_rerun_2026_09_20.freeze.json`。先以独占创建模式记录 12 个文件、数据集与评测器字节哈希,再执行评分;评分前验证全部身份,任何漂移即拒绝。历史 v3 `frozen_scoring` 原值 `f41c298dd6cdcebe…` 未改。
|
||||
|
||||
脱敏逐例结果:`sealed_holdout_rerun_2026_09_20.json`,只含公开集序号、排名、误差、门禁原因,不含出生分钟、坐标或事件正文。复算:
|
||||
|
||||
```bash
|
||||
python scripts/research/sealed_holdout_rerun.py --json
|
||||
```
|
||||
|
||||
## 五项预注册指标与门槛
|
||||
|
||||
本表统一口径:v3 / `raman` / `mean` / ±10 / 1 分钟 / `b15d9ea15227cd58`。
|
||||
|
||||
| 指标 | 实测 | 预注册门槛 | 数值对照 |
|
||||
| --- | ---: | ---: | --- |
|
||||
| top-1(旧协议竞争排名,含并列) | 0.45 | ≥0.60 | 未通过 |
|
||||
| top-3(旧协议竞争排名,含并列) | 0.50 | ≥0.85 | 未通过 |
|
||||
| 头名平均绝对分钟误差(哈希打破并列) | 6.45 分钟 | ≤2.00 分钟 | 未通过 |
|
||||
| 误确认率(全样本分母) | 0.00 | ≤0.05 | 通过,但无确认覆盖,不能证明确认精度 |
|
||||
| 信息不足正确拒绝率(每例仅首件事件) | 1.00 | ≥0.90 | 通过 |
|
||||
| 确认覆盖率(补充) | 0.00 | 本单禁止抬高 | 保持关闭 |
|
||||
| 作为独立盲测发布成绩的资格 | 不适用 | 新封存、未曝光、独立审计 | blocked,不可当发布指标 |
|
||||
|
||||
**重要口径纠正:旧 top-1/top-3 不是哈希选中那个分钟的命中率。** 现有评测的 `true_rank = 1 + 严格高于真值分数的候选数` 会把同分的多个分钟全算第一;本次为保证与旧协议可比保留它,同时增加哈希全序的真实选中指标,不暗改预注册定义。
|
||||
|
||||
| 附加指标(同一上述口径) | 实测 |
|
||||
| --- | ---: |
|
||||
| `_opaque_winner` 真正选中的头名命中 | 0.05 |
|
||||
| 同一哈希全序中的 top-3 命中 | 0.10 |
|
||||
|
||||
这两个数字不能与旧 0.45/0.50 混称同一种准确率。没有据此改权重、换半径、换案例或剔除失败例。
|
||||
|
||||
## 契约改了什么、没有改什么
|
||||
|
||||
- `current_tree_scorer` 绑定本次真实哈希及新报告,新增固定口径试次数与成绩;旧 `current_tree_unfrozen_diagnostic` 历史块保留。
|
||||
- `source_audit_status` 对齐数据集;`evaluated_on` 表示最新固定口径重跑日期,并新增作用域说明。历史顶层指标仍有 `metrics_produced_by` 的旧日期与来源,未伪装成本次结果。
|
||||
- `status`、`valid_public_aa_cases`、`required_cases`、`top_1_rate`、`confirmation_coverage_rate`、`sealed_benchmark_id` 六个 runtime 键的值与类型全不变;尤其 `status=not_ready`、确认覆盖率为零。
|
||||
- `official_eval_implementation_hash_matches=false`、`official_eval_trial_count=0` 保留;新增重跑记录不冒充已重新获得独立性。
|
||||
- 未改任何冻结打分文件、生产判定、现有 `_candidate_moments()` 或 `request_from_case()`。
|
||||
|
||||
## 防复发与既有断言变更
|
||||
|
||||
新增 `tests/test_sealed_holdout_contract_freshness.py` 钉死当前树身份、审计状态、冻结记录、报告汇总与独立性声明;冻结身份不符必须在计算前拒绝。`tests/test_rectification_validation_integrity_gate.py` 将其和偏差评测回归纳入现有 `test_rectification_*.py` 快速门,不改 workflow。
|
||||
|
||||
| 原断言 | 新断言 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| Python / 前端:`current_tree_scorer.implementation_sha256` 等于旧 post-audit sidecar 的哈希 | 等于新固定口径报告 `frozen_record.implementation_sha256`,另验证当前树与新报告 | 契约当前树块的含义就是当前实现;继续绑定旧报告会强制过期。新增身份断言更严格,不弱化门禁 |
|
||||
| 官方标志 false、官方试次 0、六键等于历史报告、确认门全套行为断言 | 原值保留,另加固定口径重跑身份/试次和独立盲测 false | 固定口径重跑不是新的独立盲测,不借元数据迁移打开确认门 |
|
||||
|
||||
本机 Python 3.11.7 可跑;`python3` Windows 别名退出 49。该任务定向命令的最终测试清单与基线失败对照由 `PROGRESS-rectification-validation-20260920.md` 统一记录。特别是既有 v2 冻结身份测试不属本次刷新范围,不得为了通过而改其历史封存或断言。
|
||||
@@ -0,0 +1,132 @@
|
||||
# 封存集 v5 采集协议(2026-09-20)
|
||||
|
||||
> 状态:**协议已拟定,未采集事件、未建成数据集、未评分、未完成独立人工审阅**。本文件只交付 T3,不等于 BUG-980 已解决。
|
||||
> 任务:[TASK-rectification-validation-integrity-20260920](../tasks/TASK-rectification-validation-integrity-20260920.md)。关联 BUG-098 / BUG-428 / BUG-980。
|
||||
> 本文所有样本量、事件数、半径与工时均为**协议目标或估算**,不是模型成绩;本轮不产生评分实现哈希或准确率。未来评分必须附完整实现哈希、数据集哈希、ayanamsa、node mode、半径、步长和试验登记号。
|
||||
|
||||
## 1. 要证明什么,以及明确不证明什么
|
||||
|
||||
v5 的目标是同时满足 **封存 + 每例至少 7 件带年月事件 + 至少 4 个领域**:事件密度对齐 v4,隔离纪律至少达到 v3 设计目标,并修补“程序不读真值”不等于“人未看过成绩”的缺口。拟获得至少 25 个合格人物;下列 26 人只是备选池,不保证其事件覆盖已达标,不足时须在评分前按同一标准扩池。
|
||||
|
||||
**在 v5 就绪之前,任何对外的分钟级准确率说法都没有依据。** v5 就绪也仅是允许开始验证,不是默认验证成功;还必须完成预注册评测、独立审阅与发布决策。
|
||||
|
||||
- T2 的数字是 v3 每例仅 3 件事的**低事件量口径**,不是对真实会话准确率的保证,更不是数学意义上的性能下界。重新冻结当前实现可以恢复“成绩归属于哪个实现”的可追溯性,不能消除旧人物、旧事件或旧成绩的曝光。
|
||||
- T1 的数字是“申报偏差为 X 时会怎样”的**敏感性**,不是实际用户准确率;未知真实用户的申报偏差分布时,不得把各偏移档等权平均后宣传为产品表现。
|
||||
- 真值藏在排名之后只证明程序的标签隔离;独立盲测还要求未用其人物/事件/结果调参。BUG-428 已规定:**结果已被看过的案例不得再计入盲测**,自动化迁移的审阅记录也不等于新的传记级人审。
|
||||
- Rodden-AA 表示出生来源等级,不保证记录无舍入、无转录差错,更不保证真实出生瞬间精确到某分钟。评测标签称为“有来源的记录时间”,不能抹平记录误差。
|
||||
- 本协议不改打分、阈值、产品行为或确认门。`accepted` 不等于 `confirmed`;即使未来达到指标,确认门是否开放仍须产品另行授权。
|
||||
|
||||
## 2. 候选池与来源筛查
|
||||
|
||||
### 2.1 本次核对的边界
|
||||
|
||||
2026-09-20 通过公开网络搜索,逐人核对 Astro-Databank 或其同站生日索引返回的 **Rodden Rating = AA** 与出生资料来源类别。本机对部分原文页直接读取返回校验页,因此以下状态仅为**可追溯的候选筛查**,不是出生证原件已取得、源页已归档或独立人工审阅已完成。正式入集前必须重新打开逐人原文、复核 Source Notes 并登记页面修订号/检索时间;若无法核实或等级降级,按资料不合格替换,不得把搜索摘要升级为完成证据。
|
||||
|
||||
只列人物和资料来源类型,不采集、复制或展示出生分钟、坐标和生平事件内容。`BC/BR in hand` / `Quoted BC/BR` 是来源网站的标签,不是声称本项目持有原件。事件来源目前只是允许的来源类型,尚未检索或标注。
|
||||
|
||||
| # | 公开人物 | AA 来源页与出生资料类型(候选筛查) | 后续事件来源类型(待采集) |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | Albert Einstein | [Astro-Databank](https://www.astro.com/astro-databank/Einstein,_Albert);BC/BR in hand | 诺贝尔官方、大学档案、公开传记 |
|
||||
| 2 | Marie Curie | [Astro-Databank](https://www.astro.com/astro-databank/Curie,_Marie);Quoted BC/BR,Source Notes 指向洗礼记录 | 诺贝尔官方、研究机构档案、公开传记 |
|
||||
| 3 | Emmanuel Macron | [Astro-Databank](https://www.astro.com/astro-databank/Macron,_Emmanuel);Quoted BC/BR | 政府公开档案、可靠新闻、公开传记 |
|
||||
| 4 | Marilyn Monroe | [Astro-Databank](https://www.astro.com/astro-databank/Monroe,_Marilyn);BC/BR in hand | 电影机构档案、可靠新闻、公开传记 |
|
||||
| 5 | Emma Watson | [Astro-Databank](https://www.astro.com/astro-databank/Watson,_Emma);Quoted BC/BR | 联合国公开档案、院校/电影机构记录、公开传记 |
|
||||
| 6 | George Clooney | [Astro.com 同站 AA 索引](https://www.astro.com/adbvip/adbvip_05_06.htm);BC/BR in hand | 电影学院/电影节官方、可靠新闻、公开传记 |
|
||||
| 7 | Tom Hanks | [Astro-Databank](https://www.astro.com/astro-databank/Hanks,_Tom);BC/BR in hand | 电影学院官方、可靠新闻、公开传记 |
|
||||
| 8 | Meryl Streep | [Astro.com 同站 AA 索引](https://www.astro.com/adbvip/adbvip_06_22.htm);BC/BR in hand | 电影学院官方、院校档案、公开传记 |
|
||||
| 9 | Johnny Depp | [Astro-Databank](https://www.astro.com/astro-databank/Depp,_Johnny);BC/BR in hand | 电影机构档案、可核实公开记录、可靠新闻 |
|
||||
| 10 | Leonardo DiCaprio | [Astro-Databank](https://www.astro.com/astro-databank/DiCaprio,_Leonardo);BC/BR in hand | 电影学院官方、联合国公开档案、公开传记 |
|
||||
| 11 | Albert Camus | [Astro-Databank](https://www.astro.com/astro-databank/Camus,_Albert);Quoted BC/BR | 诺贝尔官方、出版档案、公开传记 |
|
||||
| 12 | Jean-Paul Sartre | [Astro-Databank](https://www.astro.com/astro-databank/Sartre,_Jean-Paul);BC/BR in hand | 诺贝尔官方、院校/出版档案、公开传记 |
|
||||
| 13 | Simone de Beauvoir | [Astro-Databank](https://www.astro.com/astro-databank/Beauvoir,_Simone_de);BC/BR in hand | 文学奖/出版档案、院校档案、公开传记 |
|
||||
| 14 | Victor Hugo | [Astro-Databank](https://www.astro.com/astro-databank/Hugo,_Victor);BC/BR in hand | 国家图书馆/议会档案、公开传记 |
|
||||
| 15 | Marcel Proust | [Astro-Databank](https://www.astro.com/astro-databank/Proust,_Marcel);BC/BR in hand | 文学奖/出版档案、公开传记 |
|
||||
| 16 | Marion Cotillard | [Astro-Databank](https://www.astro.com/astro-databank/Cotillard,_Marion);Quoted BC/BR | 电影学院/电影节官方、可靠新闻、公开传记 |
|
||||
| 17 | Juliette Binoche | [Astro-Databank](https://www.astro.com/astro-databank/Binoche,_Juliette);Quoted BC/BR | 电影学院/电影节官方、可靠新闻、公开传记 |
|
||||
| 18 | Catherine Deneuve | [Astro-Databank](https://www.astro.com/astro-databank/Deneuve,_Catherine);Quoted BC/BR | 电影机构档案、可靠新闻、公开传记 |
|
||||
| 19 | Alain Delon | [Astro-Databank](https://www.astro.com/astro-databank/Delon,_Alain);Quoted BC/BR | 电影机构档案、可靠新闻、公开传记 |
|
||||
| 20 | Sophie Marceau | [Astro-Databank](https://www.astro.com/astro-databank/Marceau,_Sophie);Quoted BC/BR | 电影机构档案、可靠新闻、公开传记 |
|
||||
| 21 | Jean Dujardin | [Astro-Databank](https://www.astro.com/astro-databank/Dujardin,_Jean);BC/BR in hand | 电影学院/电影节官方、可靠新闻、公开传记 |
|
||||
| 22 | Zinedine Zidane | [Astro-Databank](https://www.astro.com/astro-databank/Zidane,_Zinedine);BC/BR in hand | FIFA/俱乐部官方、可靠新闻、公开传记 |
|
||||
| 23 | Kylian Mbappé | [Astro-Databank](https://www.astro.com/astro-databank/Mbapp%C3%A9,_Kylian);Quoted BC/BR | FIFA/俱乐部官方、可靠新闻、公开传记 |
|
||||
| 24 | Antoine Griezmann | [Astro-Databank](https://www.astro.com/astro-databank/Griezmann,_Antoine);Quoted BC/BR | FIFA/俱乐部官方、可靠新闻、公开传记 |
|
||||
| 25 | Serena Williams | [Astro.com 同站 AA 索引](https://www.astro.com/adbvip/adbvip_09_26.htm);Quoted BC/BR | WTA/赛事官方、可靠新闻、公开传记 |
|
||||
| 26 | Muhammad Ali | [Astro-Databank](https://www.astro.com/astro-databank/Ali,_Muhammad);BC/BR in hand | 体育机构档案、可靠新闻、公开传记 |
|
||||
|
||||
来源类别释义:[Rodden Rating](https://www.astro.com/astro-databank/Help:RR)、[Data Source](https://www.astro.com/astro-databank/Help:DataSource)。备选筛查中非 AA、无法明确核实 AA 的人物不进入此表;不能用关联人物条目的 AA 为目标人物背书。
|
||||
|
||||
### 2.2 与既有材料去重
|
||||
|
||||
基线 `5049e784` 中 v3 / v4 的人物集合相同,均为以下 20 人:Barack Obama、Angelina Jolie、Tiger Woods、Elizabeth Taylor、Elizabeth Montgomery、Pablo Picasso、Sigmund Freud、Salma Hayek、Steve Reich、Albert Brooks、Paul Ryan、Tom Kennedy、Andrew Windsor、Sean Lennon、Joseph Kennedy III、Kurt Cobain、John Robbins、Chad Everett、Bernd Eichinger、Iwao Takamoto。
|
||||
|
||||
本表 26 名候选与上述集合的**人物交集为 0**;不是只比较文件行号或 case_id。正式采集还须按姓名别名、出生来源页归一化身份,与仓库内其他已评分语料、v4 intake、已公开研究报告继续比对:**与 v3/v4 不重叠只是必要条件,不是无曝光证明**。姓名公开也不代表其事件内容可以用于调参。
|
||||
|
||||
此备选池存在明显的地区、职业、公共传记可得性偏倚。不能为凑四个领域把多次职业获奖改标成财富、迁居或家庭事件;不能把静态家庭属性塞进事件打分。每人未达到门槛时记为筛查未通过,评分前依协议扩池;不得看成绩后换人。
|
||||
|
||||
## 3. 标注协议:沿用 v4 四条,补上真正的封存
|
||||
|
||||
沿用 [holdout_v4_build_2026_09_14.md](holdout_v4_build_2026_09_14.md) 的四条约束,但**不继承 v4 的公开评价属性或人物**:
|
||||
|
||||
1. **AA 记录**:出生数据只取已复核的公开 Astro-Databank AA 记录及 Source Notes。这里的“沿用”指原样保留来源内容和精度,不是从旧集拷贝人物。来源存在冲突、舍入或日期/时区解释问题时必须留标记;无法裁决不得强选有利于打分的一项。
|
||||
2. **独立事件来源**:每人至少 7 件可核实到年月的事件、覆盖至少 4 个现有可评分领域;事件来源可为 Wikipedia、Britannica、诺贝尔/电影学院/体育机构官方、政府/大学档案等。每件至少一处可核实公开来源,且 `independent_of_birth_source=true` 只能在事件来源实际独立于出生源后置真,不能只看 URL 不同。占星网站转述和依赖出生源的循环引用不算独立事件证据。
|
||||
3. **工作日期必须核实**:工作日期用经核实的公历,精度忠实于来源。只有年份的事件不能虚填月份来凑本协议的年月门槛;冲突必须由独立复核者裁决并记录,不沿用已被否定的错年。保存最小必要的出处、检索时间、精度、领域、审阅记录,遵守转载许可,不能大段复制受版权保护原文。
|
||||
4. **三档半径写在数据集上**:保留对照档 ±10 / ±30 / ±60,不以成绩决定跑哪些档;不把“真值所在簇”预写入可评分输入。正式采集任务还须在揭晓前冻结产品申报中心档 ±15 / ±30 / ±60 / ±120、偏移列表及跨午夜规则,作为独立的申报偏差敏感性附表,不混进真值居中成绩。
|
||||
5. **封存**:**v5 建成后,在产出第一份成绩之前不得被任何人读取事件内容做调参**;第一份成绩之后同样不得用 v5 调参。采集者/审核者因工作需要可读取来源,但不能参与基于该材料的打分选择;评分/调参团队只能看到协议、接口形状与另立的开发集。任何越界曝光必须登记,相关人物降为开放诊断材料,不能继续充当未见盲测。
|
||||
|
||||
## 4. 角色隔离、封存物与一次揭晓
|
||||
|
||||
| 阶段 | 执行角色与可见内容 | 必须保留的证据 |
|
||||
| --- | --- | --- |
|
||||
| 名单筛查 | 数据采集角色;仅来源资格与既有曝光比对 | 候选/排除清单、资料理由;不得用评分优劣筛选 |
|
||||
| 事件标注 | 数据采集角色;出生来源与公开事件 | 每件来源、精度、领域、原始/裁决日期关联;不运行评分 |
|
||||
| 独立人审 | 不参与调参的另一名人工审阅者 | 真实 `fresh_biography_audit` 记录;自动化不可自置 `independent_human_reviewed=true` |
|
||||
| 冻结 | 评测保管角色 | 固定成员清单、持久分区、数据/事件/标签 SHA-256、来源审阅清单、冻结时间;访问权限与曝光日志 |
|
||||
| 评分冻结 | 评分负责人;仅开发集与协议 | 精确 commit、实现文件清单/逐文件及聚合哈希、参数、依赖/引擎版本、并列规则、指标计算和拒绝定义 |
|
||||
| 单次完整运行 | 隔离评测运行器 | ranker 输入中无真值标签;所有候选完成排名并持久化结果后才能关联标签;运行日志、退出码与输出哈希 |
|
||||
| 揭晓与审阅 | 评测保管角色 + 独立审核者 | 首次全量报告、全部失败/无效项、阈值对照、执行环境与重试台账;不得只展示最佳档 |
|
||||
|
||||
建议将未揭晓事件/标签包保存在独立受控存储,不提交到评分开发者可随手读取的工作树;仓库先只保存协议、匿名 manifest 与哈希。谁能读事件、谁能改评分必须分别登记。名单已公开、预训练语料可能包含名人生平等剩余污染风险必须写进报告,不能把访问隔离说成绝对无污染。
|
||||
|
||||
- 原始标签与候选排名分离;不得在并列时按接近真值挑选。沿用已冻结的 `_opaque_winner` 式不依赖真值的哈希打破规则。
|
||||
- 引擎口径拟固定 `ayanamsa=raman`、`node_mode=mean`;精确分钟排名使用 1 分钟候选步长。若需要与旧 2 分钟研究比较,另列预注册附表,不能合并分母或借用旧成绩。
|
||||
- 同一人全部事件只属于一个固定分区,不能通过换 case_id、加事件、修改旧标注来洗成新盲测。
|
||||
- 在首次运行前原样登记五项发布阈值和计算定义(top-1、top-3、MAE、误确认率、信息不足正确拒绝率),同时报告区间覆盖、确认覆盖率、真值在候选集中的比例与分母。信息不足子集及拒绝对照必须在揭晓前指定,不能从失败案例反向挑选。
|
||||
- `validator` 不通过的人物在评分前排除且列明理由。运行错误不应静默剔除;若是基础设施失败,保留原失败记录并只允许同一冻结实现/数据重跑。若源数据揭晓后发现错误,旧报告标无效/受影响,不删除历史,更不得把修订后的已见案例重新标成从未曝光。
|
||||
- BUG-098 要求的稳定分区与校准证据在此具体化为冻结 manifest、访问/曝光日志和独立验收;尚未有这些产物时,不得声称 v5 已建成。现存人审校验规则不能代替这些实际产物。
|
||||
|
||||
## 5. 工作量估算与完成门
|
||||
|
||||
以下是人工工时估算,不是已经投入的工时。按最终 25 人、每人至少 7 件事件,即至少 **175 件**、每件至少一处可核实公开来源计算;网络读取、资料不足与来源冲突可能使工作量上浮。
|
||||
|
||||
| 工作 | 估算依据 | 人工小时 |
|
||||
| --- | --- | ---: |
|
||||
| AA 原文复核、别名/历史曝光核对及补候选 | 25 人及少量替补的筛查 | 12–24 |
|
||||
| 事件检索与首轮标注 | 175 件 × 15–30 分钟 | 44–88 |
|
||||
| 独立复核与日期/领域冲突裁决 | 175 件 × 约 7.5–15 分钟 | 22–44 |
|
||||
| 封存、权限分离、manifest、试运行接口校验和交接 | 不接触评分结果的工程与审阅 | 8–16 |
|
||||
| **合计** | 取整;是人时,不是单人日历工期 | **约 86–172** |
|
||||
|
||||
该区间不含新算法开发、不含真实用户招募,也不保证首次备选池全部有四领域资料。资料不足时应扩池或延期,而不是放松独立来源、年月精度、领域或封存标准。正式采集任务须先指定两位独立人工角色及存储访问方案;无人审资源就保持 `blocked`。
|
||||
|
||||
完成门(必须全部有证据):
|
||||
|
||||
- [ ] 足量新人物通过 AA 原文、身份去重与历史曝光审计。
|
||||
- [ ] 每例事件数/年月精度/领域数达标,逐件独立来源核实,无拼造精度或强改领域。
|
||||
- [ ] 双人采集/复核职责真实独立,来源纠错保留前后关联。
|
||||
- [ ] 封存 manifest、持久分区、内容哈希和访问日志齐备;评分团队未读事件调参。
|
||||
- [ ] 打分实现、参数、半径/偏移、步长、并列规则和五项指标定义在揭晓前固定。
|
||||
- [ ] 首次全量运行与独立结果审阅完成,失败与限制不删;不自动打开确认门。
|
||||
|
||||
## 6. 遗留与对外边界
|
||||
|
||||
1. **真实用户申报偏差分布仍缺失**:需要知情授权、受控账号及独立出生记录的真实用户样本。用户采用候选、满意或认为“说得准”不能当真值;模拟名人偏移也不能替代该分布。后续另立隐私、抽样与标注任务,只发布聚合统计。
|
||||
2. **本轮未取得事件材料与人审资源**:本文件只有公开候选来源筛查。AA 原文归档、四领域/年月事件可得性、独立审阅与评分冻结都是未来采集任务的开工/交付条件,不在此冒写已完成。
|
||||
3. **来源网络限制**:原文直读返回校验页时,采用公开检索作备选资格线索;不绕过访问控制,不将线索当最终出生源审计。正式采集无法复核就阻塞该人物,不降级纳入。
|
||||
4. **数据集外推限制**:公开名人的资料密度、年龄、地区与事件报道方式不同于真实会话。即使 v5 通过,也只证明登记条件下的结果,不能推广到所有用户、更不能承诺唯一出生分钟。
|
||||
5. 本轮不再研究“加权重就能分开候选”或“簇合并导致整窗”这两条已被证伪的方向;见 [两轮结论页](rectification_minute_resolution_closure_2026_09_14.md) §6。始终先核口径,再看真值覆盖,不能以收窄区间换取挤出真值。
|
||||
|
||||
## Sources
|
||||
|
||||
- 人物资格线索:§2 表内 26 个 Astro-Databank / Astro.com 原站链接(检索日期 2026-09-20;最终原文/人审复核尚未完成)。
|
||||
- 来源分级:[Astro-Databank Rodden Rating](https://www.astro.com/astro-databank/Help:RR)、[Data Source](https://www.astro.com/astro-databank/Help:DataSource)。
|
||||
- 仓库协议依据:[v4 构建协议](holdout_v4_build_2026_09_14.md)、[两轮研究结论](rectification_minute_resolution_closure_2026_09_14.md)、[BUG-098 / BUG-428](../BUG_HISTORY.md)。
|
||||
@@ -0,0 +1,73 @@
|
||||
# PROGRESS · 生时校正验证体系补缺(2026-09-20)
|
||||
|
||||
## 基线与边界
|
||||
|
||||
- 执行基线:远端 `origin/staging = 5049e7847`,任务书基线 `fcad0637` 的后代。主检出保留原分支与未跟踪文件。
|
||||
- 工作树:`.worktrees/rectification-validation-20260920`;分支:`codex/rectification-validation-20260920`。
|
||||
- 一次性测试基线:`.worktrees/rectification-validation-baseline-20260920`(detached `5049e7847`)。
|
||||
- 仅离线评测、契约元数据与记录,不修改打分实现、生产行为、确认门,不提升 main、不改 workflow、不改 DNS。
|
||||
- 编号核对:开工 Bug 历史最大号 975;另一任务预留 976/977,本单使用 978–980。
|
||||
|
||||
## 决策与任务书偏离
|
||||
|
||||
完整核查 `BUG-098`、`BUG-318`、`BUG-427`、`BUG-428`。后两条明确规定已曝光案例不得重新算作独立盲测;任务书 T2 的“首次口径干净的官方盲测”没有在决策记录里授权推翻该红线。因此本轮只做**冻结当前实现的固定口径重跑**,不伪称新独立盲测,不提升官方盲测次数,不改发布六键和确认门。真正的独立验证仍需 T3 所定义的未来 v5;这一部分保持 blocked。
|
||||
|
||||
契约刷新需要相应更新旧测试中“当前实现必须等于历史 sidecar”的元数据断言;所有行为断言保留,原值/新值/原因在完成后逐项记录。
|
||||
|
||||
## 环境与基线实测
|
||||
|
||||
本机无项目 `.venv`;使用 `python`(Python 3.11.7,已有 pytest/swisseph)。`python3` launcher 退出 49。mcp / hypothesis 未安装;不顺带升级依赖。前端复用已安装 node_modules,工作树仅新增未跟踪依赖 junction,不纳入交付。
|
||||
|
||||
| 检查 | 基线结果 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `pre_work_check.py --remote-timeout 8 --command-timeout 45` | fail | 远端 verified;碎片扫描、适配器检查成功;focused tests 23 pass / 1 fail,镜像路径断言,已见于既有错误台账 |
|
||||
| Python 定向 3 文件 | 21 pass / 1 fail | `test_minute_rectification_holdout_validator.py::test_frozen_implementation_hash_matches_manifest` 针对历史 v2 封存哈希失败,不改历史封存值 |
|
||||
| 前端 `rectification-confirmation-gate.test.ts` | 7 pass / 0 fail | 后续按相同测试逐项比对 |
|
||||
| Python quick | fail | 两侧均在 `interpretation_source_inventory_gate.py` 因缺 mcp 退出 1;46 条缺引用消息逐项相同 |
|
||||
| 前端 tsc | 0 error | 基线与修改版均退出 0 |
|
||||
| 前端 lint | 0 error / 120 warning | 基线与修改版相同,不顺带改 warning |
|
||||
| 前端 npm test(默认并发) | 基线 3470 / 3387 pass / 83 fail | 修改版 3486 / 3409 pass / 77 fail;修改版失败标题为基线子集,0 新增失败;存在文件级环境/资源失败,另做串行补验 |
|
||||
| 前端 build | fail | 两侧均为 Turbopack 拒绝指向工作树外的 node_modules junction;Static/gzip 环境缺口,未宣称通过 |
|
||||
|
||||
基线/当前前端确认门定向均为 7/7,通过项逐条相同。默认并发全量的通过数量差异不是新增业务测试,只是部分文件级中断减少;不能宣称全部前端测试通过。两侧串行补验在数据库容器等待等长时阶段未产出最终汇总,主动停止,标记未完成而不是通过。完整失败标题对照已保存 `docs/testing/rectification-validation-20260920-results.json`(83 对 77,新增失败 0)。
|
||||
|
||||
额外 Python 安全定向:`test_rectification_confirmation_and.py`、`test_rectification_v5_vedastro_validation.py`、`test_repo_privacy_markers.py` 共 **85 passed**。补验清单见 `docs/testing/rectification-validation-20260920.md`。
|
||||
|
||||
## 独立验收与复核发现
|
||||
|
||||
- 字节级核对:12 个 `frozen_scoring.files` 全部与基线相同;确认门六个 runtime 键值及类型相同;生产 `decision_policy.py` / `sealed_holdout.py`、历史 `_candidate_moments()` 所在文件、`request_from_case()` 所在文件、主 API 与全部 `frontend/src` 均未改。
|
||||
- 任务书引用的 `frontend/src/app/page.tsx` 在执行基线已不存在(首页已迁移),因此用整个 `frontend/src` 字节对照证明无新增,不虚报旧路径行数。
|
||||
- 独立审查发现首版 T1 只在候选枚举保留跨日日期,矩阵下游的 transition proximity 仍使用统一日期,跨日候选得分有偏差。修复限定在离线组装层:按候选日期分组计算矩阵并回并;不改生产打分文件。首版统计不能作最终证据,须修复后重跑并补真实引擎回归。
|
||||
- 中途代理 API 余额错误导致执行和审查中断,用户要求继续后恢复;不把中断当任务完成。一次报告重定向被分类器按覆盖操作拒绝,经确认目标不存在后改为不覆盖的新建获准;另有子代理角色限制要求返回文档文本,由主会话汇总,不修改权限配置。
|
||||
|
||||
## 执行状态
|
||||
|
||||
- T1:修正版完整 900 组合已完成(20 例 × 15 偏移 × 3 半径,排除 0),JSON 与汇总表落盘。默认半径 ±15 在绝对偏移第 16 个整数分钟开始出窗;±30/60/120 对已测偏移几何包含率可恢复 100%,其中 ±120 仅几何推论、未评分。实际交付覆盖与唯一头名命中另列,不混称准确率。口径 v3、raman/mean、1 分钟、历史打分哈希 `b15d9ea15227cd58`;原生评分扩展哈希 `115c3fbcffdaff49`、研究适配哈希 `8d0c613dc0900adb`。
|
||||
- T2:当前实现冻结、20 例固定口径重跑、契约刷新与防复发测试完成;实现代理和独立审查均复算逐例/汇总一致。top-1/top-3(含并列)0.45/0.50、MAE 6.45 分钟,三项未达门槛;误确认率 0、稀疏证据拒绝率 1,确认覆盖 0。独立盲测资格仍 blocked,官方有效试次仍 0;不是新的发布成绩。哈希前缀 `b15d9ea15227cd58`、v3、raman/mean、±10、1 分钟。
|
||||
- T3:协议已完成。26 名公开 AA 来源候选,与 v3/v4 的 20 人交集为 0;未采事件、未完成人审、未建成 v5。来源直接访问有校验页限制,只算候选筛查,正式准入须复核 Source Notes。工时估算 86–172 人时。
|
||||
- T4:Bug 历史、BLOCKED、研究索引、任务索引、失败对照和补验清单已更新;2026-09-20 产品明确授权 push staging,本批进入交付。远端推送与部署分别核验,不把授权当完成。
|
||||
|
||||
## 最终验收结果
|
||||
|
||||
| 条目 | 结论 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| T1 全量偏差评测、四项逐例输出、跨日修正、隐私字段 | 通过 | 900 组合、45 格,参数及评分/研究哈希齐全;汇总从逐例重算一致 |
|
||||
| T2 当前实现冻结、重跑归属、契约新鲜度 | 通过 | 独立复算完整报告一致;新鲜度与拒绝漂移测试通过 |
|
||||
| T2 新的独立官方盲测 | 未通过 / 资料条件缺口 | 已曝光样本不恢复独立性,官方试次保持 0;任务书措辞不覆盖 BUG-427/428 红线 |
|
||||
| T2 指定相关 Python 总集 | 49 passed / 1 failed | 唯一失败是基线同现的历史 v2 哈希断言,错误哈希两侧逐字一致;未削弱断言 |
|
||||
| 新增 T1 / T2 与 quick 桥接 | 28 passed | 含桥接重复收集的 14 项,不能算 28 项独立用例 |
|
||||
| 确认门与隐私补充 | 通过 | Python 85 passed;前端确认门 7/7 与基线逐项相同;runtime 六键未变 |
|
||||
| tsc / lint | 通过 | 两侧 0 error,lint 120 warning 相同 |
|
||||
| quick / 全量前端 / 构建 | 环境及既有失败缺口 | 见上述基线对照;不可写全绿、Static 或 gzip 通过 |
|
||||
| T3 v5 协议 | 通过(仅协议) | 26 人来源筛查、旧集交集 0、无出生分钟/坐标;v5 未建成,BUG-980 investigating |
|
||||
|
||||
## 既有断言调整三栏
|
||||
|
||||
| 原值 | 新值 | 原因 |
|
||||
| --- | --- | --- |
|
||||
| Python 与前端 `current_tree_scorer.implementation_sha256` 绑定历史 post-audit sidecar | 绑定当前冻结重跑的 `frozen_record.implementation_sha256` | 元数据含义是当前树;继续绑旧报告强制过期。新增 freshness 同时验证当前源码,未削弱身份校验 |
|
||||
| 官方 flag=false / trial_count=0、六 runtime 键、确认行为 | 原值不变 | 已曝光重跑不获得独立性;新增断言固定此边界 |
|
||||
|
||||
## 交付说明
|
||||
|
||||
2026-09-20 产品明确要求「push 到 staging」。交付前 fetch 确认远端仍为 `5049e784`,本轮无上游冲突,BUG-978~980 无新增占用;本批实现与记录同次提交交付。推送后另以远端 SHA 核对结果为准;状态板“已合入”仅在远端核对后生效,不代表门禁或部署成功。本批含门禁路径,将触发自动质量门;本机完整 quick/构建缺口仍保留。没有动 main、workflow、DNS、生产资料、依赖和打分参数。
|
||||
@@ -290,7 +290,7 @@
|
||||
| — (产品口头拍板,无任务书) | `PROGRESS-settings-ui-20260919.md` | **设置面板布局与资料入口整理**:基线 `4f4cd684`;四分区继续共用固定 `.settings-modal`,桌面导航 176px→200px 并加分隔,内容区增加内边距,表单 cap 440px→560px,导航移除误导性右箭头;账户头像 48px→56px;“添加其他人”移到分组标题操作区。已同步 `frontend/DESIGN.md` 与合同测试;tsc 0、lint 0 error、定向测试 21/21;build 被 Windows Skill runtime symlink 权限阻塞,浏览器走查待受控环境;BUG-970 保持 `investigating` | 待验收 | `codex/settings-ui-20260919` |
|
||||
| `TASK-owner-case-purge-20260919.md` | `PROGRESS-owner-case-purge-20260919.md` | **上游库主案例与本机路径残留清除(只含本仓)**:镜像同步带进库主本人案例(敏感案例标识与本机路径)并被 `origin/staging` 命中,涉及无引用的 `versions/` 三快照、前端 fixture、Python 测试、整机扫描台账、会话转录及上游 SKILL 快照。运行时无特判不用动。产品拍板整体删除不留匿名版;fixture 统一虚构常量;`import_yinduzhanxing.py` 加隐私排除项 + 新增仓库级隐私守卫测试;上游 SKILL 快照等库主清完再重导入(BLOCKED 记录)。上游仓的清理指令另见 `UPSTREAM-INSTRUCTION-owner-case-purge-20260919.md`(交给库主,不在本仓执行)。BUG-972/973 | **已验收通过(2026-09-20,`497798ac`);未合入 staging,等产品放行** | 两轮:首轮未通过(1 个隐私守卫冲突:新增路径规则与答案键守卫冲突,该守卫在快速门 glob 内,合入会让门禁红)→ 修复单 `TASK-owner-case-purge-fix2-20260919.md` → `497798ac` 通过。Claude 在 Linux 全依赖环境独立复验:快速门 Python 步 859 passed / 0 failed(上一轮就是这步红),Python 全量 63 红与基线逐条相同、0 新红,收集数与删除清单已记录;tsc 0 / lint 0 error、120 warning 同基线 / `npm test` 失败清单为基线子集(少 1 条工作流 YAML,非回归)/ `○ /` Static、首屏 gzip 与基线字节相同(前端自首轮提交起零改动)。上游指令文件已逐字节还原为基线原文;12 个已删测试名与计数已落进度记录;BLOCKED 两条已划掉。校正 Skill 哈希包、注册表、上游快照、`frontend/src`、主 API 全程 0 改动;库主本机用户名 0 命中。遗留 P3:进度记录和 BUG 状态文字待后续对账修正 |
|
||||
| `TASK-consult-smalltalk-fastpath-20260920.md` | — | **普通对话寒暄轮快速通道**:真机一句「你好」触发完整窗口排盘(活动面板「已完成 4 步」)+ `## 先回答你的问题` + 400 字判词 + 扣 1 点。三层叠加:`index.ts` 两处「every turn 必调排盘」(BUG-922)与 `contractReady()` 的 `requireTool` 把排盘变成硬合同;`product-voice.ts` OPENER SHAPE 标「三种模式共用」;唯一的 chit-chat 豁免句只在 `natalSpokenReportContract` 里、只拼进本命 Agent(BUG-977)。计费侧「写回复」与「扣点」绑在 `complete_consultation_response` 同一次调用,`cancel` 只退款不写消息,所以今天没有「不扣点但保留对话」的通道。**产品拍板 a:不扣点、不排盘、回一句白话**;**分流不得用正则/关键词/长度阈值**,改为进 Agent 之前一次极短的结构化模型调用(复用本轮已选模型),fail-open 一律落回完整路径;BUG-922/923 的三处合同一个字不改;新增 `complete_consultation_free` 迁移。BUG-976/977 | 待领取 | — |
|
||||
| `TASK-rectification-validation-integrity-20260920.md` | — | **生时校正验证体系补缺(纯离线评测,不改打分不改产品)**:会议要求把「推断真实出生时间」与「用户认可的参考盘」分开证明。核对结论——**产品口径侧四条已落地**(`accepted`≠`confirmed` 两条写入路径、确认门 fail-closed 且 `holdout` 为 `not_ready` 使 `confirmation_allowed` 不可能为真、采用不写 `reported_birth_time`、无任何把采用率当准确率的指标;运行时也无按生日走捷径的分支);**缺口全在评测本身**。三条:① 封存契约 `rectification_sealed_holdout.v1.json` 的三个打分哈希互不相同(封存 `f41c298d` / 契约记录 `99730c84` / 基线实测 `b15d9ea1`),`official_eval_trial_count: 0`——当前实现**从未产出过一次有效官方盲测**,唯一跑过那次已被资料审计作废(top-1 `0.15`,发布门要 `0.60`),可见的 `0.45` 自带「不得当发布指标」标记(BUG-978);② 全部离线评测的候选窗**以真值为圆心**(`_candidate_moments()`、`request_from_case()` 的 `true_time`),生产以申报时间为圆心(`ENGINE_SEARCH_RADIUS_MINUTES = 15`)——「真值掉出窗外」这一失败模式从不可见(BUG-979);③ v3 封存但每例仅 3 事件、v4 有 7+ 事件却已被看过并用于调参,**无口径干净又贴近真实会话的封存集**;六题回放的 `0.80/0.55/0.35` 是「真值方向最优答」的上帝视角上界,±30/±60 仍低于发布门(BUG-980)。T1 申报偏差敏感性 sweep、T2 有效重跑 + 契约对齐 + **防复发新测试**、T3 只出 v5 采集协议、T4 记录。**硬红线:不得改 12 个打分文件、不得用封存集调参、不得把 `status` 改 `ready`。** 家庭信息(父母职业/兄弟姐妹)在拿到基线数字前不开工——现有七领域全是带日期事件,静态属性没有输入口。前置:owner-case-purge 三提交仍未合入 staging。BUG-978~980 | 待领取 | — |
|
||||
| `TASK-rectification-validation-integrity-20260920.md` | `PROGRESS-rectification-validation-20260920.md` | **生时校正验证体系补缺(纯离线评测,不改打分不改产品)**:会议要求把「推断真实出生时间」与「用户认可的参考盘」分开证明。核对结论——**产品口径侧四条已落地**(`accepted`≠`confirmed` 两条写入路径、确认门 fail-closed 且 `holdout` 为 `not_ready` 使 `confirmation_allowed` 不可能为真、采用不写 `reported_birth_time`、无任何把采用率当准确率的指标;运行时也无按生日走捷径的分支);**缺口全在评测本身**。三条:① 封存契约 `rectification_sealed_holdout.v1.json` 的三个打分哈希互不相同(封存 `f41c298d` / 契约记录 `99730c84` / 基线实测 `b15d9ea1`),`official_eval_trial_count: 0`——当前实现**从未产出过一次有效官方盲测**,唯一跑过那次已被资料审计作废(top-1 `0.15`,发布门要 `0.60`),可见的 `0.45` 自带「不得当发布指标」标记(BUG-978);② 全部离线评测的候选窗**以真值为圆心**(`_candidate_moments()`、`request_from_case()` 的 `true_time`),生产以申报时间为圆心(`ENGINE_SEARCH_RADIUS_MINUTES = 15`)——「真值掉出窗外」这一失败模式从不可见(BUG-979);③ v3 封存但每例仅 3 事件、v4 有 7+ 事件却已被看过并用于调参,**无口径干净又贴近真实会话的封存集**;六题回放的 `0.80/0.55/0.35` 是「真值方向最优答」的上帝视角上界,±30/±60 仍低于发布门(BUG-980)。T1 申报偏差敏感性 sweep、T2 有效重跑 + 契约对齐 + **防复发新测试**、T3 只出 v5 采集协议、T4 记录。**硬红线:不得改 12 个打分文件、不得用封存集调参、不得把 `status` 改 `ready`。** 家庭信息(父母职业/兄弟姐妹)在拿到基线数字前不开工——现有七领域全是带日期事件,静态属性没有输入口。前置:owner-case-purge 三提交仍未合入 staging。BUG-978~980 | 已合入(本批远端 SHA 核对后生效);独立盲测仍 blocked,门禁/部署待核验 | `codex/rectification-validation-20260920`;900 组合、当前冻结重跑、v5 协议完成;新增/桥接 28 pass,相关总集49 pass/1基线失败,确认门不变;2026-09-20 产品授权 push staging,同批交付,详见进度 |
|
||||
|
||||
## 命名与归档
|
||||
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
{
|
||||
"baseline_commit": "5049e7847",
|
||||
"scope": "frontend_default_parallel_npm_test",
|
||||
"counts": {
|
||||
"baseline": {
|
||||
"tests": 3470,
|
||||
"pass": 3387,
|
||||
"fail": 83,
|
||||
"skipped": 0
|
||||
},
|
||||
"current": {
|
||||
"tests": 3486,
|
||||
"pass": 3409,
|
||||
"fail": 77,
|
||||
"skipped": 0
|
||||
}
|
||||
},
|
||||
"failure_titles": {
|
||||
"baseline": [
|
||||
"Better Auth supports shared user OTP/password sessions for admins",
|
||||
"Owner recovery grants only one currently loginable synced identity admin",
|
||||
"PR-4 candidate decisions use server UUIDs, receipt-derived gates and separate acceptance/confirmation",
|
||||
"a multi-domain plan carries every executed route's checklist once",
|
||||
"a route the skill declares no checklist for is reported, not filled in with another route's",
|
||||
"admin code functions reject immutable codes, revoked redemption, and roll back on audit failure",
|
||||
"admin customer reset clears only rebuildable application state",
|
||||
"append_consultation_question ignores thinking fields and enforces the physical JSON cap",
|
||||
"billing order adjustments and redemption reasons are atomic and audited",
|
||||
"billing, subscriptions, usage authorization, RBAC, and model publication remain transactional",
|
||||
"block_scan RPCs are service_role-only and advance a declared period",
|
||||
"candidate scores stay out of the specified client ownership boundary",
|
||||
"changed staging workflows are syntactically valid YAML",
|
||||
"checked-in registry verifies hashed product packages and leaves consult on the live skill",
|
||||
"creates every absent backup path component privately despite a permissive caller umask",
|
||||
"database drops secret refs, generates immutable codes, and invalidates evidence after key rotation",
|
||||
"database env validator accepts a private valid file without printing values",
|
||||
"database env validator accepts punctuated literal required secrets",
|
||||
"database env validator enforces an explicit staging owner uid without printing values",
|
||||
"database env validator rejects symlinks and unsafe modes",
|
||||
"document v2 and durable job migrations are exact db/supabase mirrors",
|
||||
"document v2 migration preserves v1 reads and adds explicit product depth",
|
||||
"durable job migration atomically enqueues reports and exposes lease RPCs only to service_role",
|
||||
"durable job migration defines the complete state, lease, retry, and identity contract",
|
||||
"every color token used as a Tailwind utility is exposed through @theme",
|
||||
"find enumeration failures preserve existing backups and do not report completion",
|
||||
"first immutable deployment rolls back to validated local image IDs",
|
||||
"further reading offers the references the skill names, and only ones that exist",
|
||||
"general agent runtime has no Jyotish skill package and no personal chart tool",
|
||||
"health uses the skill's health-timing-strict checklist",
|
||||
"immutable Skill migration enforces RPC-only identity, legacy adoption, and cascade-safe receipts",
|
||||
"ingest P0: education kinds, batch confirm, opening focus reuse, precision lock",
|
||||
"is-docs-only-range.sh decides from local history and refuses non-ancestor ranges",
|
||||
"job migration mirror is exact and preserves personal_reports as the document projection",
|
||||
"live consult skill reads a hand-updated tree without a registry hash",
|
||||
"live staging sync preserves env, state, incoming files, and encrypted backups",
|
||||
"live staging sync repairs nested deploy-tree drift without preserving foreign ownership",
|
||||
"local PostgreSQL applies the reviewed business schema and serves authenticated business calls",
|
||||
"longform appendices are owner-read, service-written, and never change report status",
|
||||
"no plan can spend the answer's context on method",
|
||||
"operation-level admin email reauthentication is removed from routes and UI",
|
||||
"path traversal and symlink escape fail closed",
|
||||
"personal Agent exposes the Jyotish Skill and named server tool",
|
||||
"personal report job migration is atomic, lease-bound, recoverable, and owner read-only",
|
||||
"personal report sections enforce owner-read RLS and service-owned durable transitions",
|
||||
"personal_reports.card_summary is nullable, owner-read, service-written, and length-capped",
|
||||
"production env validators accept only self-hosted production selectors and role URLs",
|
||||
"public code never imports the internal dynamic choice contract",
|
||||
"read_report_candidate_range is service_role-only, returns only the window, and stays empty without rows",
|
||||
"rectification agent maps setup failures without calling the rest of the handler",
|
||||
"redeem security: case-sensitive hashing, rate limiting, idempotency and order ownership",
|
||||
"refuses full disks and removes a failed-pipeline partial file",
|
||||
"rejects a direct canonical sticky shared backup directory before chmod",
|
||||
"rejects destructive backup directory aliases and symlink components before mutation",
|
||||
"rejects unsafe writable backup parents before creating the target",
|
||||
"same-second backups publish once without overwriting the completed archive",
|
||||
"saving a published product forks a draft and delete retires or removes it",
|
||||
"self-hosted identity migration creates Better Auth tables with least privilege",
|
||||
"service and restricted admin database identities stay separated",
|
||||
"staging backups are encrypted, atomic, private, and retain the newest three",
|
||||
"staging env validator rejects selector drift, duplicates, and unsafe permissions",
|
||||
"staging model provider env preparation removes legacy settings and keeps one stable key",
|
||||
"symbolic links are rejected even when their target stays inside the project root",
|
||||
"tests\\\\birth-time-guide-agent.test.ts",
|
||||
"tests\\\\consultation-workflow-request.test.ts",
|
||||
"tests\\\\rectification-confirmation-gate.test.ts",
|
||||
"tests\\\\rectification-settled-render-split.test.ts",
|
||||
"tests\\\\rectification-skipped-health-deadend-20260909.test.ts",
|
||||
"tests\\\\rectification-split-holdout.test.ts",
|
||||
"tests\\\\rectification-spoken-prompt.test.ts",
|
||||
"tests\\\\rectification-v9-agent.test.ts",
|
||||
"tests\\\\skill-binding.test.ts",
|
||||
"the delivered method is quoted from the live skill tree",
|
||||
"the route's own strict checklist reaches the answer, not just the package listing",
|
||||
"the widest legal plan still fits the budget",
|
||||
"v9 agent api migration applies, seeds the runtime flag and guards consent",
|
||||
"v9 enforces profile gating, ownership and terminal read-only",
|
||||
"v9 evidence lifecycle: quote grounding, idempotency, confirm and revision lineage",
|
||||
"v9 ignores a historical active minute and allows reselection within the live result",
|
||||
"v9 legacy backfill maps statuses, keeps one resumable per user and is idempotent",
|
||||
"v9 migration applies on a fresh database and re-applies idempotently",
|
||||
"v9 open is atomic, idempotent and allows separate homepage cases",
|
||||
"wealth uses finance-timing-strict as the live checklist, with the wealth alias in the heading"
|
||||
],
|
||||
"current": [
|
||||
"Better Auth supports shared user OTP/password sessions for admins",
|
||||
"Owner recovery grants only one currently loginable synced identity admin",
|
||||
"PR-4 candidate decisions use server UUIDs, receipt-derived gates and separate acceptance/confirmation",
|
||||
"a multi-domain plan carries every executed route's checklist once",
|
||||
"a route the skill declares no checklist for is reported, not filled in with another route's",
|
||||
"admin code functions reject immutable codes, revoked redemption, and roll back on audit failure",
|
||||
"admin customer reset clears only rebuildable application state",
|
||||
"append_consultation_question ignores thinking fields and enforces the physical JSON cap",
|
||||
"billing order adjustments and redemption reasons are atomic and audited",
|
||||
"billing, subscriptions, usage authorization, RBAC, and model publication remain transactional",
|
||||
"block_scan RPCs are service_role-only and advance a declared period",
|
||||
"candidate scores stay out of the specified client ownership boundary",
|
||||
"changed staging workflows are syntactically valid YAML",
|
||||
"checked-in registry verifies hashed product packages and leaves consult on the live skill",
|
||||
"creates every absent backup path component privately despite a permissive caller umask",
|
||||
"database env validator accepts a private valid file without printing values",
|
||||
"database env validator accepts punctuated literal required secrets",
|
||||
"database env validator enforces an explicit staging owner uid without printing values",
|
||||
"database env validator rejects symlinks and unsafe modes",
|
||||
"document v2 and durable job migrations are exact db/supabase mirrors",
|
||||
"document v2 migration preserves v1 reads and adds explicit product depth",
|
||||
"durable job migration atomically enqueues reports and exposes lease RPCs only to service_role",
|
||||
"durable job migration defines the complete state, lease, retry, and identity contract",
|
||||
"every color token used as a Tailwind utility is exposed through @theme",
|
||||
"find enumeration failures preserve existing backups and do not report completion",
|
||||
"first immutable deployment rolls back to validated local image IDs",
|
||||
"further reading offers the references the skill names, and only ones that exist",
|
||||
"general agent runtime has no Jyotish skill package and no personal chart tool",
|
||||
"health uses the skill's health-timing-strict checklist",
|
||||
"immutable Skill migration enforces RPC-only identity, legacy adoption, and cascade-safe receipts",
|
||||
"ingest P0: education kinds, batch confirm, opening focus reuse, precision lock",
|
||||
"is-docs-only-range.sh decides from local history and refuses non-ancestor ranges",
|
||||
"job migration mirror is exact and preserves personal_reports as the document projection",
|
||||
"live consult skill reads a hand-updated tree without a registry hash",
|
||||
"live staging sync preserves env, state, incoming files, and encrypted backups",
|
||||
"live staging sync repairs nested deploy-tree drift without preserving foreign ownership",
|
||||
"local PostgreSQL applies the reviewed business schema and serves authenticated business calls",
|
||||
"longform appendices are owner-read, service-written, and never change report status",
|
||||
"no plan can spend the answer's context on method",
|
||||
"operation-level admin email reauthentication is removed from routes and UI",
|
||||
"path traversal and symlink escape fail closed",
|
||||
"personal Agent exposes the Jyotish Skill and named server tool",
|
||||
"personal report job migration is atomic, lease-bound, recoverable, and owner read-only",
|
||||
"personal report sections enforce owner-read RLS and service-owned durable transitions",
|
||||
"personal_reports.card_summary is nullable, owner-read, service-written, and length-capped",
|
||||
"production env validators accept only self-hosted production selectors and role URLs",
|
||||
"public code never imports the internal dynamic choice contract",
|
||||
"read_report_candidate_range is service_role-only, returns only the window, and stays empty without rows",
|
||||
"rectification agent maps setup failures without calling the rest of the handler",
|
||||
"redeem security: case-sensitive hashing, rate limiting, idempotency and order ownership",
|
||||
"refuses full disks and removes a failed-pipeline partial file",
|
||||
"rejects a direct canonical sticky shared backup directory before chmod",
|
||||
"rejects destructive backup directory aliases and symlink components before mutation",
|
||||
"rejects unsafe writable backup parents before creating the target",
|
||||
"same-second backups publish once without overwriting the completed archive",
|
||||
"saving a published product forks a draft and delete retires or removes it",
|
||||
"self-hosted identity migration creates Better Auth tables with least privilege",
|
||||
"service and restricted admin database identities stay separated",
|
||||
"staging backups are encrypted, atomic, private, and retain the newest three",
|
||||
"staging env validator rejects selector drift, duplicates, and unsafe permissions",
|
||||
"staging model provider env preparation removes legacy settings and keeps one stable key",
|
||||
"symbolic links are rejected even when their target stays inside the project root",
|
||||
"tests\\\\birth-time-guide-agent.test.ts",
|
||||
"tests\\\\consultation-workflow-request.test.ts",
|
||||
"tests\\\\rectification-v9-agent.test.ts",
|
||||
"tests\\\\skill-binding.test.ts",
|
||||
"the delivered method is quoted from the live skill tree",
|
||||
"the route's own strict checklist reaches the answer, not just the package listing",
|
||||
"the widest legal plan still fits the budget",
|
||||
"v9 agent api migration applies, seeds the runtime flag and guards consent",
|
||||
"v9 enforces profile gating, ownership and terminal read-only",
|
||||
"v9 evidence lifecycle: quote grounding, idempotency, confirm and revision lineage",
|
||||
"v9 ignores a historical active minute and allows reselection within the live result",
|
||||
"v9 legacy backfill maps statuses, keeps one resumable per user and is idempotent",
|
||||
"v9 migration applies on a fresh database and re-applies idempotently",
|
||||
"v9 open is atomic, idempotent and allows separate homepage cases",
|
||||
"wealth uses finance-timing-strict as the live checklist, with the wealth alias in the heading"
|
||||
]
|
||||
},
|
||||
"new_failures": [],
|
||||
"not_claiming_full_pass": true,
|
||||
"serial_followup": "stopped_without_final_summary_while_database_fixture_waited",
|
||||
"build_both": "Turbopack rejects external node_modules junction",
|
||||
"tsc_both_exit_code": 0,
|
||||
"lint_both": {
|
||||
"errors": 0,
|
||||
"warnings": 120
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
# 生时校正验证补缺 · 补验清单(2026-09-20)
|
||||
|
||||
本轮无产品/界面/数据库行为改动。不要让用户提供私人出生资料以补本轮验收;偏移评测使用已登记公开数据。
|
||||
|
||||
## 在完整依赖的 Linux 环境补验
|
||||
|
||||
1. 用本轮提交创建干净工作树,安装仓库锁定依赖,不借用其他账号/凭据。
|
||||
2. 运行 `python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`。本机已知基线碎片镜像断言失败,不能以远端 verified 代替预检通过。
|
||||
3. 运行 `python -m pytest tests/test_reported_offset_research.py tests/test_sealed_holdout_contract_freshness.py tests/test_rectification_validation_integrity_gate.py tests/test_rectification_confirmation_and.py tests/test_minute_rectification_holdout_validator.py tests/test_minute_rectification_fact_blind_eval_v4.py -q`。旧 v2 封存哈希测试在基线已失败,不改历史值来消除失败。
|
||||
4. 运行 `python scripts/run_quality_gate.py --profile quick`;Windows 本机在 source inventory 检查因缺 mcp 阻塞。完整输出与同基线逐项比对,不把“新增回归通过”写成“整个快速门通过”。
|
||||
5. 前端运行 `tsc --noEmit`、`npm run lint`、`npm test`、`npm run build`;单独确认 `rectification-confirmation-gate.test.ts` 全绿。构建必须得到完整 `/` Static 与首屏 gzip 产物再比较,不能以未修改业务代码替代。
|
||||
6. 核对冻结的 12 个打分文件与执行基线字节相同,`status=not_ready`、`confirmation_coverage_rate=0`、官方独立盲测次数仍为零。
|
||||
|
||||
## 交付后才执行
|
||||
|
||||
- 获准推 staging 后,检查 Gitea 的对应 SHA 门禁和部署;不参考只读 GitHub 镜像。
|
||||
- 核对 `/api/health` 的 `deployment.gitCommit` 为最近含门禁路径改动的 staging SHA;若之后仅文档提交,另跑 docs-only-range 验证。
|
||||
- 未部署不得写“线上验证通过”。本轮不提升 main。
|
||||
|
||||
## 研究遗留(不是软件环境补齐就能解决)
|
||||
|
||||
- 新独立盲测必须等待未曝光 v5 的独立标注、人审、封存与预注册;v3 重跑不能替代。
|
||||
- 真实申报偏差分布需要受控用户样本、独立出生记录与合规授权。本轮敏感性表不代表真实用户总体表现。
|
||||
- v5 备选人物只是候选筛选,不是资料已经采集完毕或人审已通过。
|
||||
Reference in New Issue
Block a user