spec(measurement): fire the measurement gate on lines or bytes - #1960
Conversation
… counts `skills/evolution-rule-effect-measurement/SKILL.md` Application point, Position on the self-evolution PR pipeline の発火条件を二腕にした。削除行が 追加行を上回る、または削除バイトが追加バイトを上回る、の**いずれか**で発火する。 行だけを数える条件は、長い文を短い文へ差し替える形の削りを拾えない。差し替えは 追加 1・削除 1 として両側に立つため行数が釣り合うからである。これは `rules/model/liplus-coding-rule.md` Body States Behavior に沿った削り (挙動の文を残して導出を剥ぐ)の典型形であり、この器具が duplicate detector として測ろうとしている当のものである。#1934 の実測では、同日マージの蒸留 PR 3 本の うち最もバイトを削った #1925(18 対 18、-4,734 バイト)だけが発火していなかった。 閾値は新設していない。バイトの腕も行の腕と同じく 0 を境に比較する。 バイトの言語依存について、issue 本文の論拠(Source Language が統治面を英語に 固定するから安全)は実測で狭めた。`adapter/**` は散文だけではなく、フック スクリプトは非 ASCII 文字列を出力する(`adapter/claude/hooks/on-session-start.sh` だけで非 ASCII を含む行が 1371)。実際に腕を支えているのは比較が 1 本の diff の 内側で閉じていること(当該 PR の追加分を当該 PR 自身の削除分に当てる)であり、 Source Language が担うのは散文の差し替えで比較の両側を同一言語に保つ点に留まる。 本文はその狭い形で書いた。 docs/2.-Evolution.md の対応記述も同一 PR で更新した。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012f9ANtiSsDEaFwk3uMNA3f
|
Adjudicate each finding below by checking its literal against the source at the revision its Axis A — issue requirement所見無し。issue #1934 の本文(購読対象: PR がクローズする issue)と、この diff(
読んだもの: issue #1934 本文全文(日本語)、PR #1960 本文全文(日本語)、diff 全体( Axis B — rule violation所見無し。diff が変更・追加した全行(
Fixed axis — impression-literal detection対象:
掃いた対象: |
…-lines-so-a-replace-in-place-strip-never-fires
smileygames
left a comment
There was a problem hiding this comment.
AI self-review (parent)
受け入れ基準: issue #1934 の方針 (a) —— 発火条件を行数の一腕からバイト腕を足した二腕にし、どちらか一方で削除超過なら発火する形にする —— が skills/evolution-rule-effect-measurement/SKILL.md に入り、docs/2.-Evolution.md が同一 PR で追随している。issue の constraints 4 点(新しい数値閾値を持ち込まない / 統治面の列挙を動かさない / unmeasured の記録規定を触らない / L1 を触らない)はいずれも守られている。両腕とも 0 を境にした比較のままで、新しい数値は入っていない。
scope 逸脱: なし。
issue 本文の前提を 1 つ訂正して実装されている点: 私が issue に書いた根拠——「rules/model/liplus-coding-rule.md Source Language が統治面を英語に固定しているからバイト比較は同一言語内で閉じる」——は事実として誤っていた。実装側が中身を実測し、adapter/claude/hooks/on-session-start.sh だけで非 ASCII を含む行が 1371 行(出力される日本語文字列と罫線)あることを示した。条文はこの訂正を反映して、狭い形で書かれている: 両腕とも同一 diff 内で数え、ファイルも PR も言語も跨がないので、そもそも単一言語性に依拠しない。Source Language が担うのは「散文の差し替えなら比較の両端が同じ言語に揃う」という狭い仕事だけ。条文を開いて確認した。訂正の向きは正しく、条文は検証された範囲までしか主張していない。 誤った前提を書いたのは私の側であり、self-eval に記録済み。
brake 1: 実施済み。round trip 1 本、width N=1。3 軸すべて所見なしで返ったため著者の resume は行わず step 8 で exit。thread 通読済み、standing rejection なし。評価者は固定軸で説明 2 段落を Negative リストの「既知の誤読を防ぐ説明的根拠」として保護側に置いており、私の読みも同じ —— どちらもバイト腕が行腕の細分化だと誤読されるのを防いでいる。
round 1 は予算上限で判定ゼロのまま落ちたため、同一 baseline(6bc85f3、thread も空のまま)に対して同じ round を撃ち直した。運用コピーは当てていない(skills/* の直接 Read 経路)ので restore も不要。
本 PR 自身の発火判定: issue の constraint どおり merge 時点の条件(変更前の一腕) で判定する。統治面の差分は追加 4 行 / 削除 1 行で追加超過、行腕は発火しない。したがって unmeasured(発火条件外)。
競合: main 追随で gh pr update-branch を実施(非破壊)、CI 再走後 CLEAN。
release type: patch。発火条件の測り方の修正であり、user/system observable な大規模変更ではない。semi_auto の patch は human gate 無しで直接 merge。
次の一手: merge.
Closes #1934
何を変えたか
skills/evolution-rule-effect-measurement/SKILL.mdApplication point, Position on the self-evolution PR pipeline の発火条件を、行だけの単腕から二腕にした。issue の方針 (a) をそのまま採った。(b)(行を単位にしたまま内容量を測る)は行という単位が内容量を運んでいないため結局 (a) に収束し、(c)(意図側で書く)は発火判定を著者の申告に委ねるため、量の指標が著者から独立している点を失う。
なぜ
差し替え形の削り(長い文を短い文へ)は追加 1・削除 1 として両側に立つため、行数が釣り合って発火しない。これは
rules/model/liplus-coding-rule.mdBody States Behavior に沿った削り——挙動の文を残して導出を剥ぐ——の典型形であり、この器具が duplicate detector として測る対象そのものである。issue の実測では、同日マージの蒸留 PR 3 本のうち最もバイトを削った #1925(18 対 18、−4,734 バイト)だけが発火していなかった。検算: #1925 はバイトの腕で発火する。既に発火していた #1927 / #1933 はどちらの腕でも発火するため判定は変わらない。
論拠を実測で狭めた点(issue 本文からの差分)
issue 本文は「バイトの言語依存は
rules/model/liplus-coding-rule.mdSource Language が統治面を英語に固定するので閉じている」としていた。これを実測で確認したところ、adapter/**は散文だけではない——origin/mainで.sh6 /.ps13 /.toml2 /.md6 を持ち、フックスクリプトは非 ASCII 文字列を大量に出力する(adapter/claude/hooks/on-session-start.shだけで非 ASCII を含む行が 1371)。統治面はバイト水準で単一言語ではない。実際に腕を支えているのは、比較が 1 本の diff の内側で閉じていることである——当該 PR の追加分を当該 PR 自身の削除分に当てるのであって、ファイル間・PR 間・言語間を跨がない。Source Language が担うのはより狭く、散文の差し替えで比較の両側を同一言語に保つ点に留まる(バイト差が符号化の差ではなく内容の減少として読める)。本文はその狭い形で書いた。
非散文ファイルで腕が誤って発火する/しない形は見つかっていない。多バイト content 上ではバイトの腕の感度が上がるが、この条件は閾値を持たない粗い検出器であり、その先の実測は任意かつ merge を gate しないため、過剰発火のコストは任意の走行 1 本である。塞ごうとしていた欠陥は過少発火の側である。
範囲
rules/**/skills/**/adapter/**)は動かしていないunmeasuredを空白にしない規定)は触っていないtests/は追加していない。検査対象が判定手順であって source の性質ではないためdocs/2.-Evolution.mdの対応記述を同一 PR で更新本 PR 自身の発火判定
変更前の条件で判定する。統治面の diff は追加 6 / 削除 2 で追加超過のため、行の腕で発火しない。release type は patch 見込み(発火条件の測り方の修正であり、観測可能な大規模変更ではない)。最終判断は self-review 時。
🤖 Generated with Claude Code
https://claude.ai/code/session_012f9ANtiSsDEaFwk3uMNA3f