Sentinel – opens a PR to fix Stripe breaking changes before they land Sentinel, a new open-source tool, detects breaking changes in vendor API changelogs before they affect customer codebases, scans repositories for affected usages, and opens a pull request with fix diffs before the sunset date. The tool currently supports Stripe and TypeScript/JavaScript repos, with phases 1–6 built, and requires only Node to detect a real breaking change without an account or API key. Watches vendor API changelogs, detects breaking changes before they hit customer codebases, scans a customer repo for affected usages, generates reviewable fix diffs, and opens a PR — before the sunset date, not after something breaks in production. See it detect a real breaking change with no account, API key, or database — just Node: git clone https://github.com/rtsdque/sentinel.git cd sentinel npm install npx tsx src/cli.ts stripe --track acacia That's it — this scrapes Stripe's real changelog and prints a fully structured breaking-change event to your terminal, deterministically no LLM call . Everything past this point interpreting changes with an LLM, scanning a codebase, opening PRs, running on a schedule layers on top and needs progressively more setup — jump to the phase you want below, or npm test to run the suite also needs nothing but Node . This is a real diff Sentinel generated and opened as a PR, unedited, against a test repo — Stripe nested three Balance Settings request fields under a new required payments object https://docs.stripe.com/changelog/basil/2025-08-27/balance-settings-nested-in-payments-field.md , and Sentinel found the affected call site and proposed the migration on its own: export async function enableNegativeBalanceDebits { return stripe.balanceSettings.update { - debit negative balances: true, - payouts: { - schedule: { interval: "daily" }, + payments: { + debit negative balances: true, + payouts: { + schedule: { interval: "daily" }, + }, }, } ; } The PR body links the upstream changelog entry, states the deadline if there is one, and separately lists anything it couldn't confidently fix — see Phase 4 phase-4--fix-generator and Phase 5 phase-5--pr-bot below for what makes it refuse rather than guess. Reasonable question — here's what's actually different, based on a real look at the landscape, not a guess: | Tool | What it does | Where it stops | |---|---|---| Dependabot incl. AI-agent remediation | Reacts to a known CVE or a new package version in your manifest | Anchored to your dependency file — never reads a vendor's changelog prose, only version diffs | Renovate | Same, plus customDatasources for arbitrary version feeds | Still just version tracking — no interpretation of what changed or why it breaks you | oasdiff / openapi-diff | Diffs two OpenAPI specs, flags breaking changes precisely | Needs the vendor's own spec-versioned CI — doesn't touch your codebase at all | Visualping / Theneo / PageCrawl | Watch a changelog page, alert on any change | Stops at a notification. You still read it, find the usages, and fix them yourself | ChangeSpec | An open JSON format for vendors to publish structured change events | A spec waiting for vendor adoption — Stripe doesn't publish in it today, so someone still has to read the prose | Every one of these is genuinely good at one piece. None of them do the thing this YC RFS actually asked for: watch a vendor's unstructured changelog prose, turn it into a structured breaking change, find every place your specific codebase uses the affected surface, and propose the fix — before your build breaks, not after. That's the gap Sentinel targets, and as far as we could find during a real competitive pass not a hunch , nobody had shipped the full pipeline yet. Phases 1–6 built , scoped to Stripe + TypeScript/JavaScript customer repos only see project scope notes — deliberately not broad . | Phase | What it does | Entry point | |---|---|---| | 1. Change Watcher | Scrapes Stripe's changelog, deterministically parses breaking-change entries into structured ChangeEvent s | src/cli.ts | | 2. Change Interpreter | LLM step claude-opus-4-8 that decomposes prose + the parsed param table into atomic, machine-actionable changes | src/cli.ts --interpret | | 3. Codebase Scanner | AST-based ts-morph scan of a TS/JS repo for usages of the affected API surface, scoped to real Stripe client calls | src/scan.ts | | 4. Fix Generator | Per-match LLM call that proposes a diff or explicitly declines with a reason — never guesses | src/fix.ts | | 5. PR Bot | GitHub App that applies approved fixes, formats with Prettier, and opens a PR — every PR states what wasn't auto-fixed | src/open-pr.ts | | 6. Persistence & Scheduling | Postgres-backed "have I seen this" store + a repo registry, so a run only acts on genuinely new changes | src/run-scheduled.ts | Nothing in this pipeline auto-merges. Every fix is generated for human/PR review; the PR body explicitly separates "proposed changes" from "needs manual review," because there's no customer test suite to verify correctness against. src/ lib/ fetch wrapper, markdown-table parsing watcher/stripe/ Phase 1: changelog fetch + parse + ChangeEvent builder interpreter/stripe.ts Phase 2: LLM decomposition into atomic changes scanner/typescript.ts Phase 3: ts-morph AST scan for affected usages fixer/stripe.ts Phase 4: per-match fix generation + apply/consolidate/format github/ app.ts GitHub App installation auth pr.ts branch + commit + PR creation cli.ts / scan.ts / fix.ts / open-pr.ts entry points for each phase types.ts data/stripe/ structured ChangeEvent JSON, one file per detected entry examples/sample-customer-repo/ synthetic fixture repo used to validate the scanner/fixer npm install cp .env.example .env Fill in .env directly in your editor — never paste secrets into chat. ANTHROPIC API KEY is needed for Phases 2 and 4; the GITHUB APP vars are needed for Phase 5 see below . Note onon Windows, npm's npm run