Skip to content

Upgrade: Anthropic.ts silently skips releases when more than 5 land between checks (fixed per_page=5 / per_page=10) #2227

Description

@cristbc

Version

LifeOS 7.40.4 (main @ 5e2f2e8).

What is broken

fetchGitHubRepo in the Upgrade skill asks GitHub for one fixed page, releases?per_page=5 and commits?since=…&per_page=10, then walks that page until it hits the last-seen tag or SHA. When more releases than that land between two checks, the older ones never show up in the report, and the saved state jumps past them anyway. Claude Code ships close to daily, so a week or so between runs is enough. On a 12-day gap it reported v2.1.275 through v2.1.280 and missed v2.1.269 through v2.1.274, which is where the Monitor persistent removal and the omitClaudeMd agent field landed.

Where (file:line)

  • LifeOS/install/skills/Upgrade/Tools/Anthropic.ts:238 (commits)
  • LifeOS/install/skills/Upgrade/Tools/Anthropic.ts:275 (releases)

Suggested fix

Page until the last-seen item or the since window, with a page cap. One small helper covers both calls:

export async function pageUntil<T>(
  fetchPage: (page: number) => Promise<T[] | null>,
  stop: (item: T) => boolean,
  maxPages = 5,
): Promise<T[]> {
  const out: T[] = [];
  for (let page = 1; page <= maxPages; page++) {
    const items = await fetchPage(page);
    if (!items || items.length === 0) break;
    for (const item of items) {
      out.push(item);
      if (stop(item)) return out;
    }
  }
  return out;
}

For releases, stop on the last-seen tag or on published_at < since, and drop anything older than the window. With the last-seen tag set back 12 releases, the paged version reported all 11 tags published in that gap (v2.1.279 was never published); the fixed page reported 5.

main() also runs on import. Guarding it with if (import.meta.main) lets the helper be unit-tested.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions