Skip to content

count-usage-limit-resumes.py: 遅い自動継続の線引き・素通りする変異・--tz で割れる組(#457) - #462

Merged
hdknr merged 9 commits into
mainfrom
issue/457-late-auto-continuation
Oct 27, 2026
Merged

hdknr merged 9 commits into
mainfrom
issue/457-late-auto-continuation

Conversation

@hdknr

@hdknr hdknr commented Oct 27, 2026

Copy link
Copy Markdown
Owner

#454(PR #455)の狭いパスで挙がり、失敗を示せた 4 つ(F1・F2・F3・--tz で割れる組)を scripts/count-usage-limit-resumes.py で扱う。

変更

  • 遅い自動継続の線(F1): 予告の時刻から LATE より後の自動継続を外すのは、窓に既に続けたもの(自動継続・人間・ローカルコマンド)があるとき、または予告の時刻より後、その自動継続より LATE 以上前に入力か応答が記録されているとき。直前の記録だけでは外さない(スリープ明けに溜まった通知)。外したら窓を閉じる
  • **ローカルコマンドが続けた待ち(F2)**も外す
  • **窓の長さが同じコピー(F3)**は種類と時刻まで比べる——読む順で差が変わらない
  • --tz: 「守る」の主張を「比べる相手のある組は割らない」まで弱め、比べる相手の無い組を「守らない」に書いた(記録の時間帯を知る手段が無い)
  • docs/plans/issue-454.md の起票数を 2 件に

「守る」35 行・変異 35 件(1 対 1)。python3 と python3.12 で緑、check-all.py 51/51 緑。

乗るデプロイ経路

反映経路なし(scripts/ と docs/plans/。§5 は実データの内訳が変わらないので直していない)。

計画と受入基準: docs/plans/issue-457.md

Fixes #457

🤖 Generated with Claude Code

hdknr and others added 8 commits October 27, 2026 10:59
- 予告の 30 分より後の自動継続は、既に続けたもの(自動継続を含む)があるか、予告の時刻より後に記録があれば、その待ちのものと読まない
- ローカルコマンドの後の遅い自動継続と、時刻だけが違うコピーの試料を足す(#455 の狭いパスで素通りした変異)
- 比べる相手の無い組は --tz で割れることを「守らない」に書き、「守る」の主張を比べる相手のある組までにする
- #454 の計画の起票数を 2 件にする

Refs #457

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #457

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… の 2 パス目 CR2-2〜CR2-4)

- CR2-2: 「LATE 以上前」の境界を含める(t <= at - LATE)。試料 su と変異を足す
- CR2-3: 「守る」の W3 の行に「誰も続けておらず」を戻す
- CR2-4: 停止の記録を持たない自動継続の定義に、閉じた窓の後のものを足す

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hdknr

hdknr commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

関門の結果

パス Verifier(dev-loop:dev-loop-verifier・sonnet) /code-review(high)
1 パス目 反証 0 件 指摘 8 件 → 直したのは CR1・CR2
2 パス目 反証 0 件(外のコピーで変異 6 件を当てて全部赤) 指摘 7 件 → 直したのは CR2-2・CR2-3・CR2-4
狭いパス(git diff b8d9697) 反証 0 件。Verifier が設計した変異は赤 2・素通り 2(下記) —

採否の表は docs/plans/issue-457.md にある。

直したもの

  • CR1: W2 の外す条件が広すぎた(遅れた自動継続の数秒前の通知でも外していた)→ 「自動継続より LATE 以上前の記録」に狭めた(利用者の決定)
  • CR2: 外した自動継続の後も窓が閉じず、後の人間が元の待ちの行方を決めていた → 窓を閉じる
  • CR2-2: コードは「LATE より前」、docstring と W2 は「LATE 以上前」→ <= にし、境界の試料 su と変異を足した
  • CR2-3: 「守る」の 1 行が「誰も続けておらず」を落とし、W1 と食い違っていた → 文言を戻した
  • CR2-4: 「停止の記録を持たない自動継続」の定義に、閉じた窓の後のものが無かった → 足した

2 パス目で直した行には、狭い Verifier を通した。

満たしていない受入基準

なし。

狭いパスの指摘(直していない。採否は人間が決める)

どちらも受入基準は破らない(コードは守っている)。この周より前からある検査の穴で、Verifier が陽性対照を添えている。

  • NP1: W2 の下端(reset_of(stop) < t)を外す変異(→ t <= at - LATE)がテストを素通りする。予告より前の記録で外れる形をどの試料も当てていない。陽性対照: 予告前 09:30 の応答・10:50 の自動継続の試料で、正しいコードは ok・変異は FAIL
  • NP2: W1 の境界(at > reset + LATE → >=)の変異が素通りする。ちょうど LATE 後の自動継続を当てていない。陽性対照: 予告の 1 分後と 30 分後ちょうどの自動継続の試料で、変異は orphans の件数で落ちる

未証明(コードレビューでの確認をお願いします)

  • W3 の形(予告の後、自動継続の LATE 前まで何も記録されていない待ちの遅い自動継続)が、本当にスリープによる遅れか。記録からは、記録の無い別の停止と分けられない。その待ちに入れると決めた。BLOCKED ではない(分ける情報が記録に無く、道具を用意しても変わらない)

BLOCKED

なし。

残課題(失敗を実物で示せないか、受入基準を破らないもの)

  • CR2-5(判断をお願いしたい): 起きてから最初の turn が LATE より長いと、スリープで遅れた自動継続が外れ、待ちが「続かなかった」になる(合成の試料で再現)。W2 の線を決めた理由(「LATE は動き出してから発火するまでの幅」)が、自動継続が turn の後ろで待つ形では成り立たない。W2 の文言どおりの挙動なので直していない
  • CR2-1: 試料 sn の名前つきの検査は W1 の変異で赤にならない(集計の検査だけが落とす)
  • CR2-6: W5 の検査が waits["sq"] を名前で引くので、変異で KeyError になり、名前つきの FAIL が出ない(変異は全体の比較で殺される)
  • CR2-7: 変異の名前に古い文言が残る・and False の変異は全部の除外を止める・「守る」と変異の 1 対 1 は数だけ
  • CR3: 窓の長さが同じコピーで遅いほうの時刻が勝つ理由を書いていない
  • CR4: オフセットの無い時刻で TypeError(実データに無い)
  • CR5: 取り消しや system だけの後の別の停止が、前の待ちに畳まれる(実データで未確認)
  • CR6: 壊れたレコード(message が文字列など)で落ちる
  • CR7: W9 の「内訳が変わらない」は判別しない(陽性対照は合成の試料 sn・so・sp。実データの自動継続 8 件はすべて予告の +1 分で、LATE の判定に入らない)
  • CR8: --since を文字列で比べ、月を UTC で切る
  • V1: t > reset の境界(ちょうど予告の時刻の記録)を試料で当てていない
  • V2: check-all.py の中で check-mutation-claims.py が 1 回落ち、単独では通った(その後は再現していない)

検証

  • python3 scripts/test-count-usage-limit-resumes.py: python3 と python3.12 で「すべて合格」。「守る」35 行に対して変異 35 件
  • python3 scripts/check-all.py: 51/51 本(失敗 0 / 飛ばし 0)
  • 実データ(--anonymize --tz Asia/Tokyo): 待ち 68・張った 65・自動継続 8・予告より前に人間 51・予告の後に人間が先 3・取り消し 2・続かなかった 1。修正前と集計が同じなので、§5 は直していない
  • 生成物なし(skill-metrics.py --check・check-diagram-freshness.py が緑であることを Verifier が確かめた)
  • この周の起票: 0 件

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

count-usage-limit-resumes.py: 遅い自動継続の線引き・素通りする変異・--tz で割れる組(#454 の残課題)

1 participant