Rei-AIOS Tools · Experiments · 2026-09-13/14 · STEP 2017/.../2033/2036 · STEP 2036 Pattern 5 corrigendum

rei-safe-eval — 3/3 axiom-free + 三位一体 + seccomp/strace + FdTracker (STEP 2036 Pattern 5 corrigendum 反映)

ExploitGym 事故 (2026-07 OpenAI–HuggingFace、 attack ベンチを解かせていた エージェント群 が 答えの在り処 を 探しに 行き 隔離を 突破) の 教訓を、 攻撃側 を 一切 持たない 防御専用 の 評価サンドボックス骨格 として chat-Claude が draft、 藤本さん explicit「安全な方向で」 directive に 応答。 3 不変条件 (I1 grader-unreachability / I2 egress fail-closed / I3 one-way S→G) を 名前付きで code に 固定、 I1 の Lean 4 形式化 stub を STEP 2017 (B) で 起草。

Peace Axiom Theory #196 整合: 本 arc は 攻撃コード生成器を 一切 含まない。 chat-Claude 明示: 「ExploitGym の 本体は 攻撃コード生成器です。 これを Rei-Automator や rei-aios の 実行環境に 接続すると、 Rei が 悪意ある code に 該当する ものを 生成・実行できる 系になります。 これは 私が 手伝える 範囲を 明確に 超えます。」 → 藤本さん directive「私は 別に 何処かを 攻撃したいと 思いません」 → chat-Claude 応答「攻撃側を 一切 持たない 構成で、 評価サンドボックスの 骨格を 作ります」。 本 unpack + Lean 4 stub arc は この 防御専用 boundary を 継承。

3 つの不変条件

id名前意味担保する層Lean 4 formalization
I1 grader-unreachability 答え (keys/) は 被験ゾーン S から 到達不能 container の 別 mount (keys を S に mount しない) + Zones.assert_key_not_in_subject() ★ axiom-free 完成 (STEP 2027、 no axioms)
I2 egress fail-closed S は 既定で 外向き通信を 持たない。 通信できたら「隔離が壊れている」と 見なして 即中止 docker run --network none + canary.assert_no_egress() (TEST-NET-1 TCP + DNS 二段) ★ axiom-free 完成 (STEP 2022、 no axioms)
I3 one-way S → G 情報は S → submission → G の 一方向 のみ。 採点結果を S へ 戻す feedback チャネルは 既定で 閉じる ゾーン分離 + ALLOW_FEEDBACK = False ★ axiom-free 完成 (STEP 2022、 [propext] only)

ExploitGym 事故 の 直接教訓 (chat-Claude quote)

事故が起きたのは、 OpenAI 版が I2 を「allowlist で 経路を 絞る」に 留め、 hard abort に していなかった から。 ここでは 経路自体を 持たせない (--network none) + 経路が あったら 止める (canary) の 二段で fail-closed に している。

ゾーン構成

 O  orchestrator / observer   ← 全体の外。 setup と 異常検知
 │
 ├─▶ S  subject   (隔離・通信なし・read-only 入力)── submission ──▶ G  grader (答えを持つ・S から到達不能)
                                                                          │
                                                                    grader_out (S から見えない)

STEP 2017 unpack 時 の 実測 verify

modecommand期待挙動実測結果
Structure-test python run_eval.py tasks/example_sort --structure-test S→G→O 完走、 passed=True (評価としては 無効、 流れ確認 専用) ✓ passed = True、 observer info「action log なし」
Fail-closed (networked dev env) python run_eval.py tasks/example_sort canary DNS check が 発火、 SandboxBreach raise、 abort ✓ 「中止 (I2 fail-closed): DNS 解決が成立した = 外部到達性がある」 で 中止、 docker/run-subject.sh 案内

両 mode 意図通り の 挙動、 chat-Claude README §「本番相当」 の 「通信のある環境ではここで I2 が発火して止まる。それが正しい挙動」 が STEP 2017 unpack 直後 に 実測 confirm。

Unpack 時 の minor patch (semantic 変更 なし)

Windows Python 3.13 の Path.read_text() の default codec は cp932、 UTF-8 の 日本語 prompt を 含む task.json を Windows で 読むと UnicodeDecodeError で 落ちる。 5 箇所に encoding="utf-8" を 明示 (protocol.py: TaskSpec/Submission/Score dump+load、 grader.py: key_path.read_text、 observer.py: log_path.read_text)。 semantic 変更 なし、 Windows portability のみ。 詳細 は experiments/rei-safe-eval/ORIGIN.md

action.log 記録機構 (STEP 2023、 defer item (o) fulfill)

STEP 2023 で reisafe/recorder.py + reisafe/subject.py wire 完了。 observer.py が heuristic tripwire として 実 対象 を 検査可能 に。 chat-Claude README §「次の決めどころ」 1 番 の 「action.log の 取り方」 応答 (Python-level 記録、 seccomp/strace 外部 tracer は 依然 defer (o'))。

Recorder API

from reisafe.recorder import Recorder, read_text_logged, write_text_logged

# Subject S の run 冒頭 で 初期化 (subject.py で 自動化済)
rec = Recorder(work_dir / "action.log")

# 各 read を log
rec.log("read", path="input/nums.txt")
text = (work / "input/nums.txt").read_text(encoding="utf-8")

# or helper 使用
text = read_text_logged(work, "input/nums.txt", rec)

# write も同様
write_text_logged(work, "submission/submission.json", data, rec)

# connect の 記録 は 現状 canary.py の SandboxBreach で 中止するため
# reference impl は emit しない。 実装側 が socket 使う 場合 は
# rec.log("connect", host="...") を 明示。

実測 evidence (STEP 2023 unpack 直後)

Testaction.log 出力observer scan 結果
正常課題 (example_sort、 structure-test) 3 line: task.json read + input/nums.txt read + submission/submission.json write ✓ [ok] 異常なし (記録された範囲で)
Adversarial (keys 探索 + huggingface connect + /tmp exfil) 4 line JSON (attack pattern 模擬) ✓ 3 findings: [critical] 許可外パス read: ../keys/example_sort.json / [critical] 外向き接続 の 試行: huggingface.co / [warn] 許可外パス write: /tmp/exfil.log

★ 決定的 evidence: adversarial test の huggingface.co connect 検出 は STEP 2017 で 引用 の ExploitGym 事故 (2026-07 OpenAI–HuggingFace) の 直接 pattern。 observer が 事故 と 同 shape の 兆候 を 拾える 実証、 chat-Claude 設計 の operational 適合。

Honest scope (STEP 2023 action.log):

feedback チャネル gate (STEP 2025、 defer item (p) fulfill)

STEP 2025 で FeedbackConfig + emit_scalar_feedback() + observer warn 三段 防御 完了。 chat-Claude README §「次の決めどころ」 2 番 応答、 defer (p) pickup。 「戻すのは スカラー 1 個 から。 それ自体 が 報酬ハック の 入口 だと 明示して 扱う」 の operational discipline 化。

三段 防御 の 構成

Layer実装Fail-safe
Config gate FeedbackConfig.enabled = False default emit_scalar_feedback は enabled=False で RuntimeError、 opt-in なしで 使えない
Scalar-only 型 検査 FeedbackConfig.check_scalar(value) bool / list / dict / string は TypeError、 int/float のみ float 化 して 通過
反復上限 max_writes field + counter 到達で RuntimeError、 無限ループ 予防、 counter は grader_out/{task_id}.feedback_count
Observer 兆候検出 _FEEDBACK_SMELLS = ("feedback_in",) action.log の feedback_in/ read を warn として emit、 「報酬ハック の 入口」 明示 継承

API

from reisafe.protocol import FeedbackConfig, Zones
from reisafe.grader import emit_scalar_feedback

# 既定 disabled — 明示 opt-in
cfg = FeedbackConfig(enabled=True, max_writes=3, max_reads=3)

# 通常 use case: G が S へ スカラー を 戻す
score = 0.75  # int or float のみ
value = emit_scalar_feedback(zones, task_id, score, cfg)
# → zones.feedback_in / task_id.scalar に "0.75\n" 書き込み
# → grader_out / task_id.feedback_count で counter 増加
# S は subject_work/feedback_in/task_id.scalar を read で 受け取る
# observer は S の read を warn として emit (「入口」 明示)

# Fail cases:
emit_scalar_feedback(zones, task_id, True, cfg)          # → TypeError (bool)
emit_scalar_feedback(zones, task_id, [0.5, 0.8], cfg)    # → TypeError (list)
emit_scalar_feedback(zones, task_id, "hack", cfg)        # → TypeError (str)
emit_scalar_feedback(zones, task_id, 0.5, FeedbackConfig())  # → RuntimeError (disabled)
# 4th call after max_writes=3 → RuntimeError (max reached)

実測 evidence (STEP 2025 unpack 直後、 6 tests all PASS)

TestInputExpectedActual
1default cfg (disabled)RuntimeError✓ REJECTED
2enabled + emit 1st scalar 0.75float 0.75 + file 存在✓ value 0.75、 feedback_in/task1.scalar 存在
3emit with bool TrueTypeError✓ REJECTED (bool は int subclass だが 除外)
4emit 2nd scalar 0.8 (within max_writes=2)float 0.8✓ value 0.8
5emit 3rd (over max_writes)RuntimeError✓ REJECTED "max_writes (2) 到達"
6observer scan of action.log with feedback_in readwarn finding✓ [warn] feedback チャネル 使用 の 兆候: feedback_in/task1.scalar — 「報酬ハックの入口」 明示 (I3 一部 開放)
Honest scope (STEP 2025 feedback gate):

seccomp profile + strace tracer defense-in-depth (STEP 2030、 defer item (o') fulfill)

STEP 2030 で docker/seccomp-strict.json + reisafe/strace_helper.py + observer.py execve heuristic 追加 = 「S が 隠して 何か する」 pattern (subprocess/os.execv 直接 syscall 経由) を 拾える 3 層目 の observation 追加。 chat-Claude README §「次の決めどころ」 1 番 (「seccomp/strace 相当を どこまで やるか」) の 応答、 defer (o') pickup。

3 layer defense-in-depth 構成

LayerLevel実装Scope
Python-level 自発記録 App recorder.py (STEP 2023) solve() が 明示 呼び出し した read/write のみ
Container syscall filter Kernel docker/seccomp-strict.json + `--security-opt seccomp=...` (STEP 2030) allow-list、 network syscalls + keyctl/mount/ptrace 系 DENY (EPERM)、 belt-and-suspenders to --network none
External tracer post-process Host reisafe/strace_helper.py + observer execve heuristic (STEP 2030) strace 出力 を action.log JSON lines に post-process、 「S 隠 syscall」 (subprocess/execve) を 拾う、 Linux 環境 必須

seccomp profile (Docker security-opt)

docker/seccomp-strict.json = defaultAction=`SCMP_ACT_ERRNO` + 8 syscall groups (allow-list + explicit deny)、 主 内容:

strace helper (post-processor)

# Usage (Linux 環境):
strace -f -e trace=openat,connect,execve,socket -o /tmp/strace.log \
    python -m reisafe.subject /work

# Post-process to action.log:
python -m reisafe.strace_helper /tmp/strace.log /work/action.log

# observer.py が action.log を scan (recorder.py + strace_helper 統合 view)

実測 evidence (STEP 2030 pipeline verify)

7-line synthetic strace log (openat + read + connect + execve + write) の post-process + observer scan で:

Test caseDetection
openat "/work/keys/example_sort.json" (I1 breach 試行、 EACCES で 実 失敗) critical: 許可外パスへの read: keys/example_sort.json (strip_prefix で normalize、 _ANSWER_SMELLS に match)
connect inet_addr("52.85.132.108") (I2 breach 試行、 EPERM で 実 失敗) critical: 外向き接続の試行 — 隔離が疑わしい
execve "/usr/bin/curl" ["curl", "https://huggingface.co/models"] (subprocess bypass 試行) critical: 外部 binary 実行 の 試行: /usr/bin/curl — subprocess/exec 経由 の bypass 兆候 (STEP 2030 execve heuristic 発火)

★ 決定的 evidence: 「S が subprocess で 隠して curl を 実行 して huggingface.co に POST する」 pattern = recorder.py alone では 拾えない (Python-level read/write のみ 記録) が、 strace_helper + observer execve heuristic で critical severity で 拾える = **「S 隠 syscall」 pattern の 実 検出 evidence stack**。 ExploitGym 事故 (STEP 2017 引用) の subprocess-based data exfiltration pattern も 同 shape で 検出可能。

Honest scope (STEP 2030 seccomp/strace):

ee_bot arc (STEP 2009/2012/2014) と の 直接系譜

「自己検証の非自性」 = bot は 自分自身を 採点できない、 という 主張の インフラ版。 S (被験) と G (採点) を、 S から 到達できないように 物理分離する ことが、 まさに 「採点する主体は 被験の外側に いなければ ならない」 を 境界として 固定したもの。 ee_bot の fresh agent による 独立敵対監査 を、 都度の 運用規律 ではなく 構造として 埋め込む 方向。 (chat-Claude README §「ee_bot と の つながり」)

ee_bot paper: DOI 10.5281/zenodo.22731426 — 「Self-Verification Lacks Self-Nature: Four Consecutive Measurements of an Author-Mutation Test Framework Failing Under Blind Fresh-Agent Audit」 (2026-09-13、 5 rounds 実測、 2 peer review、 11-platform publish 9/11 live)。 ee_bot は「都度の 運用規律」 で 監査を 強制、 本 rei-safe-eval は「物理境界」 で 同じ 主張を 強制。 姉妹 arc。

Lean 4 formalization 3/3 axiom-free + 三位一体 定理 (STEP 2017 B + STEP 2020 + STEP 2022 + STEP 2027)

3 不変条件 全 axiom-free 完成 + 三位一体 定理 実 formalize (STEP 2027 で defer (n) fulfill、 lake build wire、 4 axiom scan all as predicted):

★ lake build 実測 (STEP 2027 unpack 直後)

$ lake build ReiSafeEval
ℹ [2/7] Built ReiSafeEval.Invariant_I1 (3.9s)
info: 'ReiSafeEval.invariant_I1' does not depend on any axioms
ℹ [3/7] Built ReiSafeEval.Invariant_I2 (3.9s)
info: 'ReiSafeEval.invariant_I2' does not depend on any axioms
ℹ [4/7] Built ReiSafeEval.Invariant_I3 (3.0s)
info: 'ReiSafeEval.invariant_I3' depends on axioms: [propext]
ℹ [5/7] Built ReiSafeEval.Invariant_Triple (2.8s)
info: 'ReiSafeEval.invariant_triple' depends on axioms: [propext]
✔ [6/7] Built ReiSafeEval (2.3s)
Build completed successfully (7 jobs).

7 jobs all PASS、 各 file ~3-4 秒、 全 axiom scan は 予測通り の profile (2 完全 constructive + 2 [propext] のみ、 sorry なし)。 lake build wire で pre-commit lake env lean 個別 verify + lake build ReiSafeEval 全体 build 両立。

★ Prediction gap 発見 (STEP 2017 見積り誤り の 記録)

STEP 2017 で 「I1 axiom-free proof は 2-4h、 List.IsPrefix Mathlib prior art audit 必要」 と 見積もった が、 STEP 2027 実装 で **実 workload は 30-60 分**。 差分 の 原因 = 私 の 事前 abstraction analysis 不足 = `reachable_by_subject z z.keys` を unfold すると `is_under z.subject_work z.keys` = `disjoint_mounts.1` そのもの、 型 level で 直接 tautological、 List.IsPrefix Mathlib prior art は 不要 だった。 **未来 の similar formalization で 「事前 semantic gap 分析」 を claim 前 discipline 化 candidate** = 「Prop-level 前提 と 帰結 が unfold で 同一 命題 か 事前 verify」 の pattern。

chat-Claude README §「次の決めどころ」 3 番 (I1〜I3 の Lean 4 形式化) は 3/3 axiom-free 完成 + 三位一体 定理 実 formalize で 完全応答。 「証明された 不変条件 vs 運用の 設定」 の differentiator は 実 evidence stack 確立、 但し Load-bearing invention claim は 依然 candidate marker (Docker mount 実 mapping fidelity + 既存 container 隔離 tool 比較明示 が 残 前提条件)。

-- data/lean4-mathlib/ReiSafeEval/Invariant_I1.lean (excerpt)
namespace ReiSafeEval

/-- Zones: 4 disjoint filesystem regions. -/
structure Zones where
  subject_work : Path
  submission   : Path
  grader_out   : Path
  keys         : Path

/-- S can reach a path if it's under subject_work. -/
def reachable_by_subject (z : Zones) (p : Path) : Prop :=
  is_under z.subject_work p

/-- I1: The keys directory is unreachable from S. -/
theorem invariant_I1 (z : Zones) (h : disjoint_mounts z) :
    ¬ reachable_by_subject z z.keys := by
  sorry

-- data/lean4-mathlib/ReiSafeEval/Invariant_I2.lean (STEP 2022 axiom-free)

/-- Runtime context for I2. -/
structure RuntimeContext where
  docker_network_none : Bool
  canary_verified     : Bool
  allowlist           : List Endpoint

/-- I2: With network none + canary verify + empty allowlist, no external reach.
    #print axioms: "does not depend on any axioms" — 完全 constructive. -/
theorem invariant_I2 (rt : RuntimeContext) (h : egress_isolated rt) (ep : Endpoint) :
    ¬ can_reach_external rt ep := by
  intro h_reach
  obtain ⟨h_net, _, h_allow⟩ := h
  unfold can_reach_external at h_reach
  rcases h_reach with h_neg_net | h_in_allow
  · apply h_neg_net; exact h_net
  · rw [h_allow] at h_in_allow; nomatch h_in_allow

-- data/lean4-mathlib/ReiSafeEval/Invariant_I3.lean (STEP 2022 axiom-free)

inductive Node where | subject | grader | orchestrator
inductive Channel where | submission | grader_out | feedback | action_log

/-- I3: With ALLOW_FEEDBACK = false, no G→S information flow.
    #print axioms: [propext] — Lean 4 core axiom のみ. -/
theorem invariant_I3 (cfg : FlowConfig) (h : one_way_gate cfg) :
    ¬ flows_to cfg Node.grader Node.subject := by
  intro ⟨c, hc⟩
  cases c <;> simp only [flows_via] at hc
  · exact Node.noConfusion hc.1
  · exact Node.noConfusion hc.2
  · obtain ⟨h_af, _, _⟩ := hc; rw [h] at h_af; exact Bool.noConfusion h_af
  · exact Node.noConfusion hc.1

-- 三位一体 (未来 arc、 stub level で embedded)
theorem invariant_triple
    (z : Zones) (rt : RuntimeContext) (cfg : FlowConfig)
    (h1 : disjoint_mounts z) (h2 : egress_isolated rt) (h3 : one_way_gate cfg) :
    (¬ reachable_by_subject z z.keys) ∧
    (∀ ep : Endpoint, ¬ can_reach_external rt ep) ∧
    (¬ flows_to cfg Node.grader Node.subject) := ...

「これは 何で、 何ではないか」 (chat-Claude 過大主張回避)

既存の 道具の 組み合わせ である 部分: --network none / --read-only / --cap-drop (container 隔離の 定石)、 eval harness の S↔G 分離 (既存 の 評価基盤にも ある)、 canary / tripwire (侵入検知の 定石)。 ここに 新しさは 無い。
この 骨格が 明示的に した 部分:
これ 単体は セキュリティ機構 では ない。 本当の 境界は container 側 (--network none と keys の 別 mount) が 担う。 observer は heuristic であり、 すり抜ける。 ここは「境界が 破れかけた 兆候を 早く 拾う 補助」。 過大主張 回避 が operational quality (chat-Claude README §「これは何で、何ではないか」 の 3 point framing)。

Rei-AIOS 位置づけ

次の 決めどころ (急がず、 藤本さん judgment 待ち)

  1. action.log の 取り方 + 外部 tracer: ★ STEP 2023 で recorder.py Python-level 記録 wire、 ★ STEP 2030 で docker/seccomp-strict.json + reisafe/strace_helper.py + observer execve heuristic 追加 = 3 layer defense-in-depth 完了。 recorder (App-level) + seccomp (Kernel-level) + strace (Host-level) で 「S 隠 syscall」 (subprocess/execve) pattern も 拾える (strace pipeline test で curl execve 検出 verify)。 完全 syscall coverage は 不可能 (raw syscall instruction bypass) だが defense-in-depth の 3 layer 統合。
  2. feedback を 開けるか: ★ STEP 2025 で FeedbackConfig + emit_scalar_feedback() + observer warn 三段 防御 完了。 既定 disabled、 明示 opt-in で int/float scalar のみ 受入 (bool/list/dict/str は type 検査 で 拒否)、 max_writes 反復上限、 feedback_in ゾーン read を observer が warn 検出 で「報酬ハックの入口」 明示 継承。
  3. I1 axiom-free proof: ★ STEP 2027 で 完成 — `#print axioms` = 「does not depend on any axioms」、 2-tactic proof (unfold + exact h.1)、 予測「2-4h + Mathlib audit」 は 30-60 分 に revise。 abstraction limitation あり (tautological at Prop level、 Docker mount 具体 model は 未来 arc)。
  4. 三位一体 定理 (invariant_triple): ★ STEP 2027 で 実 formalize 完成 — `Invariant_Triple.lean` 新規、 I1+I2+I3 の 3 個 axiom-free lemma を refine + intro で 合成、 `#print axioms` = [propext] のみ (予測通り、 I3 制約 dominates)。 lake build wire で `lake build ReiSafeEval` 7 jobs all PASS。
  5. lakefile.toml wire: 現状 3 stub は standalone source、 CI build graph 未 wire。 pre-commit `lake env lean` は 個別 file 単位で verify PASS するが、 `lake build` で は 自動 build されない。 wire は defer item (n) の 前提 条件。

Files (unpack contents)

pathrolesize
experiments/rei-safe-eval/README.mdchat-Claude 原案 README (3 invariant + zone + docker + Windows 補足 + honest scope)~6 KB
experiments/rei-safe-eval/ORIGIN.mdunpack provenance + UTF-8 patch record + 実測 verify~3 KB
experiments/rei-safe-eval/run_eval.pyorchestrator (O ゾーン entry)~2.5 KB
experiments/rei-safe-eval/reisafe/protocol.pyZones/TaskSpec/Submission/Score dataclass + I1 code check~3.5 KB
experiments/rei-safe-eval/reisafe/canary.pyI2 fail-closed (TEST-NET-1 TCP + DNS)~2 KB
experiments/rei-safe-eval/reisafe/subject.pyS ゾーン、 solve() = 差し替え点~1.5 KB
experiments/rei-safe-eval/reisafe/grader.pyG ゾーン、 keys 読 + submission 比較~1.5 KB
experiments/rei-safe-eval/reisafe/observer.pyO ゾーン heuristic tripwire (STEP 2023 で 実 log 検査 対象化)~2 KB
experiments/rei-safe-eval/reisafe/recorder.pyaction.log emitter (STEP 2023) — Recorder class + read_text_logged/write_text_logged helpers~3 KB
experiments/rei-safe-eval/reisafe/protocol.pyZones + TaskSpec + Submission + Score + FeedbackConfig (STEP 2025) + feedback_in ゾーン 追加~5 KB
experiments/rei-safe-eval/reisafe/grader.pygrade_one + emit_scalar_feedback (STEP 2025) = 三段 fail-safe (config gate + scalar 型 検査 + max_writes counter)~4 KB
experiments/rei-safe-eval/docker/subject.Dockerfilepython:3.12-slim + 非 root runner~0.5 KB
experiments/rei-safe-eval/docker/run-subject.shdocker run --network none --read-only --cap-drop ALL + STEP 2030 seccomp wire (array-form refactor)~2 KB
experiments/rei-safe-eval/docker/seccomp-strict.jsonSTEP 2030 新規 — 8 syscall groups (allow-list + network/keyctl/mount 系 DENY)、 Docker `--security-opt seccomp=...` 対応~4 KB
experiments/rei-safe-eval/reisafe/strace_helper.pySTEP 2030 新規 + STEP 2033 FdTracker — strace 出力 → action.log JSON lines post-processor (path strip_prefix + syscall→op mapping + **fd tracking で write/read の path resolve**)、 Linux 環境 依存 の CLI + module~7 KB
experiments/rei-safe-eval/tasks/example_sort/例題 task.json + input/nums.txt~0.3 KB
experiments/rei-safe-eval/keys/example_sort.json答え (G 専用)~0.1 KB
data/lean4-mathlib/ReiSafeEval/Invariant_I1.leanI1 axiom-free proof (Zones + disjoint_mounts、 no axioms) — STEP 2017 → 2027~5 KB
data/lean4-mathlib/ReiSafeEval/Invariant_I2.leanI2 axiom-free proof (RuntimeContext + egress_isolated、 no axioms) — STEP 2020 → 2022~5 KB
data/lean4-mathlib/ReiSafeEval/Invariant_I3.leanI3 axiom-free proof (Node/Channel + one_way_gate、 [propext] only) — STEP 2020 → 2022~5 KB
data/lean4-mathlib/ReiSafeEval/Invariant_Triple.lean三位一体 定理 (STEP 2027 新規) — I1+I2+I3 conjunction、 [propext] only、 lake build ready~3 KB
data/lean4-mathlib/ReiSafeEval.leanIndex (STEP 2027 新規) — 4 module import、 lake build 対象~2 KB
data/lean4-mathlib/lakefile.tomlSTEP 2027 wire — `[[lean_lib]] name = "ReiSafeEval"` 追加 (additive、 既存 CollatzRei 影響なし)

参照

STEP 2017 (unpack + I1 stub) · STEP 2020 (I2/I3 stubs) · STEP 2022 (I2/I3 axiom-free) · STEP 2023 (action.log) · STEP 2025 (feedback gate) · STEP 2027 (I1 axiom-free + triple 定理 + lakefile wire) · STEP 2030 (seccomp + strace defense-in-depth) · STEP 2033 (FdTracker fd tracking) · STEP 2036 (Pattern 5 corrigendum: FdTracker は strace -y の fallback、 doc-string 訂正 + 公開面 反映) · rei-aios-88 tab · 2026-09-13/14