Skip to content

Commit 08158e9

Browse files
bloveclaude
andauthored
test(website): guard the mechanical MDX authoring rules the audit fixed by hand (#1061)
* fix(website): read a frontmatter description that contains an apostrophe The description value pattern excluded every quote character, so any `description:` holding a possessive never matched. Nine docs pages declared a description and silently shipped the first-paragraph fallback instead. Capture the value whole and strip only a matched pair of surrounding quotes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * refactor(website): delete the Card icon prop, which had no icon lookup `Card` rendered `{icon}` straight into a div, so `icon="rocket"` printed the word "rocket" above the title. Nothing looked the value up. Remove the prop, its `.mdx-card-icon` rule, and the four glyph icons the two interrupt blog posts passed; the cards keep their title and arrow. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * docs: keep every meta description inside the clamp Nine descriptions ran past META_DESCRIPTION_MAX and were truncated mid-sentence by clampMetaDescription(). Trim each to say the same thing in under 160 characters. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(website): guard the four mechanical MDX authoring rules The accuracy audit fixed roughly 160 wrong claims by hand; several of the defect classes render fine and return silently. Walk `content/**` and fail with the offending `path:line` when a page: - passes an `icon` prop to `Card`, which does not accept one; - (docs only) declares no frontmatter `description`, or one long enough that `clampMetaDescription()` truncates it; - gives `Callout` a `type` outside the union, read out of Callout.tsx so the guard cannot drift from the component; - (docs only) uses a contraction. The patterns match no possessive, and the `## What's Next` heading is exempt structurally, not by file list. Each detector also has a unit test over synthetic content, so a rule that stops firing fails rather than passing vacuously. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent 2cba7b4 commit 08158e9

16 files changed

Lines changed: 365 additions & 23 deletions

apps/website/content/blog/2026-05-28-human-in-the-loop-langgraph-agents-in-angular.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ Clone the repo, run `nx serve cockpit-langgraph-interrupts-angular`, and follow
1616

1717
<div style={{ marginTop: 40, marginBottom: 44 }}>
1818
<CardGroup cols={2}>
19-
<Card title="Run the live demo" icon="" href="/docs/langgraph/guides/interrupts?mode=run">
19+
<Card title="Run the live demo" href="/docs/langgraph/guides/interrupts?mode=run">
2020
The refund agent running in the docs workspace. Walk the approve / edit / cancel flow yourself.
2121
</Card>
22-
<Card title="View the source" icon="" external href="https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/langgraph/interrupts">
22+
<Card title="View the source" external href="https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/langgraph/interrupts">
2323
The exact graph.py and Angular component from this post.
2424
</Card>
2525
</CardGroup>

apps/website/content/blog/2026-06-04-human-in-the-loop-ag-ui-agents-in-angular.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ Clone the repo, run `nx serve cockpit-ag-ui-interrupts-angular`, and follow alon
1616

1717
<div style={{ marginTop: 40, marginBottom: 44 }}>
1818
<CardGroup cols={2}>
19-
<Card title="Run the live demo" icon="" href="/docs/ag-ui/guides/interrupts?mode=run">
19+
<Card title="Run the live demo" href="/docs/ag-ui/guides/interrupts?mode=run">
2020
The refund agent running in the docs workspace. Walk the approve / edit / cancel flow yourself.
2121
</Card>
22-
<Card title="View the source" icon="" external href="https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/ag-ui/interrupts">
22+
<Card title="View the source" external href="https://github.com/cacheplane/angular-agent-framework/tree/main/cockpit/ag-ui/interrupts">
2323
The exact graph.py, server.py, and Angular component from this post.
2424
</Card>
2525
</CardGroup>

apps/website/content/docs/ag-ui/guides/testing.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: Test AG-UI components with provideFakeAgent() and its event script, the neutral mockAgent(), or a hand-written AbstractAgent, and know which double covers which surface.
2+
description: Test AG-UI components with provideFakeAgent() and its event script, the neutral mockAgent(), or a hand-written AbstractAgent, and which double fits where.
33
---
44

55
# Testing

apps/website/content/docs/chat/guides/error-handling.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: The structured AgentError on the agent error signal — its failure kinds, the retryable flag, the built-in chat-error UI, and classifying failures in a custom adapter.
2+
description: The structured AgentError on the agent error signal — its failure kinds, the retryable flag, the built-in chat-error UI, and classifying failures.
33
---
44

55
# Error Handling

apps/website/content/docs/chat/guides/lifecycle.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: The CHAT_LIFECYCLE token exposes per-instance signals for readiness, first submit, submit count and last submit timeand where in the injector tree they are reachable.
2+
description: The CHAT_LIFECYCLE token exposes per-instance signals for readiness, first submit, submit count and last submit time, and where they are reachable.
33
---
44

55
# Chat Lifecycle Signals

apps/website/content/docs/chat/guides/theming.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: How the theming example swaps --tplane-chat-* custom properties at runtime, where the token defaults come from, and how to override them in your own application.
2+
description: How the theming example swaps --tplane-chat-* custom properties at runtime, where the token defaults come from, and how to override them in your app.
33
---
44

55
# Theming

apps/website/content/docs/chat/guides/writing-an-adapter.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: Implement the runtime-neutral Agent contract for a custom backend — the required fields, a working in-process example, the conformance suite, and publishing notes.
2+
description: Implement the runtime-neutral Agent contract for a custom backend — the required fields, a working in-process example, and the conformance suite.
33
---
44

55
# Writing an Adapter

apps/website/content/docs/langgraph/concepts/agent-contract.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: The runtime-neutral Agent contract from @threadplane/chat — its state signals, actions, optional capabilities, and how the LangGraph and AG-UI adapters satisfy it
2+
description: The runtime-neutral Agent contract from @threadplane/chat — its state signals, actions, optional capabilities, and how the adapters satisfy it.
33
---
44

55
# Agent Contract

apps/website/content/docs/langgraph/guides/subgraphs.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: How the subgraphs example routes a turn into a compiled child graph, keeps the child's state and tokens out of the transcript, and surfaces the child as a stream
2+
description: How the subgraphs example routes a turn into a compiled child graph, keeps the child's state and tokens out of the transcript, and streams the child.
33
---
44

55
# Subgraphs

apps/website/content/docs/langgraph/guides/time-travel.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
description: How the time travel example checkpoints every turn, lists the checkpoints in a timeline sidebar, and selects or forks from one, plus the history signals and the branch tree
2+
description: How the time travel example checkpoints every turn, lists them in a timeline sidebar, and forks from one, plus the history signals and the branch tree.
33
---
44

55
# Time Travel

0 commit comments

Comments
 (0)