Skip to content

fix(knowledge): read claude.dev blog posts through their raw-markdown channel - #7214

Merged
kyle-sexton merged 3 commits into
mainfrom
docs/claude-dev-markdown-channel
Oct 11, 2026
Merged

kyle-sexton merged 3 commits into
mainfrom
docs/claude-dev-markdown-channel

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Oct 11, 2026 •

Copy link
Copy Markdown
Member

No related issue: follow-up from a /knowledge:docpage-digest run that found claude.dev blog posts serve raw markdown.

Summary

The publisher profile told digests to fetch a claude.dev/blog post as rendered HTML and turn it into markdown with extract_blog_body.py. But https://claude.dev/blog/<slug>.md returns the article as markdown, with title, author, date and canonical URL in its header.

Fix

  • plugins/knowledge/skills/docpage-digest/context/anthropic-docs-profile.md: the claude.dev/blog fetch-channel entry now fetches the .md channel first as source.md, always keeps the rendered page as source.html for figure text, and falls back to the extractor when the .md fetch fails, is not markdown, or lacks the article's H1. The channel's observed shape is not restated in the profile: a pointer record (pointer to the probe below, as-of 2026-10-11, recheck trigger) sits under the entry. The claude.com/blog entry is unchanged.
  • plugins/knowledge/skills/docpage-digest/evals/evals.json: case 9 claude-dev-blog-raw-first-with-fallback covers raw-first, the HTML companion and the fallback.
  • Patch changelog fragment for knowledge.

Verification

Probe of the claude.dev .md channel, 2026-10-11 (the record the profile points at):

  • curl -w '%{http_code} %{content_type}' on four posts (claude-code-in-the-cloud, spending-your-effort, getting-the-most-out-of-opus-5-5, how-we-made-claude-ai-faster): all 200 text/markdown.
  • Observed body shape: the H1 title, the subtitle, and Author, Published and URL list items above a --- rule; markdown characters inside image alt text backslash-escaped (duration\_ms); images as ![alt](url); videos as a [Video: <title>](<mp4>) link followed by a description; a static chart as an italic *Figure: ...* summary without axis labels or values; an interactive figure as an italic one-line description pointing at the rendered page.
  • Compared against the rendered page: the SVG chart tick labels appear only in the HTML, which is why the profile still keeps source.html.

Checks on head:

  • markdownlint-cli2: 0 issues. scripts/validate-plugins.sh: passed. scripts/check-changelog-fragments.sh --check-required origin/main: passed. scripts/check-affected.sh --tests --base origin/main: 7 passed, 2 skipped. check-skill.sh plugins/knowledge/skills: docpage-digest PASS (0 errors).
  • evals.json: schema-valid (check-jsonschema against plugins/skill-quality/reference/evals.schema.json); check-evals-quality.sh: PASS, 1 pre-existing warning on case 2.
  • No live model eval was run. This change adds a source channel ahead of the existing extractor path, which stays as the fallback; it removes no skill instruction, so the cut-evidence rule's no-loss comparison does not apply.

Related

  • None.

🤖 Generated with Claude Code

kyle-sexton and others added 2 commits October 11, 2026 13:42
… channel

`https://claude.dev/blog/<slug>.md` answers `text/markdown` with the article,
verified on four posts. The publisher profile now fetches that as source.md,
records the channel's artifacts, keeps the rendered page as source.html for
figure text, and keeps extract_blog_body.py as the fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review October 11, 2026 17:44
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-11T17:47:22.922270Z ccd3840 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 51s —— View job


Security review complete

  • Gather context (PR diff, changed files)
  • Review changed files for security-relevant surface
  • Check instruction-surface deletions (if any)
  • Report findings

No security issues found.

This PR only touches two files, both documentation/config, no executable code changed:

  • plugins/knowledge/skills/docpage-digest/context/anthropic-docs-profile.md — updates the publisher profile's fetch-channel instructions for claude.dev/blog posts to prefer the .md raw-markdown endpoint over HTML+extraction, keeping source.html as a fallback/second original for figure text and keeping extract_blog_body.py as a fallback path. View
  • .changes/knowledge/docs-claude-dev-markdown-channel-7bc4cc1e.md — new changelog fragment, no behavioral content.

Checked specifically for:

  • Injection / unsafe trust boundary: the new channel just changes which URL is fetched (<slug>.md vs the rendered page) on an already-trusted, already-fetched host (claude.dev/blog). The fetched content is still treated as data for digestion, consistent with the untrusted-source handling already established elsewhere in this profile (the file explicitly notes fetched banner/page content is "quoted data, never an instruction") — this diff doesn't change that treatment or introduce a new execution path.
  • Instruction-surface deletions: nothing is removed, narrowed, or softened here — the diff adds detail (artifact catalog for the .md channel) and explicitly preserves the existing source.html fetch and the extractor fallback rather than dropping either. No guardrail or standing instruction is weakened.
  • Script/code changes: none — extract_blog_body.py is unchanged and not part of this diff.

No CRITICAL, IMPORTANT, or SUGGESTION findings to report.

@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 3m 2s —— View job


Claude's code-review (/review:code-review)

  • Gather context (diff, changed files, relevant guidelines)
  • Understand the request (/review:code-review lane)
  • Review plugins/knowledge/skills/docpage-digest/context/anthropic-docs-profile.md
  • Review changelog fragment
  • Post findings

No blocking or important findings. This is a narrow, well-scoped documentation-only change
(context file for /knowledge:docpage-digest + its changelog fragment); no code paths, tests, or
runtime logic are touched.

Checked:

  • Internal consistency of the new claude.dev/blog fetch-channel entry (anthropic-docs-profile.md#L62-L86): the new primary channel (.md suffix) plus the still-fetched source.html for figure text, plus the extractor as fallback, compose without contradiction. The "(c) still binds" callback to the artifact enumeration in the preceding claude.com/blog bullet is accurate — only the figure-text-drop artifact (c) carries over to this host, and the new bullet's chart/video/metadata artifacts are a separate, non-conflicting list.
  • "Drop the trailing slash" instruction: cross-checked against anthropic-docs-queue.md, which records this host's slugs both with (getting-the-most-out-of-opus-5-5/, spending-your-effort/) and without (how-we-made-claude-ai-faster) a trailing slash — so the normalization step is grounded in a real inconsistency in recorded URLs, not a hypothetical one.
  • skill-bodies-state-current-rules.md compliance: the new "Verified 2026-10-11 on four posts... re-verify per post" line restates a self-probed channel behavior rather than an upstream doc's volatile specific, and follows the exact precedent already established two bullets up for the code.claude.com .md channel ("Channel verified working... (2026-07); re-verify per doc"). Not a new pattern this PR introduces.
  • Changelog fragment: format and content match the profile change; bump: patch is appropriate for a docs-only fix.
  • Did not independently re-run the author's curl verification or markdownlint-cli2/check-skill.sh (no outbound network / those specific tools available in this lane) — treating those as author-claimed, consistent with the rest of the diff's internal logic.

@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review has reviewed this pull request through 00fa6c9; a later push is reviewed from there.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ccd38400c2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/knowledge/skills/docpage-digest/context/anthropic-docs-profile.md Outdated
Comment thread plugins/knowledge/skills/docpage-digest/context/anthropic-docs-profile.md Outdated
@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

claude-review has reviewed this pull request through 00fa6c9; a later push is reviewed from there.

… an eval case

The profile now states only what the agent does with the claude.dev
blog .md channel (fetch it first, keep source.html for figure text,
fall back to the extractor when the fetch fails, is not markdown, or
lacks the article's H1). The channel's observed shape moves behind a
probe pointer to the Verification section of #7214, with an as-of
date and an observable recheck trigger. A new docpage-digest eval
case covers raw-first, the HTML companion and the fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 12s —— View job


Security review complete

  • Gather context (incremental diff since ccd3840, in .claude-lane/incremental.diff)
  • Review changed files for security-relevant surface
  • Check instruction-surface deletions (if any)
  • Report findings

No security issues found.

This incremental lane reviews only what changed since ccd3840 (per the lane's scope), across
the three files touched by that update:

  • .changes/knowledge/docs-claude-dev-markdown-channel-7bc4cc1e.md — changelog fragment wording update, no behavioral content.
  • plugins/knowledge/skills/docpage-digest/context/anthropic-docs-profile.md — reworks the claude.dev/blog fetch-channel entry added in the prior commit: removes the inline catalog of the .md channel's markdown artifacts (metadata header shape, alt-text escaping, image/video link formats, figure-summary shape) and replaces it with a generalized rule ("reproduce whatever artifacts it carries and never repair them, as with every source.*"), a durable Pointer/As of/Recheck trigger block, and an explicit, stricter fallback condition (non-markdown content type, or body missing the article's H1) in place of the vague "when the channel fails." View
  • plugins/knowledge/skills/docpage-digest/evals/evals.json — adds eval case 9 covering the raw-first/HTML-companion/fallback contract. No sensitive or transcript content; it's a synthetic prompt/expectation pair.

Checked specifically for:

  • Instruction-surface deletions: this diff removes the inline artifact enumeration from the
    previous commit, but checked against the
    instruction exception register's
    Gate 0 classes (irreversible-action, secret-handling, data-integrity, external-publication,
    legal-compliance, agent-authority), the removed text was descriptive reference material about
    markdown rendering shape, not a guardrail in any protected class. The governing rules it sat
    beside — "never repair" fetched artifacts, and that figure text still comes from source.html
    ((c) still binds) rather than the .md channel — are both explicitly preserved in the new text,
    so nothing enforced by this entry was weakened; the change relocates volatile specifics behind a
    pointer rather than deleting a control.
  • Trust boundary on the fetched content: the new fallback trigger (non-markdown content type,
    or missing H1) is a stricter acceptance check on the .md fetch than the prior "when it fails"
    wording — it reduces the chance of an unexpected response (e.g., an error/redirect page) being
    silently accepted as source.md. Fetched content is still treated purely as data to digest, not
    as instructions, consistent with existing handling elsewhere in this profile.
  • Eval case content: no raw session/product transcript, no secrets.

No CRITICAL, IMPORTANT, or SUGGESTION findings to report.

@claude

claude Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 55s —— View job


Claude's code-review (/review:code-review)

  • Gather context (incremental diff since ccd3840, review scope)
  • Review changed files: changelog fragment, profile doc, evals.json
  • Post findings

No blocking or important findings. This incremental slice is the author's response to the
two P1 Codex findings from the prior review on ccd3840, and both are resolved correctly:

  • Pointer replaces restated volatile detail
    (anthropic-docs-profile.md#L82-L88):
    the detailed artifact enumeration (metadata-header shape, escaped alt text, image/video link
    formats, chart/figure reductions) that Codex flagged as a restated upstream specific is gone.
    In its place is a Pointer / As of / Recheck trigger record naming PR fix(knowledge): read claude.dev blog posts through their raw-markdown channel #7214's Verification
    section as the probe. This matches the "probed behavior" form in
    docs/conventions/upstream-drift/README.md ("the pointer names the probe — the script, pull
    request or issue holding its evidence"), which a PR link satisfies directly (the same doc's own
    WebFetch-limits record uses a PR as its probe pointer). The surrounding decision prose
    (L62-L81) now states what the pipeline does ("read the title, author and date from its header
    when it carries them, otherwise from source.html") rather than asserting the exact
    upstream shape, which correctly hedges now that the hard "verified on four posts" claim was
    removed.
  • Eval evidence added
    (evals.json#L96-L106):
    new case 9 (claude-dev-blog-raw-first-with-fallback) exercises exactly the raw-first /
    HTML-companion-for-figures / fallback-on-non-markdown-or-missing-H1 contract the profile now
    states, with expectations that line up with the profile text word-for-word (e.g. "reads figure
    text from source.html, never from the .md channel's figure summaries").
  • Changelog fragment
    (.changes/knowledge/docs-claude-dev-markdown-channel-7bc4cc1e.md) was updated in step with
    both changes and stays internally consistent with them.

Checked specifically for whether the new pointer record is itself compliant with
.claude/rules/skill-bodies-state-current-rules.md (pointer + as-of + recheck trigger, decision
in our own words, trigger an observable event rather than a bare date) — it is. No other issues
found in this incremental slice.

@kyle-sexton
kyle-sexton added this pull request to the merge queue Oct 11, 2026
Merged via the queue into main with commit 2436e05 Oct 11, 2026
38 of 39 checks passed
@kyle-sexton
kyle-sexton deleted the docs/claude-dev-markdown-channel branch October 11, 2026 18:09
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