試験の壁時計締切を定数から過負荷率の関数へ(ADR-DOE-ENFORCE-001 R6)— 2 つの締切を一緒に伸ばし、伸ばした事実は黙らない - #595
Closed
proboscis wants to merge 1 commit into
Closed
試験の壁時計締切を定数から過負荷率の関数へ(ADR-DOE-ENFORCE-001 R6)— 2 つの締切を一緒に伸ばし、伸ばした事実は黙らない#595proboscis wants to merge 1 commit into
proboscis wants to merge 1 commit into
Conversation
proboscis
force-pushed
the
wt/test-deadline-load-scaled
branch
from
August 17, 2026 07:16
7947977 to
a790801
Compare
…た事実は黙らない operator 裁定 decision-doeff-land-gate-deadline-2026-08-17.html「A. 締切を直す」の執行。 第 3 の締切(門の走行の持ち時間)は PR #596 が単独で先に着地する — 窓はその値を 基底側の宣言から読むので、同便に入れても自分の走行には効かないため。本便は .agents/land-queue.toml に一切触れない(列車の先端で #596 を戻す形にしないため)。 締切が捕まえるべきものは hang であって busy ではない。18 コアの機械が load 60〜156 で定常稼働する中、1 テスト 60 秒の定数締切に対して semgrep 単体が load 80 で 29.7 秒を使い、電池全体の負荷が乗ると超える。結果、着地の門が 5 連敗した(毎回ちがう外部プロセス起動テスト)。同じ試験は手つかずの main を 単独で回しても同じく落ちるので、枝の欠陥ではなく締切の性質だった。 2 席で 9 回の着地が死に、正しい修理が出荷できずにいた。 修理: - 係数 = 1 分平均 load / コア数(下限 1.0・上限 PYTEST_DEADLINE_SCALE_CAP 既定 8)。上限があるので真の hang は依然として有界時間で落ちる - 無効化は PYTEST_DEADLINE_SCALE=off(負荷を自分で制御する CI 用) - 締切は 3 つある(pytest-timeout の per-test・その上に立つ SIGKILL watchdog・門の走行の持ち時間)。内側 2 つは同じ係数で伸び、watchdog は 常に per-test より厳密に上に居る — 片方だけ上げると「遅い試験 1 本が 赤くなる」が「走行ごと SIGKILL で全損する」に化ける(実測: PYTEST_TIMEOUT=600 を素の 90 秒 watchdog に当てて全数電池が 45% で即死)。 第 3 の締切は宣言側にあり PR #596 で 2700 → 7200(据え置くと赤の場所が 「1 テストの timeout」から「走行全体の時間切れ」へ移るだけ — 実測 2710.7 秒) - marker の締切も同じ係数に掛かる。pytest-timeout は marker を ini より 優先するので、ini だけ伸ばすと「自分は遅いと申告した試験」= 外部 プロセスを起こす当の試験群が素の締切に取り残される - 係数が 1 を超えた走行は実効値を stderr に出す。伸びた締切は同時に 「この機械は過負荷である」の信号でもあり、8 倍かかった走行が黙って 緑を返すのは観測の欠落 per-test 締切の家は pyproject.toml ただ 1 つのまま(conftest は ini を読んで 掛けるだけで、60 という数字を第 2 の場所へ写さない)。呼び手が env や --timeout で明示した値は潰さず、その値を掛ける。 法: ADR-DOE-ENFORCE-001 に R6 と law deadline-measures-hang-not-load (反例 6 — 5 連敗の実測 / 片方だけ伸ばして全損する形 / marker が取り残される 形 / 上限を置かない形 / 黙って伸ばす形 / 内側だけ直して門の持ち時間を 据え置く形)。台帳も同便で更新(law 84→85・deftest 37→38 — R5 ratchet)。 実測: - tests/test_deadline_load_scaling.py 5 本 + 台帳 + ADR = 10 passed - 5 連敗の当事者だった tests/semgrep/test_vm_failfast_semgrep_rules.py が 16 passed(14m16s・係数 x5.5 = 1 テスト 328 秒 / watchdog 491 秒) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Ai-Conversation: faf301cc-28e1-4c0c-af68-8d345badd37d
proboscis
force-pushed
the
wt/test-deadline-load-scaled
branch
from
August 17, 2026 09:27
8426a0b to
5c180f0
Compare
Owner
Author
|
L34 として main へ着地済み(156d1cc — 窓の train 再構築で sha は変わったが patch-id 同一・内容同一の 4 paths +329/−8)。宣言 gate.timeout_s 7200 は L33(宣言先行便)で先行着地。着地後の main 断面で R6 条文検査 + tests/test_deadline_load_scaling.py = 9 passed を実測。本線到達済みのため close。 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
何を直したか
operator 裁定
decision-doeff-land-gate-deadline-2026-08-17.html「A. 締切を直す」 の執行。試験の壁時計締切が捕まえるべきものは hang であって busy ではない。外部プロセス
(semgrep・CLI・build)を待つ試験の所要は機械の過負荷率に比例して伸びるのに、締切だけが
定数だったため、過負荷帯では 正しい仕事に赤を出す装置 へ退化していた。
実測(2026-08-17)
修理
PYTEST_DEADLINE_SCALE_CAP既定 8)。上限があるので真の hang は依然として有界時間で落ちる
PYTEST_DEADLINE_SCALE=off(負荷を自分で制御する CI 用)SIGKILL watchdog。watchdog は常に per-test より厳密に上に居る。
⚠ 片方だけ上げると「遅い試験 1 本が赤くなる」が「走行ごと SIGKILL で全損する」に化ける
(実測:
PYTEST_TIMEOUT=600を素の 90 秒 watchdog に当てて全数電池が 45% で即死)@pytest.mark.timeout)も同じ係数に掛かる — pytest-timeout は marker をini より優先するので、ini だけ伸ばすと「自分は遅いと申告した試験」= 外部プロセスを起こす
当の試験群が素の締切に取り残される
同時に「この機械は過負荷である」の信号でもあり、8 倍かかった走行が黙って緑を返すのは
観測の欠落
per-test 締切の家は
pyproject.tomlただ 1 つのまま(conftest は ini を読んで掛けるだけで、60という数字を第 2 の場所へ写さない)。呼び手が env や--timeoutで明示した値は潰さず、その値を掛ける — 潰したら escape hatch が嘘になる。
法・反例
ADR-DOE-ENFORCE-001に R6 と lawdeadline-measures-hang-not-load(反例 5):台帳も同便で更新(law 84→85・deftest 37→38 — R5 anti-drop ratchet)。
検証
tests/test_deadline_load_scaling.py5 本 + 台帳 + ADR = 10 passedtests/semgrep/test_vm_failfast_semgrep_rules.pyが16 passed(14m16s)。出力は
deadline scale x5.5 (load/core) — per test 328s, watchdog 491sこの便が塞いでいたもの
resume の根治(PR #593 — ADR-DOE-AGENTS-006 R10)がこの門で 5 回止まっていた。
本便が着地すれば #593 を通せる。
🤖 Generated with Claude Code
基底追随の再登記(2026-08-17 引き継ぎ席)
統合形(宣言 + 修理の 1 commit 束)は着地の門で 4 連敗した(L29〜L32・最後は門 2700s に対し
2713.4s の時間切れ)。「修理入りの全量検査は 1844s で収まる」という統合の前提は
負荷依存で反証された — 収まるかどうかが機械の負荷帯で変わる以上、門の持ち時間の宣言は
基底側に先に居る必要がある。
gate.timeout_s2700→7200)は 宣言先行便 L33(branchwt/gate-timeout-7200)としてmain へ着地済み(1676378)
.agents/land-queue.tomlに触れない 1 commit(4 paths・+329/−8)へ畳み直した — 宣言と重複していた統合 commit(8426a0b)の toml hunk は落とした
gate.timeout_s >= 7200を基底から読む)+ 新規 5 本 = 9 passed(load 66〜77 帯で実測)