BuildAIクローラーのUAは名乗るだけ — 検証済みだけ数えたら本物468件・偽装991件だったGPTBot や ChatGPT-User を名乗るリクエストは、その UA を書けば誰でも作れる。Cloudflare の verifiedBotCategory とサイトマップ実在パスの2軸で分けたら、8日間で本物の記事取得は468件、認証情報スキャンは991件だった。同じ UA が検証済みと未検証に割れる実測と、集計スクリプトの実装。
Buildクロス投稿は重複コンテンツか — 消す前に一致率を測ったら散文の一致は3行だったZenn / Qiita / dev.to へのクロス投稿を重複コンテンツと疑って外部記事を消しかけたが、行単位で測ったら一致795行のうち762行はコードブロックで、散文の一致は393行中3行だった。測り方と、canonical を指定できるプラットフォームとできないプラットフォームの整理。
BuildGoogleスプレッドシートの .xlsx は Excel で静かに壊れる — 203セルを動的配列なしで書き直すGoogleスプレッドシートから .xlsx で書き出すと、ARRAYFORMULA / FILTER / SORTN / QUERY が Excel に存在しないまま残る。しかも外側の IFERROR が例外を握りつぶすので、画面にはエラーではなく「該当なし」が出る。openpyxl で壊れたセルを数え、ヘルパー列+INDEX/MATCH に書き直して Excel 2016 でも動くようにした記録。
Build通知を outbox で冪等に届ける — 検知と送信を分け、送信直前に再確認する「条件を検知した瞬間に通知を送る」と、検知から送信までの間に在庫や条件が変わって誤報になる。検知は outbox に積むだけにして、送信直前に再照会・再判定し、崩れていたら送らず落とす。冪等な投入・送信直前の再確認・指数バックオフの再送を、Cloudflare D1 上の状態機械として組んだ設計を共有する。