Skip to content

test(core): observe の attributes の上限は両端を含むことを縛る - #2093

Merged
takecchi merged 1 commit into
mainfrom
test/attributes-limits-inclusive
Oct 11, 2026
Merged

takecchi merged 1 commit into
mainfrom
test/attributes-limits-inclusive

Conversation

@takecchi

Copy link
Copy Markdown
Owner

変異の記録の地図(#1963)で「厚い(自動)」とされていた packages/core/src/attributes.ts を照合したところ、直接の記録は PR #1360 の B5・B6(キーの文字種と最短)しか無かった。そこで変異を10形当てた。その結果、上限の内側の端が縛られていなかった。

生き残っていた変異

AttributesSchema に当てた。流したのは attributes に触れる core の試験29ファイル(1108件)。

# 変異 結果
AT1 キー数の上限を 17 にする(足りない側) 赤
AT2 キー数を 16 未満にする(やりすぎ側) 生き残り
AT3 キー長の上限を 65 にする 赤
AT4 キー長の上限を 63 にする 生き残り
AT5 値長の上限を 257 にする 赤
AT6 値長の上限を 255 にする 生き残り
AT7 空の値を断る 生き残り
AT8 キーの文字種に / を足す 赤
AT9 キーの文字種から : を外す 赤
AT10 キーの正規表現の末尾の $ を外す 赤

既存の試験は、上限を1つ超える側(17キー・65文字・257文字)しか見ていなかった。

約束はすでに書かれている

  • ADR 0312 の上限の表: キー数は最大16、キー長は1〜64文字、値長は0〜256文字(空文字は許す)。
  • attributes.ts の ATTRIBUTE_VALUE_MAX_LENGTH の TSDoc: 空文字は許す。
  • 同じ ADR は「締めるのは破壊的変更になる」と書いている。

足したもの

observe-attributes.test.ts に、observe を通して上限ちょうど(16キー・64文字のキー・256文字の値)と空の値が受け付けられ、Memory まで同じ値で届くことを見る4件を足した。

変異で確かめたこと

  • main の実装: observe-attributes.test.ts 10件すべて緑。関連3ファイル(zod-schema-constraints-tsdoc-edges・observe-schema-rejects-before-write を含む)45件すべて緑。
  • AT2・AT4・AT6・AT7: それぞれ、足した4件のうち狙った1件だけが赤。
  • prettier・eslint は通った。

AttributesSchema(attributes.ts)に変異を当てたところ、上限を内側へ1つ締める3形(キー数を 16 未満にする・キー長を 63 までにする・値長を 255 までにする)と、空の値を断る形が、attributes に触れる core の試験29ファイルのどこでも赤にならなかった。既存の試験は上限を1つ超える側(17キー・65文字・257文字)しか見ていなかった。

約束はすでに書かれている。ADR 0312 の上限の表は、キー数を最大16、キー長を1〜64文字、値長を0〜256文字(空文字は許す)としている。attributes.ts の ATTRIBUTE_VALUE_MAX_LENGTH の TSDoc も、空文字は許すと書いている。締めるのは破壊的変更になる、と同じ ADR が書いている。

observe を通して、上限ちょうどと空の値が受け付けられ、Memory まで同じ値で届くことを見る。
@takecchi
takecchi marked this pull request as ready for review October 11, 2026 10:57
@takecchi
takecchi enabled auto-merge (squash) October 11, 2026 10:57
@takecchi
takecchi merged commit b3753a5 into main Oct 11, 2026
37 checks passed
@takecchi
takecchi deleted the test/attributes-limits-inclusive branch October 11, 2026 11:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant