From fa3d805918e45d0a1b91be84df014284cb995023 Mon Sep 17 00:00:00 2001 From: Sparky Fen Date: Mon, 21 Sep 2026 10:42:34 -0700 Subject: [PATCH 1/2] Tell CodeRabbit not to check keyDates asOf against bsky.app CodeRabbit posted the same false positive on the bot PR 15 times across 9 PRs: it opens the entry's source bsky.app URL and compares the timestamp there against asOf. That page exposes only the AppView's indexedAt, as article:published_time and datePublished. The record's createdAt, which the keydates worker copies verbatim into asOf, is not in the page, and indexedAt can run later or earlier than createdAt. Seven saved learnings did not stop it, because a learning applies to similar code segments rather than as a general rule. A path instruction is the documented place for a rule like this. --- .coderabbit.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 8f55f54..1c03d13 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -17,3 +17,16 @@ reviews: auto_review: # 0 disables the pause and reviews every commit. auto_pause_after_reviewed_commits: 0 + + # Stop the repeat false positive on keyDates asOf. A bsky.app page publishes + # the AppView's indexedAt as its article:published_time and datePublished, so + # a reviewer that opens the source URL sees a timestamp that differs from the + # record's createdAt and reports the asOf value as wrong. Saved learnings did + # not stop it, because a learning applies to similar code segments rather than + # as a general rule. + path_instructions: + - path: "*.json" + instructions: | + `keyDates.*.asOf` is the source Bluesky post's `record.createdAt`, copied verbatim by the keydates worker. + Do not check `asOf` against a bsky.app page, a web search result, or MCP tool output. The bsky.app HTML (`article:published_time`, `datePublished`) exposes the AppView's `indexedAt`, not `createdAt`. `indexedAt` can be later or earlier than `createdAt`. + Only `record.createdAt` from `app.bsky.feed.getPosts` on public.api.bsky.app is authoritative. If you have not read that field, do not comment on `asOf`. A difference between `asOf` and any other timestamp is not a finding. From e250984287eb117a6bb6190cc20b3e54da2d22c7 Mon Sep 17 00:00:00 2001 From: Sparky Fen Date: Mon, 21 Sep 2026 10:48:39 -0700 Subject: [PATCH 2/2] Name the nested keyDates shape in the asOf instruction asOf sits at keyDates...asOf, two levels down, so keyDates.*.asOf described the wrong shape. Say every asOf nested under keyDates and give one full path as an example. --- .coderabbit.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 1c03d13..bbc6a88 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -27,6 +27,6 @@ reviews: path_instructions: - path: "*.json" instructions: | - `keyDates.*.asOf` is the source Bluesky post's `record.createdAt`, copied verbatim by the keydates worker. + Every `asOf` field nested under `keyDates` (for example `keyDates.registration.opens.asOf`) is the source Bluesky post's `record.createdAt`, copied verbatim by the keydates worker. Do not check `asOf` against a bsky.app page, a web search result, or MCP tool output. The bsky.app HTML (`article:published_time`, `datePublished`) exposes the AppView's `indexedAt`, not `createdAt`. `indexedAt` can be later or earlier than `createdAt`. Only `record.createdAt` from `app.bsky.feed.getPosts` on public.api.bsky.app is authoritative. If you have not read that field, do not comment on `asOf`. A difference between `asOf` and any other timestamp is not a finding.