fix: HC-DOC-TIMEOUT実機テストでn8n Data Tableノードの重複返却バグを発見・修正

returnAll:trueで取得した行が45件重複して返る不具合を確認。複数resultIdを
forループで個別処理する設計だったため実害リスクがあり、resultIdでの
ユニーク化を追加した。他ワークフローは最初の1件のみ参照または集約する
設計のため影響なしと確認。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kenichiro NOGI 2026-09-12 17:13:52 +09:00
parent 5e7bcb64be
commit f9e85a29f5

View File

@ -1624,5 +1624,35 @@ SiteSettings.Columnsに`Date004`列自体が定義されていなかった**`
現状は自動セットされない。**今後、n8n側でProcess5実行時にDate004を明示更新する処理を追加する 現状は自動セットされない。**今後、n8n側でProcess5実行時にDate004を明示更新する処理を追加する
HC-WPまたはクライアントスクリプト側か、この既知課題自体を解決する対応が別途必要**。 HC-WPまたはクライアントスクリプト側か、この既知課題自体を解決する対応が別途必要**。
HC-REMINDERの4パターン②③⑥⑦すべて実機確認完了。HC-DOC-TIMEOUT10分タイムアウト監視 HC-REMINDERの4パターン②③⑥⑦すべて実機確認完了。
未着手のまま次回対応。
### HC-DOC-TIMEOUT実機テスト: n8n Data Tableードの重複返却バグを発見・修正
Status=400・PDF1件送信済み`lastFileReceivedAt`セット済みの状態で10分経過後にExecute
workflowを実行したところ、実機に「診断書を受け付けました。」が届いた結果的に1通のみ
ただしn8n実行履歴を確認したところ、「対象抽出」ードの`targets`配列に**同一行
513409、healthcheck_bot_stateには1行しか存在しないが45件重複**していることが判明。
「待機中(file)取得」ノード(`n8n-nodes-base.dataTable`、`operation:"get"`・`filters`・
`returnAll:true`の生出力を直接確認したところ、45個の完全に同一のアイテムが返っていた
Pleasanter側のn8n Public API `GET /data-tables/{id}/rows`で直接確認すると1件のみ
**n8n Data Tableードの`returnAll:true`使用時に同一行を重複して返す不具合**と判断。
実際にLINEWORKSへ届いたのが1通のみだった理由: 「実行」ノードの`for (const target of
targets)`ループが45回中1回目でStatus 400→410Process 8実行に遷移させ、2回目以降は
同一resultIdへ同じProcessId=8を再実行しようとしてCurrentStatus不一致エラーとなり、
`try/catch`の`continue`で握りつぶされたためsendTextは`update`成功後にのみ呼ばれる
設計だった)。**たまたま実害を免れただけ**で、異なるresultIdが複数同時に対象となる
状況では重複送信が実際に発生しうる、根本的に修正が必要なバグだった。
**修正**: 「対象抽出」ノードの`stateRows`取得直後にresultIdでユニーク化する処理を追加
`Set`で既出resultIdを弾く。HC-DOC-TIMEOUTへPUT反映済み。
**他ワークフローへの影響確認**: 同じData Table`healthcheck_bot_state`)を`operation:"get"`・
`returnAll:true`で読む箇所はHC-WAの「待機状態取得」ードにもあるが、コード側が
`stateRows[0]`と最初の1件のみ参照する設計のため実害なし。HC-REMINDER/HC-WPの
`workflow_config_values`取得も`Object.fromEntries`でキー集約するため実害なし。**複数の
異なるresultIdをforループで個別処理する設計だったHC-DOC-TIMEOUTのみ**が実害リスクを
抱えていたため、修正はこの1箇所で十分と判断。
HC-DOC-TIMEOUTは修正後、実機での再検証は未実施次回、複数resultId状態か、n8n実行履歴で
`targets`が正しく1件になっていることを確認すること。inactiveへ戻した。