angular/angular

alint catches 6 license-header drifts including a UTF-8 BOM byte that no other tool in angular's pipeline looks at — and 5 packages without API goldens that pnpm public-api:check silently no-ops on.

Narrative
Adds a structural floor on top of mature tooling
Rules
131
Last revalidated
Engineering reference
README on GitHub · .alint.yml

Why this case study matters

Angular is one of the most-watched JavaScript framework repos on GitHub (~95k stars, ~25k forks) — a TypeScript mega-repo (~3M LoC across 16 published @angular/* packages) wired through a Bazel workspace and orchestrated by a bespoke in-house CLI (@angular/ng-dev). It’s a distinct shape from microsoft/typescript (which IS the TS compiler) and from vercel/next.js (a hybrid pnpm+Cargo dual-workspace). angular sits in the active TS-monorepo + Bazel segment that no per-language linter catches end-to-end.

For adopters in enterprise TS-monorepos using Bazel (Google’s internal Angular build, Salesforce’s Lightning Web Runtime, etc.) the same shape is replicated — and the same gaps. A repo this disciplined, with this much custom in-house tooling, is exactly the kind of place where alint is the layer that sees the cross-language API parity contract that no per-language linter does.

Headline catch

6 source files with non-canonical @license header — including packages/core/src/defer/interfaces.ts with a leading UTF-8 BOM byte that prettier doesn’t catch and tslint doesn’t see. Plus 5 packages without an index.api.md golden that pnpm public-api:check silently no-ops on (the existing tool only diffs against goldens that already exist; a missing golden is a free pass). Plus 2 packages with non-canonical version field (zone.js at 0.16.1, benchpress at 0.4.0-PLACEHOLDER — the latter won’t substitute correctly during release).

These are drifts no existing tool in angular’s pipeline catches: tslint sees source semantics, prettier sees formatting, pnpm public-api:check only diffs goldens that exist. alint sits exactly in the gap.

Where alint earns its keep here

Future story angles

The factual engineering writeup (tooling inventory, mapping table, gap catalogue, validation status footer) lives in the public alint repo at github.com/asamarts/alint/tree/main/examples/angular-angular/README.md.