This report summarizes scanner evidence for JimLiu/baoyu-skills, a TypeScript project with 26,525 GitHub stars. SynthScan examined 103,889 lines of code across 683 source files, recording 322 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 4.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 306 finding(s).
Are imports declared and package/API names verified? 16 finding(s).
Are wrappers, guards, and repeated structures necessary? 177 finding(s).
Which changes need focused human review? 322 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 322 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/skills/release-skills/SKILL.md | 46 | ### Step 1: Detect Project Configuration | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 118 | ### Step 2: Analyze Changes Since Last Tag | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 146 | ### Step 3: Determine Version Bump | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 156 | ### Step 4: Generate Multi-language Changelogs | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 246 | ### Step 5: Group Changes by Skill/Module | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 272 | ### Step 6: Commit Each Skill/Module Separately | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 311 | ### Step 7: Generate Changelog and Update Version | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 337 | ### Step 8: User Confirmation | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 374 | ### Step 9: Create Release Commit and Annotated Tag | COMMENT |
| LOW | .claude/skills/release-skills/SKILL.md | 403 | ### Step 10: Publish Release Artifacts and GitHub Release | COMMENT |
| LOW | skills/baoyu-xhs-images/SKILL.md | 310 | ### Step 0: Load EXTEND.md ⛔ BLOCKING | COMMENT |
| LOW | skills/baoyu-xhs-images/SKILL.md | 326 | ### Step 1: Analyze Content → `analysis.md` | COMMENT |
| LOW | skills/baoyu-xhs-images/SKILL.md | 334 | ### Step 2: Smart Confirm ⚠️ REQUIRED | COMMENT |
| LOW | skills/baoyu-xhs-images/SKILL.md | 367 | ### Step 3: Generate Images | COMMENT |
| LOW | skills/baoyu-xhs-images/SKILL.md | 396 | ### Step 4: Completion Report | COMMENT |
| LOW | …oyu-xhs-images/references/workflows/prompt-assembly.md | 191 | ### Step 0: Resolve Style Preset (if `--preset` used) | COMMENT |
| LOW | …oyu-xhs-images/references/workflows/prompt-assembly.md | 202 | ### Step 1: Load Style Definition | COMMENT |
| LOW | …oyu-xhs-images/references/workflows/prompt-assembly.md | 226 | ### Step 2: Load Layout | COMMENT |
| LOW⚡ | …oyu-xhs-images/references/workflows/prompt-assembly.md | 238 | ### Step 3: Format Content | COMMENT |
| LOW⚡ | …oyu-xhs-images/references/workflows/prompt-assembly.md | 246 | ### Step 4: Add Watermark (if applicable) | COMMENT |
| LOW⚡ | …oyu-xhs-images/references/workflows/prompt-assembly.md | 251 | ### Step 5: Visual Consistency — Reference Image Chain | COMMENT |
| LOW⚡ | …oyu-xhs-images/references/workflows/prompt-assembly.md | 261 | ### Step 6: Combine | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 122 | // Step 1: Find and click "写文章" button | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 161 | // Step 2: Fill title | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 217 | // Step 3: Fill summary (导语) | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 271 | // Step 4: Insert HTML content into ProseMirror editor | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 385 | // Step 5: Insert content images | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 706 | // Step 6: Set cover image | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 212 | ### Step 1: Setup & Analyze | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 245 | ### Step 2: Generate Structured Content → `structured-content.md` | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 257 | ### Step 3: Recommend Combinations | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 267 | ### Step 4: Confirm Options | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 280 | ### Step 5: Generate Prompt → `prompts/infographic.md` | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 295 | ### Step 6: Generate Image | COMMENT |
| LOW | skills/baoyu-infographic/SKILL.md | 311 | ### Step 7: Output Summary | COMMENT |
| LOW | skills/baoyu-cover-image/SKILL.md | 152 | ### Step 0: Load Preferences ⛔ BLOCKING | COMMENT |
| LOW | skills/baoyu-cover-image/SKILL.md | 169 | ### Step 1: Analyze Content | COMMENT |
| LOW | skills/baoyu-cover-image/SKILL.md | 187 | ### Step 2: Confirm Options ⚠️ | COMMENT |
| LOW | skills/baoyu-cover-image/SKILL.md | 200 | ### Step 3: Create Prompt | COMMENT |
| LOW | skills/baoyu-cover-image/SKILL.md | 211 | ### Step 4: Generate Image | COMMENT |
| LOW | skills/baoyu-cover-image/SKILL.md | 224 | ### Step 5: Completion Report | COMMENT |
| LOW | …oyu-cover-image/references/workflow/confirm-options.md | 1 | # Step 2: Confirm Options | COMMENT |
| LOW | …oyu-cover-image/references/workflow/prompt-template.md | 1 | # Step 3: Prompt Template | COMMENT |
| LOW | …oyu-cover-image/references/workflow/prompt-template.md | 177 | ### Step 1: Analyze References | COMMENT |
| LOW | …oyu-cover-image/references/workflow/prompt-template.md | 185 | ### Step 2: Embed in Prompt ⚠️ CRITICAL | COMMENT |
| LOW | skills/baoyu-wechat-summary/SKILL.md | 104 | ### Step 1: Parse the user's request | COMMENT |
| LOW | skills/baoyu-wechat-summary/SKILL.md | 125 | ### Step 2: Find the group + resolve folder path | COMMENT |
| LOW | skills/baoyu-wechat-summary/SKILL.md | 157 | ### Step 3: Fetch messages | COMMENT |
| LOW | skills/baoyu-wechat-summary/SKILL.md | 369 | ### Step 7: Save the digest file(s) | COMMENT |
| LOW | skills/baoyu-wechat-summary/SKILL.md | 383 | ### Step 8: Save history (two files) | COMMENT |
| LOW | skills/baoyu-wechat-summary/SKILL.md | 457 | ### Step 9: Backfill (user-triggered) | COMMENT |
| LOW | skills/baoyu-post-to-wechat/SKILL.md | 140 | ### Step 0: Load Preferences | COMMENT |
| LOW | skills/baoyu-post-to-wechat/SKILL.md | 144 | ### Step 1: Determine Input Type | COMMENT |
| LOW | skills/baoyu-post-to-wechat/SKILL.md | 158 | ### Step 2: Select Publishing Method and Configure | COMMENT |
| LOW | skills/baoyu-post-to-wechat/SKILL.md | 172 | ### Step 3: Resolve Theme/Color and Validate Metadata | COMMENT |
| LOW | skills/baoyu-post-to-wechat/SKILL.md | 189 | ### Step 4: Publish | COMMENT |
| LOW | skills/baoyu-post-to-wechat/SKILL.md | 225 | ### Step 5: Completion Report | COMMENT |
| LOW | skills/baoyu-format-markdown/SKILL.md | 67 | ### Step 1: Read & Detect Content Type | COMMENT |
| LOW | skills/baoyu-format-markdown/SKILL.md | 103 | ### Step 2: Analyze Content (Reader's Perspective) | COMMENT |
| LOW | skills/baoyu-format-markdown/SKILL.md | 156 | ### Step 3: Check/Create Frontmatter, Title & Summary | COMMENT |
| 57 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/baoyu-chrome-cdp/src/index.ts | 137 | export function resolveSharedChromeProfileDir(options: ResolveSharedChromeProfileDirOptions = {}): string { | CODE |
| LOW | packages/baoyu-chrome-cdp/src/index.ts | 211 | export async function findExistingChromeDebugPort(options: FindExistingChromeDebugPortOptions): Promise<number | null> { | CODE |
| LOW | packages/baoyu-chrome-cdp/src/index.ts | 237 | export function getDefaultChromeUserDataDirs(channels: ChromeChannel[] = ["stable"]): string[] { | CODE |
| LOW | packages/baoyu-chrome-cdp/src/index.ts | 277 | export async function discoverRunningChromeDebugPort(options: DiscoverRunningChromeOptions = {}): Promise<DiscoveredChro | CODE |
| LOW | packages/baoyu-fetch/src/adapters/youtube/utils.ts | 123 | export function parseYouTubeDescriptionChapters(description?: string | null): YouTubeChapter[] { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/youtube/utils.ts | 169 | function renderDescriptionMarkdown(description: string): string { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/youtube/utils.ts | 183 | export function renderYouTubeTranscriptMarkdown({ | CODE |
| LOW | packages/baoyu-fetch/src/adapters/youtube/utils.ts | 238 | export function buildYouTubeThumbnailCandidates(videoId: string, listedUrls: string[]): string[] { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/youtube/transcript.ts | 101 | export async function extractYouTubeTranscriptDocument( | CODE |
| LOW | packages/baoyu-fetch/src/adapters/hn/index.ts | 239 | function extractUnixSecondsFromAge(element: Element | null): number | undefined { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/article.ts | 407 | export function extractArticleDocumentFromPayload( | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/payloads.ts | 4 | export function getRelevantXThreadEntries(context: AdapterContext) { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/payloads.ts | 17 | export async function prefetchRelevantXThreadBodies(context: AdapterContext): Promise<void> { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/shared.ts | 259 | function getVideoVariantContentType(variant: JsonObject): string { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/shared.ts | 264 | export function resolveBestXVideoVariantUrl(mediaInfo: unknown): string | undefined { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/session.ts | 28 | export function hasRequiredXSessionCookies(cookieMap: Record<string, string>): boolean { | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/single.ts | 4 | export function extractSingleTweetDocumentFromPayload( | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/index.ts | 24 | function extractDocumentFromPayloads( | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/thread.ts | 64 | function collectTweetFromItemContent( | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/thread.ts | 232 | export function extractThreadTweetsFromPayloads( | CODE |
| LOW | packages/baoyu-fetch/src/adapters/x/thread.ts | 285 | export function extractThreadDocumentFromPayloads( | CODE |
| LOW | packages/baoyu-fetch/src/browser/page-snapshot.ts | 101 | export async function captureNormalizedPageSnapshot( | CODE |
| LOW | packages/baoyu-fetch/src/browser/interaction-gates.ts | 16 | export function detectInteractionGateFromSnapshot(snapshot: GateSnapshot): WaitForInteractionRequest | null { | CODE |
| LOW | packages/baoyu-fetch/src/browser/profile.ts | 34 | export function resolveSharedChromeProfileDir( | CODE |
| LOW | packages/baoyu-fetch/src/browser/profile.ts | 70 | export function shouldRetryChromeLaunchRecovery(options: { | CODE |
| LOW | packages/baoyu-fetch/src/browser/profile.ts | 77 | export function findChromeProcessUsingProfile(profileDir: string): boolean { | CODE |
| LOW | packages/baoyu-fetch/src/browser/profile.ts | 163 | export async function findExistingChromeDebugPort( | CODE |
| LOW | packages/baoyu-fetch/src/commands/convert.ts | 87 | export function shouldKeepBrowserOpenAfterInteraction(options: { | CODE |
| LOW | packages/baoyu-fetch/src/commands/convert.ts | 94 | export function shouldAutoContinueForceWait( | CODE |
| LOW | packages/baoyu-fetch/src/commands/convert.ts | 194 | async function isInteractionSessionReady( | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 147 | export function extractTitleFromMarkdownDocument(markdown: string): string | undefined { | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 476 | function shouldCompareWithFallback(markdown: string): boolean { | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 481 | function hasMeaningfulMarkdownStructure(markdown: string): boolean { | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 496 | function shouldTryRemoteMarkdownFallback( | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 508 | function shouldPreferRemoteMarkdown( | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 524 | function buildRemoteFallbackReason(current: HtmlToMarkdownResult, html: string): string { | CODE |
| LOW | packages/baoyu-fetch/src/extract/html-to-markdown.ts | 629 | function convertHtmlFragmentToMarkdown(html: string): string { | CODE |
| LOW | packages/baoyu-fetch/src/media/media-utils.ts | 71 | export function resolveExtensionFromContentType(contentType: string): string | undefined { | CODE |
| LOW | packages/baoyu-fetch/src/media/media-utils.ts | 75 | export function resolveKindFromContentType(contentType: string): MediaKind | undefined { | CODE |
| LOW | packages/baoyu-fetch/src/media/markdown-media.ts | 95 | function formatMarkdownDestination(url: string): string { | CODE |
| LOW⚡ | packages/baoyu-fetch/src/media/markdown-media.ts | 120 | function isParagraphWithSingleText(node: MarkdownAstNode | undefined, expectedValue: string): boolean { | CODE |
| LOW⚡ | packages/baoyu-fetch/src/media/markdown-media.ts | 129 | function getSingleImageFromParagraph(node: MarkdownAstNode | undefined): MarkdownAstNode | null { | CODE |
| LOW⚡ | packages/baoyu-fetch/src/media/markdown-media.ts | 137 | function extractBrokenLinkedImageDestination(node: MarkdownAstNode | undefined): string | null { | CODE |
| LOW | packages/baoyu-fetch/src/media/markdown-media.ts | 161 | function collectLinkedImageReplacements( | CODE |
| LOW | packages/baoyu-fetch/src/media/markdown-media.ts | 184 | function collectBrokenLinkedImageReplacements( | CODE |
| LOW | packages/baoyu-fetch/src/media/markdown-media.ts | 241 | function normalizeLinkedImageMarkdown(markdown: string): string { | CODE |
| LOW | packages/baoyu-fetch/src/media/markdown-media.ts | 255 | export function normalizeMarkdownMediaLinks(markdown: string): string { | CODE |
| LOW | packages/baoyu-fetch/src/media/markdown-media.ts | 409 | export function rewriteMarkdownMediaLinks( | CODE |
| LOW | packages/baoyu-md/src/mermaid-preprocess.ts | 48 | export async function preprocessMermaidInMarkdown( | CODE |
| LOW | packages/baoyu-md/src/images.ts | 17 | export function replaceMarkdownImagesWithPlaceholders( | CODE |
| LOW | packages/baoyu-md/src/images.ts | 150 | function parseObsidianImageWikilink(target: string): { | CODE |
| LOW | packages/baoyu-md/src/images.ts | 167 | function hasExplicitImageExtension(value: string): boolean { | CODE |
| LOW | packages/baoyu-md/src/images.ts | 261 | function buildAttachmentFallbackPath(imagePath: string, baseDir: string): string | undefined { | CODE |
| LOW | packages/baoyu-md/src/document.ts | 74 | export function buildMarkdownDocumentMeta( | CODE |
| LOW | packages/baoyu-md/src/renderer.ts | 91 | function parseFrontMatterAndContent(markdownText: string): ParseResult { | CODE |
| LOW | skills/baoyu-youtube-transcript/scripts/transcript.ts | 112 | function splitSnippetAtPunctuation(snippet: Snippet): { text: string; start: number; end: number }[] { | CODE |
| LOW | skills/baoyu-youtube-transcript/scripts/youtube.ts | 236 | export async function fetchTranscriptWithFallback( | CODE |
| LOW | skills/baoyu-youtube-transcript/scripts/youtube.ts | 327 | export function buildTranscriptListFromYtDlp(info: YtDlpInfo): TranscriptInfo[] { | CODE |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-utils.ts | 67 | export async function findExistingChromeDebugPort(profileDir: string): Promise<number | null> { | CODE |
| LOW | skills/baoyu-post-to-weibo/scripts/copy-to-clipboard.ts | 128 | function getMacSwiftClipboardSource(): string { | CODE |
| 117 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | packages/baoyu-fetch/src/utils/logger.ts | 15 | print("info", message); | CODE |
| HIGH⚡ | packages/baoyu-fetch/src/utils/logger.ts | 18 | print("warn", message); | CODE |
| HIGH⚡ | packages/baoyu-fetch/src/utils/logger.ts | 21 | print("error", message); | CODE |
| HIGH⚡ | packages/baoyu-fetch/src/utils/logger.ts | 25 | print("debug", message); | CODE |
| HIGH | …ls/baoyu-danger-x-to-markdown/scripts/markdown.test.ts | 52 | print('hello from x article') | CODE |
| HIGH⚡ | …ills/baoyu-url-to-markdown/scripts/lib/utils/logger.ts | 15 | print("info", message); | CODE |
| HIGH⚡ | …ills/baoyu-url-to-markdown/scripts/lib/utils/logger.ts | 18 | print("warn", message); | CODE |
| HIGH⚡ | …ills/baoyu-url-to-markdown/scripts/lib/utils/logger.ts | 21 | print("error", message); | CODE |
| HIGH⚡ | …ills/baoyu-url-to-markdown/scripts/lib/utils/logger.ts | 25 | print("debug", message); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 122 | // Step 1: Find and click "写文章" button | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 161 | // Step 2: Fill title | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 217 | // Step 3: Fill summary (导语) | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 271 | // Step 4: Insert HTML content into ProseMirror editor | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 385 | // Step 5: Insert content images | COMMENT |
| LOW | skills/baoyu-post-to-weibo/scripts/weibo-article.ts | 706 | // Step 6: Set cover image | COMMENT |
| LOW⚡ | skills/baoyu-image-gen/scripts/providers/jimeng.ts | 459 | // Step 1: Submit task | COMMENT |
| LOW⚡ | skills/baoyu-image-gen/scripts/providers/jimeng.ts | 462 | // Step 2: Poll for result (returns image data directly) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ls/baoyu-infographic/references/styles/ui-wireframe.md | 23 | - Placeholder "Lorem ipsum" | CODE |
| LOW | skills/baoyu-post-to-wechat/scripts/md-to-wechat.ts | 132 | "placeholder": "WECHATIMGPH_1", | CODE |
| LOW | skills/baoyu-post-to-x/references/articles.md | 144 | "placeholder": "XIMGPH_1", | CODE |
| LOW | …ls/baoyu-image-gen/scripts/providers/dashscope.test.ts | 269 | useEnv(t, { DASHSCOPE_API_KEY: "fake-key" }); | CODE |
| LOW | …ls/baoyu-image-gen/scripts/providers/dashscope.test.ts | 308 | useEnv(t, { DASHSCOPE_API_KEY: "fake-key" }); | CODE |
| LOW | …ls/baoyu-image-gen/scripts/providers/dashscope.test.ts | 346 | useEnv(t, { DASHSCOPE_API_KEY: "fake-key" }); | CODE |
| LOW | skills/baoyu-markdown-to-html/SKILL.md | 194 | "placeholder": "MDTOHTMLIMGPH_1", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | skills/baoyu-wechat-summary/SKILL.md | 3 | description: Summarizes WeChat group chat highlights into a structured digest using the local wx-cli binary (https://git | CODE |
| MEDIUM | skills/baoyu-wechat-summary/references/profiles.md | 234 | ## 5. Privacy guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/baoyu-md/src/code-themes/agate.min.css | 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! | COMMENT |
| LOW | skills/baoyu-post-to-x/scripts/md-to-html.ts | 141 | // `marked`'s emphasis tokenizer treats a closing `**`/`*` directly followed by a | COMMENT |