build(stage1): populate the derived columns of the adjudication table
Fills reviewer_1_decision, reviewer_2_decision and conflict_reason for all 84 rows (252 cells) so adjudicators can work from one sheet. Every adjudicator field stays blank: identity, date, final_*, notes and attestation are human attestation and the script neither writes them nor overwrites existing values. conflict_reason follows the validator's actual rule (decisions differ, or reviewer_1 is not a plain approve) and states only the mechanical reason plus both decisions - no interpretation. 63 rows differ, 21 agree but are not plain approve, so all 84 require adjudication. Adds a purpose-built script rather than fixing at the usual build source: build_human_review_packets.py overwrites both signed reviewer CSVs with blank templates at lines 39-40, so running it would destroy 84 rows of signed human review. It was not run. The new script re-hashes both signed packets before and after and exits FATAL if either changed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
71b0d7dd2a
commit
ab175ce253
+22
-1
@@ -1,6 +1,6 @@
|
||||
# 项目进度档案
|
||||
|
||||
版本:1.24
|
||||
版本:1.25
|
||||
建立日期:2026-09-20
|
||||
当前总状态:`in_progress`
|
||||
当前阶段:阶段 1 `in_progress`;题库、回答字典、919,863 行回答长表及三调查设计字段/方法均已核验;Gate 1 仅剩主要结局的两名实际人工审核者签署
|
||||
@@ -1034,3 +1034,24 @@ Gate 0 当前判定:`passed`。四项交付物齐备;目标总体政策、
|
||||
1. 建议先以本地 `2023XXH-Formats-Program.sas` 关闭 YRBS 2023 三行的数值标签缺口,将组 1 的裁决量由 27 降至 24;
|
||||
2. 经用户授权后填充裁决表的三列派生字段(人工签署字段保持空白);
|
||||
3. 由裁决人按三个政策问题成组裁决,而非逐行判断。
|
||||
|
||||
|
||||
### A-20260921-073:填充裁决表的派生列
|
||||
|
||||
- 时间:2026-09-21T00:15:15+12:00;阶段 1,Gate 1 保持 `in_progress`。
|
||||
- 动作:行动前完整读取工作流与本档案并核对干净 Git 状态。按 A-20260921-072 的下一步,填充 `primary_outcome_review_adjudication.csv` 中可由机器推导的三列,使裁决人可在单一表内工作。未替任何人裁决,未填写任何人工签署字段。
|
||||
- **重大安全发现(本次阻止的破坏性操作):** 按项目惯例本应“在生成源头修正”,即运行 `build_human_review_packets.py`。经运行前静态检查,该脚本第 39–40 行会以**空白模板覆盖** `primary_outcome_review_reviewer_1.csv` 与 `primary_outcome_review_reviewer_2.csv`——即两份已签署审核表。**该脚本未被运行。** 任何后续会话若因“重建生成物”的惯性运行它,将不可逆地销毁两名审核者的全部 84 行签署工作。已改为新增专用脚本,且该脚本不写入审核表。
|
||||
- 输入:两份已签署审核表、`primary_outcome_review_adjudication.csv`、`validate_human_reviews.py` 第 74 行的裁决判定规则。
|
||||
- 输出:新增 `populate_adjudication_table.py`;更新 `primary_outcome_review_adjudication.csv`;生成 `human_review_validation.json`。
|
||||
- 填充范围与边界:
|
||||
- **已填(派生事实,非签署内容):** `reviewer_1_decision`、`reviewer_2_decision`、`conflict_reason`,共 84 行 × 3 = 252 个单元格。
|
||||
- **保持空白(人工签署字段):** `adjudicator_name`、`adjudication_date`、`final_decision`、`final_question_text`、`final_construct`、`final_population`、`final_language`、`final_response_or_missing_rule`、`adjudication_notes`、`adjudicator_attestation`,经检查 10 个字段非空计数**均为 0**。
|
||||
- 脚本设计为只写派生列、保留任何已存在的人工值,并在结束前重算两份签署表的 SHA-256,一旦变化即以 `FATAL` 退出。
|
||||
- `conflict_reason` 依 `validate_human_reviews.py` 的实际规则生成(决定不一致 **或** reviewer_1 非 plain `approve`),只陈述机械理由与双方决定,不写入任何解释或倾向:63 行为“决定不一致”,21 行为“两人一致但非 plain approve”。**84 行全部需要裁决**,与该规则一致(reviewer 1 无一行 plain `approve`)。
|
||||
- 检查:`py_compile` 通过;运行输出 `rows=84`、`derived_cells_written=252`、`items_requiring_adjudication=84`、`existing_adjudicator_values_preserved=0`、`signed_packets_unchanged=true`。两份签署表 SHA-256 保持 `cbd79847…`、`5fe95245…`。裁决表仍为 84 行,`item_version_id` 集合三文件一致。
|
||||
- 验证器状态(带 `--adjudication` 运行):`status=failed`,336 条错误——168 条 `review_date` 非 ISO,84 条 `final_decision` 缺失,84 条裁决人身份/声明缺失。后两类共 168 条**全部为人工必填项**,非机器可补。与既往记录的 169 条不构成回归:此前一次未传 `--adjudication`,验证器以单条聚合错误短路;本次进入逐行检查阶段。本次填充不减少错误数,其作用是使裁决表可用。
|
||||
- 未解决问题:84 项裁决待人工执行;`review_date` 非 ISO(属签署字段,未由 AI 修改);`build_human_review_packets.py` 的覆盖风险尚未加防护;13 项未关闭冲突;2021 提示句缺口。
|
||||
- 下一步:
|
||||
1. 建议为 `build_human_review_packets.py` 增加 fail-closed 防护,禁止覆盖已签署的审核表(本次未授权,未实施);
|
||||
2. 由裁决人按 A-20260921-072 的三个政策问题成组填写 `final_decision`、身份、日期与声明;
|
||||
3. 完成后重跑验证器与 Gate 1 验收。
|
||||
|
||||
Reference in New Issue
Block a user