feat(enrichment): add exported-API breaking-change analyzer - #3619
Conversation
Add a local, no-network REES analyzer that flags an exported symbol a PR removes or renames in a package public entrypoint (index/mod/main/public-api) - a semver-major break for downstream consumers shipped without a major version bump. Purely diff-driven: for each changed entrypoint file it diffs the exported names on removed lines against those on added lines and reports a name that leaves the public surface, so a same-name signature/value edit is never flagged. Deterministic, conservative, and fail-safe, bounded by entrypoint and finding caps. Wires the descriptor, BriefFindings type, render section, canonical name registry, and regenerated analyzer metadata; adds unit tests covering entrypoint detection, export-name extraction, removal/rename/ edit diffing, the caps, abort, and render. Closes JSONbored#1510
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Warning 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏸️ Gittensory review result - manual review recommendedReview updated: 2026-07-05 19:59:34 UTC
⏸️ Suggested Action - Manual Review Review summary Nits — 6 non-blocking
Review context
Contributor next steps
Signal definitions
🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3619 +/- ##
=======================================
Coverage 93.19% 93.19%
=======================================
Files 313 313
Lines 31874 31874
Branches 11666 11666
=======================================
Hits 29705 29705
Misses 1517 1517
Partials 652 652
🚀 New features to boost your workflow:
|
Summary
Adds
apiBreak, a local (no-network) REES analyzer that flags an exported symbol a PR removes or renames in a package's public entrypoint (index/mod/main/public-apibarrels) — a semver-major break that reaches downstream consumers, shipped without a major version bump. Closes #1510.The no-checkout headless reviewer only sees the diff, so it cannot tell that a barrel dropped a name it used to export. This fills that gap purely from the patch: for each changed public-entrypoint file it collects the exported names on removed (
-) lines and on added (+) lines, and reports a name present in the removed set but absent from the added set.Files
review-enrichment/src/analyzers/api-break.ts— the analyzer (pure diff parsing).review-enrichment/src/analyzers/registry.ts,src/types.ts,src/render.ts— descriptor,ApiBreakFinding/BriefFindingskey, and the public-safe render section.src/review/enrichment-analyzer-names.ts+review-enrichment/test/analyzer-registry.test.ts— canonical name registry entry.review-enrichment/analyzer-metadata.json,apps/gittensory-ui/src/lib/rees-analyzers.ts,.env.example— regenerated vianpm run rees:metadata.review-enrichment/test/api-break.test.ts— units for entrypoint detection, export-name extraction (declarations,export default, aliased/typere-exports,export * as, bareexport *), removal / rename / same-name-edit diffing, the caps, the abort path, and the descriptor render.Validation
npm run rees:test— build +metadata:check+ sourcemaps + 1106 node tests pass (incl. the newapiBreakunits).npm run typecheck,npm run ui:typecheck,npm run ui:test(64),npm run ui:lint(0 errors),selfhost:env-reference:check,command-reference:check,docs:drift-check— all clean.git diff --checkclean. No new dependencies. Clean offmain, outside the engine tsc/vitest scope.