STEP 1342 — SoftWarnPatterns 別 file 化 Phase 1 defer #5 完全 close

2026-08-17 · ActionExecutor inline WARN_PATTERNS (3) を 単一 source of truth 化 · test 45/45 PASS · STEP 1340 40/40 + STEP 1341 42/42 regression preserved

本 page の 目的: Rei-Automator Phase 1 defer #5 (SoftWarnPatterns 別 file 化) を完全 close した wiring refactor の 記録。 藤本さん 「推奨でお願い致します」 (C option 選択) → 実行。 chat-Claude Phase 1 spec § 4 「安全層 3 件」 とは 独立の 「warn-level filter」 concept を DANGEROUS_PATTERNS_UNION (Phase 1d-ii) と同 pattern で 単一化。

関連 file:

1. DANGEROUS vs SOFT_WARN の 2 axis 直交 concern

axisDANGEROUS_PATTERNS_UNIONSOFT_WARN_PATTERNS (本 STEP)
levelblock-level (execute stop)warn-level (log のみ、 execute 継続)
用途rm -rf / mkfs / weapon 系 の unrecoverable 破壊launch install / alt+f4 / key delete の UX check
decision「絶対に 実行しない」 (Peace Axiom + physical safety)「実行するが 注意喚起」 (recoverable、 user intent 確認)
rejectionReason設定される (Blocked by safety rule: ...)設定なし (実行成功、 log のみ)
audit resulterrorsuccess (実行完了、 warn は audit event でなく console log)
2 concept を 混同すると:
  • 「block すべきなのに warn だけ」 = 安全性 gap (rm -rf を 実行してしまう)
  • 「warn だけで良いのに block」 = UX 阻害 (alt+f4 で 「blocked」 表示は 過剰)
= 独立 filter として 保持、 単一 source of truth 化しても 2 file 別々 に 管理。

2. 実装 details

2.1 新規 file: soft-warn-patterns.ts

export const SOFT_WARN_PATTERNS: RegExp[] = [
  /launch\s+".*install/i,      // install 系 exe 起動 = 予想外 install?
  /hotkey\s+["']?alt\+f4/i,    // Alt+F4 (アプリ強制終了、 unsaved data risk)
  /key\s+delete/i,             // Delete key 単独送出 (unintended deletion risk)
];

export function isSoftWarnCommand(command: string): boolean {
  return SOFT_WARN_PATTERNS.some(p => p.test(command));
}

export function matchSoftWarnPattern(command: string): RegExp | null {
  for (const p of SOFT_WARN_PATTERNS) {
    if (p.test(command)) return p;
  }
  return null;
}

export const SOFT_WARN_PATTERNS_PROVENANCE = {
  version: '1.0.0-step1342-soft-warn-split',
  totalPatterns: SOFT_WARN_PATTERNS.length,
  origin: { actionExecutor: 3, union: 3 },
  createdAt: '2026-08-17',
  callerMigrationStatus: { actionExecutor: 'migrated' },
  independentFrom: {
    dangerousPatterns: 'block-level vs warn-level = 独立 filter concern',
    peaceAxiom: 'command-level UX check vs intent-level ethics filter = 独立 concern',
  },
} as const;

2.2 ActionExecutor refactor (before → after)

before (STEP 1341 state)after (STEP 1342)
const WARN_PATTERNS: RegExp[] = [
  /launch\s+".*install/i,
  /hotkey\s+["']?alt\+f4/i,
  /key\s+delete/i,
];

// ...
for (const pat of WARN_PATTERNS) {
  if (pat.test(trimmed)) {
    this.log(`WARNING: ...`);
    break;
  }
}
import { isSoftWarnCommand }
  from './security/soft-warn-patterns';

// (const 削除)

// ...
if (isSoftWarnCommand(trimmed)) {
  this.log(`WARNING: ...`);
}

差分: 6 行削除 (inline const) + 2 行追加 (import + call) = net -4 行、 意味は完全同型 (some check + log + break は if で単一 branch 化)。

3. Test 結果 (8 part、 45 assertion)

Part期待結果
1SOFT_WARN_PATTERNS 3 patterns 存在 (launch install / alt+f4 / key delete)6/6 PASS
2isSoftWarnCommand — 3 patterns 全 match + case insensitive + non-warn 全 reject9/9 PASS
3matchSoftWarnPattern — 正しい pattern 返却、 non-match は null4/4 PASS
4PROVENANCE metadata 完全 (version + origin + callerMigrationStatus + independentFrom)9/9 PASS
5DANGEROUS_PATTERNS_UNION と 独立性 (block vs warn 直交、 source-level overlap 0)6/6 PASS
6ActionExecutor 経由 の behavior (warn 検出でも execute 継続、 audit result=success + WARNING log 1 emit)5/5 PASS
7ActionExecutor で non-warn command は log なし、 execute 継続3/3 PASS
8ActionExecutor.ts の inline WARN_PATTERNS 削除確認 (grep) + import 追加 + isSoftWarnCommand() 呼び出し3/3 PASS

Total: 45/45 PASS + STEP 1340 40/40 + STEP 1341 42/42 regression preserved。 累計 127/127 PASS (audit + warn 系)。

4. Rei-Automator Phase 1 defer 6 件 status update (2026-08-17 現在)

defer #内容status
#1Phase 2 provider 追加 (OpenAI + Google + Ollama)⏳ pending (2-4 ヶ月 arc)
#2audit log JSONL hash chain🔷 2/4 caller 完 (STEP 1340 + STEP 1341、 残 2 caller pending)
#3kill switch IPC 経路 (Node parent-child)⏳ pending (1-2 hour 見込み)
#4License 実 適用 (弁護士 confirm)⏳ pending (藤本さん own decision)
#5SoftWarnPatterns 別 file 化✅ STEP 1342 完全 close (本)
#6chat-Claude 逆 briefing (独立検証原則 侵害 candidate)⏳ pending (慎重 judgment)

defer 完全 close 進捗: 0/6 → 1/6 (16.7%)。 #2 は 部分 advance (2/4)、 #1/3/4/5/6 のうち #5 が 本 STEP で完全 close。 「1 件を完全 close」 の [[feedback-one-reproduction-over-ten-unverified]] discipline 適用。

5. Honest scope

  1. 本 STEP は inline 3 patterns の 抽出 refactor のみ = 新機能 or 新 pattern 追加 なし、 意味は 完全同型 (behavior 変更 ゼロ)
  2. SOFT_WARN と DANGEROUS の 独立性 は source-level overlap 0 で verify、 但し semantic-level overlap の 判断は 人間 judgment 必要 (例: 「install exe」 が warn か dangerous か = 現状 warn 判断、 将来 malware install 検出強化時 に dangerous 昇格 candidate)
  3. Prior art 100% pre-existing: warn-level filter = Unix wall/sudo -k warning + IDE lint warning 系 industry standard、 Rei contribution = D-FUMT₈ + Peace Axiom Rei stack adaptation のみ
  4. 現状 caller は ActionExecutor のみ 1 系統 = divergence risk 低い state で start、 DANGEROUS_PATTERNS_UNION の 2 系統 divergence 経緯 と 対照的 (proactive 単一化)
  5. test 45/45 PASS は unit-level、 実 production Automator 稼働上 の warn UI 表示 (ex. destructive commands の 警告 dialog 等) は 別 STEP candidate
  6. 2026-08-06 「全研究 site 反映 default」 protocol 適用 (backend engine 拡張 + defer #5 完全 close = memory 忘れ対策 primary purpose)、 [[feedback-world-uniqueness-claim-controllable]] 遵守 (「defer #5 close」 まで say、 「世界唯一」 主張なし)

6. 関連 memory / feedback