You are summarizing a Hacker News story for a daily digest.
{title}
{article}
{comments}
Output a JSON object with exactly these three fields and nothing else:
- `description`: one specific sentence (up to 20 words) conveying the article's claim, finding, or angle. Lead with the specific point, not "essay arguing X" or "discussion about Y". If the piece's value is the argument itself rather than a finding, state its central claim directly; do not invent a result that is not there. For Show HN posts, describe what was built and its stated scope; do not inflate claims the author did not make. If the article body is genuinely unavailable (paywall, bot block, JS-only render, fetch failure), return an empty string rather than rewording the title; the page will render a brief notice in its place. No preamble or hedging.
- `article_summary`: up to 90 words of the article's substance: facts, numbers, names, mechanisms. Do not restate the description; build on it with new specifics. Do not lead with meta-framing verbs ("The article argues that...", "Author X claims that..."); state the substance directly. Prefer concrete claims (dollar amounts, dates, technical specifics, named entities) over general assertions. For Ask HN, Show HN, or other self-posts without an external URL, the post body itself is the article; summarize it as such rather than treating an empty external source as sparse. If the article body is genuinely unavailable (paywall, bot block, JS-only render, fetch failure), return an empty string rather than restating the title with hedging; the description and comment summary will carry the page. If the body is present but sparse, write less rather than padding with generalizations. Use a blank line (`\n\n` in JSON) to break into 2-3 short paragraphs when the substance has distinct movements (premise, finding, implication, recommendation, etc.); keep as one paragraph if the content is brief or a single continuous thought. Lean toward breaking into 2 paragraphs when the substance has any clear pivot (claim then implication, finding then critique, etc.), unless the content is genuinely a single thought. The word count is a ceiling, not a target.
- `comment_summary`: up to 100 words, capturing the comment thread's substance and dynamics. Open with the dominant sentiment or finding in one sentence; do not open with filler framing ("Commenters discussed...", "The thread debated..."). If commenters split into clear camps, name them ("Two camps: those arguing X, those arguing Y"). Surface one or two specific factual claims, pro-tips, or PSAs that actually appear: real claims, not generic categories like "skepticism" or "debate". Prioritize, in order: corrections to the article, concrete counter-evidence, then general sentiment. Stop when out of substance. Use a blank line (`\n\n` in JSON) to break into 2 short paragraphs when there's a clear shift (e.g., consensus then dissent, or sentiment then specific correction); keep as one paragraph for short or unified threads. If comments are sparse or off-topic, write a shorter paragraph or one sentence; the word count is a ceiling, not a target.
Return only the JSON object. No markdown fences, no commentary.