---
name: 発明承認時は重複検出が必須
description: invention pipeline は deterministic で毎日同じ 5 件を生成しがち。承認前に必ず直前の approved-*.json と diff + MD5 比較をする。
type: feedback
originSessionId: 2f67d567-8dac-4be1-80b4-7623f1bc7340
---
# 発明承認時は duplicate-detection を必ず実行

## ルール

日次発明の承認判断を行う際は、以下を**必ず**先に実行：

1. `data/invention/invention-YYYY-MM-DD.json` の inventions 配列を取得
2. `data/invention/approvals/approved-*.json` と比較
3. hypothesis または theoryId の完全一致があれば **REJECT**
4. MD5 署名で日別 invention file の重複も確認:
   ```bash
   for f in data/invention/invention-2026-*.json; do
     md5sum "$f" | awk '{print $1, $2}' | cut -c1-8
   done | sort -u
   ```
   署名が 1 種類しかない場合は pipeline が不動点に陥っている。

## Why

**Why**: 2026-04-22 に 2026-04-21 分の発明 5 件を判断した際、2026-04-01〜2026-04-21 の全 21 日の invention file が MD5 署名 47420077 で完全一致していた。2026-04-20 版は既に承認済 (SEED_KERNEL #1506-1510)。承認していれば完全な duplicate 登録になっていた。

原因: `src/aios/invention/invention-engine.ts:135-136` が `theoriesA[0]` / `theoriesB[0]` を常に選択し、category が変わらないと同じ 5 hypothesis を生成。void detection も承認履歴を見ていなかった。

STEP 976 で修正済 (2026-04-22):
- `loadApprovalHistory()` が `data/invention/approvals/approved-*.json` を読み込む
- `detectVoids()` が既承認 (categoryA, categoryB) pair を除外
- `transplantStructure(void, dateSeed)` が date-seeded rotation で source/target theory を毎日変える
- `invent()` が `hashDate(date)` を seed として渡す

## STEP 1000 追加修正 (2026-04-26 regression)

STEP 976 fix は「既承認 pair」のみ skip していたため、**承認されないまま放置された pair が翌日も再 detect される**構造的バグが残っていた。実際 04-23/24/25/26 の 4 日連続で zero_extension × {african, mesoamerican, oceanian, islamic, category_theory} が完全重複生成された。

修正: `loadRecentInventionPairs(days=7)` を追加 → 直近 N 日に既に**生成された** pair (承認状態によらず) も skip 対象にする。承認判断が遅れても pipeline は新 pair に rotate する。
- `src/aios/invention/invention-engine.ts` (+isPairRecent guard in detectVoids)
- `InventionEngineOptions.recentCooldownDays` (default 7)
- `test/step1000-recent-cooldown-test.ts` (21 assertions PASS)
- `data/invention/approvals/rejected-2026-04-26.json`

## How to apply

- **承認判断時**: 上記 3 手順を実行してから推奨を出す
- **自動化**: invention-engine.ts 修正後も、pipeline 動作を半年ごとに sanity check (全日 MD5 一致していないか)
- **破綻時**: 新 invention が 3 日連続同一なら pipeline が deterministic 退行している可能性 → root cause 調査

## 関連ファイル

- `src/aios/invention/invention-engine.ts` (STEP 237 → STEP 976 で duplicate-detection 追加)
- `data/invention/approvals/approved-YYYY-MM-DD.json` (新 schema: `categoryA` / `categoryB` 明示)
- `data/invention/approvals/rejected-2026-04-21.json` (初の reject record)
- `test/step976-invention-fix-test.ts` (10/10 PASS)
