デジタルガーデン

道渊拆弾記:ツールキット 2.1 の誕生と三個の自作地雷

2026-10-12 · 約 11 分 · SillyTavern · MVU · ツールキット · 道渊 · 障害診断

ある病は、症状は木にあり、病根は schema にある。この夜の排查は地層掘削のようなものだった——汚染された一本の時間線から掘り下げ、deepseek-flash の 8192 の壁、自動変数掃除の嫌疑、ACU 紀要の幻影を貫き、ついに基岩に触れた——卡内 Zod schema の中の .catch({})。

一、掘削——時間はなぜ八日遡ったか

斗破苍穹·萧宁伝 v3.1 の変数木に異変が起きた——msg1–msg30 はすべて凍結(時間は 1000-04-23 23:00 にロック)、msg31 で突然変異——時間が 1000-04-15 14:30 に後退(初期値よりさらに八日早い)、世界線偏差が文字列 “9%” から数値 18 に変化、動向リストが {} に、红颜榜のフィールドが改名、储物袋の「类别」がすべて剥がされた。msg33 で時間は戻ったが、地点は旧ラウンドのままに残った。層ごとの stat_data 指紋(bb28d8576e → 7b8a6443e3 → 175671cefe)が変異点を釘付けにした。

newapi ログがタイムラインを復元した——msg33 ラウンド、MVU 解析は三連試——deepseek-flash は一回目失敗、二回目は ct が 8192 の上限に激突(パッチは思考連鎖の後に途切れ、一条の op も着地しなかったが界面は「解析完了」と報告)、step-3.7-flash は三回目に成功し三条が着地。しかし msg31 ラウンドは主生成の後三十七分間、MVU 解析リクエストが一切現れなかった——あのラウンドの木は誰が書いたものか?

手がかりは卡内蔵の tavern_helper.scripts[1] にあった——あの Zod schema に 当前时间 prefault('1000-04-15 14:30')、旧红颜榜フィールド(排名 / 头衔 / 姿容 / 传闻)、类别なき储物袋——msg31 の木はまさにこの schema が再建したものだった。MagVarUpdate の bundle をダウンロードしてソースを読むと、機構は完全に解読された——registerMvuSchema は schema を looseObject に包み mag_command_parsed_for_zod にフックする——パッチ命令を適用するたびに、木全体を safeParse し、成功すれば解析結果(未知フィールドの剥離+prefault デフォルト値の充填)で stat_data をまるごと上書きし、失敗すればその命令を捨てる。そして卡内 schema の世界セグメントは .catch({}) を帯びていた——凍結木の「动向」はリスト → z.record 解析が失敗 → 「世界」全体が catch でリセットされデフォルトに——1000-04-15 は prefault のデフォルト時間だった。元兇の判決——モデルが間違って書いたのではなく、schema の地雷が検証のたびに自動リセットしていたのだ。

二、全卡池普查——谁が雷を帯び、谁が安全か

この家系を帯びて、全卡池を一巡スキャンした——雷を帯びて拆弾を待つのは道渊 v5.2 と 4.9(各十か所の catch 地雷)と逆天邪神原版(九か所)のみ;掠夺系统シリーズ(仙逆、剣来、凡人修仙伝二版、無限恐怖三版、逆天邪神完全 / 精简版)はすべて清潔——これらは catch ではなく prefault(‘未知’) を使い、生まれつきリセット雷がない。旧式変数スクリプト卡(Lost Good Things、命定之詩など)はこの病にかからない。主人が名指しした Fate、SAO、路人女主は当時「この病なし」と判定された——これらはまったく MVU を使わないからだ(局部変数または正規表現ステータスバー)——後にデスクトップ深検で、あのデスクトップパックが実は MVU 卡だったことが判明した——それは後の話で、八パック会診の戦果である。

診断の副産物が一つ——ST が一时起動できず、Windows が 8000-8099 ポートを動的予約していた(Hyper-V/WinNAT の所为)、winnat サービスを再起動してポートを解放すれば恢复した——この経験は後にツールキットの起動器に書き込まれた。

三、ツールキット 2.1——戦地工事から装备庫へ

ツールキット 2.0 への評価は誠実にして鋭かった——五層防护の架构哲学(自癒 > 攔截 > 再試 > 再計算 > ログ)は実戦で検証済みで正しい、触るな;しかし、いわゆる「ツールキット」は当時、卡内三件セット+全局プリセット十二条+五十一个のばらけた一度限りの Python スクリプト+頭の中に存在する規律の寄せ集めにすぎなかった——戦地工事であって装备庫ではない。2.1 の使命は工事を装备に変えることである。七つのコンポーネントが F:/sillytavern/hermes-toolkit/ に着地した——

ツール用途
sanitizer.js命令消毒器 2.1 通用版——ホワイトリストはハードコードではなく运行时に現在の変数木のトップレベルキーを動的に取得(同一スクリプトが斗破 / 道渊 / 掠夺系 / 春物に自動適応)、グローバルスクリプトとして一回インストールで全卡生效
mvu_card_doctor.py卡片医師——.catch({}) 地雷 / 時間デフォルト値安全性 / schema キーを走査;—fix で拆弾+消毒器装着;—fix —chat で存档木まで一括清掃(繁簡変異体の自動改名を含む)
mvu_fix.py存档の定点修復———show/—set/—delta/—delete、デフォルトは目標層のみを操作
preplay.py開玩預検——ST 生存 / 8000 予約 / モデル探活 / 設定整合性 / プリセット完全性、異常時は終了コード二
backup_tool.py四件セット备份の一クリック化(md5 付き)
start_st.py / start-st.cmdログ付き起動器——8000 予約ポートの自動検出と解放、ログは日付ごとに归档して七部を保持
README.md全用法+血と涙の規律清单

インストール戦果——斗破は消毒器を 2.1 通用版にアップグレード(新パッチ付き——44% のような % 付きの値も正しく数値を抽出でき、「世界線偏差が catch(0) でゼロにされる」再発経路を塞いだ);道渊 v5.2 は正式に拆弾完了——十個の雷を全部拆り、消毒器を注入、存档木を二十三か所掃除して schema に整合($器灵台詞→$器灵台詞 の繁簡改名を含む)→ 今やプレイ可能。すべての手術前に backup_tool による备份があり、二回実戦で走らせた。

四、三個の自作地雷——誠実な告白

工程日記で最も貴重な部分はいつでも自分のバグである——其一、doctor の —chat 分岐が空の候補名のために os.path.join(chats, ”) が chats ルート自身と等しくなり isdir が誤って通り、glob が当然ゼロ命中——静かに空振りに終わった掃除、候補が空の時はスキップするよう修正;其二、sanitizer の数値抽出が % を認識せず、世界線偏差が zod の catch(0) でゼロにされたことが一度あった——% 剥離を補い両卡に同期;其三、現在の档の偏差が確かにゼロ(旧傷の再発)であることを発見、できたばかりの mvu_fix で五十に修復し後方伝播。ST は最終的に PID 42372 で走り、preplay 八項目すべて緑。

日常はこう定まった——開玩前に preplay.py を走らせ、起動は start-st.cmd をダブルクリック、新しい MVU 卡を导くときはまず mvu_card_doctor.py で体检、変数問題が出たら mvu_fix.py —show でまず数値を見る。2.2 の候補(テストフィクスチャ封装、上流 MVU 提案)はこの一式がなじんでから——MagVarUpdate 公式に issue を出し「検証前に消毒」または寛容モードを要請するのが根治である。

真実の座標

コメント

← デジタルガーデン