STEP 1654 — 幾何平均ゲート素子 v0.1

2026-09-01 · 「既存 AI 不可能部品」 arc 4 element machine 第 2 部品 · 3 gauge を 1 本の verdict に 束ねる aggregation layer · all-or-zero property で hill-climb 病理を 構造的に 予防

由来

chat-Claude 論文レビューで指摘された 「単一ベンチマークを hill-climb すると 未見の 別ベンチマークで −11.9% まで落ちる」 病理 (付録 D.1) の 構造的予防装置。 複数計器の 幾何平均を 目的関数にすると、 1 本でも ゼロなら 全体 ゼロ が 効くため、 弱い dimension を 他の 強い dimension で mask できない。

「source_freshness / harvest_lag / dedup_collision の 3 計器を 個別に 読むのでは なく、 幾何平均で 1 本の 数に 束ねる 素子を 作ると 「1 本でも ゼロなら 全体 ゼロ」 が 効く」 (chat-Claude 2026-09-01)

数式

geoMean(s1, s2, …, sn) = ( ∏i=1..n si )1/n

各 gauge score si ∈ [0, 1] は 「その gauge が 健康と 判定した 割合」。
実装は log-space (mean of log + exp) で 数値安定性を 確保、 si = 0 は log(0) 回避で short-circuit 返却。

3 gauge の 対応 (v0.1)

gauge入力 filenormalizer実測 score (2026-09-01)
freshnessdata/comparator/freshness-latest.jsoncronSummary.fresh / cronSummary.total17 / 50 = 0.340
harvest_lagdata/comparator/harvest-lag-v02-latest.jsonsummary.fresh / summary.totalFeeds1 / 9 = 0.111
feed_cadencedata/comparator/feed-cadence-latest.jsonok+measured / total9 / 9 = 1.000

実測 aggregate: geoMean = (0.340 × 0.111 × 1.000)1/3 = 0.3355FALSE

ユーザーが 挙げた 3 つ目 dedup_collision は 現物が 未実装のため、 v0.1 は 実在する feed_cadence を 3 本目に 採用。 v0.2 で dedup_collision gauge 実装時に 加算可能 (N を 3 → 4 に 拡張、 anti-silent-pass 不変条件は 崩れない)。

D-FUMT₈ mapping (v0.1 threshold)

geoMeanD-FUMT₈意味
= 0ZEROall-or-zero 発火 (1 本でも ゼロ)
(0, 0.5)FALSEaggregate 不健康
[0.5, 0.75)NEITHER中間帯、 判断保留
[0.75, 1.0]TRUEaggregate 健康
missing input / schema mismatch / zero-denominatorABSTAINsilent-skip 禁止 (下記 不変条件)

Anti-silent-pass 不変条件 (STEP 1637 harvest_lag + STEP 1650 sougou-connectors 同族対策)

#条件ふるまい理由
1gauge input file が 欠落ABSTAIN、 生存 gauge で 計算しないN を 減らすと geoMean が 上がる = 「dimension を 削れば 好スコア」 病理 (paper 付録 D.1)
2denominator = 0 (総 source 0 件)per-gauge NaN → aggregate ABSTAIN0/0 を silent 1.0 or 0.0 に 潰さない
3score が [0, 1] 外throw (validation)silent-clip 禁止、 caller 側の bug を surface
4weight 調整v0.1 = 全 1 固定weight tuning は 事後合理化経路になり得る。 v0.2 defer + 実装時は 別 STEP で 監視素子 3 と 二重 verify
5flowing (freshness) や notJudged (harvest_lag)exclude ではなく not-fresh として denominator に 残す「skip を pass に 畳む」 病理 (STEP 1637 harvest_lag + STEP 1650 sougou run_all_tests) の 予防

実測 (2026-09-01)

$ npx tsx scripts/gate/run-geo-mean.ts
geo-mean: 0.3355 → FALSE | freshness=0.340 | harvest_lag=0.111 | feed_cadence=1.000
written: data/gate/geo-mean-latest.json

解釈: feed_cadence は 満点 (1.000) だが、 harvest_lag が 1/9 で 弱い ため、 幾何平均が 0.34 に 落ちる。 算術平均なら (0.340 + 0.111 + 1.000) / 3 = 0.484 で もう少し 高く 見えるが、 幾何平均は 「弱い dimension を mask させない」 特性で 単一 gauge の 病理を 全体に 反映する

test 結果

$ npm run test:step1654
STEP 1654 tests: 72 passed, 0 failed

7 section, 72 assertion — core (geometricMean 数学) + mapToD8 (境界) + 3 normalizer (real shape + zero-denom + schema mismatch) + gate runner (missing / schema mismatch / zero-denom / <2 measured / all-or-zero / healthy / middle band + 実 production file 読込) + determinism。

実装 file

file役割
src/aios/gate/geometric-mean-gate.tslibrary core (pure, no fs)
scripts/gate/run-geo-mean.tsCLI runner (fs 読込 + data/gate/ 出力)
test/step1654-geo-mean-gate-test.ts7 section, 72 assertion
data/gate/geo-mean-latest.json実測 output

4 element machine の 中での 位置

#素子状態
1ヒルクライム機械 (探索器)未着手 (提案器なし、 (c) route = 手動候補 + 評価器自動化 も 未)
2幾何平均ゲート素子本 STEP で v0.1 実装完了
3チート後方監視素子未着手 (ledger の 上に kind:"submission-hash" バインディングで 実装可能)
4凍結ミニ論文素子STEP 1359 で 実装済 (rei-preregister v0.1、 external anchor は v0.2 defer)
Honest scope (v0.1)

関連 STEP

Written by Claude on 2026-09-01 · STEP 1654 · commit / DOI は 実装ファイルの git log で 確認。