Skip to content

docs: align the public package surface to the Angular AI agent UI category, and gate it - #1001

Merged
blove merged 6 commits into
mainfrom
blove/public-surface-category
Sep 5, 2026
Merged

docs: align the public package surface to the Angular AI agent UI category, and gate it#1001
blove merged 6 commits into
mainfrom
blove/public-surface-category

Conversation

@blove

@blove blove commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Two related changes: bring the README and npm pages into the category the homepage now leads with, and close the gate that let banned copy reach those surfaces in the first place.

The package surface said something different from the site

For many developers the npm page is first contact and the install surface, and it still carried the older positioning. The README, the seven published libs/*/package.json descriptions and their READMEs now lead with the same category, install commands copied verbatim from the website's INSTALL_OPTIONS, and a first success that starts with provideFakeAgent().

Three things were wrong rather than merely stale, and are fixed:

  • The telemetry package description would never have shipped. Its dist assembler uses a field allowlist that did not include description, so the field was authored and silently dropped at publish. Confirmed by building and reading the emitted manifest.
  • Install-command drift. The LangGraph README omitted a required peer and both adapter READMEs listed packages in an order that no longer matched the website.
  • A stale version claim of 0.0.47 against actual 0.0.65, and an unsourced "in days" promise. Both removed rather than restated.

Every factual claim was verified against a manifest before it was written: license, Angular peer range, package names, peer lists. Claims that could not be sourced were deleted, including an absolute "never collects" that nothing keeps true.

The gate that should have caught this

libs/telemetry/README.md was tripping three patterns in the repo's own public-copy contract, including "Installation is inert". Those files are the npm package pages, so the phrases were live. Nothing looked at them: the unit scan read only apps/website/content/**, markdown is not linted, and the licensing check covers different vocabulary in two files.

The scan now covers apps/website/src/** and every README.

Source files get a real TypeScript parse, not a byte scan. Only text that can reach a visitor is compared: string literals, static template chunks, JSX text. Identifiers, comments and regex literals are skipped by construction. That is forced by the tree rather than chosen for elegance — a byte scan goes red today on two components that deliberately name the retired claim in a comment so nobody reintroduces it. Flag those and someone adds a suppression within a month and the gate is dead. Parsing means the exclusion list is two rules and there is no allowlist at all.

READMEs get a plain line scan, the same treatment content/** already gets, including fenced code.

Proving it is not vacuous

The historical regression was reconstructed in the real component: the shipped FAQ answer with "Installation is inert" and a link to the retired route. Both assertions go red on the exact lines. The same was done in a README, where all three README patterns plus the retired route fire. Both reverted and verified byte-identical afterwards.

Because a gate like this decays by being narrowed, six fixture tests pin the historical answer and the extractor's behaviour, and three walk-level guards assert the scan is not looking at an empty tree: file counts, fragment counts by kind, and specific files that must be present. The spec states in its own comment what it catches and, at length, what it still cannot — substituted strings, copy from outside the tree, alt text, package.json descriptions. The preview crawl remains the backstop.

Zero violations on the current tree, and no copy was weakened to get there.

Verification

Website suite green, 1132 tests; 0 lint errors across website and the four published libs; the release and Angular-support scripts pass. The scan adds about 1 second to a 90 second suite, memoized to a single parse pass.

Not changed, for you to confirm

The GitHub repo description still reads "Angular SDK for Building Agentic Apps + Generative UI". Suggested: The AI agent UI framework for Angular — chat, durable threads, human approvals, and generative UI for LangGraph and AG-UI. plus topics langgraph, ag-ui, signals, generative-ui. Left alone as an outward-facing account setting.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
threadplane Ready Ready Preview Sep 5, 2026 6:08am UTC

Request Review

@blove
blove enabled auto-merge (squash) September 4, 2026 21:55

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: this PR received an intelligent (AI) code review. See the review comments on this PR.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

blove and others added 3 commits September 4, 2026 16:00
…nt UI category

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The unit gate read `apps/website/content/**` only, so every word a component
renders and every line of the published package READMEs was invisible to it.
Both gaps have already shipped violations: the homepage FAQ asserted
"Installation is inert" and linked `/docs/telemetry/guides/browser`, and
`libs/telemetry/README.md` carried three barred claims live on npm.

`src/**` is scanned through the TypeScript parser rather than as bytes, so only
string literals, static template chunks and JSX text are compared. Comments and
regex literals — which is how this repository legitimately discusses the barred
phrases — are skipped by construction, not by an ignore list, which keeps the
exclusions down to the contract module and `*.spec.*`. The READMEs are prose and
get the same plain line scan `content/**` gets.

Fixtures reconstruct the shipped FAQ answer so the gate stays provably
non-vacuous, and the spec states what it catches and what only the e2e crawl
can. Adds ~1s to the suite.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…te comment

scripts/mit-cutover.spec.mjs bans that vocabulary anywhere under
apps/website/src, so a comment explaining that the two gates do not overlap
named the banned words and turned it red. That spec assembles its own list with
.join('') for exactly this reason; the comment now says so and points at the
list instead of repeating it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@blove
blove force-pushed the blove/public-surface-category branch from 17d9305 to 1bc37b3 Compare September 4, 2026 23:00
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove merged commit 3d70e42 into main Sep 5, 2026
77 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