evolution rule carries behavior only - Liplus-Project/liplus-language GitHub Wiki
rules/evolution/evolution.md の常時ロード本文は振る舞いだけを載せ、レイヤーの位置づけと他面の写しは持たない
Question
常時ロードされる rules/evolution/evolution.md の本文に、rules/model/liplus-coding-rule.md Body States Behavior の識別線(読んだ者の行いが変わるか)を 2 周目として当てたとき、何が本文に残り、外したものはどこが保持するか。
Current resolution
本文は、ループの正本への 1 行の転送点(Evolution Layer)、L1 のランタイム不変条件を再定義しないこと・蒸留したパターンを issue で提案し直接編集しないこと・Li+ ソース更新が標準のパイプラインを通り運用ルールを迂回しないこと(Evolution Axis Separation)、cold-start での昇格候補の surface 契約(Pattern Detection Surfacing At Cold-start)だけを持つ。レイヤー位置・責務の一覧・一次軸と現在の状態・読み手 / 書き手対の説明は持たない。
issue #2140 で 3,943 B → 1,752 B(−2,191 B、−55.6%)。1 周目(理由の剥ぎ取り)は evolution-task-rule-bodies-carry-behavior-only にある。本 entry は 2 周目で、主に外したのは位置の記述と他面の再掲である。H1 / H2 の見出しと semantic tag は変えていない。
外したものの合流先
| 外した記述 | 合流先 |
|---|---|
Evolution Layer の Layer = / 自己更新面の一文 / Requires = / Load timing = |
frontmatter(layer: L2-evolution、alwaysApply: true)と docs/2.-Evolution.md Purpose Declaration 節。task-rule-carries-behavior-only / operations-rule-carries-behavior-only が ## Task Layer / ## Operations Layer 相当を外したのと同型 |
| Evolution Layer の Foregrounds(責務の一覧) | docs/2.-Evolution.md のロード条件の表。各 skill は description 一致で発火し、常時ロードの rule は索引を経ずに届く |
| Evolution Layer の Backgrounded here(ランタイム不変条件は L1 に残る) | 同じファイルの Evolution Axis Separation 1 行目 |
| Evolution Layer の「このレイヤーは Li+ が自分を観測し書き換える面」「Core = 走るためのルール / Evolution = ルールを書き換えるためのルール」「両レイヤーは層内順序に従う」 | docs/2.-Evolution.md 冒頭と Purpose Declaration 節。層内順序は rules/model/axis-separation.md |
| Evolution Layer の一次軸・到達目標・現在の状態(判断層 Sheepdog 到達、brake 1、基質層の保留) | 起動権限と brake は adapter/claude/CLAUDE.md の Evolution_Initiator_Autonomy と rules/evolution/initiator-autonomy.md。目標と現在の状態は docs/2.-Evolution.md Purpose Declaration 節、基質層は docs/G.-Sheepdog-Engineering.md。「現在の状態」は時間で古くなる記述で、常時ロード面に置くと読み手が辿った時点の事実と食い違う |
Evolution Axis Separation の Relation to L1 / L3 / L4 ...: の見出し語と「進化はランタイムルールが surface する観測を使う」 |
docs/2.-Evolution.md 他レイヤーとの接続節。本文には禁止と行い(再定義しない / issue で提案する / 迂回しない)だけを残した |
| Evolution Axis Separation の読み手 / 書き手対(judgment learning は読み手、decision structure write は書き手)、Decision Structure は意味グラフで維持は refactor、Wiki 書き出しは永続化ティアリングを迂回しない | skills/evolution-judgment-learning/SKILL.md(判断形成前に過去判断 graph を query する)、skills/evolution-decision-structure-write/SKILL.md 冒頭と Boundary with Persistence Tiering 節、adapter/claude/CLAUDE.md の Decision_Structure_Write_Autonomy の Boundary clarification。いずれも同じ内容を持ち、うち CLAUDE.md は常時ロード |
Pattern Detection Surfacing の Observe stage output contract: の見出し語と「本仕様は振る舞いの契約だけを定める」 |
docs/2.-Evolution.md Pattern detection surfacing at cold-start 節(同じ文を持つ) |
| Pattern Detection Surfacing の「surface された候補は session 開始時の observe 段の判断を補う」 | 同上。行いを決めるのは直後の「迂回しない」の方なので、本文にはそちらを残した |
外さなかったもの
Threshold values and concrete detection logic belong to the adapter.tests/test_on_session_start_observation_surface.pyの docstring がこの文を逐語で引き、3 つの hook の実装コメントとdocs/6.-Adapter.mdがこの委譲を根拠にしきい値を adapter に置いている。しきい値を rule に書き込まない、という編集者の行いを決める文でもある。後半の「本仕様は振る舞いの契約だけを定める」は位置づけなので外した。- Evolution Axis Separation の 3 つの行い。 L1 のランタイム不変条件を L2 で再定義しない、蒸留したパターンは issue body へ外部化し Li+ 仕様の改善は直接編集ではなく issue で提案する、Li+ ソース更新は標準のパイプラインを通り運用ルールを迂回しない。どれも禁止か行いで、他の常時ロード面に同じ文は無い(
rules/task/task.mdのprimary externalization destination = issueは独立判断の外部化についての文で、蒸留したパターンは射程外)。 - Surfacing は昇格ではなく、昇格判断は distill → reflect → L1 Update Gating を通り、永続化ティアリングを迂回しない。 surface された候補をそのまま昇格させる取り違えを止める文。
## Evolution Layer節そのもの。 issue #2140 の制約(見出し名は変えない)に従い、ループの段の定義(skills/evolution-loop/SKILL.md)と起動権限・brake(rules/evolution/initiator-autonomy.md)への 1 行の転送点として残した。この 1 行は見出しを残すための最小の本文であり、振る舞いではない。skills/evolution-loop/SKILL.mdは description 一致で自動起動し、initiator-autonomy.mdとEvolution_Initiator_Autonomyは常時ロードなので、この行が無くてもどの場面でも読み手の行いも時期も変わらない(Application-moment sentence を書けない行)。本文に置く理由は見出しの保持だけで、見出しを外す判断が別に下りたときは、この行も一緒に外してよい。その場合はdocs/K.-Source-File-Format.mdの tag 例の行とdocs/2.-Evolution.mdの always-on ファイル表の「Evolution Layer = …」を同じ PR で外す(PR #2142 brake 1 round 1 の所見、修正案 A を採用)。memory-entry-format-rule-carries-behavior-onlyが他ファイルから名指される節を 1 行の転送点として残したのと同型。
追随した面
docs/2.-Evolution.mdの always-on ファイル表の行。以前は本ファイルの節を「Purpose / Axis Separation / Pattern Detection Surfacing / Mutability」と書いていたが、Mutability 節は本 issue 以前から既に存在しなかった。
Edges
- depends on
source-body-behavior-only-reasoning-relocates— 識別線と移設の規則そのもの - depends on
judgment-record-pointer-requirement-dropped— 本文にポインタを残さない - relates to
evolution-task-rule-bodies-carry-behavior-only— 同じファイルの 1 周目(理由の剥ぎ取り、issue #2109 / PR #2112) - relates to
promotion-judgment-rule-carries-behavior-only— 同型の 2 周目(#2130) - relates to
cold-start-rule-carries-behavior-only— 同型の 2 周目(#2118)
Background
issue #2140。rules/evolution/evolution.md は毎 session 全体が文脈に入る面にあり、3,943 B あった。1 周目(PR #2112)は理由句を剥いだが、## Evolution Layer 節はレイヤーの位置づけと責務の一覧を、Evolution Axis Separation 節は skill と CLAUDE.md が既に持つ読み手 / 書き手対の説明を、それぞれ残していた。どれも読んだ者の行いを変えない。
Constraints
- 振る舞いの行は落とさない(issue #2140 制約)。
- 見出し名は変えない(hook 3 本・
tests/test_on_session_start_observation_surface.py・docs/6.-Adapter.mdが Pattern Detection Surfacing At Cold-start を、docs/2.-Evolution.mdが Evolution Axis Separation を名指す。docs/K.-Source-File-Format.mdは## Evolution Layerを tag 導出の例に使う)。 tests/の期待は変えない。- version type は patch。
Conclusion
採用 = レイヤーの位置づけ・責務の一覧・一次軸と現在の状態を frontmatter と docs/2.-Evolution.md に任せ、読み手 / 書き手対の説明は skill と CLAUDE.md の正本に任せて外す。Evolution Layer 節は 1 行の転送点として残す。
却下 = ## Evolution Layer 節を節ごと外す案。task.md / operations.md の先例とは同型だが、issue #2140 の制約が見出しを保つことを求めている。
却下 = 一次軸の 1 行(Primary axis = AI-led evolution loop)を本文に残す案。ループを AI 単独で起こしてよいことは Evolution_Initiator_Autonomy が常時ロード面で既に言っており、写しになる。