fullseye

汎用アルゴリズムを実装可能にする — algo-c 対応ロードマップ

ユーザー要望(2026-08-16): https://github.com/okumuralab/algo-c(奥村晴彦 『[改訂新版] C言語による標準アルゴリズム事典』全ソース)にあるような汎用アルゴリズムも Fullseye で実装できるようにしたい。

正直な現状認識: Fullseye は現在 画像アルゴリズム設計 AI(op レジストリ = image/region/ feature/contour/volume の sort、進化 + holdout gate + Python→C codegen)。汎用アルゴリズム (ソート/探索/グラフ/数論/暗号/圧縮)は画像 sort に載らないため、言語・型・codegen の拡張が要る。 これは複数セッションの作業。本 doc はその確定計画(次セッションが full context で実行する正本)。

algo-c のカテゴリ(書籍 TOC・実装対象マップ)

※ 厳密な網羅は repo の /src を正本とする。

分野 代表アルゴリズム Fullseye での受け皿
数値計算 方程式(二分法/Newton)、数値積分(Simpson/Romberg)、連立一次(Gauss/LU)、補間(spline)、FFT 既存 dsp(FFT)+ 新 numeric op 族
乱数・統計 Mersenne Twister、分布、統計量 rng/stat op(決定的 seed)
ソート quick/heap/merge/shell/radix array sort + seq
探索 二分探索、ハッシュ、BST/AVL/B-tree array/map op
文字列 KMP/BM/Rabin-Karp、編集距離、正規表現 text 型 + op
グラフ DFS/BFS、Dijkstra、Warshall-Floyd、MST、最大流 graph 型 + op
幾何 凸包、線分交差、ボロノイ 既存 pcseg/幾何 + 新 geom2d
数論・暗号 素数、GCD、RSA、MD5/SHA、AES numtheory/crypto(教育用・honest 開示)
データ圧縮 Huffman、LZ/LZW、算術符号化 compress op
DP/探索 8-queens、ナップサック、DP fscript の制御フロー + array

実装アーキテクチャ(確定方針)

Fullseye の既存資産を汎用へ拡張する。画像 AI の焦点は薄めない(汎用 op は別 tier / opt-in)。

  1. 型システム拡張: 現在 6+1 sort(image/region/feature/contour/match/any/volume)に seq(1-D 配列)/text(文字列)/graph/scalar を追加(ops.py の sort・fslib 型)。
  2. fscript の汎用言語化: 既に if/for/while・代入・タプルがある。配列/文字列リテラル、 インデックス、procedure(関数) を段階追加(現在は言語スコープを絞る決定だったので、 汎用 tier は別プロファイルで解禁)。正本 = docs/FSCRIPT_DECISION.md の A/B 分岐を再検討。
  3. op レジストリ拡張: algo-c の各アルゴリズムを op(name/in-out sort/params/c_stmt)として 登録。既存の Python→C codegen(engine.to_python/to_c)+ difftest(honest gate: Python が oracle、C を差分検証)をそのまま流用 → 「C で実装できる」を実測で保証
  4. honest gate: algo-c の C を参照実装として difftest に食わせ、Fullseye codegen の C と 数値/ビット一致を検証(既存 gate の拡張)。元コードのライセンス(algo-c = 書籍付属、 利用条件を要確認)を尊重し、丸写しでなく仕様から再実装(公開開示ポリシー)。

段階計画(次セッション以降)

honest な限界と規律


P1 完了記録(2026-08-16, Opus5[1m]/ultracode)

最小実証「Fullseye は汎用アルゴリズムも C 生成でき、C 一致を honest 実測できる」を達成。

P1 敵対レビュー後の強化(2026-08-16, [[feedback_no_solo_ai_judgment]])

本セッションの自作コードへ独立敵対レビュー(Workflow 4 レンズ=算法正しさ / codegen・C 安全 / gate 健全性 / 統合・焦点安全、22 findings)を実施。全件を私が一次コード検証(v11 規律)し、 真の欠陥を修正:

次(P2 以降)

P3 完遂記録 — 文字列 op(2026-08-17, Opus5[1m]/ultracode, graph-loop-engineering)

文字列アルゴリズム 3 種を algo tier に追加。 「文字列 = コードポイント列を float64 で運ぶ」(Unicode スカラーは < 2^53 ゆえ厳密)で 既存の float64 バイナリ harness に無改造で載る(新 wire 型不要)。値は等値比較のみ(整数コードで 厳密)・位置/距離は厳密整数 → C-vs-Python bit 一致 かつ Python-vs-oracle は EXACT(tol 0)

P3 文字列 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

独立敵対レビュー Workflow(4 レンズ・各 finding を検証エージェントが実コード/実 compile で確認)= 3 findings 全 CONFIRMED(うち 2 件は同一根本原因を別レンズが報告)。一次検証の上で全修正:

P2 完遂記録 — gauss_solve(2026-08-16, Opus5[1m]/ultracode, graph-loop-engineering)

連立一次方程式 Gauss 消去(部分ピボット)を追加し、P2 数値計算を完遂。 ユーザー指示どおり graph-loop-engineering スキルで raptor work-graph にノード化し、tool driver に無人実行させた(二層方針= breadth は work-graph の difftest ゲート、敵対 findings 採否・push はセッションの human checkpoint)。

P2 gauss 敵対レビュー後の強化(2026-08-16, [[feedback_no_solo_ai_judgment]])

自作 gauss コードへ独立敵対レビュー Workflow(4 レンズ=numeric 正しさ / C 安全 / gate 健全性 / 統合・被覆、 各 finding を検証エージェントが実行再現)。5 findings 中 4 CONFIRMED を一次コード検証の上で全修正:

P1.5b 完遂記録 — Studio に general tier を read-only 表示(2026-08-17, Opus5[1m]/ultracode)

op ブラウザに general(algo)tier を表示。 画像フォーカスを薄めない設計 = general op は seq/scalar の別 計算モデルゆえ read-only(画像パイプラインに入れない)。

P4 完遂記録 — グラフ op(2026-08-17, Opus5[1m]/ultracode, bonus)

グラフアルゴリズム 3 種を algo tier に追加(候補外だがユーザー「全部進めて」+7-8h 自律に沿うボーナス)。グラフを 入力 seq にパック([n, m, (u,v,w)*m]、無向; dijkstra は src 前置 [n, m, src, ...])し既存 float64 harness に載せる。

P5 完遂記録 — 数論・圧縮・教育用ハッシュ(2026-08-17, Opus5[1m]/ultracode, graph-loop-engineering)

汎用アルゴリズム 5 種を algo tier に追加し、algo-c ロードマップ(P1→P5)を完遂。 整数を float64 で運ぶ (exact < 2^53)ため新 wire 型不要。ビット/整数演算は C 側で unsigned long long/unsigned int に cast して行い、 double へ戻す(結果は < 2^53 で exact)。全 5 op が exact(C==Python bit 一致 かつ Python==独立 oracle tol 0)。

P5 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

自作 P5 コードへ独立敵対レビュー Workflow(4 レンズ=algorithm-correctness / C-safety-codegen / gate-honesty / integration-focus、各 finding を検証エージェントが実 compile/実行で再現、18 agents)。14 raw → 9 CONFIRMED / 5 REFUTED。全 CONFIRMED を私が一次再現(自分で ziglang compile・実行)した上で修正。特筆すべきは「gate が自作の guard を falsify できるか」への深い突き:

P6 完遂記録 — 計算幾何(2026-08-17, Opus5[1m]/ultracode, 12h 自律・graph-loop-engineering)

幾何アルゴリズム 3 種を algo tier に追加(algo-c ロードマップ P1→P5 完遂後の拡張=P6。当初 TOC の「幾何=凸包/ 線分交差」に対応)。画像 tier の輪郭/領域処理への橋渡しでもある。2-D 点を入力 seq にパックし、整数座標 (各 [-100000, 100000])で全ての向き判定/靴紐和を厳密な整数にする(浮動小数除算を一切使わない)=C bit 一致 かつ Python==独立 oracle tol 0。

P6 敵対レビュー(2026-08-17, [[feedback_no_solo_ai_judgment]])

2 本の独立敵対レビュー Workflow(各 finding を検証エージェントが実 compile/実行/ストレスで再現)を並行実施:

P7 完遂記録 — 線分交差(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

幾何ツールキットを 1 op 拡張: segments_intersect(KIND_REDUCE)= 2 閉線分 [x1,y1,x2,y2,x3,y3,x4,y4] が交差するか (1.0/0.0)。画像の直線/輪郭解析への橋渡し。CLRS 33.1 の整数 orientation 法(proper crossing = 端点が相手の線を厳密に またぐ + 4 つの共線 on-segment 特殊ケース)。整数座標 [-100000,100000] で外積は厳密(|cross| ≤ 8e10 が long long に収まる)= C bit 一致。oracle = sympy.geometry の Segment 交差(記号計算=orientation とは全く別手法)。実測: 固定 8 ケース正解 + sympy と 2970 ランダム整数線分ペアで mismatch 0(共線重複/T 字/端点共有/near-miss を含む)。退化(点)線分は sympy が Segment を作れないため holdout から除外(op は一般 orientation ロジックで動くが未 gate=開示)。difftest passed(python exact / C bit 一致 / c_verified)、work-graph ノード無人 done(全 algo op 24 が gate 化)。

P7 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

3 レンズ敵対レビュー(検証エージェントが実 compile/実行で再現)= 1 raw → 1 CONFIRMED(MED・gate-honesty)。op 自体は 正しい(sympy と全一致)が、difftest holdout が d1/d3/d4 の on-segment 特殊ケース(端点が相手線分の内部に乗る=共有端点なし) を単独理由の 1.0 判定として一度も駆動せず、その分岐を落とした wrong op を gate が通す(50 holdout の判定が 1 つも変わらない)。 自己再現で確定(d3+d4 drop 変異が passed=True・[0,0,10,0,3,0,3,5]→0.0 誤り)。修正=各 on_seg 分岐(d1/d2/d3/d4)を単独理由と する固定 holdout ケース(端点が相手内部・軸並行 4 + 対角 2)を追加 → 各分岐を落とすと difftest が FAIL(d1/d2/d3/d4 すべて passed=False)を自前確認。既知解テストにも端点-内部 4 ケースを追加。全スイート 4765 → 4772 passed / 0 failed(+7)・ruff clean・ mypy 新規 0。

P8 完遂記録 — 探索/選択(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

探索/選択アルゴリズム 2 種を algo tier に追加(幾何から別ドメインへ移り tier を均等化)。比較ベースで任意の (NaN-free)double を扱う=結果は index or 既存要素ゆえ exact(tol 0)・C bit 一致。

P8 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

2 レンズ敵対レビュー(実 compile/実行検証)= 1 raw → 1 CONFIRMED(LOW・correctness)。正しさ不変だが性能欠陥: kth_smallest の quickselect が単一 pivot Lomuto ゆえ all-equal/低カーディナリティ大入力で O(n²)(median-of-three は重複を 保護しない・n=40000 all-equal で 7.44s、sorted/reverse は高速)。テストは holdout n≤30・計時テストが sorted のみで未捕捉。 姉妹 quicksort は既に 3-way(Dutch flag)partition を使用。修正=kth_smallest を 3-way(Dutch national flag)partition に 書換(equal-band で重複を畳む→all-equal を O(n) に・比較のみ+順序非依存で C==Python==sorted()[k] parity 維持)。自己再現で 確認=all-equal n=40000 が 7.44s → 0.0019s(O(n) 化)・correctness 5000 cases mism 0・difftest bit 一致。計時テストを sorted/reverse/all_equal/few_distinct に拡張(退行を実際にガード)。

P9 完遂記録 — 統計/集計(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

統計 op 2 種を algo tier に追加: count_distinct(distinct 値数=整数 count)/ mode_value(最頻値・小さい方が tie 勝ち)。 比較ベース(任意 NaN-free double)・結果は count or 既存要素ゆえ exact(tol 0)。両 op とも copy を sort → run 走査(結果は 順序非依存で C の qsort と Python の sorted が違っても bit 一致)。oracle=len(set()) / collections.Counter(独立機構)。 ★proactive 堅牢化: mode_value のゼロ mode で ±0.0 混在時、C の unstable qsort と Python の stable sort で返り値の符号が食い違い bit 不一致になりうる → + 0.0 で −0.0→+0.0 正準化(他値は不変)で C==Python を堅牢に(rle_encode の signed-zero 開示と同系)。 実測: 各 5000 ランダムケースで oracle mismatch 0・difftest passed(python exact / C bit 一致 / c_verified)。全 algo op 28 が gate 化。 ruff clean・mypy 新規 0。

P9 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

2 レンズ敵対レビュー(実 compile/実行/変異検証)= 1 raw → 1 CONFIRMED(MED・gate-safety)。正しさ不変だが gate coverage gap: mode_value の +0.0 正準化を落とす変異を holdout が falsify できない(唯一の signed-zero ケース [0.0,-0.0,0.0] が両 backend で +0.0-last にソート → 正準化削除でも bit 一致)。コメントが担保と主張する bit-check が正準化を一度も実際に駆動しない。修正= -0.0 が run 末尾に来ない [0.0,-0.0][-0.0,0.0] を holdout に追加(両順序=qsort tie 順に依らず片方は必ず発散)。自己再現で 確認=正準化削除変異が difftest FAIL・現行(正準化済)コードは追加ケースで bit 一致 pass。全スイート 4787 → 4796 passed / 0 failed

P10 完遂記録 — 数論(第2部)(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

数論 op 2 種を追加(P5 の整数機構の上に・category numtheory を共有)。整数を float64 で運ぶ(exact <2^53)・honest 域で全 モジュラー積が uint64/long long に収まる=C bit 一致 かつ Python==独立 oracle tol 0。

P10 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

2 レンズ敵対レビュー(実 compile/実行/変異検証)= 1 raw → 1 CONFIRMED(MED・c-safety-gate)。op 自体は正しく overflow-safe (353 敵対ケースで検証)だが、modular_inverse の holdout が宣言域 2^53 を駆動せず(in-domain m が ~1e9 止まり)、C の long long→int 幅縮小変異(2^53 域を壊す)が gate を bit 一致で通過。姉妹 pow_mod(base=exp=2^53 をピン)/ gcd_seq(2^53 ガード端)/ is_prime(near-2^32)は同種変異を捕捉するのに modular_inverse だけ未対応。修正=2^53 端ケース([2, 2^53−1] coprime→inverse・ large coprime near 2^53・[2^52, 2^53] both even→−1)を holdout に追加(Bezout 演算が |q·s|~2m~2^54 を駆動)。自己再現で確認= long long→int 変異が difftest FAIL・baseline は bit 一致 pass。oracle(pow)は既に対応済ゆえ holdout のみ追加。全スイート緑。

P11 完遂記録 — ビット操作(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

ビット操作 op 2 種を追加: xor_reduce(全要素の bitwise XOR)/ popcount_total(全要素の 1 ビット総数=Kernighan)。 非負整数を float64 で運び、域 [0, 2^53−1] で全値を 53 ビットに収める(XOR 結果も < 2^53=exact・popcount は小さい整数)= C bit 一致 かつ Python==独立 oracle(functools.reduce(operator.xor) / builtin int.bit_count()=Kernighan とは別機構)tol 0。 両 op passed=True・python exact / C bit 一致 / c_verified。各 3000 ランダムケースで oracle mism 0 を事前実測。fail-soft=負/非整数/≥2^53→0.0。 全 algo op 32 が gate 化。ruff clean(FURB161 で bin().count('1').bit_count() 化)・mypy 新規 0。

P11 敵対レビュー結果(2026-08-17, [[feedback_no_solo_ai_judgment]])

2 レンズ敵対レビュー Workflow(correctness + gate-safety、wf_7d130631-c0f)= findings 0(欠陥なし)。レビュアー1 は {findings:[]}、レビュアー2 は「ゲート mutation testing(実装を壊してゲートが捕まえるか)」の最中に window 圧縮で中断 (結果未産出)。規律に従い、死んだ background を蘇生せず、私が同じ mutation test を一次検証で完遂: xor_reduce/popcount_total の代表 7 変異(空初期化 acc=1 / OR 誤用 / 2^53 域境界 off-by-one / 負ガード除去 / Kernighan→shift[popcount≠bitlength] / +2 誤り / 2^53 admit)を holdout に対し実行 → 全 7 変異を独立 oracle が捕捉(oracle_err > 0)。結論=P11 ゲートは falsifying・確定欠陥なし(fed093a は正当・follow-up commit 不要)。

P12 完遂記録 — 拡張ユークリッド互除法(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

数論 op 1 種を追加(P5 の整数機構 + P10 の Bezout 不変量の上に・category numtheory を共有=P5+P10+P12)。 extended_gcd(KIND_MAP): 入力 [a, b](非負整数 ≤ 2^53)→ 出力 [g, x, y](厳密 3 値a·x + b·y = g = gcd(a,b))、 域外は [] fail-soft。反復版 two-variable sweep で係数を計算。係数は厳密(不変量 |q·s| = |old_s − new_s| ≤ 2·max(a,b) ≤ 2^54 が C の long long に収まる)ゆえ C == Python bit 一致。domain は [0, 2^53] inclusive(2^53 は exact・係数 |x|,|y| ≲ 2^52 も float64 で exact)。

P12 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

3 レンズ敵対レビュー Workflow(correctness / c-safety+gate-honesty / integration、各 finding を検証エージェントが実 compile/ 実行の mutation で再現、5 agents・125 tool uses)= 2 raw(同一根本原因)→ 1 CONFIRMED(MED・gate-cannot-falsify)。op 自体は 正しい(200k + 全端で検証・再帰 oracle と非発散・in-domain で long long overflow なし)が、difftest holdout の域外ケースが全て operand a([2^53+2,3]/[2.5,7]/[-1,7])で、唯一の bad-b ケース [7,NaN] は NaN が bd>=0.0 で短絡し b の 3 ガード節を 一つも単独駆動しない → b 側ガードの片側退行(a/b はコピペ対称ゆえ plausible)が両ゲート半分を通過(P5/P7/P9/P10 と同じ gate-coverage 教訓)。自己再現で確定: bd>=0 / bd<=2^53 / bd==int を _PY/_C 両方から削除 → 全て passed=True(MISSED)、対称な a 側削除は 全て passed=False(CAUGHT・a の域端が holdout にあるから)。修正=[valid_a, finite_bad_b] ケース([3, 2^53+2][7,-1][7,2.5]) を holdout と fail-soft テストに追加 → 再実測で b 側 3 削除が全て CAUGHT(passed=False, pydiff=inf)・baseline は 70 cases で bit 一致 pass。★検証エージェントの honest 訂正を採用(finding の過剰主張を却下): 「bd<=2^53 削除は b=2^62 で C long long overflow UB」は 不正確 — b=2^62 で C(long long)と Python(bignum)は bit 一致(overflow なし)。真の誤りは出力の精度損失(Bezout 係数が > 2^53 で float64 に厳密表現できず a·x+b·y==g が破れる)であり、b<=2^53 上限はこの精度を守る。機構は誤りだが欠陥と remedy は成立=採用。

P13 完遂記録 — 最近点対(分割統治)(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

計算幾何を 1 op 拡張(P6/P7 に続く geometry 第2弾): closest_pair(KIND_REDUCE)= 2-D 整数点群の最小 2 乗距離分割統治(CLRS 33.4)で求める。入力 [x0,y0,x1,y1,...](2n 個・整数座標 [-1e5,1e5])→ 出力=最小 2 乗ユークリッド距離 (整数厳密)。2 乗距離のみ(sqrt なし)ゆえ long long/整数 float64 に閉じ、C==Python bit 一致。最大 2 乗距離 = (2e5)²×2 = 8e10 < 2^53=exact。fail-soft=点 <2(n<4)/ 奇数長 / 座標が非整数・[-1e5,1e5] 域外 → -1.0。

P13 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

3 レンズ敵対レビュー Workflow(correctness / c-safety+gate-honesty / integration、各 finding を検証エージェントが実 compile/ 実行の mutation で再現)= 3 レンズが同一根本原因に収束 → 1 CONFIRMED(severity=私の初期評価 MED / 検証エージェントは HIGH =gate-honesty 失敗[gate が誤 op を green-light]を重く見た。honest 開示として両論併記・修正内容は同一)。op 自体は正しい(30k+16k 敵対ケースで総当りと mism 0)が、difftest holdout が strip の y-scan を immediate neighbor(j==i+1)より先へ駆動しない → strip 前方走査を j==i+1 のみに切り詰める regression を gate が falsify できない(7 近傍定理は「高々 7」であって「1」ではないため、 y 順で非隣接な最近ペアが実在しうる)。自己再現で確定: 走査を range(i+1, min(i+2, sc)) に切り詰めた mutation を _PY/_C 両方に 適用 → passed=True(MISSED)。falsify する最小ケースを整数格子で探索し発見(例 [0,-6,-2,-2,4,-3,-5,3]= 最近ペアが y 順で 2 つ離れる → full/総当り 20 だが j==i+1-only は 25)。修正=strip 内で最近ペアが y-sorted で非隣接になる 3 ケース ([0,-6,-2,-2,4,-3,-5,3]→20 / [-4,5,-1,-3,0,-1,3,-3]→5 / [-1,-6,-1,0,-5,-4,1,-4,4,4]→8)を holdout と既知値テストに追加 → 再実測で j==i+1-only mutation が CAUGHT(passed=False, pydiff=12)・baseline は 61 cases で bit 一致 pass・他 5 mutation も回帰 なし。既存の 6 mutation(strip 省略/sq y 無視/座標上下限/整数性/空 strip)に加え strip 走査深度も falsify 可能に(P12 の gate-coverage 教訓を geometry の strip 走査へ拡張)。

P14 完遂記録 — Huffman 最適プレフィックス符号コスト(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

データ圧縮を 1 op 拡張(P5 rle_encode に続く compress 第2弾): huffman_cost(KIND_REDUCE)= 記号頻度 [f0,f1,...] (非負整数 ≤2^40)に対する最適プレフィックス(Huffman)符号の最小総コスト=全内部ノードの結合重みの和(=Σ freq×符号長)。 ★核心=最適コストは tie 不変(記号ごとの符号長は tie 破りで変わるが、総コストは頻度多重集合で一意)ゆえ C と Python が等重み要素を 違う順で取り出しても総和は同一=bit 一致が綺麗に成立。整数を long long で運ぶ(域ガードで < 2^54 に束縛=overflow なし)。

P14 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

3 レンズ敵対レビュー Workflow(correctness / c-safety+gate-honesty / integration、各 finding を検証エージェントが実 mutation で再現)= 3 CONFIRMED(いずれも overflow bail 境界の gate-coverage・op 自体は正しく tie 不変も 50k+4k+20k で確定済)。correctness 系の指摘 0 (tie 不変 claim・two-queue の最適性は堅牢)。CONFIRMED は全て「merge-total>2^53 の fail-soft 境界」の網羅:

P15 完遂記録 — 最長増加部分列の長さ(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

探索/選択を 1 op 拡張(P8 binary_search/kth_smallest に続く search 第2弾・DP/patience sorting の新アルゴリズム族): lis_length(KIND_REDUCE)= 任意の NaN-free double 列の最長狭義増加部分列(LIS)の長さpatience sorting で求める。 比較のみ(値に算術を施さない)ゆえ長さは配列固有で一意=C==Python bit 一致。tails[k] に長さ k+1 の増加部分列の最小末尾を持ち、 各要素で tails[mid] < x(bisect_left・狭義)位置を置換 or 末尾拡張(O(n log n))。空→0.0、NaN 混在→-1.0 fail-soft(x != x で検出)。

P15 敵対レビュー結果(2026-08-17, [[feedback_no_solo_ai_judgment]])

3 レンズ敵対レビュー Workflow(correctness / c-safety+gate-honesty / integration、mutation 検証)= findings 0(全レンズ指摘なし)。 patience sorting の狭義比較・NaN ガード・tails バッファ安全・O(n²) DP oracle の独立性・holdout の狭義単独駆動を検証し、falsify 可能な 欠陥は検出されず。事前の mutation 3/3 捕捉(狭義 <<=/NaN ガード/二分探索方向)と 40k DP 一致で gate は堅牢。

P16 完遂記録 — 転倒数(マージソート法)(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

統計を 1 op 拡張(P9 count_distinct/mode_value に続く stat 第2弾): count_inversions(KIND_REDUCE)= 任意の NaN-free double 列の 転倒数(i<j かつ a[i] > a[j] の狭義ペア数)を計数マージソートで O(n log n)。比較のみ(値に算術なし)ゆえ count は配列固有で一意 =C==Python bit 一致。マージ時に右列を先取りするたび残りの左列数を加算(古典)。count は非負整数ゆえ -1.0 が safe sentinel: NaN→-1.0 fail-soft、空/単一→0.0。等値は転倒でない(tie で左を先取り=arr[i] <= arr[j])。

P16 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

★worktree 隔離レビューの初適用が成功: 3 レンズ × 隔離 git worktree(各エージェントが cd76da0 から自分専用の copy を作り mutation) → 本 repo の algo.py は終始 clean(検証エージェントも「real repo は read only・隔離 worktree で mutation・後始末済」と明記)。P14 の 汚染問題を構造的に解消。結果=2 CONFIRMED(両 LOW)・correctness 系 0(op は正しい):

P17 完遂記録 — 最大部分列和(Kadane 法)(2026-08-17, Opus5[1m]/ultracode, 12h 自律)

検索/最適化を 1 op 拡張(P8 binary_search/kth_smallest・P15 lis_length に続く search 第3弾): max_subarray(KIND_REDUCE)= 整数値 double 列の 連続部分列の最大和Kadane の O(n) リセット走査(cur = max(0, cur+x); best = max(best, cur))で。空部分列を許容(和 0)ゆえ答は常に ≥ 0 (全負→0.0)=-1.0 が safe sentinel。整数域(各 |x| ≤ 2^52 かつ絶対値の走行和 ≤ 2^52)で全ての部分和を厳密整数 < 2^53 に保つ → 答は厳密・ C==Python bit 一致。独立オラクル(全 O(n²) 部分列の総当り最大)は整数加算の結合律ゆえ Kadane と厳密一致。fail-soft -1.0 = NaN / inf / 非整数 / |x| > 2^52 / 走行和オーバーフロー。

P17 敵対レビュー後の強化(2026-08-17, [[feedback_no_solo_ai_judgment]])

worktree 隔離レビュー(4 エージェント・3 レンズ + 敵対 verify)= 1 CONFIRMED(LOW・gate-honesty)/ refuted 0。検証エージェントは 隔離 worktree で全再現し、本 repo の algo.py 無汚染(status --porcelain は auto の SESSION_SUMMARY のみ)を明記。correctness/integration 系 0(op は正しい):

2026-09-03: 敵対レビュー(algo + C codegen)の修正 8 件