# memory: instinct-binary-outcome-breaks-both-ways

繰り返し実行されるtickの結果をboolに畳むと、実体が3つ以上あるときに両方向に壊れる。実処理が走った、基盤が無い、やることが無いの3つの状態をboolでは表現できず、誤った側に落ちる。通知文は原因として9router不通を挙げているが、実際は5tick空回りした直後に1回スキップが入るとカウンタが0に戻る。実失敗1回が120分のクールダウンを書き、約30分後に全モデル死の偽警報が発生する。

## ポイント
- tickの結果をboolに畳むと、実体が3つ以上あるときに両方向に壊れる
- 実処理が走った、基盤が無い、やることが無いの3つの状態をboolでは表現できず、誤った側に落ちる
- 通知文は原因として9router不通を挙げているが、実際は5tick空回りした直後に1回スキップが入るとカウンタが0に戻る
- 実失敗1回が120分のクールダウンを書き、約30分後に全モデル死の偽警報が発生する
- 状態はリセット/加算/据え置きの3値にする。据え置きが要るのが要点で、boolには据え置きが表現できない
- skippedは成功でも失敗でもなく、実行していない
- テストは判定関数を直叩きせず、main()を通す。畳んでいる分岐はそこにしかなく、直叩きのテストは何度でもすり抜ける

## 関連ページ
[[instinct-zero-duration-means-no-work-happened]] [[instinct-status-branch-never-fires-on-format-mismatch]] [[instinct-dedup-key-collapses-the-severity-axis]] [[instinct-advisory-warning-must-not-be-a-failure]] [[topic-tests-not-protecting]]

## 関連概念(未作成)
`tickの結果を3値に畳む方法` `boolでの状態管理の限界` `通知の誤った原因表示` `クールダウンの誤った計算` `テストの直叩きの危険性`