spec(evolution): hold the brake 1 fixed-axis prompt fragment and the aggregated comment preamble as copied literals [skills, docs] - #1791
Conversation
…aggregated comment preamble as copied literals [skills, docs] brake 1 の計器のうち、親が作文面を持たない場所に書いていた2箇所を、保持された literal を写す形へ置き換える。#1779 ## 射程 issue の切り分けに従い **B クラス(親が作文面を持たない場所に書いた)のみ**を実装した。 A クラス(記入済みパートの多義性、7件中6件)は射程外である。wiki `presence-defect-cannot-reach-blank-label-visibility` が 「Axis statement form のパートに要求を足しても空欄ラベルの artifact visibility と 同等の構造性は持てない」と確定させており、A に要求を足す案は同じ壁に当たる。 本 PR では Axis statement form の5部分に要求を追加していない。 B が壁に当たらないのは置換先の構造が実在するからである —— 親が作文せず、 保持された literal を写す形にすればよい。写す形では書き込む欄がそもそも無い。 ## 変更内容 ### 1. 固定軸のプロンプト片(観測 #5 の形) `skills/evolution-impression-literal-detection/SKILL.md` に `## Prompt literal` を新設し、 固定軸が評価者プロンプトへ入る文言を逐語で保持した。親は写すだけで、何も足さない。 Axis statement form は固定軸を5部分の対象外と明記していたが、その除外は散文の宣言 だけで立っており、親がプロンプトの残りを書いている軸の上に欄が開いたままだった (`Scope for this axis = ...` が書き込まれた形)。保持すれば埋める空欄が無い。 literal は Positive / Negative 列挙を内側へ写さず、ファイルを名指して SHA 時点で 取得させる。同一ファイル内の1節下に第二の複製を置けば、それが drift する側になる。 文面は PR 経路にも非 PR 経路(Trigger の他項目)にも当たるよう `the draft under evaluation` で書いてあり、経路ごとの carve-out を開かない。 `skills/evolution-parallel-agent-eval/SKILL.md` 側は Procedure step 3 と Axis statement form の2箇所を、保持先を名指すポインタへ差し替えた。 ### 2. step 4 統合コメントの冒頭定型(同サイクルの統合コメント欠陥の形) `skills/evolution-parallel-agent-eval/SKILL.md` Report shape の Parent's aggregated comment に `Preamble` を追加し、冒頭 literal を保持した。 親は「比率は triage signal であって判定入力ではない」を5軸すべてにかけて書いていたが、 `Ratio is a triage signal` 節自身が固定軸を唯一の数値閾値として carve-out しており、 その一般化は固定軸の位置で偽になる。保持された文言は2節(比率の扱い + carve-out)を 両方 payload として持つため、写す限り carve-out ごと入る。 言語の継ぎ目は明示した。統合コメントの地の文は `Workspace_Language_Contract` で解決されるため、英語以外へ解決する workspace では preamble も解決後の言語で描画する。そのとき2節はどちらも落とさない。 ### 3. 追随 - `skills/evolution-impression-literal-detection/SKILL.md` の description に 「brake 1 の評価者プロンプトを組んでいて固定軸を載せるとき」を追加した。 親が保持先へ到達する経路を description 側でも開けるため。 - `docs/2.-Evolution.md` = 日本語ミラーを同一 PR 内で追随(skill 表 / 軸の書き方 / 比率 / 3成果物の形の4箇所)。 ## brake 1 の順序 **本 PR の brake 1 は変更前の計器で走る。** 新しい計器を自分自身の PR に適用すると 自己検証になるため採らない。新計器は後続 PR から効く。 ## 検査 `python -m unittest discover -s tests` = 73 件 OK。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brake 1 統合コメント — N=3 / M=全軸 / P=1 @
|
brake 1(評価者3体、単一ラウンド、変更前の計器)の指摘に対する裁定。#1779 ## 受入(6件、いずれも 1 行) - 所見 1-a(2/3)— `Prompt literal` の Basis が「the named SHA」で解決していた。SHA が 名指されるのは brake 1 経路だけで、同節自身が名乗る他 4 経路には指示対象が無い。 `the revision this prompt names` へ変更し、material の所在も step 3(brake 1)と step 2(それ以外)の両方を名指す形にした。 - 所見 1-b(1/3)— literal が flag 側の報告形しか述べておらず、clean 側は Report shape のどちらの分岐にも合わなかった(単一の `パス:行` でも リポジトリ全体の掃引でもない)。掃引分岐と同型の 1 行形(掃いた draft と 追加・変更行数)を literal に追加した。 - 所見 2-a(1/3)— Preamble の裁定節が無限定で、固定軸の Aggregation (1/3 は計数を理由として commit body に記録する)と衝突していた。本裁定自身が その衝突の実例である。carve-out を「両方の文の外に立つ」形へ広げた。 - 所見 2-b(1/3)— `3/3, 2/3 and 1/3` は N=3 を固定値として運んでいた。N は下限であり、 超えれば literal がそこに現れない計数を名指す。`how many of the N evaluators raised it` へ一般化した。 - 所見 2-c(1/3)— render 節が、保持が拒んでいる composition を復活させていた。 削除し、原文の言語のまま写す形にした。Language bullet の「解決では片づかない継ぎ目」 にも preamble を加えた(従来「1 つ」と数えていた)。 - 所見 4-a(1/3)— step 4 の `the surrounding prose is the parent's` が、 本 PR が「親のものではない」と定めた冒頭部まで及んでいた。冒頭 literal を除外した。 `docs/2.-Evolution.md` = 2-a / 2-b / 2-c と Language 継ぎ目の 4 点をミラーへ追随。 ## 却下(1件、固定軸 / full) **固定軸 1 of N=3 — refine しない。** flag されたリテラル、`skills/evolution-parallel-agent-eval/SKILL.md:98`: > copied verbatim with nothing added to it 理由 = **閾値未満(1/3)**である。`skills/evolution-impression-literal-detection/SKILL.md` Aggregation は 2 以上で即 refine、1 では auto-refine せず flag されたリテラルを commit body に記録し、閾値未満の計数を refine しなかった理由として名指すことを要求する。 この軸の閾値は絶対であり、比率=triage signal の一般則の外にある。したがって本件は リテラル検証で採否を決めず、計数を理由として却下する(所見 2-a が本 PR で閉じた 衝突の、まさにこの手順である)。閾値は過剰トリムを止めるために在り、 `copied verbatim with nothing added to it` は Prompt literal を開かない読み手に対して 使用時点の要求を運んでいる。 ### divergence handling(1-of-3 の割れ) - **同一問検査 = yes。** 3 体とも「追加・変更行のどの語句が impression literal か」に 答えており、clean 判定は `:98` を含む全行を見た上での「flag 無し」である。 軸の書き方の問題ではない。 - **なぜ割れたか = 明確な基準の適用のばらつき。** Negative list の `Explanatory rationale that prevents a known misinterpretation` は 「behavior semantic と revision stability の両方が不変のときのみ impression literal」と 二肢で書かれている。flag 側は第一肢(指示はポインタ先で届く)で判断し、 clean 側 2 体は第二肢(revision stability)で保護と判断した。両肢とも明文であり、 判定基準の曖昧さには遡らない。基準側の修正は行わない。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
親の検分で名指された修正 1 件と、記録漏れの明示 1 件。#1779 ## 受入(親の指摘、1 件) 所見 1-a が、修正した段落の 1 つ下で生き残っていた。`## Prompt literal` の 締め段落が `the named SHA` と Procedure step 3 のみを名乗っており、直前の段落を brake 1 経路 = step 3 / それ以外 = step 2 へ直した後は、同一節が material の 問いに二度、食い違って答える状態になっていた。しかもこの段落は Basis が ポインタで足りる理由そのものであり、非 brake-1 の spawn を組む親が読む側である。 締め段落から経路の名指しを外し、`at whichever revision the paragraph above resolved to` として直前段落へ解決させた。step-3 / step-2 の分岐は節内に 1 箇所 (46 行目)だけ残る。二重保持を作らないため、分岐そのものは写していない。 ## 記録(新規変更ではない) literal 末尾の以下の文について、親が「どの所見も要求していない追加」として 名指したため記録する。 > Do not aggregate and do not apply a threshold: this axis's thresholds are > absolute and are applied to the N reports after yours arrives. 事実関係: この文は裁定コミット `4944acc` の追加ではなく、brake 1 が実際に走った `477b5b4` の時点で literal に存在していた(`240cf0e` = main には無い)。すなわち 評価対象の draft の一部として N=3 の評価を通っており、どの評価者も flag していない。 役目: 所見 1-b で評価者に clean 行の作文を新たに求めたため、絶対閾値を評価者が 自分で適用するものと読む余地が生じる。この文はその読みを閉じ、閾値の適用主体を (親の統合後の)裁定側に固定する。1-b の実装が成り立つのはこの文が在るからであり、 1-b の受入と同じ範囲に属する。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
smileygames
left a comment
There was a problem hiding this comment.
自己レビュー記録(execution mode = semi_auto / patch)
受け入れ条件の確認
#1779 の「結論 — 本 issue の射程は B のみ」と対象ファイルを実物で照合した。
| 項目 | 結果 |
|---|---|
| B 類 2 手のみ実装(固定軸の prompt 断片の保持 / 統合コメント冒頭定型の保持) | 済 |
| A 類に手を出していない | 済。brake 1 軸3 が clean 3/3。3体とも独立に全変更行を分類し、Axis statement form の5パートいずれにも要求を追加していないと判定 |
| 対象ファイルが issue の列挙と一致 | 済。skills/evolution-impression-literal-detection/SKILL.md / skills/evolution-parallel-agent-eval/SKILL.md / docs/2.-Evolution.md の3件のみ |
| docs ミラーが同一 PR 内 | 済。brake 1 軸4 のミラー整合が clean 3/3、英日両言語での掃引付き |
| brake 1(必須) | 済。N=3 / M=全軸 / P=1、単一ラウンド |
| brake 2 | 不発火。layer: L1-model のファイルに触れていない(L2 skill 2件 + docs) |
| CI | 済。head 79bd872 で governance green |
順序の遵守
issue が着手前に確定させた順序——本 PR の brake 1 は変更前の計器で走る——を守った。固定軸は本 PR が追加する Prompt literal ではなく 240cf0e(main)の文言から親が組み、統合コメントにも新 Preamble を使っていない。親のクローンが PR ブランチに残っていたため、計器は origin/main から読み直した。
brake 1 の結果と裁定
所見 7 件(軸1 = 2件 / 軸2 = 3件 / 軸4 = 1件 / 固定軸 = 1件)、clean = 軸3(3/3)とミラー整合(3/3)。
- 受入 6 件。 最も重いのは軸1 の 2/3 一致——新
Prompt literalは brake 1 経路と他4 Trigger entry を「同様に」覆うと自ら名乗りながら、Basis がthe named SHA経由で解決しており、SHA が名指されるのは brake 1 経路だけだった。本 PR が塞ぐ形が新節自身の中で再現していた。 - 却下 1 件(固定軸、1 of N=3)。 固定軸の絶対閾値により auto-refine せず、flag されたリテラルを commit body に記録し、閾値未満の計数を理由として名指した。divergence の対(同一問検査 = yes / なぜ割れたか = 明確な基準の適用のばらつき、Negative list の二肢のどちらで判断したかの差)も記録済み。
親の検分(step 8)で出したもの
1 往復。所見 1-a が修正段落の 1 つ下(## Prompt literal 締め段落)で the named SHA / step 3 のみを名乗ったまま生き残っており、同一節が material の問いに二度・食い違って答える状態だった。79bd872 で解消。
親側の誤り 1 件(記録)
同じ検分で、literal 内の Do not aggregate and do not apply a threshold: ... を「どの所見も要求していない、裁定中の追加」として著者に名指した。これは事実誤認だった。 当該文は brake 1 が走った 477b5b4 の時点で既に literal に存在し(240cf0e には無い)、評価対象の draft の一部として N=3 を通っている。著者が来歴を確認して訂正し、79bd872 の commit body に正確な事実として記録された。
誤りの形: 裁定差分(477b5b4..4944acc)の追加行に当該文が無いことを確認しないまま、節全体を読んだ印象から「追加された」と推定した。差分を見ているのに差分で確かめなかった。本 PR の受理判定そのものには影響しない(当該文は評価済みで、誰も flag していない)。
scope からの逸脱
無し。
繰り越し項目
tests/test_skill_reference_resolution.py が skill 参照の節名を検証しないため、本 PR が追加した ... SKILL.md Prompt literal 形式の参照は CI では未検証(解決することは手で確認済み)。brake 1 の評価者2体が付随観測として独立に指摘した。マージ前に #1792 として起票済み。
release type
patch。L2 spec と docs のみで、user/system observable な挙動変化を持たない。rules/operations/release-version-rule.md の「structural change AND user/system observable → minor」に照らし、observable 側が立たないため minor には上げない。semi_auto の patch は人間ゲート無しで AI 直接マージ。
次の段取り
self-review pass により squash マージへ進む。マージ後に memory/promotion_tally.md の当該クラスタ削除と、自己進化 PR の post-merge observation entry を親側で処理する。
Closes #1779
brake 1 の計器のうち、親が作文面を持たない場所に書いていた2箇所を、保持された literal を写す形へ置き換える。固定軸のプロンプト片と、step 4 統合コメントの冒頭定型の2手。
射程
issue の切り分けに従い B クラス(親が作文面を持たない場所に書いた)のみを実装した。A クラス(記入済みパートの多義性、7件中6件)は射程外であり、
presence-defect-cannot-reach-blank-label-visibilityが governing である。本 PR は Axis statement form の5部分に要求を追加していない。変更内容
skills/evolution-impression-literal-detection/SKILL.mdに## Prompt literalを新設。固定軸が評価者プロンプトへ入る文言を逐語で保持し、親は写すだけで何も足さない。除外宣言が散文だけで立っていたために開いていた欄が、保持によって無くなる。description に「brake 1 の評価者プロンプトを組んでいて固定軸を載せるとき」を追加。skills/evolution-parallel-agent-eval/SKILL.mdReport shape の Parent's aggregated comment にPreambleを追加。比率の扱いと固定軸 carve-out の2節を1つの literal として保持する。親が自分の言葉で言い直すことが carve-out を跨いだ一般化を生んでいたため、写す形にした。Procedure step 3 / Axis statement form / Ratio is a triage signal の3箇所を保持先を名指すポインタへ差し替え。docs/2.-Evolution.md= 日本語ミラーを同一 PR 内で追随(skill 表 / 軸の書き方 / 比率 / 3成果物の形)。brake 1 の順序(issue で確定済み)
本 PR の brake 1 は変更前の計器で走る。 本 PR は brake 1 の計器そのものを変更するため、新しい計器を自分自身の PR に適用すると自己検証になる。採らない。新計器は後続 PR から効く。
Prompt literalではなく、変更前どおり親が固定軸の文言を組んで渡す。Preambleliteral を使わない。brake 判定
skills/**/SKILL.md= governed surface、N>=3、単一ラウンド)。layer: L1-modelのファイルに触れていない(変更は L2 skill 2本 + docs)。release type
patch。L2 の spec 変更で user/system observable な影響を持たない。
検査
python -m unittest discover -s tests= 73 件 OK。