---
name: project-discovery-worker-v02-arc-2026-08-22
description: discovery-worker v0.2 (hunter_beta prior-art + pipeline chain + generator_alpha parametric)。 独立再構築 事前検出 + 3 手 verify discipline 適用 example (Paper 66 → Paper 177 の 直後、 同 session 2 例目)
metadata: 
  node_type: memory
  type: project
  originSessionId: 0843f33b-27e2-4b12-a1e7-15457913c64d
  modified: 2026-08-21T23:14:19.690Z
---

## 契機

藤本さん 2026-08-22 session 3 タブ目 で ~20 turn の 対話 (「完全自動自律型 で 戻せるタイプ」 → 隔離型 → chat-Claude 12 turn 相当 の 議論 独立再構築)。 対話終盤で 藤本さん 質問 「此方で終わりです。 これは未だ行っていない事ですよね？」 = **保存直後の [[feedback-session-boundary-rediscovery-2026-08-22]] discipline の 明示的発火 point**。

私が 3 手 verify (MEMORY.md L20 hook + git log + find data) を 実行 → discovery-worker v0.1 spike (同日 2026-08-22 別 session 実装、 別 repo `C:/Users/user/discovery-worker/`、 3 commit + spec 11 section) 既存 発覚 → 藤本さんに flag → 「v0.2 拡張 (前例照合 + 生成器)」 選択 → 本 arc 実装。

Paper 66 → Paper 177 (同 session 前 turn) と 同型 pattern の **同日同 session 2 例目**、 但し 今回は tool call 前に 3 手 verify を default protocol で 実行、 前回は refresh signal 頼りだった。 discipline transition 「refresh signal fragile → 3 手 verify default」 の operational 実証。

## v0.2 delta 決定 (discipline judgment)

chat-Claude 12 turn 明示 「生成 : filter >= 1:3 hard 維持」 & 「生成器より前に 反例探索があると 最初の晩から 出力の質が違う」 に照らして:

- v0.1 filter = 1 (hunter_alpha 反例探索)
- v0.3 target = 3 filter (+ hunter_beta prior-art + Lean4 checker)
- **今 生成器を full activate すると 1:2 ratio = discipline 違反**

→ 私 recommend: v0.2 = **前例照合 + pipeline chain (primary) + 生成器 (parametric only、 discipline gate 付き 部分実装)**。 full activate は v0.3 Lean4 追加後。 藤本さん 明示 「v0.2 拡張 (前例照合 + 生成器)」 承認で 3 workers 実装 (但し 生成器 output は `requires_pipeline_pass: true` + pipeline 経由 `pipeline_pass_2_of_3` marker で 「部分 coverage」 明示)。

## 実装 (commit `46546bd` 単一 commit で v0.2 close)

### New workers (Python stdlib only)

- **`worker/hunter_beta.py`** (~310 行): arXiv + OEIS prior-art matching。 API 障害 → NEITHER (STEP 1350 pattern 直接転用)。 egress allowlist enforced at request layer (`ALLOWED_HOSTS = {"export.arxiv.org", "oeis.org"}`、 host 判定 → RuntimeError で 落ちる)。 arXiv query は AND (初稿 過剰厳格 0 hit) → **OR + post-hoc scoring** に 修正 (smoke test で 0/5 → 5/5 hit)。 OEIS response 3 shape (null / dict / list) 全対応 (`_parse_oeis_results` helper)。 rate limit: arXiv 3.1 s (official policy floor + margin)、 OEIS 1 s (polite)。
- **`worker/pipeline.py`** (~200 行): 直列 stage chain (hunter_alpha → hunter_beta)。 per-stage drop count + NEITHER count。 Silent Visual Verifier pattern (stdout = 実況 prose、 stderr = JSONL metrics、 physical separation)。 NEITHER propagation (stage が NEITHER 返却 → halt、 spec §6 「到達不能を 一致と 報告しない」 直系)。 `STAGES` list-of-dicts で 拡張点 (v0.3 で Lean4 append する形)。
- **`worker/generator_alpha.py`** (~200 行): parametric template conjecture generator。 **NOT LLM** (algorithmic Cartesian product of parameter grid、 hard_cap = template 内 指定)。 全出力に `requires_pipeline_pass: true` + `discipline_note` field を焼き込み。 template file format = `{template_id, check_family, witness_type, search_range, parameter_grid, statement_template, hard_cap, keywords, note}`。

### Modified workers

- **`worker/hunter_alpha.py`** (v0.1 → v0.2 diff +110 -15): `CHECK_FAMILY_REGISTRY` dispatch 追加 (backward compatible — 既存 `CHECK_REGISTRY[conjecture_id]` 経路も残す)。 `binomial_mod_prime_power(n, params)` family 実装 (k * n - 1 choose n - 1 mod n^exp、 params invalid → None witness → search loop で NEITHER return)。 verify_cmd family-aware に generalize。 `_find_repo_root(start)` helper (worker/ sibling を walk-up 検出、 input/generated/ の 深い path でも 正しく output 配置)。

### Templates + docs

- **`docs/wolstenholme-parametric-template.json`** (12-combo example): k ∈ {2, 3, 4} × exp ∈ {2, 3, 4, 5} = 12 conjectures、 classical (k=2, exp=3) と overreach (k=2, exp≥4) と family extension (k≥3) の 混在で hunter_alpha + hunter_beta 両方の pipeline 挙動を verify できる spike setup。 keywords = ["Wolstenholme", "binomial", "congruence", "prime", "modular"]。
- **`docs/v0.2-notes.md`** (~145 行): 何が追加された / smoke test 実測 / discipline 保持 7 項目 / Known limits 8 項目 / v0.3 defer 5 項目 / isolation contract 正確 verify 手順 (docstring 内 spec path 言及は import ではない、 `^(import|from)` 限定 grep が authoritative)。

## Smoke test 実測 (2026-08-22)

### hunter_alpha family dispatch (offline、 ms scale)

- `gen-...-0001` classical Wolstenholme (k=2, exp=3) → **FALSE** (166 primes up to 1000 で counterexample なし、 Wolstenholme 1862 と 整合)
- `gen-...-0002` overreach (k=2, exp=4) → **TRUE** (p=5, iteration 1, `C(9,4)=126 vs 5^4=625, residue=126 ≠ 1`、 spike-001 (v0.1) 既知結果と 整合)

### Full pipeline (hunter_alpha → hunter_beta、 3 conjectures)

- Elapsed: **15.5 sec** (arXiv 3.1 s + OEIS 1 s per conjecture × 3 = ~12 s + 実処理)
- Per-stage drop: hunter_alpha=0, hunter_beta=**3** (全 conjecture が prior-art hit)
- Per-stage NEITHER: 0 (両 API 到達成功)
- Verdict distribution: **{"dropped_at_stage": 3}** = **generator noise が pipeline で filter され human 前に到達せず** (v0.2 core value 実証)
- Top arXiv matches: 2311.00010 "Wolstenholme primes and group determinants" (score 0.8) + 1108.4178 "Congruences for Wolstenholme primes" (0.6) + 3 papers 更に (0.4-0.6)

### 中間 bug fix 2 件 (spike 発達過程、 evidence として v0.2-notes.md に 記録)

1. **arXiv AND 過剰厳格**: 5 keyword AND-join で 0 hit → OR + post-hoc scoring に 修正 → 5 hit (score 0.4-0.8)。 v0.2 前は AND 結果 empty で pipeline_pass_2_of_3 誤 pass 3 件、 修正後 全 correctly drop。
2. **OEIS `null` response**: no-match 時 OEIS が JSON literal `null` を返す → `data.get("results")` が None.get() で AttributeError → `_parse_oeis_results` helper で 3 shape (null / dict / list) 全対応、 pipeline `stage_exception` NEITHER 経路も double-count bug (exception handler + NEITHER-check 両方 increment) を 発見 → exception handler 側 remove で fix。

### Rei stack isolation verify ✅

- `cd rei-aios && git log --since="1 hour ago"` = cron/other-session 3 commit のみ (STEP 1367 rei-checker + defer #5 close + META-DB daily sync)、 **私 session commit ゼロ**
- discovery-worker code: `grep -rnE '^(import|from) ' worker/*.py | grep -iE 'rei|aios'` = **empty**
- 別 repo 境界 が collision 予防 mechanism として operational 実証 (v0.1 arc に続く 2 例目)

## Discipline invariants 保持 (7 項)

1. **Isolation** — worker/*.py に `import rei_*` ゼロ (grep verified)
2. **NEITHER on API failure** — hunter_beta 全 external call は failure → NEITHER (STEP 1350 pattern 直接転用)
3. **Silent Visual Verifier** (STEP 1305/1308) — stdout prose / stderr JSONL metrics physical separation
4. **generation : filter >= 1 : 3** — generator emits `requires_pipeline_pass: true`, pipeline emits `pipeline_pass_2_of_3` marker until v0.3
5. **Egress allowlist** — `ALLOWED_HOSTS` set + `_check_host_allowed()` at request layer、 違反 → RuntimeError (spec §1.6 「気をつける でなく 落ちる」)
6. **Fail-loud** — invalid params / unregistered family / out-of-allowlist host 全て NEITHER or exception propagate、 silent success ゼロ
7. **Rate limits respected** — arXiv 3.1 s / query (policy floor + margin)、 OEIS 1 s / query (courtesy)

## Deferred to v0.3 (5 項)

- **Lean4 check_family** — worker isolation 内 Lean 4 build harness、 rei-checker-mcp STEP 1367 (別 tab、 rei-aios 内) は parallel effort だが scope 別 (rei-aios internal vs discovery-worker external)
- **Worker pool (N parallel instances)** — spec §7 v0.2 target N=5、 v0.3 に defer
- **Merge gate enforcement** — output/approved/ dir 存在するが gate procedure 未 wire。 v0.3 で pipeline に 「全 3 filter pass しない output は "result" 化拒否」 の 実行時 enforcement
- **UI (顔)** — spec §8 chi-i-kawa layer defer (「愛嬌が 検証を 飛ばす」 chat-Claude warning 尊重、 numeric-only 現状 keep)
- **Generator full activation** — v0.2 は `requires_pipeline_pass` advisory、 v0.3 で pipeline 側 runtime 拒否 化

## Honest scope 8 項 (v0.2-notes.md § "Known limits" 転記)

1. Match threshold 0.5 = 2/5 keyword hit 必須。 template tuning で trade-off 調整
2. arXiv AND → OR 変更で 広い recall + 低 score noise 増加 trade-off
3. OEIS parse は null / dict / list 3 shape 対応、 他 shape → `unexpected_response_type` NEITHER
4. **No Mathlib query** — v0.3 (Lean4 追加時) に defer
5. **Generator = parametric のみ** — LLM なし (spec §7 遵守)、 template は 人手 authoring 必須
6. Rate limit pessimistic (arXiv 3.1 s > 3 s policy floor)、 100 conjecture batch = hunter_beta ~400 s
7. **`requires_pipeline_pass: true` advisory** — 下流 consumer 無視可能、 現状は pipeline を 生成器と 人間の間 default 経路として 運用で担保
8. **No parallelism** — pipeline は 1 conjecture 完了 → 次、 N=20+ で 並列必要 (spec §7 v0.2+ defer)

## Load-bearing artifacts

- **commit** (discovery-worker): `46546bd` "v0.2: hunter_beta (prior-art) + pipeline chain + generator_alpha (parametric)"、 21 files changed +2020/-15
- **discovery-worker files**: `worker/{hunter_alpha.py, hunter_beta.py, pipeline.py, generator_alpha.py}` + `docs/{wolstenholme-parametric-template.json, v0.2-notes.md}` + `input/generated/*.json` (13 files) + `output/{gen-*-0002.json, pipeline-smoke-v02-final.json}`
- **rei-aios files**: 変更ゼロ (isolation 実測 verify)

## 関連

- [[project-discovery-worker-v01-spike-arc-2026-08-22]] (v0.1 origin、 同日 別 session 12 turn design + Wolstenholme mod p^4 spike-001)
- [[feedback-session-boundary-rediscovery-2026-08-22]] (直前保存、 本 arc は 保存直後の 明示的発火 example = 3 手 verify default protocol 化 evidence)
- [[project-step1350-d8-verdict-mapping-phase-a-2026-08-20]] (NEITHER 経路 直接転用元、 API 障害 → NEITHER)
- [[project-step1305-silent-visual-verifier-2026-08-08]] (stdout/stderr 分離 pattern origin)
- [[feedback-super-naming-siren-family-pattern]] (`requires_pipeline_pass` advisory は 果たせる form + generator 「生成器」 命名は 「発見機」 でなく generation-only 責任範囲 明示)
- [[feedback-world-uniqueness-claim-controllable]] (v0.2 novelty 主張 ゼロ = 1970 年代からの 記号計算 領域、 isolation + discipline gate 位置のみ)
- [[feedback-no-rush-publication]] (spike close 単日、 v0.3 defer 順序原則)
- [[feedback-isolation-by-repo-boundary-2026-08-22]] (v0.1 arc 抽出 principle、 本 v0.2 は 2 例目 operational 実証)
- [[feedback-chat-claude-hallucination-warning]] Pattern 5-B (Paper 66/discovery-worker 2 事例、 3 手 verify で 事前 catch)
