Skip to content

Fix release notes that stay empty after a repository change, rel_ tags and npm author parsing - #11

Merged
fleizean merged 3 commits into
developfrom
fix/release-notes-lookups
Oct 19, 2026
Merged

fleizean merged 3 commits into
developfrom
fix/release-notes-lookups

Conversation

@fleizean

@fleizean fleizean commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Summary

Three fixes for packages whose release notes stayed empty although the notes exist on GitHub: empty notes are looked up again when a package's repository changes, rel_X_Y_Z release tags are matched, and npm packuments with an old author layout no longer fail to load.

Why

Checked against production on 2026-10-19:

  • Empty notes never retried. selenium was first scraped before its repository was known, so all 192 versions were stored empty. Once PR fix(pypi): find the repository in the README when project_urls has none #1 found the repository, nothing looked them up again: the package page only queues a scrape for versions never looked up, and analysis only for missing or expired (30 days) rows. 34 cached packages also carried a non-repository GitHub link from older code (/discussions, /issues, /actions?..., a .git suffix); .git made the releases API return 404, so Grpc.Net.Client and Swashbuckle.AspNetCore had no notes at all.
  • rel_ tags. SQLAlchemy and Alembic tag releases as rel_2_1_5. No tag candidate matched, so their GitHub release notes were never found.
  • npm author. The packument is deserialized from a stream, where Utf8JsonReader.Skip() throws on a partial buffer. glob and minimatch have old versions whose author object lists url before name; the converter skipped url, the lookup threw, and the package was reported as "not found on npm".

Changes

  • PackageCacheService: when a metadata refresh finds a different GitHub repository, empty notes that were already looked up get their source cleared and a scrape is queued, so they are read once more under the new repository. Notes that are genuinely missing are not retried on a schedule; only a repository change triggers it.
  • GitHubScraperService.TagCandidates: adds rel_{version with dots as underscores}.
  • NpmService: the custom converters use TrySkip() instead of Skip().

Notes for reviewers

  • Production data was already repaired by hand for the cases found (backups taken first): 34 packages had their metadata expired so the link was refreshed, and the empty notes of selenium and 15 other packages were reset and re-scraped.
  • After deploy, sqlalchemy and alembic still hold empty notes from the old tag matching; their repository does not change, so the first change does not cover them. Clearing the source of their empty notes once (or waiting for the 30-day expiry) brings the notes in.
  • Not built or tested locally; CI is the check.

Checklist

  • The pull request targets develop and is about one thing
  • Commit messages follow Conventional Commits (feat(scope): ..., fix(scope): ...)
  • CI is green (backend tests, frontend build and tests, dependency gate)
  • Schema changes are EF Core migrations generated by the tool, not hand-edited
  • A changed backend DTO has its TypeScript twin updated in src/frontend/src/app/core/models
  • New dependencies are justified and their lock files are updated in the same commit
  • No secrets, tokens or personal data in code, logs or this description
  • Code comments are kept to a minimum; the reasoning lives in this description

Enes Yağız and others added 3 commits October 20, 2026 01:51
…nges

Versions looked up without a repository, or under a wrong one, were stored
as empty and stayed empty for 30 days after the repository was corrected.
A metadata refresh that finds a different repository now clears the source
of those empty notes and queues a scrape, so they are read again once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SQLAlchemy and Alembic tag releases as rel_2_1_5, which no tag candidate
matched, so their GitHub release notes were never found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The packument is deserialized from a stream, where Utf8JsonReader.Skip
throws on a partial buffer. An old author object with a url before its name
(glob, minimatch) made the whole lookup fail and the package was reported
as not found on npm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@fleizean
fleizean merged commit f6dc65d into develop Oct 19, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant