Skip to content

feat(worker): unprocessed-event retention via DO alarm sweep + document retention in READMEs #236

Description

@liplus-lin-lay

purpose / 目的

未処理 webhook イベントの保持上限を導入し, DO ストレージ肥大の唯一残った無限増加経路を塞ぐ. あわせて retention 仕様 (処理済み 7 日 / 未処理 90 日) をユーザー向け README (root + NPM 公開パッケージ) に明記する.

premise / 前提

design / 設計方針

  • 未処理 purge: processed=0 かつ received_atUNPROCESSED_PURGE_AFTER_DAYS 日 (既定 90) より古いイベントを削除. 既定を長く取るのは未読データ消失の安全域だから (処理済み 7 日との非対称は意図的).
  • トリガ: mark_processed のみに依存しないこと. 「消費されない = 未処理が溜まる」放置テナントでは mark_processed が呼ばれず, 掃除が一番要る相手に手が届かない. DO Alarms (ctx.storage.setAlarm + alarm() ハンドラ) で消費ゼロでも走る時間駆動 sweep を実装する. sweep は期限超過の処理済み (>7 日) と未処理 (>90 日) の両方をまとめて掃除し, alarm() 内で次回を再スケジュールして周期実行する (例: 日次).
  • 既存の mark_processed 時 purge は即時性のため残してよいが, 本質的な保証は Alarms sweep が担う.
  • 既知の限界 (スコープ外): 時間窓は「古さ」を縛るが「量」は縛らない. 高頻度 x 無消費テナントは 90 日窓があっても 1GB 壁に先に到達しうる. 量ベースの hard cap (最新 N 件 / 最大 M バイト) は別 issue 候補として記録のみ.
  • DO Alarms が現プランで制約/不可の場合: それを surface した上で mark_processed トリガにフォールバックし, 放置テナントの限界を docs に明記する (ブロックしない).

constraints / 制約

  • 新規 env UNPROCESSED_PURGE_AFTER_DAYS (既定 90) を worker/wrangler.toml [vars] に追加. 既存 PURGE_AFTER_DAYS (処理済み, 7) は just-shipped のため改名せずそのまま.
  • docs/0-requirements.md と docs/0-requirements.ja.md に未処理 retention と Alarms sweep を反映 (同一 PR, docs 分割禁止).
  • README 二枚に retention 仕様を明記:
    • README.md (リポジトリ root)
    • mcp-server/README.md (NPM 公開パッケージ github-webhook-mcp の README)
    • 内容: 処理済み 7 日 (PURGE_AFTER_DAYS) / 未処理 90 日 (UNPROCESSED_PURGE_AFTER_DAYS) / Alarms による自動 sweep / 既定値と env 可変であること.
    • NOTE: local-mcp/ は private (未公開) のため README 更新対象外.
  • テスト: 未処理 >90 日が sweep で削除 / 未処理 <90 日は残る / 処理済み >7 日が sweep で削除 / alarm が再スケジュールされる, を検証.

scope out / スコープ外

target files / 対象ファイル

  • worker/src/store.ts
  • worker/wrangler.toml
  • worker/test/workers/store.test.ts
  • docs/0-requirements.md, docs/0-requirements.ja.md
  • README.md
  • mcp-server/README.md

completion conditions / 完了条件

  • 未処理イベントは received_at が UNPROCESSED_PURGE_AFTER_DAYS 日 (既定 90) を超えると削除される
  • DO Alarms による sweep が消費ゼロでも周期実行される (処理済み >7 日 + 未処理 >90 日 をまとめて掃除)
  • 90 日以内の未処理は残る (テストで検証)
  • env UNPROCESSED_PURGE_AFTER_DAYS で可変 (既定 90)
  • docs/0-requirements.md (.ja 含む) に反映
  • root README.md と mcp-server/README.md に retention 仕様 (処理済み 7 日 / 未処理 90 日 / Alarms sweep / env) が明記される
  • 全テスト green

Refs #234 #235 #233 #29

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestreadybody converged for implementation

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions