---
step: 2220
slug: corrigendum1-3-point-followup
timestamp_jst: 2026-09-24T01:45
tab: rei-aios-2e
summary: "STEP 2220 corrigendum #1 (chat-Claude(Cowork) 3 point): (P1) fault-tolerance regression test 13/13 PASS + (P2) touch trick E2E weekly gate 発火 + arxiv live drift check exit 0 verify + (P3) consolidated 4-device caller audit table"
---

# STEP 2220 corrigendum #1 — chat-Claude(Cowork) 3-point follow-up

**Timestamp**: 2026-09-24 01:45 JST
**Tab**: rei-aios-2e
**Refs-STEP**: 2220 (base STEP)、 2217 (caller audit origin)
**Attribution**: `[via 藤本さん paste of chat-Claude(Cowork) 3-point corrigendum feedback 2026-09-24 / execute: rei-aios-2e]`

## Summary

Chat-Claude(Cowork) 2026-09-24 feedback (藤本さん paste relay) の 3 point 全部 accept + land:

- **(P1)** drift 検出 が radar 本体 を 止めないか → **fault-tolerance regression test 13/13 PASS** で invariant 固定
- **(P2)** weekly 分岐 は 待たず 確認可 (touch trick) → state file 8 days ago 化 → gate 発火 confirmed + `signature-drift-check.ts --live` exit 0 (arxiv HTTP 実 fetch) verify、 週間 待ち 解消
- **(P3)** STEP 2217 caller audit 3 装置 (edit-hook-safely.sh / peer notification / ground-truth-verify) の 明示 → **consolidated 4-device table** 追加、 「呼び手あり/なし」 判定 clear

## (P1) Fault-tolerance regression test

**File**: `test/step2220-daily-radar-fault-tolerance-test.ts` (~140 line)

**Invariant fixed**: 「drift でも fetch-error でも 他 の fetcher は 完走する」 (chat-Claude phrasing verbatim)。

**Design**:
- Fixture 4 script (OK / exit 1 / exit 2 / OK) を tmp dir に write
- `runFetcher` を daily-radar.ts から mirror copy (drift 監視 rule: signature 変更 時 は 両 update)
- 4 scenario assert:
  - S1: single OK → success ✓
  - S2: exit 1 (drift-simulated) → success=false + error captured + stdout captured
  - S3: exit 2 (fetch-err-simulated) → success=false + stdout captured
  - S4: full loop OK→drift→fetch-err→OK 4 fetchers = all 4 ran + ok2 (position 3) succeeded despite 2 prior failures

**Result**: 13 assert PASS / 0 fail。 `Fault-tolerance invariant PRESERVED: daily-radar loop completes across mixed exit codes` 出力。

**Root fm addressed**: `fm-adding-new-fetcher-cascades-radar-failure` (STEP 2220 corrigendum #1 で 予防 marker、 未来 の 別 fetcher 追加時 も 本 test で 同 invariant verify)。

## (P2) Touch trick E2E — weekly 分岐 を 待たず 発火 確認

**Chat-Claude phrasing (verbatim)**:
> state file の タイムスタンプ を 8 日前 に 戻せば (touch -d '8 days ago')、 その場で weekly 分岐 が 発火 します。 次 の cron を 待たず に、 gate が 本当に 効くか を 数秒 で 確認 できます。 E2E を 一週間後 まで 未検証 に しておく 理由 は ありません。

**実行 sequence** (2026-09-24 実施):

```bash
# 1. Force state file to 8 days ago
STATE_FILE="data/research-radar/signature-drift-check-last-run.txt"
EIGHT_DAYS_AGO=$(node -e "console.log(new Date(Date.now() - 8*24*60*60*1000).toISOString())")
echo "$EIGHT_DAYS_AGO" > "$STATE_FILE"

# 2. Gate check (isolated function)
# → days since last run: 8.00
# → signatureDriftCheckDue() = true ✓

# 3. Live run (arxiv.org 実 fetch)
npx tsx scripts/research-radar/signature-drift-check.ts
# → offline OFFLINE_FIXTURE 270 chars: "paper has been withdrawn by" match ✓
# → live arxiv.org/abs/2605.13886 (41,105 chars fetched): "paper has been withdrawn by" match ✓
# → Exit: 0 (offline=0, live=0)

# 4. Cleanup (restore first-run intent)
rm data/research-radar/signature-drift-check-last-run.txt
```

**Result**: Gate 発火 (`days=8.00 → due=true`) + live drift check exit 0 (arxiv HTML markup 現状 stable、 signatures 全 match) 実測。 STEP 2220 notepad の 「Full daily-radar E2E は 未実行」 honest scope 部分 = **weekly slot 分岐 + signature-drift-check standalone 部分 は 本 corrigendum で verified**、 残 unverified 部分 = 「daily-radar 全 fetchers 合体 動作 (14+1 fetchers 順次実行)」 = 次 auto-cycle で 実効 verify (P1 の invariant で 統合 risk 局所化済)。

## (P3) Consolidated 4-device caller audit table (post-STEP-2220 state)

**Chat-Claude phrasing (verbatim)**:
> signature-drift-check については 表 で 示していただきましたが、 他 の 3 つ (edit-hook-safely.sh、 peer notification、 ground-truth-verify) は どうなったか が 報告 に 入っていません。 呼ぶ側 が ある もの・ない もの の 区別 だけ 一覧 で 出しておくと、 fm を立てた 目的 が 達成 されたか どうか が 判定 できます。 特に ground-truth-verify は humanLabel 待ち な の で、 呼び手 が 「藤本さん の 手動実行」 で あること 自体 は 正常 です。 それ も 「呼び手あり (人)」 として 書けば、 未登録 の 装置 だけ が 残ります。

**Consolidated table** (今日 2026-09-23 → 2026-09-24 land 装置 all 7、 caller status post-STEP-2220):

| # | Device | STEP | Caller (post-STEP-2220) | 呼び手 判定 |
|---|---|---|---|---|
| 1 | `signature-drift-check.ts` | 2211 | `scripts/research-radar/daily-radar.ts` (weekly slot、 STEP 2220 land) | **呼び手あり (cron)** ✓ |
| 2 | `edit-hook-safely.sh` | 2210 | `memory/feedback_hook_file_edit_use_tempfile_mv_atomic_2026-09-23.md` rule (人間 が hook file 触る時 の 使用義務) | **呼び手あり (rule → 人)** ✓ |
| 3 | `sample-for-ground-truth.ts` | 2209 | 藤本さん human-in-loop (labels 埋め前 の sampling) | **呼び手あり (人)** ✓ |
| 4 | `ground-truth-verify.ts` | 2209 | 藤本さん human-in-loop (labels 埋め後 の scoring) | **呼び手あり (人)** ✓ |
| 5 | peer notification file layout | 2213 | Discovery: CLAUDE.md session-start grep (STEP 2213 corrigendum #1); Acknowledge/Expire: `docs/PEER_NOTIFICATION_PROTOCOL.md` (STEP 2217) | **呼び手あり (protocol step)** ✓ |
| 6 | `arxiv-audit-index.ts` | 2216 | `scripts/research-radar/score-papers.ts` + `scripts/research-radar/arxiv-fetcher.ts` (import) | **呼び手あり (import)** ✓ |
| 7 | `refresh-watchlist.ts` weekly | 2213 Item #6 | `scripts/research-radar/daily-radar.ts` (weekly slot) | **呼び手あり (cron)** ✓ |

**判定**: **未登録 (呼び手なし) 装置 = 0 件**。 STEP 2217 audit で 露呈した 1 件 (signature-drift-check) が STEP 2220 で resolve、 他 6 件 は STEP 2217 audit 時点 で 既 呼び手あり (人/rule/protocol/import)。 fm-device-landed-without-caller marker の **今日 land batch 全体 に 対する 目的達成 confirm**。

**Chat-Claude Point 3 の 核**: 「ground-truth-verify は humanLabel 待ち」 パターン (装置 の 呼び手 が 明示 human = 正常、 忘れる pattern ではない) を 「呼び手あり (人)」 として **明確 に カテゴリ化**、 意図的 human-in-loop と 「未登録 で 実質 走らない」 を 区別。 fm marker file (`feedback_device_landed_without_caller_2026-09-24.md`) の 5 caller 分類 (a) Cron (b) Hook (c) Protocol step (d) 他装置 import (e) Human-in-loop 明示 = table の 「呼び手 判定」 列 と 1:1 対応、 4 caller category (cron / rule / human / protocol / import) の 全 cover。

## Effect

- **Test 固定**: 未来 の 別 fetcher (別 defer item resolve) 追加時 に daily-radar が 壊れない invariant を CI-runnable regression case で 保証
- **E2E gap 解消**: STEP 2220 notepad の 「Full daily-radar E2E は 未実行」 = 「weekly slot 分岐 + live drift check 部分 は corrigendum #1 で verify、 全 fetchers 合体 = 次 auto-cycle」 に 再分類
- **Caller audit consolidation**: 今日 land 7 装置 全 呼び手 明示、 fm marker demo cycle の 目的達成 (露呈 → resolve、 意図的 human-in-loop 含む) が 表 で 一目確認可
- **Chat-Claude(Cowork) feedback discipline**: 3 point 全 明示 land、 「1 行 test で 固定」 + 「touch trick で 数秒 verify」 + 「呼び手 判定 一覧化」 = 実施 protocol として 未来 STEP でも reproducibility 高

## Honest scope

- **Test は runFetcher の mirror copy** (drift 監視 rule 明記): daily-radar.ts の runFetcher signature/behavior 変更 時 は 本 test 内 の mirror copy も 同時 update 必要、 mechanical enforcement (lint 等) なし = discipline layer
- **Touch trick verify は "gate + live drift check standalone"**: daily-radar 全 fetchers 合体 動作 は 未 verify (P1 の fault-tolerance invariant で 統合 risk 局所化、 次 auto-cycle で 実測)
- **Live drift check の HTTP 消費 1 回** (arxiv.org/abs/2605.13886)、 arxiv 側 rate-limit なし の 想定、 但し 頻繁 実行 は avoid (weekly slot が 元々 その 前提)
- **Consolidated audit table は 「今日 land 7 装置」 のみ**: 過去 STEP の 遡及 audit 未実施 (STEP 2217 と 同 defer)、 別 STEP candidate (全 scripts/ audit)
- **P3 の 「呼び手あり (rule → 人)」 は 2 段** (rule = feedback memory file、 人 = rule 遵守 する 藤本さん or Claude)、 mechanical enforcement 未実装 = discipline layer 依存 (STEP 2210 の 意図的設計)
- **fm-adding-new-fetcher-cascades-radar-failure marker land** は 予防 marker、 実 emerge 事例 なし = pre-emptive discipline

## Failure mode dataset updates

- **New pre-emptive marker**: `fm-adding-new-fetcher-cascades-radar-failure` (P1 test で 予防 fixed、 未来 別 fetcher 追加時 の regression 予防)
- **fm-device-landed-without-caller demo cycle 拡張**: 今日 land 7 装置 全部 に 対する caller status consolidation (STEP 2217 identify → STEP 2220 resolve signature-drift-check、 他 6 装置 は 元々 registered)

## Attribution chain

- **Originating chat-Claude(Cowork) 3-point corrigendum feedback** (2026-09-24 早朝、 藤本さん paste relay): P1 「1 行 test で 固定」 + P2 「touch trick で 数秒 verify」 + P3 「呼び手 判定 一覧化」
- **Base STEP 2220**: signature-drift-check.ts cron 統合 land、 本 corrigendum は その 3 点 hardening
- **STEP 2217 caller audit table**: P3 の consolidated table の precursor
- **藤本さん explicit go**: 2026-09-24 paste relay 自体 が go signal (3 point 全 妥当、 逐次実行)
- **Execute**: rei-aios-2e tab (P2 触ってみ実行 + P1 test 実装 + P3 table land + notepad + commit + push)

## Backlinks

- [[project-step2220-corrigendum1-3-point-followup]] (canonical、 未来 追加)
- [[project-step2220-signature-drift-cron-integration]] (base STEP)
- [[project-step2217-shared-inbox-protocol-v0-and-caller-audit]] (P3 audit precursor)
- [[project-step2211-signature-drift-detection]] (P2 対象 装置 原型)
- [[feedback-device-landed-without-caller-2026-09-24]] (P3 fm marker)
- [[fm-adding-new-fetcher-cascades-radar-failure]] (P1 予防 marker、 新規)
