Repository navigation
Operations Tuning
gaottt/config.py の GaOTTTConfig を編集してサーバー再起動で反映。
すべてのハイパーパラメータの一次ソース: gaottt/config.py
スカラーなハイパーパラメータは以下の優先順 (上が勝つ) で解決される:
-
環境変数
GAOTTT_<FIELD>— フィールド名を大文字化 (例:gamma→GAOTTT_GAMMA=0.8、mass_bh_theta→GAOTTT_MASS_BH_THETA=6.0)。config.jsonを編集せず 1 つの knob だけ一時変更したいとき (例: Phase M Stage 2 の θ チューニング観測) に使う。boolは1/true/yes/on(大小無視) のみ True、それ以外 (false/0/空) は False —bool("false")==Trueの罠を回避。型不正な値は WARNING ログを出して無視 (起動は継続)。旧GER_RAG_<FIELD>も deprecation 警告つきで受理。 -
config.json—~/.config/gaottt/config.json(Linux/macOS) /%APPDATA%/gaottt/config.json(Windows)。複数フィールドの恒久設定はこちら。 -
dataclass 既定値 —
gaottt/config.py。
data_dirのようなfield(default_factory=...)/ コレクション型は env 個別上書きの対象外 (data_dirは専用のGAOTTT_DATA_DIRで解決、config ファイルパスはGAOTTT_CONFIG)。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| alpha | 0.05 | mass boost の重み | 頻出ドキュメントを強く優先 | 類似度ベースに近づく |
| delta | 0.01 | 時間減衰の速さ | 古いアクセスが早く忘れられる | 長期間アクセスが維持 |
| gamma | 0.5 | temperature の感度 | ノイズが大きくなり探索的に | 安定的な検索結果 |
| eta | 0.05 | mass 増加速度 | 少ないクエリで重要度↑ | ゆっくり蓄積 |
| edge_threshold | 5 | 共起エッジ形成の閾値 | 強い共起のみエッジ化 | 弱い共起でもエッジ化 |
| top_k | 10 | 既定返却件数 | 多くの結果を返す | 上位のみに絞る |
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| gravity_G | 0.01 | 万有引力定数 | 急速に引き寄せ合う(創発的) | 穏やかな変位(安定) |
| gravity_eta | 0.005 | 変位の学習率 | 1 回のクエリでの変位↑ | 段階的に変位 |
| displacement_decay | 0.995 | 変位の定期減衰 | 変位が長く維持 | 早く元に戻る |
| max_displacement_norm | 1e6 | 変位の上限 (Phase I で実質 ∞ 化) | n/a (cap が事実上 off) | 小さい値で疑似的なハードキャップに戻せる(緊急ノブ)。Phase Q orbit mode (orbital_tick_enabled=True) では 2.0 程度の有限値が必須 — 近傍 1/r² 近接特異点の runaway backstop(下記「公転・閉軌道」節) |
| candidate_multiplier | 3 | FAISS 候補倍率 | 広い候補から選べる | 高速だが候補が狭い |
| パラメータ | 既定 | 影響 |
|---|---|---|
| orbital_friction | 0.05 | 速度の摩擦(毎ステップ) |
| orbital_friction_age_factor | 0.1 | 未アクセスノードへの追加摩擦(軌道 tick では強制 0) |
| orbital_max_velocity | 0.05 | 速度の上限ノルム |
| orbital_anchor_strength | 0.02 | アンカー復元力(Hooke's k) |
ノードを 自分の anchor(原始 embedding)を中心に閉軌道(ロゼット)で公転 させる保存系レジーム。核心の発見: Hooke アンカー F = -k·d は Bertrand の定理で閉軌道を生む 2 つの中心力の 1 つ(等方調和振動子) なので、軌道化に足りないのは新しい力ではなく 接線速度(角運動量)だけ。公転中心 = 自分の articulated self なので anchor migration ゼロ(衛星化・彗星脱出は公転中心が他者 = 線の外で、Phase Q は内側に留まる)。詳細: Plans — Phase Q。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| orbital_tangential_alpha (α_t) | 0.0 |
seed 時に付与する接線速度の大きさ(radial 速度ノルムに対する倍率)。compute_gravity_kick と supernova seed で displacement(∥ gravity radial)と非共線な velocity を作り L = d × v ≠ 0 にする |
0.5–1.0 で楕円〜円に近づく(角運動量 ↑、軌道が太る) |
0.0 で完全 no-op(直線往復、legacy bit-for-bit) |
| orbital_integrator | "euler" |
update_orbital_state の積分法。"verlet" で velocity-Verlet(symplectic、O(dt²)、力 2 回評価)に切り替え、長時間の軌道安定性が向上 |
— |
"euler" で legacy semi-implicit Euler(production 不変) |
| orbital_tick_enabled | False |
dream loop が毎サイクル軽量 _orbital_tick を回し、lively なノード(|v| > orbital_lively_v_min)だけを recall 抜きで積分(recall = エネルギー注入 / tick = 自由発展、の役割分離) |
True で連続時計(自走公転・歳差・螺旋落下) |
False で従来どおり recall 駆動のみ |
| orbital_lively_v_min | 0.001 | これ未満の |v| は "cold" として tick から除外 |
上げると tick 対象が減りコスト ↓(早く cold 化) | 下げると微速ノードも回り続ける |
| orbital_tick_max_nodes | 256 | tick 1 回あたりの処理上限(コスト bound)。超過分は次 tick へ繰り越し + ログ | 上げると 1 tick の網羅性 ↑(CPU 負荷 ↑) | 下げると安全側(大規模 lively set でも tick が軽い) |
| orbital_tick_neighbor_gravity_enabled | False |
tick が lively set を相互近傍として 近傍重力を効かせるか。False(既定)= tick 内で gravity_G=0 → 純 self-anchor 楕円公転(各ノードが自分の x₀ を周回、β は有効) |
True で結合(本番 field では coherent 暴走、実験専用 — 下記★★) |
False が安全側(推奨)。本番実測で確定した既定 |
★★ tick の近傍重力は既定 OFF(2026-05-30 本番実測の rollout finding): 本番 41K field の隔離コピー実測で、
_orbital_tickが散在 lively set を相互近傍として渡す実装(plan §3.3 の per-node FAISS 近傍探索と乖離)は、RURI の狭 cosine 帯で近傍重力が coherent に加算 し net|a|p50≈10/max≈640(単一ペア最大 0.7、1/r² 特異点ではない)vs anchor 0.005 → ~1000倍、displacement を clamp に張り付け self-limiting を殺すと判明。純 self-anchor(G=0)は bounded + self-limiting で健全。よって既定で tick 近傍重力を切る。Trueは tamed 近傍重力(per-node 真 FAISS 近傍 or 大幅減 G)の再設計(= rosette、future work)の実験用。詳細: Plans — Phase Q §8。
★ orbit mode では
max_displacement_normを有限値に必須: Phase I がmax_displacement_norm=1e6(実質 ∞)にしたのは「Hooke + friction + velocity cap が自然均衡を作るから cap 不要」だったが、これは 近傍重力が穏やかな relax regime 限定。接線速度入り orbit + 近傍の 1/r² 近接特異点は velocity clamp(0.05) では止まらない正味の外向きドリフトを生み、500 step で\|d\|=26まで発散する(Stage 3 で実測・特性化)。orbit regime の runaway backstop はmax_displacement_normclamp そのもの なので、orbital_tick_enabled=Trueのときは2.0程度の有限値を設定する(config.__post_init__がmax_displacement_norm > 100.0のとき警告を出す)。
チューニング助言 (Phase Q bundle、2026-05-30 本番実測で改訂): 公転を本番で有効化する推奨束は
orbital_tangential_alpha=0.5–1.0/orbital_integrator="verlet"/orbital_friction=0.005(0.05 → 1/10、e-fold ~100 分で数十周後に井戸へ螺旋落下 = 熱力学的終末)/mass_anchor_extra_strength=1.0(質量依存周期 — 重い星ほど緩い anchor・長周期・広い軌道、Kepler 第3法則ではなく 周回 star 自身の質量がバネ定数を決める調和振動子)/max_displacement_norm=2.0(上記必須)/orbital_tick_enabled=True/orbital_tick_neighbor_gravity_enabled=False(上記★★ より必須 — 純 self-anchor 公転)。すべて default OFF(α_t=0で bit-for-bit rollback)なので、measurement-first で env opt-in(GAOTTT_ORBITAL_TANGENTIAL_ALPHA=0.5等)→ 1–2 週観測 →tests/perf/test_tier4_phase_q_orbital.pyで displacement 分布を見て確定、の運用 pattern を踏む。本番投入前に DB backup + 他 MCP/REST プロセス停止(write-behind 上書き罠)。本番 velocity field は飽和(median|v|=0.05)だが、純 self-anchor 公転下では gentle に settle する(bounded、clamp 不到達)ので強制 cool-down は不要。
密な corpus では近傍重力ベクトルが RURI の狭 cosine 帯で coherent に加算(coherence ~0.8-1.0、net∝N)し、anchor 復元力の 10⁴-10⁵倍・重い裾(ratio p9010⁵)になる。単一の大域 gravity_G ではこの裾を飼えないので、per-node で attractive 近傍力(近傍重力 + mass-BH)を g_i = min(1, α · k_eff(m_i) · max(‖d_i‖, d_floor) / ‖acc_neigh‖) で cap する(密度適応オートゲイン、方向は保存、anchor / query 引力 / Λ は cap しない、source 分岐ゼロ)。詳細: Plans — Phase Q2。
| パラメータ | 既定 | 説明 |
|---|---|---|
| gravity_neighbor_governor_enabled | True |
近傍重力 governor。2026-05-31 に default ON へ昇格(段階4 acceptance + 本番 live healthy を承けた owner 判断、規約「新 field は default OFF」からの意図的 promotion)。False で bit-exact pre-Q2 legacy |
| gravity_neighbor_governor_alpha (α) | 0.2 | cap 目標 = α × anchor 力スケール。query 引力の effective 学習率を実質決める(governor が近傍重力を抑えると query 引力項が un-mask される) |
| gravity_neighbor_governor_disp_floor | 0.1 |
‖d‖ の床。anchor 直近(d≈0)でも cap ref が 0 にならないようにする |
チューニング助言:
αが肝。上げると近傍重力の許容量が増え(cluster 結合が強まる)query 引力の effective 学習率は相対的に下がる、下げると近傍重力をより強く抑え query 引力ドリフトが効く(段階4 実測: ranking は単一クエリで中立だが、recall を重ねた drift が α 依存で OFF 0.018 → ON 0.832)。0.2は保守的初期値。measurement-first: 1-2 週観測して「query 方向ドリフトが relevance を改善するか / しすぎないか」を見て調整、envGAOTTT_GRAVITY_NEIGHBOR_GOVERNOR_ALPHA=0.3等で JSON 編集なしに動かせる。velocity 飽和が起きている既存 DB は M006 cooldown(Operations — Migration §Phase Q2)とセットで投入。pre-Q2 挙動が要るときだけGAOTTT_GRAVITY_NEIGHBOR_GOVERNOR_ENABLED=false。
compute_acceleration の 2 番目と 4 番目の項。recall 時に retrieved nodes へ query 方向の小さな引力 (kick、4 項目) を加える一方、anchor (raw embedding) への復元力 (Hooke、2 項目) を低 mass で増幅する (Stage 4)。F_kick = α · score · gate · (q - pos), a_kick = F_kick / m_i で mass damping が自動で効く (BH 化 node はほぼ動かない)。Stage 3 では gate = tanh(m_i / θ) で新規 (低 mass) ノードが anchor に守られる — 単一アトラクタ pathology の防止策。Stage 4 はその対称形 — Hooke の effective k を k · (1 + β · (1 - tanh(m / θ))) に拡張し、軽い星を anchor 側からも守る。transient force — Hooke が raw embedding を anchor として引き続き保持するので anchor migration ではない。詳細: Plans — Phase I §Stage 2-4。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| query_kick_strength | 0.01 | 結合定数 α (G に類似) | recall ごとの drift ↑(短期で query 方向に集まる) | drift が緩慢、長期累積でしか効かない。0 で完全 no-op (roll-back) |
| query_kick_enabled | True |
グローバル off スイッチ | n/a |
False で 4 項目を完全 skip (config 即時 off) |
| mass_anchor_threshold (θ) | 3.0 | Stage 3/4 の gate 特徴点 (tanh(1)≈0.76 が ここ)。kick と Hooke で共有 |
攻撃的 (θ=1 → 新規 m=1 で gate=0.76、ほぼ満額)。新規ノードの drift 即時化 |
保守的 (θ=10 → 新規 m=1 で gate=0.10、ほぼ動かない)。0 で Stage 2 へ rollback (gate=1.0 強制、Stage 4 も θ_eff=1.0 の安全 fallback) |
| mass_anchor_extra_strength (β) | 0.0 |
Stage 4 — 低 mass 系の Hooke 増幅倍率 |
1.0 で m=1 ノード anchor 1.7×、2.0 で 2.4×。低 mass 系の displacement 均衡点が下がる、軽い星の drift が更に抑制される |
0.0 で完全 no-op (Stage 1-3 へ rollback、bit-for-bit) |
チューニング助言 (Stage 3 kick): per-step acceleration は
orbital_max_velocity=0.05で cap されるので、α / m × score × gate × \|q-pos\|が ~0.05 を超えると効きが頭打ち。質量 1 の新規 node + score=1 + |q-pos|=1.4 (unit-norm 直交) + θ=3 で gate=0.32 → α=0.11 が cap 境界 (Stage 2 単体の 0.035 から余裕拡大)。α=0.01(既定) は安全側、mass_anchor_threshold=3.0で 新規ノードは ~32%、mature ノード (mass≥10) はほぼ満額 という世代論的挙動。pathology が再発したら θ を上げる、新規ノードの surface が遅すぎたら θ を下げる。チューニング助言 (Stage 4 Hooke β): 既定
β=0は opt-in 安全側 —mass_anchor_thresholdを 1-2 週間運用した上で本番tests/perf/test_tier4_*.pyで displacement 分布を見て活性化を判断。低 mass 系 (mass≤2) の|d|p99 が anchor 側からまだ過剰に見えるなら β=1 を試す (anchor 1.7× 増、mature 系は影響ほぼ無し)。θ は Stage 3 と共有 なので、両者を別々に持つ場合は Stage 5 候補 (source-aware θと並列でロードマップ)。βを変えた後の検証はscripts/perf_baseline.py --label "stage4-β1"で before/after baseline 取ってperf_diff.pyで 25% gate を超えないか確認するのが運用 pattern。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| saturation_rate | 0.2 | 返却飽和の速さ | 少ない返却で飽和(新鮮さ重視) | 何度も同じ結果(安定重視) |
| habituation_recovery_rate | 0.01 | 馴化からの回復速度 | 早く新鮮さ回復 | 長く飽和持続 |
| thermal_escape_scale | 5000 | (Phase M で deprecated)共起 BH の温度脱出効果。compute_acceleration から呼び出し削除済、scripts/visualize_3d.py 互換のため定義は残存 |
||
| bh_mass_scale | 0.5 | (Phase M で deprecated)共起 BH 質量スケーリング。同上 |
recall / explore のレスポンス各 item に additive な score_breakdown を付与する。expected_sum = (virtual_cosine · decay_factor + wave_score + mass_boost + emotion_term + certainty_term) × saturation で final_score を literal に再現できる。詳細: Plans — Phase O、MCP-Reference-Memory.md、REST-API-Reference.md。
| パラメータ | 既定 | 影響 |
|---|---|---|
| expose_score_breakdown | True |
each QueryResultItem に ScoreBreakdown を attach。False で None を返す (legacy 互換、context 数 byte 節約) |
| training_delta_enabled | True |
recall/explore response に TrainingDelta (state 変化 trailer) を attach。False で None を返す (legacy 互換) |
| training_delta_topk_only | True |
delta dicts (displacement_changes / mass_changes) を top-K 結果の node のみに限定 (context 経済)。False で全 reached node を含める (debug / observability mode) |
| auto_route_enabled | True |
recall/explore の query 形式が構造化 aspect に match したら reflect を並走実行して routing_hint.reflect_summary に attach。False で完全 off (legacy 自由文 recall のみ) |
| list_mode_excerpt_chars | 80 |
Phase O Stage 4 — recall(mode='list') で各結果の content を切り詰める文字数 (改行は空白に置換)。下げれば context 節約、上げれば 1 件あたりの情報量増。20 で 1 行 ~12 件相当、80 で 1 行 ~3 件相当 (typical agent memo 240 字 ≈ 3 行) |
| dormant_age_threshold_seconds |
7 × 86400 (7 日) |
Phase O Stage 5 — explore(mode='dormant') で「忘れた」と見なす last_access cutoff。短くすると最近のものまで surface、長くすると本当に枯れた node のみ。2026-06-01 に 30d → 7d へ既定昇格 — active-user corpus では 30d gate が pre-filter を 0 件にし dormant lens が死ぬ (実測: 41k corpus で age=30d→0 候補 / age=7d→p10 で 8 候補)。元々は env GAOTTT_DORMANT_AGE_THRESHOLD_SECONDS=604800 で 7d にする想定だったが、proxy 共有 backend が per-frontend env を継承しない罠 (project_proxy_backend_env_not_delivered) で env が engine に届かず、GLM acceptance (handover-2026-06-01 §4.3 / evaluation-2026-05-27 §3.4) で 2 度 0 件が再発 → env 非依存にするため code default 化 |
| dormant_mass_threshold | 2.0 |
Stage 5 mass 上限 — mature gate point (gate=tanh(m/3) ≈ 0.58 で 1.0 飽和の 58%) と整合。これを超えた node は「raw cosine 弱者として埋もれてる」状態ではないので dormant 対象外 |
| dormant_source_classes | ("agent", "value", "intention", "commitment", "note", "reference", "exploration-report", "compaction") |
Stage 5 — surface 対象の structural identifier 列挙。Phase D 系 (value/intention/commitment) + agent/note/reference + exploration-report (self-authored 化石レポート) + compaction (context compression 層)。tweet / file / hypothesis は除外 (これらは自己発信ではない) |
| dormant_mass_percentile | 10.0 |
Lateral Association Stage 7.2 (2026-05-26、暫定デフォルト active 2026-05-26): 分布相対の mass cut。設定すると dormant_mass_threshold の絶対値 (2.0) を捨て、active corpus mass の P パーセンタイル値を cut として使う。None で legacy 絶対値挙動 rollback。production で「26k memo の mass 分布が上振れし ≤ 2.0 が常に 0 件」となる失敗 (project_phase_o_stage_5_production_observation) への対処として 10.0 をデフォルト化。本番チューニングは scripts/diag_dormant.py --data-dir <prod> で「~5-15 dormant 候補が surface する最小パーセンタイル」を採用 (典型は 10-30 の範囲)。重要: パーセンタイルは dormant_age_threshold_seconds の age gate と併用して初めて効く — age が厳しすぎると pre-filter が 0 件になり percentile cut の手前で全滅する。この理由で age 既定は 2026-06-01 に 30d → 7d へ昇格した (上行参照、env 非依存化)。診断は scripts/diag_dormant.py --age-days 7 で age gate を合わせて見ること |
| recall_trailer_verbose_modes | "detail,full" |
Instruction Surface Hygiene Stage 2b — breakdown 行と ## 訓練差分 trailer を出力する output_mode の comma 区切り。compact/ids/list では抑制 |
| recall_reason_line_modes | "detail,full,compact,ids,list" |
Observation Apparatus Round 2 Stage B — reason: 1 行を出力する output_mode。breakdown/trailer と独立に制御。全 mode が既定なので triage 中でも dominance artifact 警告が見える |
チューニング助言 (Stage 1): 既定
Trueのまま運用推奨。breakdown は scoring loop と同じパスで構築されるので overhead は無視可能 (BM25 hit set 算出に 1 query × O(n) 程度)、context payload も 1 item あたり ~140 byte 増のみ。LLM caller (Claude / agent) がbreakdown.raw_cosineを見て「semantic 弱いのに mass で勝った結果」を自律的に弾けるようになるので、Sonnet 本番 acceptance で観察された "score deception" 系の罠を機構レベルで防げる。Falseにする状況は (a) extreme low-context client (b) breakdown 表示で混乱する non-TTT-aware caller 向け fallback (c) emergency rollback の 3 ケースのみ。
チューニング助言 (Stage 2): 既定
True+topk_only=Trueのまま運用推奨。delta capture は_update_simulationの前後でdisplacement_norm+massを snapshot するだけなので overhead は O(top_k) で無視可能、payload も top_k=5 で ~250 byte 増程度。topk_only=Falseは デバッグ専用 —wave_initial_k × max_depth^depthの reached node 全件 (大規模 DB で数百件) が delta dict に乗るので context を消費する。「mass が累積していく感覚」を LLM caller が掴めるのは Hebbian deliberate rehearsal の literal な前提条件、cache_hit=Trueの trailer は「自分が field を訓練できる時 / できない時」の境界を明示する効果。training_delta_enabled=Falseは emergency rollback 用、expose_score_breakdownと同じ判断基準。
チューニング助言 (Stage 3): 既定
Trueのまま運用推奨。classifier 自体は O(patterns) 個の compiled regex を 1 query に走らせるだけ (現在 ~15 pattern、< 10 µs)、pattern が match した場合のみ並走でreflectaspect 1 件を走らせる。reflectaspect は最大でcache.get_all_nodes()を一巡 +store.get_document()を最大 limit=10 回叩く程度なので 1k node 規模で数 ms、22k node 規模でも 100ms 以下。Falseにする状況は (a) classifier の誤 routing が頻発する environment (現状の Japanese + English pattern では未観測) (b) 並走で別 path を走らせたくない low-latency 用途 (c) reflect summary が context 圧迫する extreme tight loop。per-call のauto_route=Falseで test / 一時診断にも対応。Phase M の「source 分岐ゼロの単一規則」を侵さない: pattern は caller の query 形式 (surface form) を classify するだけで、physics rule (mass update / Hooke / kick) は一切触らない — query intent layer の routing。
チューニング助言 (Stage 4):
list_mode_excerpt_chars=80で 1 行に収まる切り詰めが既定。recall(mode='list', top_k=20)の典型 payload は ~1.8 KB (header + breakdown + 80字 excerpt × 20)、mode='detail'の同 top_k=20 は agent memo 平均 240字 × 20 = ~5 KB 越。Context-tight な caller 程効く。下げる: 20 まで下げると tabular scan に近付くが、source-class を見ない caller には情報量不足。上げる: 120-200 で「だいたい何の話か分かる」レベルになるが、200 を超えるとoutput_mode="compact"(300字 trunc) との差が薄れる。意思決定の経路: list-mode で id 列見て興味あればrecall(query=..., top_k=1, mode="detail")で深掘り、という 2-step pattern が caller の認知負荷を減らす Phase O Stage 4 の本来意図。MCPoutput_mode(formatter 側 truncate) との差: Stage 4 のmode='list'は service 層 で truncate するので REST にも同じ payload が乗る (wire 上の context 経済)、output_modeは MCP 文字列のみ。
チューニング助言 (Stage 5): dormant は 物理機構ではない operation — counter-importance sampling で「重力場 (mass + raw cosine) が surface しなくなった自己発信 memo」を意図的に蘇生する別経路。
dormant_age_threshold_secondsを 短くしすぎる と recent な低 mass node まで surface してしまい dormant の意味が希薄に (reflect(aspect="dormant")と差が薄れる)、長すぎる と本当に枯れた node が出ない (3 ヶ月以上未参照は実用上稀)。30 日が「session 内で意識から落ちる時間スケール」と整合。dormant_mass_threshold=2.0は mass-gated kickgate=tanh(m/3.0)の 58% 飽和点 — これを超える node は既に gravity 場で十分動く資格があるので「埋もれてる」と見なさない。dormant_source_classesへの追加は慎重に — Phase D 人格層 + agent/note/reference は 「私が能動的に書いた memo」 という structural class で、これにfile(受動 ingest) を混ぜると counter-importance が「忘れた自己発信」から「忘れた素材」に意味がぼやける。設計判断: source 列挙は physics 違反ではない — Phase M の単一規則は physics rule (mass update / Hooke / kick) に対する制約、Stage 5 の列挙は query intent (どの class を surface するか) に対する filter — physics は一切触らない。詳細: Plans — Phase O §Stage 5 設計判断。
engine._update_simulation の mass update が 「外部 (original_id / cohort_id 一致しない parent) からの引力寄与のみで増える」 規則に切り替わった。compute_acceleration 第 3 項の BH 引力も共起 cluster centroid 方式から 「mass しきい値を超えた neighbor からの直接引力」 に置き換え。詳細: Plans — Phase M。
| パラメータ | 既定 | 影響 |
|---|---|---|
| mass_conservation_enabled | True |
self-force filter の on/off。False で legacy「内輪取引も mass を生む」挙動に rollback |
| mass_bh_enabled | True |
mass-based BH attractor の on/off。False で第 3 項を完全に切る (neighbor gravity + anchor + query attraction のみ) |
| mass_bh_theta (θ) | 5.0 | BH attractor 発動しきい値 — bh_factor(m) = tanh((m-θ)/σ)、m ≤ θ-2σ でクランプ 0 |
| mass_bh_sigma (σ) | 1.5 | tanh 遷移幅 — 小さいほど θ 付近で急峻な on/off、大きいほどなだらか |
本番ロールアウト手順: 旧規則下で蓄積した chunk 内輪取引 inflation を一度ゼロにしてから新規則で観察する。(1) 他 MCP / REST プロセス停止 → (2) DB backup → (3)
.venv/bin/python scripts/reset_masses.py --apply→ (4) サーバー再起動 → (5) 1-2 週の自然蓄積を観測 → (6)p99 massを θ に、(p99.9 - p99)/2を σ にして Stage 2 で確定。reset_massesは MCP に非露出 (LLM 用途なし)、RESTPOST /admin/reset_massesのみ。
チューニング助言: 新規
rememberの original_id はnode_id自身 (自己一致なので自己フィルタの影響 0)。file ingest (scripts/load_files.py) はoriginal_id = file_pathで chunk 群を共通グループ化。Phase K supernova batch はcohort_id = uuid4().hex[:12]を共有 —cohort_idが 同じ node 同士の force は mass update に寄与しない (Articulation as Carrier の literal な物理実装)。mass_bh_thetaを下げ過ぎると低 mass node も attractor 化 → homogenization リスク。上げ過ぎると 1-2 週観測しても BH が発生しない (期待 1.7-5% の節点が θ 超え)。Stage 1 暫定 θ=5.0 は旧規則下の p99=26.5 から「新規則下は inflation が消えるので θ は大幅に下がる」前提の placeholder。
Phase M 「自己関与は mass を生まない」(入力側) の対称形として「使われない mass は時間で蒸発する」(出力側) を物理化。単一規則: mass -= ε · max(mass - floor, 0)^β · (t_idle / τ_idle)^γ、mass > floor AND t_idle > τ_grace のとき。source 分岐ゼロ (Phase M と整合)、evaporate_mass 純粋関数。詳細: Plans — Phase N candidate β。
| パラメータ | 既定 | 影響 |
|---|---|---|
| mass_evaporation_enabled | False |
Stage 1 は merge 安全のため default OFF。本番は env GAOTTT_MASS_EVAPORATION_ENABLED=1 で opt-in (Stage 1.5 起動済 2026-05-26、123.92 mass drained / scripts/diag_pressure.py dry-run 予測との一致 99.9%) |
| mass_evaporation_floor (M_floor) | 1.0 | 初期質量。下まで decay しない (新規ノード保護)。変更非推奨 (Phase G 初期化と一致)。 |
| mass_evaporation_grace_seconds (τ_grace) | 7d = 604800 | recall 直後の即時 decay 抑止窓。短くすると aggressive、長くすると "使ったらしばらく守られる" 挙動。 |
| mass_evaporation_idle_normalize_seconds (τ_idle) | 30d = 2592000 | 1 単位の decay が起こる基準 idle 期間。t_idle/τ_idle の正規化。 |
| mass_evaporation_rate (ε) | 0.01 | excess^β · idle_ratio^γ にかかる係数。Stage 1 placeholder、観測で 1 桁単位調整。 |
| mass_evaporation_mass_exponent (β) | 1.5 | mass 増幅。1.0 = excess 比例、2.0 = excess² で hub に強く効く。 |
| mass_evaporation_time_exponent (γ) | 1.0 | time 増幅。1.0 = linear、>1 で長期 idle に急峻。 |
| mass_evaporation_eager_cron_seconds | 0.0 | Stage 2 用 — >0 で background sweep cron loop を起動。Stage 1 は lazy + startup sweep のみ。 |
D2=C hybrid 評価: lazy 経路は
engine._update_simulation内 Hebbian 更新の直前で 1 回呼び (touch 時に dt 補正)、startup 経路はengine.startup末尾で全 active node に 1 回適用 (engine 停止中の "cold-start mass debt" を一括清算)。lazy だけだと touch されないノードが永遠に stale になるので両方必要。Idempotent: 同じlast_accessを基準にする限り再実行で同じ結果。
本番ロールアウト手順 (Stage 1.5、Phase M Stage 2 後): (1)
scripts/mass_distribution.py(要新設) で production の p50/p90/p99 mass を測定 → (2)ε / β / γ / τ_idleの本決め → (3) 他 MCP / REST プロセス停止 → (4) DB backup → (5)mass_evaporation_enabled=Trueで engine 起動 → startup sweep で cold-start debt 一括清算 → (6) 1-2 週 monitor してhot_topics上位陣の入れ替わり / Phase O Stage 5 dormant の母集団復元 / 新規agentmemo の top1 取得確率 を観測。仮説 4 件は Plans — Phase N β §5 参照。
チューニング助言:
ε=0.01, β=1.5, γ=1.0の初期値 sanity check —mass=5.0で 30d idle なら decay =0.01 · 4^1.5 · 1 = 0.08→ 5.0 → 4.92 (∝ 1.6% loss)。mass=10.0で 30d idle なら decay =0.01 · 9^1.5 = 0.27→ 10.0 → 9.73 (∝ 2.7% loss)。mass=2.0で 30d idle なら decay =0.01 · 1^1.5 = 0.01→ 2.0 → 1.99 (塵レベルはほぼ不変)。Stage 1.5 で本番 mass 分布測定後、p99 が 1-2 週で 10% 程度 evaporate するレートに ε を調整するのが現在の目安。
Phase M (mass 増の単一規則、入力側) + Phase N (mass 減の単一規則、時間側) に続く「gravity への対抗 pressure」第 3 法則。Λ (P-α) は長距離斥力 (Hubble flow 類比) を compute_acceleration に加算、Langevin (P-β) は熱的揺らぎ (SGLD 類比) を position-update step に加算。Stage 7.1 anti-hub の scope 外として残った individual-node high-mass dominance (ffe48a30 等 singleton hub) を、ranking 層ではなく acceleration / displacement step で構造的に押し返す第 3 法則。両 knob は数学的に直交、両 default OFF、本番 opt-in は Phase N β Stage 1.5 完了 + 1-2 週観測後。詳細: Plans — Phase P。
| パラメータ | 既定 | 影響 |
|---|---|---|
| cosmological_lambda_enabled | False |
P-α — Λ 項の on/off。True で compute_acceleration の 5 番目の項として加算、a_Λ(i) += +H · (pos_i - pos_j) を wave neighbor scope の全 pair に適用 |
| cosmological_lambda_h | 0.001 |
Hubble 定数 H (gravity_G=0.01 の 1/10)。典型 displacement (‖Δ‖~0.5) で a_Λ ~ 5e-4 (gravity a_grav ~ 5e-3 の ~10%)。上げると long-range 斥力が強く dense cluster が分解しやすい、下げると Λ がほぼ no-op |
| langevin_temperature_enabled | False |
P-β — Langevin 項の on/off。True で position 更新時に √(2·T·dt)·ξ (ξ~N(0,I)) を加算 |
| langevin_temperature_t0 | 0.001 |
温度定数 T₀。σ = √(2·T₀) ≈ 0.045 per step (L2)、Hooke 平衡 (G·m/k)^(1/3) ≈ 0.8 の ~5%。上げると singleton hub から escape しやすい代わりに健全な cluster も noisy に、下げると no-op |
チューニング助言 (P-α Λ): Λ は gravity と filter 共有 (Plan §3.1)、neighbor scope (
propagate_gravity_waveが渡す) を gravity と共有する。Self-force filter (Phase Mis_self_force) は Λ には適用されない (Λ は mass を生まない、distance の関数のみ)。本番 opt-in 前にscripts/diag_pressure.py --enable lambda --h <値>で dry-run projection (mass / displacement 分布の予測) を取って観測、p99 displacementが現状から 20% 以内なら安全側。h=0.001既定は保守的、0.005程度まで実機検証可能と試算。
チューニング助言 (P-β Langevin): Langevin は legacy
state.temperature(read-time noise、measurement side) とは 別経路 — write-time noise (dynamics side) で、SGLD (Welling-Teh 2011) の literal な実装。1 つの singleton high-mass attractor (Stage 7.1 limit、Phase N β でも届かない領域) が周囲を完全に支配する状況で、確率的 escape を加える。T₀=0.001は escape Boltzmann factorexp(-ΔE/T)で「mass 5 の well に mass 1 の node が捕まる」典型シナリオを 1 週間スケールで 1-2 回 escape させる目安。上げる前にscripts/diag_pressure.py --enable langevin --t0 <値>で displacement 分布の RMS 変化を確認、本番 opt-in は Phase N β 観測が落ち着いてから。
両者の関係: P-α (Λ) は deterministic な長距離斥力 (時間平均的に cluster 構造が緩む)、P-β (Langevin) は stochastic な per-step ゆらぎ (個別 node が確率的に hop)。両方有効 にしても干渉せず — Λ は acceleration loop、Langevin は post-acceleration position update に作用。両方とも default OFF で merge 済、env で個別に
GAOTTT_COSMOLOGICAL_LAMBDA_ENABLED=1/GAOTTT_LANGEVIN_TEMPERATURE_ENABLED=1opt-in。
SQLite/FAISS 復旧後に残った検索品質課題を「意味的観測を土台に、重力場が順位・連想・人格を育てる」の層分離で解消する 6 stage (Plans — Phase T)。Stage 2 (semantic decay の half-life 化) と Stage 5 (ambient OR gate) は再現済み欠陥の修正として、Stage 3 (direct qualification) / Stage 4 (TTT update qualification) / Stage 6 (explore MMR) は Phase U WP-1/WP-5 (2026-08-25) で code default True に昇格済み (下記「Phase U — Review Hardening」節参照)。観測 baseline は scripts/score_baseline.py (read-only、golden corpus で score 項寄与率 / qualification 率 / ambient gate 診断 / recall vs explore Jaccard、--synthetic-age-seconds で経年シミュレーション)。
| パラメータ | 既定 | env | 影響 |
|---|---|---|---|
semantic_halflife_enabled |
True |
GAOTTT_SEMANTIC_HALFLIFE_ENABLED |
Stage 2 (default ON): semantic decay を秒 rate delta (exp(-δ·age)、10 分で factor≈0.0025) から half-life + floor 契約 (floor + (1-floor)·0.5^(age/halflife)) へ。False で legacy delta 経路に bit-for-bit rollback (startup に deprecation warning、Troubleshooting) |
semantic_half_life_seconds |
604800.0 (7日) |
GAOTTT_SEMANTIC_HALF_LIFE_SECONDS |
semantic 項の半減期。較正出力 (7d + floor 0.35 で 6 週間後に factor≈0.355 = floor 支配)。検証: half_life_seconds > 0 で reject |
semantic_floor |
0.35 |
GAOTTT_SEMANTIC_FLOOR |
経年 semantic 項の下限 — mass/wave が順位を完全支配するのを防ぐ。floor が保存するのは legacy 同様 gravity_sim 項 (virtual 位置との dot) で raw 意味論そのものではない点は既知の性質。0 で完全消滅 (旧挙動に近い) |
direct_qualification_enabled |
True (Phase U WP-1 で昇格) |
GAOTTT_DIRECT_QUALIFICATION_ENABLED |
Stage 3: direct 候補の presentation を qualified-first (forced → qualified → fallback) に並べ替え。fallback は breakdown qualified=false + reason 行 gravity pick (below relevance floor) で明示。False で legacy 順序 |
direct_raw_cosine_min |
0.75 |
GAOTTT_DIRECT_RAW_COSINE_MIN |
qualification の決定論的軸 (raw cosine)。baseline: raw p50=0.764 / p90=0.820 の RURI 狭帯に対し 0.75 で qualified 率 70.6% |
direct_virtual_cosine_min |
0.75 |
GAOTTT_DIRECT_VIRTUAL_COSINE_MIN |
qualification の正規化軸 (virtual_cos_norm、displacement+temperature 込みの新規計算) |
direct_bm25_relative_min |
0.40 |
GAOTTT_DIRECT_BM25_RELATIVE_MIN |
lexical strength 軸の相対比閾値 (pool top score 比、corpus size 非依存)。lexical 軸は absolute と AND の二重条件 (off-topic guard) |
direct_bm25_absolute_min |
8.0 |
GAOTTT_DIRECT_BM25_ABSOLUTE_MIN |
lexical 軸の absolute 閾値。baseline: on-topic top score 14-58 → 8.0 は弱一致 tail の off-topic guard |
direct_bm25_pool_size |
50 |
GAOTTT_DIRECT_BM25_POOL_SIZE |
lexical strength 計算用 BM25 pool size (top-K 予算別) |
ttt_qualification_enabled |
True (Phase U WP-1 で昇格) |
GAOTTT_TTT_QUALIFICATION_ENABLED |
Stage 4: query-conditioned な TTT 更新 (mass growth ×confidence / query kick / cooccurrence) を qualified learn set のみに限定し bad gradient の自己強化を遮断。synthetic recall (dream loop) は免除。maintenance 系 (last_access / evaporation / sim_history+temperature / orbital N-body) は all reached のまま |
ambient_gate_or_semantic |
True |
GAOTTT_AMBIENT_GATE_OR_SEMANTIC |
Stage 5 (default ON): ambient gate を BM25 veto から OR gate へ。BM25 reject でも passive recall を実行し、virtual_score ≥ ambient_min_score OR raw_cos ≥ ambient_semantic_raw_min で accept (両軸 miss で空返し、off-topic 抑制は維持)。False で legacy veto に rollback。較正: 旧 veto で 19/19 on-topic golden query が空返し (gate score 5.8-8.8 vs 32.0、semantic_max 0.899) していたのが 19/19 surfaced |
ambient_semantic_raw_min |
0.60 |
GAOTTT_AMBIENT_SEMANTIC_RAW_MIN |
OR gate の raw cosine 軸閾値 (baseline: raw p50=0.764)。空返し診断は gate_diagnostics / empty_reason (Troubleshooting の triage 表) |
explore_diversified_presentation_enabled |
True (Phase U WP-5 で昇格) |
GAOTTT_EXPLORE_DIVERSIFIED_PRESENTATION_ENABLED |
Stage 6: explore(diversity>0) で engine 層 MMR presentation を有効化。diversity=0.0/None は flag ON でも完全 legacy (bit-for-bit) |
explore_cohort_penalty |
0.05 |
GAOTTT_EXPLORE_COHORT_PENALTY |
MMR 選択で同一 cluster (cohort_id OR original_id、source 分岐ゼロ) 既出への penalty (diversity × penalty) |
explore_diversity_pool_multiplier |
4 |
GAOTTT_EXPLORE_DIVERSITY_POOL_MULTIPLIER |
MMR 候補 pool の拡大倍率 (top_k × multiplier 件まで scoring 済み list を保持、追加 search は走らない) |
explore_min_semantic |
0.45 |
GAOTTT_EXPLORE_MIN_SEMANTIC |
diversity > 0 時の pool 候補への raw-cosine floor (lateral にも最低 relevance、forced items は豁免) |
rollback まとめ: Stage 2 は
semantic_halflife_enabled=False、Stage 5 はambient_gate_or_semantic=False。Stage 3/4/6 は Phase U で default ON 昇格済み — rollback は各 env (GAOTTT_DIRECT_QUALIFICATION_ENABLED=false/GAOTTT_TTT_QUALIFICATION_ENABLED=false/GAOTTT_EXPLORE_DIVERSIFIED_PRESENTATION_ENABLED=false)。各 flag は独立 (S3 off × S4 on 等の組み合わせも interaction test 済み)。
⚠️ multiverse 運用での env delivery: multiverse supervisor は backend spawn 時に spawn env からGAOTTT_*を strip していたが、Phase U WP-2 で tuning knob のみ正確名 allowlist 経由で伝播するようになった (下記「Phase U — supervisor tuning env allowlist」節 — 28 変数、GAOTTT_DIRECT_QUALIFICATION_ENABLED等の rollback env を含む)。allowlist 外のGAOTTT_*(identity 系 4 key を除く) は引き続き strip。standalone (stdio / proxy) 運用では env がそのまま効く。
実 MCP レビュー (handoff §改善実装後の実MCP再検証) の 5 課題 (R1 qualification env 不達 / R2 explore diversity 非反映 / R3 ambient off-topic 通過 / R4 既知障害 node top-5 外 / R5 cold start 129s) への対応として追加された knob 群。計画書: Plans — Phase U。
Phase T から昇格 (direct_qualification_enabled / ttt_qualification_enabled / explore_diversified_presentation_enabled とも True、上の Phase T 表参照)。rollback env は上記 rollback まとめのとおり。較正 round (docs/notes/phase-t/calibration-round.md) と promoted-combination suite を以て昇格判断を通過。
| パラメータ | 既定 | env | 影響 |
|---|---|---|---|
direct_rescue_raw_rank |
3 |
GAOTTT_DIRECT_RESCUE_RAW_RANK |
WP-4b — raw-top rescue: Stage 3 並べ替えの拡張。qualified な natural item のうち scored pool 内 raw cosine rank が本値以下 の item を qualified group の先頭 tier に lift (tier 内は raw cosine 降順)。生成直後の genesis/priming kick で displacement が raw content 方向から逸脱した node が、raw rank 1 でも virtual cosine 低迷で top-K から消える病理 (root cause: docs/notes/phase-u/wp4-trace-findings.md) への「観測を field の drift から守る最小の防腐剤」。presentation 専用 (score / physics / breakdown には書き込まない)。forced/injected 経路には不適用。0 で無効 (Stage 3 挙動に bit-for-bit 復帰)。direct_qualification_enabled=False なら rescue も無効 (rescue は qualified item 上に定義) |
ambient_gate_mode |
"or" |
GAOTTT_AMBIENT_GATE_MODE |
WP-3 + §10 R3 follow-up — ambient gate mode。"or" (default, Phase T Stage 5 の OR gate を bit-for-bit 維持) | "composite" (3-arm: accept = bm25_strong OR (virt_top1 ≥ ambient_composite_virt_hi) OR (bm25_top ≥ ambient_composite_bm25_mid AND virt_top1 ≥ ambient_composite_virt_mid))。composite は 2 度の較正 (v2 単一 arm・v3 3-arm) とも事前登録昇格 gate (held-out FP=0 ∧ FN≤10%) を満たさず default は "or" のまま確定 (R3 close) — 判定記録は docs/notes/phase-u/ambient-composite-calibration.md。opt-in 実験機構として残存 |
ambient_composite_virt_hi |
0.85 (未検証 provisional) |
GAOTTT_AMBIENT_COMPOSITE_VIRT_HI |
composite mode arm2 — top-1 virtual cosine の絶対閾値。v3 較正で昇格 gate 不達のため検証済み推奨値は存在しない |
ambient_composite_bm25_mid |
22.0 (未検証 provisional) |
GAOTTT_AMBIENT_COMPOSITE_BM25_MID |
composite mode arm3 の bm25 条件 — word-BM25 top score の中間閾値 |
ambient_composite_virt_mid |
0.845 (未検証 provisional) |
GAOTTT_AMBIENT_COMPOSITE_VIRT_MID |
composite mode arm3 の virt 条件 — arm2 より緩い中間閾値 (bm25 との AND 用) |
ambient_composite_reference_filename |
"ambient_composite_reference.json" |
GAOTTT_AMBIENT_COMPOSITE_REFERENCE_FILENAME |
composite mode の参照 artifact path (data_dir 基準)。scripts/calibrate_ambient_gate.py --emit-artifact が生成 (schema v1、fingerprint = embedder id/version + corpus digest + active_count)。allowlist 外 (config-file only) — supervisor env 経由では変更できない (deployment の構造選択のため) |
ambient_composite_count_drift_max |
0.05 |
GAOTTT_AMBIENT_COMPOSITE_COUNT_DRIFT_MAX |
runtime staleness guard — |active_count − reference_count| / reference_count がこの値を超えたら参照は stale とみなし fail-closed (full digest scan は初回 composite 使用時のみ、per-call はこの cheap count check) |
bm25_background_build_enabled |
True |
GAOTTT_BM25_BACKGROUND_BUILD_ENABLED |
WP-6c — BM25 build の background 化。新規 index object への snapshot build + build 窓内 mutation の journal replay + engine lock 下での atomic swap。production 実測で BM25 build 147s = startup 153s の 96% を占めた (startup-timings) ので同期 build を startup 経路から外し SEMANTIC_READY ≈6s を達成。build 窓内は hybrid seed pool が raw/virtual 縮退運転し ambient gate は semantic fallback。engine.bm25_build_state ∈ idle/building/ready/failed。False で同期 build (旧挙動) に復帰 |
bm25_snapshot_enabled |
True |
GAOTTT_BM25_SNAPSHOT_ENABLED |
WP-6d — BM25 index の永続化 (data_dir/bm25.snapshot、checksum-verified pickle、tmp write → fsync → atomic rename)。fingerprint = content digest (sorted (id, sha256(content)) の sha256) + tokenizer identity + k1/b + format version + universe id。一致なら build を skip して load、不一致 (content 変更・tokenizer 変更・cross-universe・破損) は rebuild。保存は build 完了時と graceful shutdown 時のみ。False で永続化も load も無効化 (毎回 build) |
readiness_protocol_enabled |
True |
GAOTTT_READINESS_PROTOCOL_ENABLED |
WP-6b — staged readiness protocol。HTTP backend transport の起動 (app lifespan) と同時に単一の engine startup task を開始 (lazy 初回 tool-call 生成を廃止)。全 MCP handler は共有 task を readiness_wait_timeout_seconds で bounded wait。engine の生存期間は transport に紐づき per-session lifespan では tear down しない (warm reconnect で再構築されない)。状態は GET /admin/readiness が露出。False で legacy lazy 初回生成に bit-for-bit 復帰 (handler の bounded wait も無効化)。WP-8 後の挙動: flag OFF では readiness route 自体が登録されない → supervisor は 404 を検知して即時 legacy fallback (poll deadline を消費しない) — multiverse 配下でも安全に OFF にできる (Troubleshooting readiness triage 参照) |
readiness_wait_timeout_seconds |
30.0 |
GAOTTT_READINESS_WAIT_TIMEOUT_SECONDS |
MCP handler が共有 startup task を待つ上限 (秒)。超過時は retryable な構造化 error (engine starting (state=STARTING, elapsed=..s) — retry shortly)、task 自体は継続 |
route_readiness_timeout_seconds |
35.0 |
GAOTTT_ROUTE_READINESS_TIMEOUT_SECONDS |
supervisor 側 — /route が backend の GET /admin/readiness を poll する deadline (秒)。STARTING 中はここまで待ち、超過しても error にせず readiness:"starting" 付きで応答 (client は接続して backend 側の bounded wait に委ねられる)。FAILED は 503、endpoint 無し (404) は即時 legacy fallback。backend 側 readiness_wait_timeout_seconds=30s より長く取り SEMANTIC_READY 到達を /route 内で完結させる |
multiverse supervisor の backend spawn env は、gaottt/multiverse/tuning_env.py の 閉じた完全名 allowlist RUNTIME_TUNING_ENV_ALLOWLIST (28 変数) に一致する GAOTTT_* のみを通す。Phase T/U の rollback・tuning knob の env delivery 経路 (R1 の rollback 面)。
Allowlist (28 変数、exact-name 一致のみ):
GAOTTT_SEMANTIC_HALFLIFE_ENABLED GAOTTT_SEMANTIC_HALF_LIFE_SECONDS
GAOTTT_SEMANTIC_FLOOR GAOTTT_DIRECT_QUALIFICATION_ENABLED
GAOTTT_DIRECT_RAW_COSINE_MIN GAOTTT_DIRECT_VIRTUAL_COSINE_MIN
GAOTTT_DIRECT_BM25_RELATIVE_MIN GAOTTT_DIRECT_BM25_ABSOLUTE_MIN
GAOTTT_DIRECT_BM25_POOL_SIZE GAOTTT_TTT_QUALIFICATION_ENABLED
GAOTTT_DIRECT_RESCUE_RAW_RANK GAOTTT_EXPLORE_DIVERSIFIED_PRESENTATION_ENABLED
GAOTTT_EXPLORE_COHORT_PENALTY GAOTTT_EXPLORE_MIN_SEMANTIC
GAOTTT_EXPLORE_DIVERSITY_POOL_MULTIPLIER GAOTTT_AMBIENT_GATE_OR_SEMANTIC
GAOTTT_AMBIENT_SEMANTIC_RAW_MIN GAOTTT_AMBIENT_BM25_MIN_SCORE
GAOTTT_AMBIENT_MIN_SCORE GAOTTT_AMBIENT_GATE_USE_BM25
GAOTTT_AMBIENT_GATE_MODE GAOTTT_AMBIENT_SEMANTIC_PERCENTILE_MIN
GAOTTT_AMBIENT_MARGIN_MIN GAOTTT_AMBIENT_RAW_FLOOR_COMPOSITE
GAOTTT_AMBIENT_COMPOSITE_COUNT_DRIFT_MAX GAOTTT_READINESS_PROTOCOL_ENABLED
GAOTTT_BM25_BACKGROUND_BUILD_ENABLED GAOTTT_BM25_SNAPSHOT_ENABLED
意味論:
-
exact-name 一致のみ — prefix / wildcard 一致は無く、未来の knob は自動的に deny (allowlist 拡張は review 経由のみ)。allowlist 項目が
GaOTTTConfigの実 field に対応しなくなった場合は 常時 error (staleness guard) -
GAOTTT_CONFIGは伝播しない — 任意 config field を含め得るため tuning-only allowlist と矛盾する (Codex review 指摘を採用)。恒久 rollback / 恒久設定変更は supervisor を起動する service 定義 (systemd 等) に env を置く運用で対応 -
GAOTTT_AMBIENT_COMPOSITE_REFERENCE_FILENAMEも allowlist 外 (config-file only) — 参照 artifact の置き場所は deployment の構造選択 (universe data_dir と紐づく) なので、runtime env 経由の変更は想定しない (Phase U WP-3 の 5 composite knob のうちしきい値系のみ伝播) -
値検証は fail-fast: bool は
1/true/yes/on/0/false/no/offの認識 token のみ (それ以外は拒否)、int/float はGaOTTTConfig._coerce_envと同一の coercion で parse できなければ拒否、float は NaN/±Infinity を拒否、str enum (GAOTTT_AMBIENT_GATE_MODE) は'or'/'composite'閉集合外を拒否。不正値は backend spawn を拒否し/routeが 500 (validation error detail 付き) を返す — backend 側が黙って False coerce する「設定したのに効かない」静かな事故を防ぐ -
identity 系は常に supervisor の明示上書きが勝つ:
GAOTTT_DATA_DIR/GAOTTT_EMBEDDER_ENDPOINT/GAOTTT_OWNER_LEASE_ENABLED/GAOTTT_BACKEND_TOKENは allowlist 外・従来どおり明示上書き (caller はtuning_env経由では触れない) - MV5 review #7 維持:
LITESTREAM/BACKUP系が spawn env に存在しないことの assertion は残存
allowlist への追加は review 経由で拡張する 運用ルール (Plans §8 仮定 ledger)。追加したい knob がある場合は
RUNTIME_TUNING_ENV_ALLOWLISTと本表を同時に更新し、tests/unit/test_tuning_env.py/tests/integration/test_supervisor_tuning_env.pyの staleness guard が通ることを確認する。
ambient_recall ツール(Claude Code フックが毎ターン呼ぶ)の構造化 passive recall を制御。詳細は Plans — Ambient Recall Enrichment。
| パラメータ | 既定 | 影響 |
|---|---|---|
ambient_gate_use_bm25 |
True |
relevance gate のモード。True=語単位 BM25「強一致」gate(主)、False=virtual_score gate(旧、分離不能)。gate index 不在時は自動でフォールバック |
ambient_gate_tokenizer |
"sudachi" |
gate 専用 BM25 index のトークナイザ。語単位(Sudachi)が必須 — char-3gram は日本語の共通形態素を拾いすぎて分離できない。bm25-sudachi extra (uv pip install -e '.[bm25-sudachi]') が要る。未導入なら gate index は構築されず virtual_score へフォールバック |
ambient_bm25_min_score |
32.0 |
語 BM25「強一致」gate のしきい値 — top-1 BM25 スコアがこれ未満なら応答を空に。32k コーパス校正 (2026-05-21、4 ラウンド): off-topic ≤ |
ambient_min_score |
0.70 |
フォールバック virtual_score gate のしきい値(ambient_gate_use_bm25=False または gate index 不在時のみ)。候補プールの最大 virtual_score 未満で空に。分離は弱い |
ambient_excerpt_chars |
240 |
各スロットの content 抜粋長 |
ambient_lensing_enabled |
True |
② 重力レンズ枠(virtual_cosine − raw_cosine gap 最大の記憶)の on/off |
ambient_lensing_min_score |
0.5 |
レンズ枠の noise floor — pick の virtual_cosine がこれ未満なら採用しない(単なる外れ値の除外) |
ambient_lensing_min_gap |
0.05 |
レンズ枠の最小 gap — 「場が曲げた」と言える最小の virtual − raw 差 |
ambient_lensing_max_k |
2 |
Lateral Association Stage 3: lensing slot の top-K cap。1=Stage 1/2 完全互換 (旧挙動、ロールバック路)、2=既定 (controlled increase、ambient block +1 行 / ~+15% token)、3=最大推奨。各 pick は独立に min_score/min_gap を clear する必要あり (quota 緩和なし)、ranking は novelty 適用後の decayed gap で取り直す。複数の lateral 連想 ("X といえば Y で、Y といえば Z") を 1 turn 同時発火させる「〇〇といえば〜だったよな」の literal な拡張 |
ambient_lensing_dynamic_k |
False |
Lateral Association Stage 3: 動的 K mode。True で query 抽象度 (= 到達ノードの raw_cosine 分散) に応じて [1, ambient_lensing_max_k] で K が浮動。Stage 3 では opt-in のみ (Stage 6a corpus で lateral hit rate を測ってから enable する想定、未実装の予約 knob) |
ambient_lensing_resonance_scale |
10.0 |
Lateral Association Stage 5: lensing resonance signal の saturation 定数。resonance = raw / (raw + scale) の scale で、raw=10 で resonance=0.5、raw=90 で 0.9 (常に [0,1))。raw = Σ_{d∈direct} cache.get_neighbors(lensing)[d] = 「過去 active recall で direct hits と一緒に引かれた回数の合計」。scale=5 で半飽和点を下げ短い履歴でも resonance を立てる、scale=20 で長い履歴を要求する。scale=0 は degenerate "any cooccurrence = full trust" mode (test 用) |
ambient_lensing_resonance_min |
0.0 |
Lateral Association Stage 5: 既定 0.0 = フィルタなし (resonance を agent 可視に出すだけ)。>0.0 で「resonance がこれ未満の lensing pick を drop」optional gate。drop された分の backfill はない (Stage 3 と同じ no-quota-relaxation 原則)。production 観察で resonance の自然分布を取ってから raise する想定 (典型値 ~0.1-0.3 で純 noise pick を落とす) |
ambient_reasoning_enabled |
True |
④ derived_from/supersedes 親を because として添える |
ambient_tension_enabled |
True |
⑤ contradicts ペアを矛盾フラグとして surface |
ambient_persona_enabled |
True |
⑥ active な declared value/intention を 1 行 grounding |
ambient_persona_pool_size |
10 |
Refinement Stage 1: persona slot を query 関連で再ランクする際の候補プール上限 (mass 上位 N)。N を小さくすると低コスト・低再現、大きくすると候補広いが per-call cosine 計算と FAISS get_vectors が線形に増える |
ambient_persona_min_relevance |
0.65 |
Refinement Stage 1: persona slot を surface する cosine しきい値。最高スコア候補の cos(query, persona_vec) がこれ未満なら slot を空に。Phase A literal 失敗 (MCP-smoke intention が embedder 議論に乱入) を防ぐためのガード。2026-07-02 に 0.5 → 0.65 へ昇格 — dense 日本語 embeddings は query が単にキーワードを共有するだけでも cos ≈ 0.52 を与え、旧 0.5 floor を slip して heavy persona が surface し続ける観察 (harakiriworks dominance) への対処。0 に下げると常に top1 surface (旧挙動相当)、上げすぎると onboarding 期で永久空になりやすい |
ambient_persona_mass_weight |
0.3 |
Refinement follow-up (b) — Heavy Persona Dominance 対処: ranking 式 score = (mass ** w) × cos(query, persona_vec) の指数。0.0=cos のみ (relevance_dominant 相当)、0.3=既定 (2026-07-02 昇格、mass^0.3 × cos で runaway-mass persona を抑制しつつ mass は効かせる)、0.5=sqrt(mass) × cos (log-scale 相当の抑制)、1.0=Stage 1 完全互換 (rollback path、旧既定)。production の heavy persona (mass=2.82 等) が query 横断で persona slot を独占する現象への knob。昇格経緯: env opt-in で w=0.3 単独では不十分 (cos ≈ 0.52 が min_relevance=0.5 を通過) と判明し、ambient_persona_min_relevance の 0.65 昇格と同時に code default 化 (measurement-first を skip したことは ToDo 6-7 に明記、事後 baseline 測定を推奨) |
ambient_novelty_decay |
0.7 |
Lateral Association Stage 1: session-aware novelty decay の指数。{node_id: count} (フックが過去 N turn の <!-- ambient-ids ... --> manifest から組み立てて forward する recently_surfaced arg) に対し各スロット ranking score を decay ** count 倍する。0.7=既定 (1 回再 surface で 70%、2 回で 49% に圧縮、強すぎず弱すぎず)、0.5=積極的 rotation、1.0=完全 no-op (Stage 1 ロールバック)、0.0=同 id 再 surface を完全禁止 (実質常時 rotation、test 用)。direct slot は final_score × novelty で re-sort、lensing slot は gap × novelty で再 argmax (露出 gap は raw を保持)、persona slot は (mass^w) × cos × novelty で再 winner 決定。フック側 env GAOTTT_AMBIENT_NOVELTY_TURNS (既定 5、0 で無効) が scan する直近 turn 数を決める。recently_surfaced 未送付 or {} ならコード路は no-op (legacy)。詳細: Plans — Ambient Recall Lateral Association Stage 1 |
ambient_conversational_source_factor |
0.5 (default ON、2026-06-12 焼き込み) |
Observation Apparatus Round 2 E1 (2026-06-12): ambient slot (direct / lensing) の ranking score を、ambient_conversational_sources に含まれる source の item に対し factor 倍する乗算 lens。novelty decay と同じ combined multiplier (final_score × novelty × src_factor) に合成。1.0=OFF (bit-exact legacy)。背景: 2026-06-12 dogfooding で direct hits 6 件中 5 件が chat-history raw chunk (state-dict ダンプ・依頼定型句一致)。本番実機評価 (id=fa1d03a8) で near-tie の際に agent/file source が浮上することを確認 → default 0.5 に昇格 (旧 ambient は会話ログ raw chunk に支配され実用性低かった経緯)。観測・注入層のみ — recall 本体 / force / mass には不適用 (Phase M 単一規則不変)。env GAOTTT_AMBIENT_CONVERSATIONAL_SOURCE_FACTOR
|
ambient_conversational_sources |
("openai", "claude-web", "claude-code") |
E1 の damping 対象 source class 列挙。ingest された会話コーパスが日本語会話文の lexical 空間を支配する構造への対処 |
ambient_dump_symbol_ratio |
0.45 (default ON、2026-06-12 焼き込み) |
Observation Apparatus Round 2 E2 (2026-06-12): dump-shape gate。content 先頭 400 字の dump score = max(記号比率, 長 ASCII 識別子トークン比率) がこれを超える候補を ambient slot (direct / lensing) から除外、次点繰り上げ。state-dict キー羅列・生コード断片の注入防止。>= 1.0=OFF (E1 と同じ規約 — None default だと GAOTTT_* env 自動マップが効かない)。本番 dump サンプルで較正 (id=fa1d03a8): 真の dump (state-dict / base64 / hex) は 0.97-1.0、readable code ≤0.40、自然文 <0.05 で 0.45 は両者の間の clean gap → default 昇格。env GAOTTT_AMBIENT_DUMP_SYMBOL_RATIO
|
direct_hit_anti_hub_lambda |
0.4 |
Lateral Association Stage 7.1 (2026-05-26、暫定デフォルト active 2026-05-26): direct-hit anti-hub。ambient_recall.direct の top-K 構成で同一 cluster key (cohort_id OR original_id、後者は file ingest の chunk グループ化に使われる) の連続採用にペナルティ λ × count_of_shared_cluster をかけ、greedy MMR で並び替え。両キーとも None (pre-Phase-M 旧 memo のみ) は penalty 対象外。0.0=完全 rollback、0.4=暫定 default (tests/perf/test_tier3_cluster_monoculture.py で ambient 直接スロット avg_unique 2.67→4.00 / avg_max_dom 2.33→2.00 確認、本番 GLM acceptance で 638-chunk 本 cluster が 1/5 に capped 確認)、1.0 近辺=強い分散。Phase M 単一規則整合 (cluster identifier は両方とも構造的 id、source/tag 分岐なし)。重要な architectural note: raw recall service は engine.query の top_k を広げない (prefetch cache 互換のため) ので anti-hub は engine が返した top_K 内の reorder のみ で、ambient_recall (pool=10〜) ほど強くは効かない。production で見えるのは主に ambient block の直接スロット。limitation: individual-node high-mass dominance (一握りの singleton agent/intention/commitment memo が cluster 関係なく top-K を占有する production 観察) には効かない、それは Phase N Mass Evaporation の領域。詳細: Plans — Lateral Association Stage 7
|
cooccurrence_assoc_normalization |
"none" |
Lateral Association Stage 8 (2026-06-02、default OFF): 共起 weight を degree 正規化した 連想強度に変換 (共起グラフ層 anti-hub)。"none"=生 co-recall カウント (legacy bit-exact)、"cosine"=w/√(deg(a)·deg(b))、"pmi"=max(0, log(w·W/(deg·deg)))。promiscuous hub (多数の recall セッションに出た高 degree ノード) は degree で割られて全相手への association が下がり、rare で specific な共起だけが高く残る = 「〇〇といえば〜」の信号。consumer は Stage 5 lensing resonance (_lensing_resonance)。正規化 ON 時は ambient_lensing_resonance_scale を要再調整 (正規化値は raw count より遥かに小レンジ、scale=10 だと resonance が全部 0 付近に潰れる)。physics 不変 (observation/ranking signal の変換のみ)。GAOTTT_COOCCURRENCE_ASSOC_NORMALIZATION で env 可。詳細: Plans — Lateral Association Stage 8
|
cooccurrence_hub_degree_percentile_cut |
None |
Lateral Association Stage 8: explicit な anti-hub floor。degree が active 分布の P パーセンタイル超の neighbor を association strength 返却前に drop (Stage 7.2 mass percentile cut の degree 軸版)。None=cut なし。本番 percentile sweep (2026-06-02) の結論: halo の degree 分布は bimodal ({deg≈6 の specific gem} ∪ {deg 67-105 の bulk の壁}) で p90↔p95 に cliff、percentile では「gem だけ (高 precision・低 recall)」か「gem + bulk」の二択しか作れず recall は増やせない。precision-mode なら p≈85 + cosine で future-self への手紙のような specific 連想を 1 件 surface 可。volume を出す lever は knob ではなく 共起グラフのデータ品質 (Accretion Recall P3)。scripts/diag_assoc_halo.py --assoc-mode cosine --hub-degree-cut <P> で観察。| None 既定ゆえ JSON-only (env 非対応) |
スロット単位の
*_enabledフラグで個別 rollback 可。
⚠️ Heavy persona dominance (2026-05-25 本番 acceptance で発見、follow-up (b) で knob 化、2026-07-02 に default 昇格): 旧既定ambient_persona_mass_weight=1.0では ranking 式がscore = mass × cos(query, persona_vec)となり、production DB に 1 つだけ mass が突出した persona (例:mass=2.82vs 他mass=1.0付近) があると、cos 軸の差では決着せず query 横断で同一 persona が picked される (実例:harakiriworks-art-websiteintention)。2026-07-02 昇格: env opt-in でw=0.3単独を運用しても dense 日本語 embeddings の cos ≈ 0.52 が旧min_relevance=0.5floor を slip し症状が継続したため、ambient_persona_mass_weight=0.3(1.0→0.3) とambient_persona_min_relevance=0.65(0.5→0.65) の 両 knob を同時に code default 化。critical exponent は本番質量分布でw* = log(cos_ratio) / log(mass_ratio)(例: mass_ratio=2.82, 目当ての cos_ratio=1.3 ならw* ≈ 0.25)。事後 baseline はRefinement Stage 5 (test_tier3_ambient_quality.py)で取って性能改善か feature 好みかを数値で分離する (measurement-first を skip したことは ToDo 6-7 に開示済)。詳細: Plans — Ambient Recall Refinement 「follow-up (b)」節。gate しきい値の校正は本番 DB の content からBM25Index(tokenizer="sudachi")を再構築し代表プロンプト(強い on-topic / 弱い on-topic / off-topic)をsearchして top スコアの谷を観察する(H5 env override はGAOTTT_AMBIENT_BM25_MIN_SCORE)。gate index は startup で構築(Sudachi は char-3gram より遅く 32k で +30-60s)、rememberで逐次追加、compactで再構築。
| パラメータ | 既定 | 影響 |
|---|---|---|
| wave_initial_k | 3 | seed top-k |
| wave_max_depth | 3 | 再帰最大深度 (Phase M follow-up 2026-05-13 で 2→3。1 recall で touch される displacement 範囲が ~20-50 → ~60-150 nodes に拡大、per-recall latency +20-30%。wave_attenuation=0.5 で第 3 段以降は force<0.001 で自動 filter) |
| wave_attenuation | 0.7 | 深度ごとの減衰係数 |
| wave_mass_scale | 1.5 | mass 依存 top-k のスケール |
| wave_k_with_filter | 1000 |
recall(source_filter=...) 指定時の seed top-k(dense corpus で sparse class を救済、Phase H Stage 2 で 200→500、2026-05-12 本番 23k DB 検証で 500→1000 引き上げ) |
| wave_seed_mass_alpha | 0.0 | seed 段階の mass-aware rerank 重み(Phase H Stage 1)。raw + α*log(1+mass) で pool を再 rank。2026-05-14 に 0.1 → 0.02 → 0.0 と段階的に下げて最終 disabled(下記注を参照)。> 0 に戻すと Phase L Stage 1 の RRF score scale (~0.03 max) と Phase H Stage 1 の mass term (cosine scale ~0.9 想定) が干渉し、mass の重い無関係 chunk が semantic 距離を上書きする structural bug が発生 |
| wave_seed_pool_size | 50 | seed 再 rank の pool 大きさ(Phase H Stage 1) |
| wave_dynamic_k_enabled | True |
top-N 密度応答型の seed 拡大(Phase H Stage 3)。False で固定 initial_k |
| wave_density_window | 10 | density 評価で見る top-N の N |
| wave_density_threshold | 0.95 | tail/top 比率の閾値。これ未満で「sparse」と判定して seed 拡大 |
| wave_initial_k_max | 50 | sparse 判定時の effective_k 上限(Phase H Stage 3) |
⚠️ wave_seed_mass_alphaの scale 不整合バグ (2026-05-14 発見、0.0に固定で回避)Phase L Stage 1 (RRF fusion) と Phase H Stage 1 (
raw + α × log(1+mass)) は score scale が異なる:
rawに来る値 — RRF mode: ~0.018–0.033 / cosine mode (legacy): ~0.5–1.0α × log(1+mass)— 例: α=0.02 × log(23) = 0.062 ← RRF max の 2 倍!結果、RRF が semantic にランクした top を mass の重い無関係 chunk が完全に上書きする。例: 「あの航空機事故はこうして起きた」を recall すると、cosine 0.92 で raw FAISS top の book chunks (mass 1.4) が、cosine 0.79 で mass 22 の京都大学入試 / 会社四季報 chunk に seed step で押し出される。
修正:
wave_seed_mass_alpha = 0.0で seed boost を完全 disable。RRF fusion が既に raw cosine + virtual + BM25 を scale-invariant に組み合わせているので、seed step での mass 介入は不要。Phase H Stage 1 の意図(heavy node lift)を RRF mode で正しく実現する RRF-scale aware mass boost は Phase N で再設計予定(Plans — Roadmap)。詳細・診断手順は Operations — Troubleshooting の「ファイルで登録した文書が recall に出てこない」節。
propagate_gravity_wave の seed step で α_persona × proximity を加算。declared value / intention / commitment から fulfills/derived_from/completed で graph 連結するノードを優先入場させる。詳細: Plans — Phase J。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| persona_boost_enabled | True |
グローバル off スイッチ | n/a |
False で完全 skip、collect/proximity 計算も走らない |
| persona_boost_alpha (α_persona) | 0.5 | 結合定数 (wave_seed_mass_alpha=0.1 の 5×) |
persona-tied ノードが seed pool で勝ちやすい (intention 直下の task/agent が surface しやすい) | 弱まる、0.0 で計算は走るが boost なし |
| persona_max_hop | 2 | graph traversal の hop 上限 | 3 hop で間接的関連も拾える (false positive ↑) | 1 hop で fulfills 直下のみ (狭い) |
| persona_hop_decay | 0.5 | hop あたり減衰率 | 0.7 で 2 hop=0.49 (遠隔まで強い) | 0.3 で 2 hop=0.09 (急減衰) |
| persona_active_ttl_seconds | 14 日 | active 判定の TTL (Stage 2 で commitment に適用) | n/a | n/a — Stage 1 では未使用 |
チューニング助言:
persona_boost_alpha=0.5は acceptance test (本番 23k DB) で「persona-tied ノードが seed pool に届く」を目的に置いた初期値。届かなければ1.0まで上げる、効きすぎ (persona ノードが全 query で top1 を独占) なら0.2まで下げる。persona_max_hop=2は Phase D の典型チェーン (intention → task → outcome) を拾える深さ、3 以上にすると間接的な関連 (誰かが derive した知識の派生) も混入。persona_boost_enabled=Falseで Stage 0 (Phase J 前) 挙動に完全 rollback。
Seed pool は raw FAISS (semantic) ∪ virtual FAISS (semantic+history) ∪ BM25 (lexical) の 3-way union。異なる metric tensor の重ね合わせで、embedder の hidden ranking が拾えない surface-form 一致 (例: 「Eleventy Pipeline」 → .eleventy.js) を BM25 が直接 catch する。RRF fusion (Reciprocal Rank Fusion) が default で scale 不変・query 間安定。詳細: Plans — Phase L。
| パラメータ | 既定 | 役割 |
|---|---|---|
| hybrid_bm25_enabled | True |
Phase L Stage 1 全体の on/off。False で Phase H Stage 4 (raw+virtual) と同等挙動に rollback |
| bm25_seed_k | 50 |
BM25 が seed pool に提供する top-N 数。raw/virtual の wave_seed_pool_size / wave_k_with_filter と同オーダー |
| bm25_k1 | 1.5 |
Robertson-Sparck-Jones の term-saturation 制御。文献標準 1.2-2.0 の中央付近 |
| bm25_b | 0.75 |
length-normalization。文献標準 0.75 が標準 corpus 向き、固定長 doc 多めなら 0.5、長文ばかりなら 0.9 |
| bm25_score_mode | "rrf" |
"rrf" で Reciprocal Rank Fusion (Cormack 2009 標準、scale 不変)、"weighted_sum" で legacy 2-way max-merge + BM25 normalize blend |
| rrf_k | 60 |
RRF の rank-fusion 定数。Cormack 2009 標準 |
| bm25_score_alpha | 0.5 |
"weighted_sum" mode 専用、BM25 normalized share。"rrf" mode では無視 |
| bm25_tokenizer | "trigram" |
char 3-gram (依存ゼロ、日英混在に頑健)。"sudachi" は uv pip install -e ".[bm25-sudachi]" 後に選択可 |
チューニング助言: 本番 acceptance で「Surface ✅ / Semantic 整合
⚠️ 」が分離した query (Eleventy Pipeline 等) を起点に、BM25 寄与を確認。RRF default で大半は十分だが、lexical match が overshoot して semantic 整合が落ちる場合は"weighted_sum"+bm25_score_alpha=0.3で BM25 影響を弱める。tokenizer は trigram で「重力」「Eleventy」両方扱えるが、固有名詞の同形異義語が頻出する corpus なら Sudachi extra に切り替えて形態素解析する。Stage 1 では disk persistence なし —compact()か再起動で SQLite content から rebuild される (24k docs で数秒)。複数 MCP プロセス共存環境は raw FAISS と同じ可視性問題があり、片方プロセスでのrememberが他方プロセスの BM25 index に届くのは次回 startup or compact 後。
複合プロンプトを 1 つの pooled centroid に潰さず、節に分割して各節を独立した点質量として扱う。各節が自分の _union_pool を引き、per-segment pool を RRF 融合した seed pool から wave を 1 回 伝播する。pooled embedding は語彙的に重い側に引っ張られる(centroid drag)— その唯一の非物理ステップを seed 段の場の重ね合わせで修正する。詳細: Plans — Query as Mass Distribution。
| パラメータ | 既定 | 役割 |
|---|---|---|
| multi_source_enabled | True |
recall / explore の multi-source seeding on/off。False で単一 vector seeding の legacy 経路に bit-for-bit 復帰(rollback は 1 行) |
| multi_source_ambient_enabled | True |
毎ターン発火する ambient_recall パス専用の別フラグ(perf 隔離のため独立)。False で ambient だけ単一 source に戻す |
| multi_source_max_segments | 4 |
分割数 N の上限。超過分は最長 N 節を残す。FAISS search は N × O(corpus) なので上限で予測可能に保つ |
| multi_source_min_segment_chars | 12 |
これ未満の断片は隣接節に併合("as an SPA" のような短片が degenerate な点質量にならないように) |
チューニング助言: 両フラグとも default ON(2026-05-21)。実 RURI 検証で複合クエリの recall は single-source の ~2×(p50 15→32ms / p95 17→40ms)だが、Tier 6 ゲート(
p95 < 120ms)・ambient フック予算(~500ms)に対し余裕、と確認済み。単純(非複合)プロンプトは分割されないのでコストはゼロ。training_deltaのintent-centers=N行で実際の分割数を観測できる。perf を抑えたい / 挙動を切り戻したいときはmulti_source_enabled=False(recall/explore)またはmulti_source_ambient_enabled=False(ambient のみ)で 1 行ロールバック。分割は正規表現(句読点ベース)なので Sudachi extra 不要。
index_documents の batch を 1 超新星イベントとして扱い、batch 内 N 件 (N≥supernova_min_cohort_size) に 相互 co-occurrence edge + centroid からの outward velocity を付与。新規 cohort が「互いに重力を持たない散発的塵」状態から「同イベント残骸群」になる。Phase G genesis kick (個別重力) の隣で適用。詳細: Plans — Phase K。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| supernova_enabled | True |
グローバル off スイッチ | n/a |
False で完全 skip、Phase G 単独に rollback |
| supernova_min_cohort_size | 2 | 発火する最小 batch サイズ | 3+ で小規模 batch が cohort 化しない | 1 にすると単独 remember で edge を張ろうとする (相手いない) |
| supernova_initial_weight | 1.0 | 相互 edge の初期 weight | 2.0+ で強い cohort (seed pool の mass-aware boost が log(1+w) で強く効く) |
0.5 で弱い cohort、0.0 で edge 形成 skip |
| supernova_velocity_alpha | 0.03 | 爆発の運動量 α | 0.05 で orbital_max_velocity cap に到達 (爆発が一気に膨張) |
0.01 で穏やかな爆発、0.0 で velocity 形成 skip |
チューニング助言: Phase K は 将来 session の新規 cohort に効くが、既存 orphan ノードは遡及できない (cohort 形成は index 時のみ)。既存 harakiriworks-self-knowledge 112 件のような遡及対象には別途 ritual script で edge + velocity を後付けする必要。
supernova_initial_weight=1.0は Phase Bedge_threshold=5と独立 (Phase K は event-driven、Phase B は recall 累積 driven)。一括投入では cohort が大きくなりすぎる場合はindex_documentsの batch を分割するのが運用上の手段 (例: 100 件投入を 4×25 件に分けて 4 つの cohort にする)。 | virtual_faiss_enabled |True| virtual_pos でビルドした第二 FAISS を並走(Phase H Stage 4)。priming 後の displacement を seed step に反映する | | virtual_faiss_save_interval_seconds | 60.0 | virtual FAISS の write-behind 周期。cache.virtual_faiss_dirtyが立つたびに次の tick で full rebuild + disk save。0で無効化(compact / shutdown 時のみ rebuild、Phase J Stage 1 以前のレガシー挙動)。長期常駐 MCP サーバーでは非ゼロ必須 — そうしないと Phase I/J の query attraction 累積が次の起動まで他プロセスの seed pool に反映されない。23k node 規模で rebuild ~数百 ms、60s 間隔なら 1% 未満の負荷 | | wave_neighbor_use_virtual |True| Phase H Stage 5。wave propagation の per-frontiersearch_by_idを virtual FAISS で行う(「星同士の引力」原則に沿った形)。raw FAISS は静的な天球で displacement を見ないため、Falseでレガシー(raw のみ)に戻せる。virtual FAISS が空 / None / 無効のときは自動 fallback。p50 への影響は誤差範囲(同サイズの index search) |
新規 remember 時に既存重力場から 1 step の kick を適用、新規ノードを「裸」(mass=1, displacement=0, velocity=0) で gravity 場に置かないための補正。詳細: Plans — Phase G — Memory Genesis。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| genesis_kick_enabled | True |
Phase G G.1 の全体 ON/OFF | — | レガシー挙動(裸投入) |
| genesis_kick_neighbor_k | 5 | kick 計算で使う高 mass 近傍数 | 多くの近傍からの引力で軌道が安定 | ノイズ少、近傍偏在に弱い |
| genesis_kick_pool_size | 50 | FAISS top-N pool(mass 降順で K に絞る前段) | 真の重力中心を見つけやすい | 計算速い |
| genesis_mass_boost_alpha | 0.5 | ` | acc | ` → mass boost 変換係数 |
quiet node を idle 時間に synthetic recall で再活性化し、co-occurrence エッジ + gravity 場を時間軸で build up するバックグラウンドループ。_is_synthetic=True で return_count は増やさない(saturation 非発火)。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| dream_enabled | True |
Phase G G.2 の全体 ON/OFF | — | 夢ループ無し(Stage 1 のみ) |
| dream_interval_seconds | 30.0 | 夢 tick 周期 (Phase M follow-up 2026-05-13 で 60→10 にしたが foreground starvation が判明し 10→30 に再調整、_dream_loop 内で await asyncio.sleep(0) 挿入で per-tick yield も追加) |
CPU 占有率↓、quiet 救済が遅い | 早く quiet が育つが CPU↑ |
| dream_batch_size | 10 | 1 tick で再活性化する quiet node 数 (50 → 10 へダウン、batch 中の連続 CPU 占有 2.5s → 0.5s に短縮して foreground recall が timeout しなくなった) | 多数同時に育つ | レイテンシ少、深く育つ |
| dream_mass_ceiling | 1.5 | quiet と判定する mass 上限 | 高 mass まで再活性化 | 真に育っていないノードのみ救済 |
| dream_min_idle_seconds | 300.0 | 最終 access からこれ以上経った node のみ対象 | 多くが対象になる | 本当に休眠中のもののみ |
| dream_top_k | 10 | 各 synthetic recall の top_k | 広く co-occurrence | 焦点絞った re-activation |
チューニング助言: dream loop のチューニング結果を実測したいときは
scripts/bench_dream_loop.pyを使う。本番 DB を汚さず/tmp/gaottt-dream-bench-*で隔離実行し、N 件 add 後の baseline と M dream tick 後の差分 (edge 重み / mass 分布 / probe top-K stability) を計測。--docs 200 --ticks 30 --batch 10で 30 秒程度。Phase K supernova が edge count を index 時に saturate させるので、dream の signal は edge weight に出ることに注意。
| パラメータ | 既定 | 用途 |
|---|---|---|
| default_hypothesis_ttl_seconds | 7 日 | hypothesis ソース |
| default_task_ttl_seconds | 30 日 | task ソース |
| default_commitment_ttl_seconds | 14 日 | commitment ソース |
remember(ttl_seconds=...) / commit(deadline_seconds=...) で個別上書き可能。
| パラメータ | 既定 | 影響 |
|---|---|---|
| auto_remember_default_max | 5 | 候補数の既定 |
| auto_remember_min_chars | 12 | 候補の最短文字数 |
| auto_remember_max_chars | 400 | 候補の最長文字数 |
auto_remember の Stop / turn-end hook ラッパー。backend service (Plans-Save-Candidates-Hook.md) 自体は auto_remember_* の knob を再利用する (max_candidates の既定だけ 3、token-budget 配慮)。hook script 側の env:
| 環境変数 | 既定 | 説明 |
|---|---|---|
GAOTTT_SAVE_CANDIDATES_ENABLED |
1 |
0/false/off で Stop + UserPromptSubmit-inject 両方を無効化 |
GAOTTT_SAVE_CANDIDATES_URL |
http://127.0.0.1:7878/mcp |
proxy mode backend MCP endpoint (ambient_recall hook と共有) |
GAOTTT_SAVE_CANDIDATES_TIMEOUT |
3.0 |
秒。heuristic 抽出のみ (embedder 不使用) で steady-state ~10-50ms、3s は cold-start 余裕分 |
GAOTTT_SAVE_CANDIDATES_MAX |
3 |
block に surface する上位 N 件 |
GAOTTT_SAVE_CANDIDATES_TURNS |
2 |
Stop 側 — transcript から拾う直近 user+assistant 交換数 |
GAOTTT_SAVE_CANDIDATES_STATE_DIR |
~/.gaottt/save_candidates |
Stop → UserPromptSubmit bridge の per-session state file ディレクトリ |
GAOTTT_SAVE_CANDIDATES_INCLUDE_PERSONA |
1 |
0 で persona slot 省略 (ambient_recall persona slot との重複回避) |
GAOTTT_SAVE_CANDIDATES_EMIT |
state |
出力モード。state = state file 書き込み (Claude Code Stop+Inject bridge)、stdout = block を直接 stdout に出力 (opencode plugin パス、opencode-save-candidates.ts が設定) |
GAOTTT_HOOK_ANTI_RESTACK |
1 |
0/false/no で ambient_recall Python hook の再注入 marker ガードを無効化 (default on)。ガードは prompt に既注入 marker が含まれている場合にバックエンド呼び出しをスキップする (frontend parity: opencode plugin と同じ marker 文字列をチェック) |
opencode plugin (scripts/hooks/opencode-save-candidates.ts) 専用の追加 env:
| 環境変数 | 既定 | 説明 |
|---|---|---|
GAOTTT_REPO |
/mnt/holyland/Project/GaOTTT |
opencode-ambient-recall.ts と共有。Python interpreter + script path の base |
GAOTTT_SAVE_CANDIDATES_PYTHON |
$GAOTTT_REPO/.venv/bin/python |
Python interpreter override |
GAOTTT_SAVE_CANDIDATES_SCRIPT |
$GAOTTT_REPO/scripts/hooks/save_candidates.py |
Hook script override |
GAOTTT_SAVE_CANDIDATES_DEBUG |
(unset) | ファイル path をセットすると plugin の step trace を append (silent-by-default なので診断時のみ) |
.claude/settings.json への hook 登録 + opencode plugin の install path は Operations — Server Setup 参照。
| パラメータ | 既定 | 影響 | 上げると | 下げると |
|---|---|---|---|---|
| emotion_alpha | 0.04 | |emotion| の boost 重み | 情動的記憶を強く優先 | 影響を抑える |
| certainty_alpha | 0.02 | certainty の boost 重み | 高確信度を強く優先 | 影響を抑える |
| certainty_half_life_seconds | 30 日 | 確信度の半減期 | 確信度が長く保たれる | 早く減衰、revalidate 推奨頻度↑ |
| パラメータ | 既定 | 影響 |
|---|---|---|
| prefetch_cache_size | 64 | LRU エントリ上限 |
| prefetch_ttl_seconds | 90 | キャッシュ寿命 |
| prefetch_max_concurrent | 4 | 並列 prefetch 数 |
| パラメータ | 既定 | 影響 |
|---|---|---|
| flush_interval_seconds | 5.0 | キャッシュ → DB の flush 間隔 |
| flush_threshold | 100 | dirty 件数による即時 flush 閾値 |
| faiss_save_interval_seconds | 5.0 | in-memory FAISS → .faiss ファイル保存間隔。0 で無効化(shutdown 時のみ save、レガシー挙動)。MCP サーバーのような長期常駐プロセスでは必ず非ゼロにしないと他プロセスから新規 remember が見えなくなる |
| faiss_persist_guard_enabled | True | 逆方向上書きガード。in-memory FAISS が DB active 数に対し過小なとき全 FAISS 永続を拒否し、壊れた index で正常な on-disk index を上書きするのを防ぐ(問題5.5)。GAOTTT_FAISS_PERSIST_GUARD_ENABLED=0 で無効化 |
| faiss_persist_floor | 100 | ガードが効き始める最小 active ノード数。これ未満は守るべき index が無いので不活性(小規模 / reset 直後の DB で誤発動しない) |
| faiss_persist_min_ratio | 0.5 |
faiss.size >= active × この比 のときのみ永続。下回ると corrupt とみなし書き込み拒否。正当な bulk forget/compact は cache active も同時に減るので誤発動しない |
| proxy_serialize_requests_enabled | True |
並列 recall ハードニング (2026-06-01)。proxy mode で単一 upstream ClientSession への全 forwarder + ping を asyncio.Lock で 1 in-flight に直列化。同一ターンの 2 並列 recall が streamable-http session を壊す「MCP error 32600: Session terminated」を防ぐ(Troubleshooting)。GAOTTT_PROXY_SERIALIZE_REQUESTS_ENABLED=0 で legacy 無ロック挙動に rollback(auto-reconnect も無効化 — rebuild に lock が要るため) |
| proxy_auto_reconnect_enabled | True | proxy が session 終了系の例外で upstream session を rebuild し 1 回 retry。_ensure_backend 再利用で backend 死 / idle watchdog / cold-start も自己修復。正常な tool error (isError=True) は素通し。serialize が ON のときのみ有効。GAOTTT_PROXY_AUTO_RECONNECT_ENABLED=0 で無効化 |
| faiss_index_lock_enabled | True |
FaissIndex の add/save/search/reset/get_vectors を threading.Lock で保護。背景の to_thread save(実ワーカースレッド)が event-loop の add() と競合するクロススレッド race を封じる(asyncio lock では防げない)。recall hot path への影響は p50 +1.9% / p95 +0.1% / p99 +7.4%(予算内)。GAOTTT_FAISS_INDEX_LOCK_ENABLED=0 で無効化 |
| パラメータ | 既定 | 用途 |
|---|---|---|
| model_name | cl-nagoya/ruri-v3-310m |
Embedding モデル |
| embedding_dim | 768 | 次元数(モデル変更時は要連動) |
| batch_size | 32 | バッチエンコード時 |
宇宙ごとの embedder identity・次元を <data_dir>/manifest.json に記録し、起動時に整合を検証する。embedder が変わると全ベクトルが無意味化するため、その事故を構造的に防ぐガード。詳細: Plans — Multiverse Scale-Out §Stage 1、multiverse-implementation-plan.md §MV0。
| パラメータ | 既定 | 用途 |
|---|---|---|
| manifest_check_enabled | True |
manifest 起因の整合 check を有効化。escape hatch — =False で manifest embedding_dim と embedder_id の不一致を warning 透過(宇宙を救済する最終手段、通常は触らない)。FAISS 次元保護(embedder.dimension != config.embedding_dim)はこの knob に関わらず常に RuntimeError — FAISS と次元が違うと検索が壊れるため |
v1 の既知挙動:
ensure_manifestは config のみから生成するため、初回 manifest のembedder_versionは"unpinned"。実 RuriEmbedder のembedder_version(HF commit hash)と比較すると、build_engineで毎回 version mismatch warning が出る。これは v1 の warn-only 仕様(実装計画 §MV0-2)で、HF revision が動く運用を v1 では止めない。DR 用の model artifact pinning は MV5 で runbook 要件化される。
embedding model(RURI)のロードを engine プロセスから分離し、ホスト共有サービスとして切り出す。GPU コストをユーザー数ではなくホスト数に比例させる。詳細: Plans — Multiverse Scale-Out §Stage 1、multiverse-implementation-plan.md §MV1。
| パラメータ | 既定 | 用途 |
|---|---|---|
| embedder_endpoint |
""(空文字列 = in-process RuriEmbedder) |
設定時(非空)build_engine が RemoteEmbedder を構築して service に接続。env GAOTTT_EMBEDDER_ENDPOINT=http://127.0.0.1:7879 で上書き可(sentinel empty-string default なので generic env loop が拾う — Optional[str] = None だと拾わない罠を回避)。空文字列は falsy 扱いで従来の in-process RuriEmbedder 経路 |
| embedder_request_timeout_seconds | 30.0 |
RemoteEmbedder の HTTP timeout(秒)。env GAOTTT_EMBEDDER_REQUEST_TIMEOUT_SECONDS
|
起動方法:
python -m gaottt.embedding.service --host 127.0.0.1 --port 7879 --model cl-nagoya/ruri-v3-310m。非 localhost への bind は拒否(認証を持たない service なので/encodeが外部に露出するのを防ぐ)。systemd 雛形:deploy/gaottt-embedder.service。詳細は Operations — Server Setup「embedding service を分離する」節
同じ data_dir を複数プロセスが開いて write-behind が後勝ちする事故クラス(bidirectional cache overwrite / FAISS reverse-overwrite)を機構で閉じる。1 宇宙 1 書き込みオーナーを強制し、lease 喪失時は read-only 遷移する。詳細: Plans — Multiverse Scale-Out §Stage 2、multiverse-implementation-plan.md §MV2。
| パラメータ | 既定 | 用途 |
|---|---|---|
| owner_lease_enabled | False |
standalone 構成向け。True で lease を有効化。managed 宇宙(manifest.managed=True)はこの knob に関わらず強制 — supervisor 管理下の宇宙をどの entry point から開いても lease が効く |
| lease_force_takeover | False |
takeover の canonical 経路。GAOTTT_LEASE_FORCE_TAKEOVER=true または CLI --force-takeover(mcp_server)で立てる。stale でない(fresh な heartbeat の)lease でも強制奪取する |
| lease_heartbeat_seconds | 10.0 |
lease オーナーの生存通知周期(秒)。この周期で owner.lock の heartbeat_at を更新 |
| lease_stale_seconds | 60.0 |
heartbeat がこの秒数以上停止した lease は stale と判定され、別プロセスが takeover 可能になる。now - heartbeat_at > lease_stale_seconds(厳密 >、== は stale ではない) |
lease 喪失時の挙動: heartbeat read-back で
owner_id不一致を検出すると、engine は即座に read-only に遷移する。cache flush / FAISS save の全永続化経路(4 経路)を_persist_blockedlatch で skip、mutating operation 14 種はLeaseLostErrorで拒否、query/prefetchは passive フォールバック(結果を返すが field を更新しない)。read 系(recall(passive=True)/get_node/reflect)は継続。詳細: Operations — Troubleshooting「LeaseHeldError / LeaseLostError が出る」
filesystem 要件: lease 機構は
O_CREAT\|O_EXCL/fcntl.flock/os.replaceの POSIX semantics に依存する。NFS / CIFS 等 network filesystem 上では信頼できない — v1 は local FS のみサポート
default OFF の理由と昇格計画: 既存 standalone 構成の挙動を変えないため OFF で導入。managed 宇宙は上記のとおり manifest で強制。この機構は standalone でも事故防止に有効(reverse-overwrite incident の再発防止と同型)なので、1-2 週の dogfooding 後に code default ON への昇格を判断する
1 ホストで複数テナントの宇宙を独立 data_dir で運用する universe supervisor(port 7880)の knob。supervisor が宇宙 engine を spawn / respawn し、API key でユーザー → 宇宙をルーティングする。詳細: Plans — Multiverse Scale-Out §Stage 2、multiverse-implementation-plan.md §MV3、運用手順は Operations — Multiverse Setup。
| パラメータ | 既定 | 用途 |
|---|---|---|
| multiverse_root |
"" (空 = 機能不使用) |
multiverse のルートディレクトリ。env GAOTTT_MULTIVERSE_ROOT。空なら supervisor も shim の supervisor mode も使われない(default 不変)。推奨 ~/.local/share/gaottt-multiverse
|
| supervisor_port | 7880 |
supervisor の HTTP listen port |
| supervisor_admin_key | "" |
admin API key。env GAOTTT_SUPERVISOR_ADMIN_KEY 推奨(config file に書かない)。空 = supervisor 起動 fail-fast(unauthenticated admin endpoint を絶対に露出しない) |
| universe_port_range_start | 7890 |
宇宙 backend の動的 port 割当開始 |
| universe_port_range_end | 7989 |
宇宙 backend の動的 port 割当終了。end - start + 1 = 100 が 1 ホストあたりの宇宙数上限(v1 制約) |
| supervisor_spawn_concurrency | 3 |
同時 spawn 上限(semaphore)。cold respawn spike(朝の始業時刻に多数の宇宙が一斉起床等)対策 |
| supervisor_readiness_timeout | 90.0 |
spawn readiness poll timeout(秒)。FAISS load + BM25 build を含む初回起動を待つ猶予 |
★
backend_token_enabledknob は作らない: backend token middleware の発動スイッチはGAOTTT_BACKEND_TOKENenv の有無そのもの。boolean knob を作ると「token 設定済みだが middleware 無効」の dangerous state が生まれる。GAOTTT_BACKEND_TOKEN未設定 → 素通し(default 不変、既存 7878 単一 backend 無影響)/ 設定済み → 全リクエストでAuthorization: Bearer検証。supervisor が spawn 時にこの env を注入する(token はsecrets.token_urlsafe(32)で生成、<universe_dir>/backend.token0600 に永続化、再起動時に読み戻し)
REST 経路は提供しない (v1): managed 宇宙は owner lease (MV2) で二重 engine を構造的に拒否するため、REST app (
build_engine()で独自 engine を立てる) が開けない。宇宙に露出する経路は MCP のみ。テナント管理者の操作は supervisor admin API で提供(MCP/REST parity 鉄則は管理面に適用されない — Architecture — Overview 設計判断表「Multiverse supervisor は MCP/REST parity 対象外」)
信頼境界:
multiverse_rootは 0700 /manifest.json/owner.lock/backend.tokenは 0600。同一 OS ユーザー内の manifest 改変は v1 信頼境界外(root / 同一ユーザーを敵とするモデルは v1 で守らない)。NFS / CIFS は lease の POSIX semantics が保証できないため非サポート
supervisor が embedding service (port 7879) を lazy spawn するための knob 群。開発機(systemd を使わず supervisor 1 本で運用する構成)向けで、初回の embed 需要(create_universe / /route)で /healthz を叩き応答が無ければ spawn、全 backend が idle で落ちたら embedder_spawn_idle_timeout_seconds 後に SIGTERM で落とす。3 状態の state machine (unowned / owned_idle / owned_terminating) + asyncio.Lock (in-process) + <multiverse_root>/.embedder.spawn.lock の fcntl.flock (cross-process) で race safety を担保する。詳細: Plans — Multiverse Scale-Out §SPOF、Operations — Server Setup「embedding service を分離する」節、設計判断は Architecture — Overview 設計判断表「Supervisor による embedder lazy spawn」。
★ lazy spawn 発動には
embedder_endpoint設定が必須: 既定のembedder_endpoint=""(= in-process RuriEmbedder 使用)では、supervisor_spawn_embedder=Trueでも lazy spawn は発動しない(feature inert)。ensure_embedder_upは spawn lock 取得後、cache の有無に関わらず endpoint 空を即座にEmbedderValidationErrorで拒否する(B-F4 完全化)。multiverse 運用で lazy spawn を使う場合はGAOTTT_EMBEDDER_ENDPOINT=http://127.0.0.1:7879等で明示的に設定する。
| パラメータ | 既定 | 用途 |
|---|---|---|
| supervisor_spawn_embedder | True |
lazy spawn 機能の global off-switch。True(既定)で supervisor が embedding service を lazy spawn する。正常な本番 systemd embedder が先に立っている場合の挙動は完全不変 — /healthz で検知して所有権を主張せず unowned 扱い(systemd 運用時の干渉ゼロ)。False で従来挙動(embedder に繋がらない場合は即 EmbedderValidationError、create_universe は 400・/route は 503) |
| embedder_spawn_idle_timeout_seconds | 300.0 |
supervisor が spawn した embedder が、最後のリクエストからこの秒数 idle で続いたら SIGTERM で落とすまでの猶予。cold-war idle reclamation(全 backend が休眠しても即座に embedder まで殺さない猶予) |
| embedder_spawn_readiness_timeout_seconds | 90.0 |
spawn 直後の embedder が /healthz に応答するまで待つ猶予。初回 RURI model download (~1.2GB) で超過し得る(超過時は spawn 失敗だが、retry で 2 回目以降は cache が効いて通る)。backend の supervisor_readiness_timeout と同じ 90s に揃えている |
| embedder_idle_watchdog_poll_seconds | 30.0 |
supervisor の idle watchdog が embedder の idle timeout 到達を check する poll 間隔。embedder_spawn_idle_timeout_seconds (300s) に対して 30s poll で最大 ~30s の誤差 |
★ opt-out は
supervisor_spawn_embedder=False: 1 行で従来挙動(embedder は必ず外部/systemd で立てる、繋がらないと即座にエラー)に戻る。本番正常 systemd embedder 運用時は/healthzで検知してunownedに倒れるため、Trueのままでも挙動は完全不変(所有権を主張しない)。
★ PermissionError / SIGKILL 後 alive は手動 recovery: 異常終了パス(他 uid 所有の pid・SIGKILL 後も生き残る等)では state を
unownedに消さずowned_terminatingを保持し ERROR log で運用者に手動 recovery を促す(auto-respawn しない安全側)。/routeは 503 を返し続ける。詳細: Operations — Troubleshooting「supervisor が lazy spawn した embedder がowned_terminatingに固まる」。
supervisor が Postgres-backed control plane(port 7881、独立プロセス)と同期・usage telemetry を送信するための knob。control plane は aggregator / audit / billing 収集点で、engine コードには一切接触しない(設計判断 J9)。詳細: Operations — Control Plane、Plans — Multiverse Scale-Out §Stage 3、multiverse-implementation-plan.md §MV4。
| パラメータ | 既定 | 用途 |
|---|---|---|
| control_plane_url |
"" (空 = control plane 不使用) |
control plane の URL。env GAOTTT_CONTROL_PLANE_URL(例 http://127.0.0.1:7881) |
| control_host_id | "" |
control plane 側で発行された host_id。env GAOTTT_CONTROL_HOST_ID
|
| control_host_token | "" |
SECRET — control plane 側で発行された平文 host token。env GAOTTT_CONTROL_HOST_TOKEN。log に出さない、spawn される backend にも継承させない(supervisor 自身のみが使う) |
| control_default_tenant_id |
"" (空 = 単一暗黙 tenant "default"、J11) |
local 宇宙が報告する tenant_id。env GAOTTT_CONTROL_DEFAULT_TENANT_ID。未設定なら "default" を使用(001_initial.sql が bootstrap INSERT する tenant、FK 解決済み) |
| control_sync_interval_seconds | 300.0 |
pull(reconcile)周期(秒)。env GAOTTT_CONTROL_SYNC_INTERVAL_SECONDS
|
| usage_push_interval_seconds | 60.0 |
usage flush 周期(秒)。env GAOTTT_USAGE_PUSH_INTERVAL_SECONDS
|
| usage_spool_dir | "" |
usage spool ディレクトリ。env GAOTTT_USAGE_SPOOL_DIR。空 = <multiverse_root>/logs/usage-spool/ に解決(multiverse_root も空なら usage push 無効化、durability target 無し) |
★ 発動条件 — 3-point gate:
control_plane_urlANDcontrol_host_idANDcontrol_host_tokenの 3 点とも設定時のみ ControlClient が有効。1 つでも欠けたら WARNING log + control 不使用(supervisor は従来通り local-only、default 不変、MV3 完全一致)。gate はControlClient.__init__と supervisor_main()の両方でチェックされる。
★
control_host_tokenは SECRET 扱い:_build_spawn_envと同様に log に出さない。supervisor が spawn する backend プロセスの env にも 継承させない — supervisor 自身のみが読む。
★ J1=A (PM 承認済み SoT deviation): v1 の usage は
/route解決回数を activity telemetry として集計 したもので、recall / remember / ingest の正確な operation count ではない(event_type='route_resolution')。billing-grade の正確な operation count は MV4.1 で導入予定。詳細: Operations — Control Plane「usage telemetry の意味」節。
supervisor が universe 作成/削除の成功経路で litestream 設定ファイル(dbs: ブロック)を再生成するための knob。設定時、supervisor は <multiverse_root>/universes/*/ を scan し純粋関数で YAML を生成、atomic write(tmp + fsync + os.replace)で指定パスへ書く。失敗は ERROR log のみで supervisor 応答に影響しない(best-effort)。詳細: Operations — Backup & DR、Plans — Multiverse Scale-Out §Stage 4、multiverse-implementation-plan.md §MV5。
| パラメータ | 既定 | 用途 |
|---|---|---|
| litestream_config_path |
"" (空 = hook 不使用) |
litestream 設定ファイルの出力パス。env GAOTTT_LITESTREAM_CONFIG_PATH(例 /etc/litestream/gaottt.yml)。空なら hook は一切呼ばれず、MV3/MV4 構成は 1 行も変わらず動く(default 不変)。設定時は POST /admin/universes と DELETE /admin/universes/{uid} の成功経路で再生成 |
★
backup_gen_timeout_secondsknob は意図的に未設置: hook は subprocess ではなく direct import の純粋関数呼び出しなので timeout は不要。knob を置くと「subprocess で動く」と誤解を招くため(Codex review round-2 #5)。
★ scan + write は
_backup_hook_lockで直列化: 並行 create/delete hook が out-of-order に完了しても、最後の writer の scan 時点の on-disk 状態が最終 YAML になる(stale write の構造的排除)。hook は best-effort で、例外は ERROR log のみ(supervisor 応答は成功のまま)。spawn env(_build_spawn_env)には litestream / backup 関連 knob は 一切漏れない(supervisor プロセス内のみで動く)。
-
gamma↑(temperature が大きくなる) -
gravity_G↑(引力が強い) -
wave_max_depth↑(広く伝播)
Note: Phase I 以降、
max_displacement_normは事実上 ∞ (1e6)。displacement の届く距離は Hooke (orbital_anchor_strength) +displacement_decay+orbital_max_velocityで物理的に均衡する。「もっと遠くまで」したい時はorbital_anchor_strength↓ またはgravity_G↑。
-
saturation_rate↓(馴化を緩める) -
gravity_G↓ -
thermal_escape_scale↓(温度脱出を抑える)
-
default_task_ttl_secondsを大きく(例 90 日) -
default_commitment_ttl_secondsを大きく(例 30 日)
-
prefetch_ttl_seconds↑(90 → 300) -
prefetch_cache_size↑
DB が大きくなる(~10k 超)と、デフォルト wave_initial_k=3 の seed 段階で dense cluster(Twitter / 書籍 / コーパス系)が独占し、sparse class(agent / value / intention / commitment / compaction)が seed に入らないまま post-filter で空集合になる。対処:
-
wave_k_with_filter↑(200 → 500/1000)— seed pool を広げて sparse class を含める。レイテンシは線形に増えるのでscripts/run_benchmark_isolated.shで p50 < 50ms を確認 - それでも不足なら呼び出し側で
recall(query, source_filter=[...], wave_k=N)を明示 - target が極端に sparse(< 50 件)な場合、
tagベースのreflectで発掘する方が確実
→ より広い文脈: Operations — Troubleshooting
(formerly GER-RAG)
- 1. Welcome
- 2. Install GaOTTT
- 3. Connect Your Client
- 4. First Conversation
- 5. Everyday Use
- 6. When Stuck
- As Long-Term Memory
- As Task Manager
- As Persona Base
- As Narrative Engine
- Multi-Agent Setup
- Per-Project DBs
- Multiverse (1人1宇宙)
- Ambient Recall
- Visualization
- Server Setup
- Multiverse 運用プレイブック(統合)
- Multiverse クイック健康チェック(パニック時)
- Multiverse Setup (MV3)
- Multiverse Import Universe
- Control Plane (MV4)
- Backup & DR (MV5)
- Resource Requirements (VRAM/RAM/Disk)
- Tuning
- Ingestion (files & chat history)
- Migration (upgrade)
- Compact & Backup
- Isolated Benchmark
- Performance Testing (7-tier)
- Troubleshooting
- Roadmap
- Backend Phase A/B/C
- Phase D — Persona & Tasks
- Phase G — Memory Genesis
- Phase H — Wave Seed Redesign
- Phase I — Free Star Movement
- Phase J — Persona-Anchored Retrieval
- Phase K — Stellar Supernova Cohort
- Phase L — Hybrid Retrieval
- Phase M — Mass Conservation
- Phase N candidate β — Mass Evaporation
- Phase O — TTT Observability
- Phase P — Pressure Terms (Λ + Langevin)
- Phase Q — Orbital Mechanics (Rosette Orbits)
- Phase Q2 — Gravitational Scale Matching
- Phase T — Semantic Requalification
- Phase U — Review Hardening
- Observation Apparatus Refinement
- Observation Apparatus Round 2 (dogfooding 2026-06-12 起点)
- Hardening — Concurrency & Persistence
- Ambient Recall Enrichment
- Ambient Recall Refinement (Phase A 由来)
- Ambient Recall Lateral Association (〇〇といえば〜)
- Accretion Recall (降着想起・〇〇ってなんだっけ)
- Synaptic Pruning (連想の忘却・edge decay)
- Save Candidates Hook (ambient-recall の write-side 対称)
- Lens Hygiene (ambient block の漏れ防止)
- Instruction Surface Hygiene (指示表層と hook harness)
- Query as Mass Distribution
- Multiverse Scale-Out (大規模化・1人1宇宙)
- SKILL.md Improvement
- Embedder Comparison (RURI vs RikkaBotan)