* fix(notion-sync): re-key a row matched by URL when its Key has drifted
`tools/job_key.py --audit --migrate` (#637) renames keys in
seen_jobs.json, but Step 4 upserted on Key alone, so the next sync
created a duplicate row for every migrated key. On a Key miss, look up
keyed rows whose URL equals the job's URL exactly: one match gets the
new Key and is updated, several are reported and left untouched, none
creates as before. Rows without a Key stay invisible, and the report
counts re-keyed rows separately.
Shape from Mads Lorentzen's review on #637.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* chore: drop the CHANGELOG hunk, frozen by #800 (release notes come from the PR title)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
* test(notion-sync): pin the key-collision guard and name the skip counter for both ambiguous cases
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>