# instinct: PM2エラーログ監視で同じIssueが連続自動起票されたら、タイムスタンプ無しエラー行が時間フィルタをすり抜けていないか疑う

vvv の `bug_watchdog.check_pm2_error_logs` 等、PM2ログを時間フィルタ(直近N分)で監視する仕組みで、**解決済みの同じエラーで同じIssueが繰り返し自動起票**されたら、**タイムスタンプ無しのエラー行**が時間フィルタをすり抜けている疑い。

## 原因パターン
PM2ログには2種類の行がある:
- タイムスタンプ付き: `2|svc | 2026-06-09 16:26: INFO ...`
- **タイムスタンプ無し**: `1|vvv-api | ERROR: [Errno 98] Address already in use`(uvicorn/起動エラー等)

フィルタが `if last_ts is not None and last_ts < cutoff: continue` だと、エラー行までにタイムスタンプ行が無い(=ログ先頭の古い部分)とき `last_ts is None` で条件がFalse→**スキップされず古い解決済みエラーを検知**する。

## 正しい修正
`if last_ts is None or last_ts < cutoff: continue` — 時刻不明も安全側でスキップ。PM2ログは時系列順なので「直近のタイムスタンプより前=古い」が成立。

## 検証(必須)
- 古いエラーが残るログで監視関数を実行し**検知0件**を確認
- かつ**最近(5分前)のタイムスタンプ付きエラーは検知維持**(フィルタが厳しすぎて本物を見逃さないか・見逃し防止)
- vvv#542/#543(PM2エラーログ多発: vvv-api)・PR #544

## 関連
- [[instinct-pm2-orphan-port-held-drift]] — Address already in use の発生源(孤児プロセス)。本能はその「検知側の誤報」
- [[instinct-log-truncate-not-root-cause]] — ログ問題はtruncateでなく根本(検知ロジック)を直す
- QA/監視botの連続自動起票は「実害」でなく「検知ロジックのバグ」のことがある。起票内容を鵜呑みにせずログのタイムスタンプを実機確認する

---
(migrated from local memory/instinct_pm2_error_no_timestamp_false_detect.md)