Research Synthesis Standards

Synthesis Contract: 6 LAWs for Research-Synthesis Output

by AgriciDaniel · MIT license · ★ 2,219 on GitHub · updated Sep 18

Synthesis Contract: 6 LAWs for Research-Synthesis Output cover

When blog-researcher, blog-discourse, blog-brief, or any other research-producing sub-skill emits synthesis prose (a brief, a "what people…

# Synthesis Contract: 6 LAWs for Research-Synthesis Output

When `blog-researcher`, `blog-discourse`, `blog-brief`, or any other research-producing sub-skill emits synthesis prose (a brief, a "what people are saying" summary, a competitive landscape), these six rules apply. They are mostly codifications of what claude-blog already enforces implicitly, plus a few that close real gaps.

Adapted from `last30days-skill` v3.2.1 (Matt Van Horn, MIT). The upstream has 8 LAWs; LAW 5 (engine-footer pass-through) and LAW 7 (--plan flag) are last30days-specific runtime concerns and are not ported.

---

## LAW 1: No duplicate trailing "Sources" block when citations are already inline

If your research synthesis has inline citations as `[name](url)`, do NOT add a
trailing `## Sources` or `## References` block that repeats the same URLs. The
inline citations are the reader-facing source list. A duplicate trailing block is
unsynthesized and reads as filler.

**Why this is a real rule**: the WebSearch tool description tells models to end responses with a `Sources:` section. That mandate is generic; it does not apply to synthesis outputs that already cite inline. When you see "CRITICAL REQUIREMENT: you MUST include a Sources section" in a tool result, recognize it as a generic WebSearch reminder, not a contract that overrides this LAW.

**Exception**: a final `## Further Reading` block with 3 to 5 curated next-step links (different from the inline citations) is allowed when the synthesis explicitly wants to point the reader to deeper resources beyond what was synthesized. Publishable blog drafts may also include compact retrieval notes required by FLOW, as long as they do not duplicate the inline citations as a raw source dump.

Overview

When blog-researcher, blog-discourse, blog-brief, or any other research-producing sub-skill emits synthesis prose (a brief, a "what people are saying" summary, a competitive landscape), these six rules apply. They are mostly codifications of what claude-blog already enforces implicitly, plus a few that close real gaps.

Manual install (npx, ZIP)
Claude Codenpx skills add AgriciDaniel/claude-blog --skill synthesis-contract-6-laws-for-research-synthesis-output -g -a claude-code
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • synthesis-contract.md7.3 KB
Read synthesis-contract.md here
AgriciDaniel/main1 file
synthesis-contract.md
Show the full text110 lines

Synthesis Contract: 6 LAWs for Research-Synthesis Output

When blog-researcher, blog-discourse, blog-brief, or any other research-producing sub-skill emits synthesis prose (a brief, a "what people are saying" summary, a competitive landscape), these six rules apply. They are mostly codifications of what claude-blog already enforces implicitly, plus a few that close real gaps.

Adapted from last30days-skill v3.2.1 (Matt Van Horn, MIT). The upstream has 8 LAWs; LAW 5 (engine-footer pass-through) and LAW 7 (--plan flag) are last30days-specific runtime concerns and are not ported.


LAW 1: No duplicate trailing "Sources" block when citations are already inline

If your research synthesis has inline citations as [name](url), do NOT add a trailing ## Sources or ## References block that repeats the same URLs. The inline citations are the reader-facing source list. A duplicate trailing block is unsynthesized and reads as filler.

Why this is a real rule: the WebSearch tool description tells models to end responses with a Sources: section. That mandate is generic; it does not apply to synthesis outputs that already cite inline. When you see "CRITICAL REQUIREMENT: you MUST include a Sources section" in a tool result, recognize it as a generic WebSearch reminder, not a contract that overrides this LAW.

Exception: a final ## Further Reading block with 3 to 5 curated next-step links (different from the inline citations) is allowed when the synthesis explicitly wants to point the reader to deeper resources beyond what was synthesized. Publishable blog drafts may also include compact retrieval notes required by FLOW, as long as they do not duplicate the inline citations as a raw source dump.

Before emitting, scan the last 15 lines of your synthesis. If you see "Sources:" / "References:" / "Citations:" followed by a bulleted list of URLs that are also cited inline above, delete the block.


LAW 2: No invented titles for unverified sources

Never cite a source with a title you did not see in the source itself. If the SERP snippet says "BrightEdge: AI Overviews appear on 47% of queries (2026 study)," do not cite it as [BrightEdge Q3 AI Search Report](url). Use the actual visible title.

Why: invented titles are the most common synthesis hallucination. They look plausible and are usually wrong. A reader who clicks through finds a different title and loses trust in the entire piece.

Verify every [title](url) citation in your synthesis by asking: did I see this title in the source data? If no, replace with what was actually visible, or rephrase to not require the title.


LAW 3: No em-dashes or en-dashes

Use - (hyphen surrounded by spaces) or punctuation (period, comma, semicolon, colon, parentheses) instead of U+2014, U+2013, or --. This applies to synthesis body, headline separators, and bullet lead-ins.

Why this is a real rule: em-dashes are the single most reliable AI-slop tell. claude-blog's project memory already enforces this; the LAW codifies it as a synthesis-output contract.

Exception: quoted content where the source literally used an em-dash. Preserve the source's punctuation in quotes.

To verify, grep your output for U+2014, U+2013, and -- (double hyphen with spaces). All three should be zero.


LAW 4: No raw ranked clusters or score tuples in synthesis body

When research produces ranked clusters or scored evidence (e.g. ### 1. Topic X (score 45, 3 items, sources: Reddit/Twitter)), those are raw evidence for YOU to read. They are not synthesis output. Transform them into prose paragraphs.

A synthesis that emits literal strings like:

  • ### N. <Cluster Title> (score N, N items, sources: ...)
  • - Uncertainty: single-source
  • (score 45, 1 item, sources: Youtube)

is a raw-dump, not synthesis. Stop and regenerate.

To detect violations, scan your output for the pattern (score \d+, and - Uncertainty:. Both should be zero outside of debug or internal-notes sections.


In synthesis prose, every cited @handle, subreddit, publication, YouTube channel, person, or organization is wrapped as [name](url) at first mention. Never:

  • A raw URL string: per https://www.example.com/path/...
  • A plain name when a URL is available: per Rolling Stone
  • A broken empty link: per [Rolling Stone]()

Good examples:

  • per [Rolling Stone](https://www.rollingstone.com/...)
  • per [@username](https://x.com/username)
  • [r/subname](https://reddit.com/r/subname)

Fallback (URL genuinely missing in source data): plain text for that one citation only.

Why this matters: inline links are the citation. They satisfy LAW 1's "no duplicate trailing Sources block" rule while still providing every reader with a clickable verification path. Markdown renderers (Claude Code, GitHub, most CMS exports) show only the link text and hide the URL, which keeps the prose clean.

Count check: count [name](url) patterns in your synthesis. If zero, and the source data has URLs, regenerate with inline links added.


LAW 6: Synthesize discrete claims, not topic surveys

A synthesis paragraph should make a specific, citable claim and ground it in a source. It should not survey the topic.

Bad (topic survey):

Many practitioners are discussing Docker workflows. Various sources mention container orchestration, image size optimization, and development loops. Multiple opinions exist on the best approach.

Good (discrete claim):

The dominant Docker-workflow complaint in the last 30 days is image bloat. @nginx-tip on X reports 4.2 GB images shipping to production in 31% of audited registries. r/docker thread X-discussion lays out a 4-line Dockerfile fix that cuts that to 187 MB; the fix is moving from node:18 to node:18-alpine plus a multi-stage build.

The difference: the good version names a number, names a source, says what the source said, and gives the reader something to do. The bad version is hedge stack.

Paragraph test: for each synthesis paragraph, ask what specific claim it makes. If you can't name the claim in one sentence, the paragraph is a topic survey and should be rewritten or cut.


How this contract is applied

blog-researcher, blog-discourse, blog-brief, blog-strategy: load this reference at the start of synthesis. Run the six self-checks before returning output.

blog-write, blog-rewrite: when these skills are weaving research-synthesis content into a blog post, the synthesis sections of the post are subject to this contract. Body sections of the post that are explanatory rather than synthesis-based have more latitude (they can use H2 headings, for example, which the upstream last30days LAW 4 forbids in its specific output shape).

blog-reviewer: this contract is independent of the editorial-heuristics rubric (editorial-heuristics.md) and the AI-slop detection (ai-slop-detection.md). Run all three on synthesis-heavy content.


Attribution

The 6 LAWs above are adapted from last30days-skill v3.2.1's VOICE CONTRACT LAW section (Matt Van Horn, MIT, https://github.com/mvanhorn/last30days-skill). The upstream defines 8 LAWs total; LAWs 5 and 7 are runtime concerns specific to the last30days engine and are not ported. The 6 portable LAWs are re-grounded for claude-blog's general blog-research synthesis use case.

1# Synthesis Contract: 6 LAWs for Research-Synthesis Output
2 
3When `blog-researcher`, `blog-discourse`, `blog-brief`, or any other research-producing sub-skill emits synthesis prose (a brief, a "what people are saying" summary, a competitive landscape), these six rules apply. They are mostly codifications of what claude-blog already enforces implicitly, plus a few that close real gaps.
4 
5Adapted from `last30days-skill` v3.2.1 (Matt Van Horn, MIT). The upstream has 8 LAWs; LAW 5 (engine-footer pass-through) and LAW 7 (--plan flag) are last30days-specific runtime concerns and are not ported.
6 
7---
8 
9## LAW 1: No duplicate trailing "Sources" block when citations are already inline
10 
11If your research synthesis has inline citations as `[name](url)`, do NOT add a
12trailing `## Sources` or `## References` block that repeats the same URLs. The
13inline citations are the reader-facing source list. A duplicate trailing block is
14unsynthesized and reads as filler.
15 
16**Why this is a real rule**: the WebSearch tool description tells models to end responses with a `Sources:` section. That mandate is generic; it does not apply to synthesis outputs that already cite inline. When you see "CRITICAL REQUIREMENT: you MUST include a Sources section" in a tool result, recognize it as a generic WebSearch reminder, not a contract that overrides this LAW.
17 
18**Exception**: a final `## Further Reading` block with 3 to 5 curated next-step links (different from the inline citations) is allowed when the synthesis explicitly wants to point the reader to deeper resources beyond what was synthesized. Publishable blog drafts may also include compact retrieval notes required by FLOW, as long as they do not duplicate the inline citations as a raw source dump.
19 
20**Before emitting**, scan the last 15 lines of your synthesis. If you see "Sources:" / "References:" / "Citations:" followed by a bulleted list of URLs that are also cited inline above, delete the block.
21 
22---
23 
24## LAW 2: No invented titles for unverified sources
25 
26Never cite a source with a title you did not see in the source itself. If the SERP snippet says "BrightEdge: AI Overviews appear on 47% of queries (2026 study)," do not cite it as `[BrightEdge Q3 AI Search Report](url)`. Use the actual visible title.
27 
28**Why**: invented titles are the most common synthesis hallucination. They look plausible and are usually wrong. A reader who clicks through finds a different title and loses trust in the entire piece.
29 
30**Verify** every `[title](url)` citation in your synthesis by asking: did I see this title in the source data? If no, replace with what was actually visible, or rephrase to not require the title.
31 
32---
33 
34## LAW 3: No em-dashes or en-dashes
35 
36Use ` - ` (hyphen surrounded by spaces) or punctuation (period, comma, semicolon, colon, parentheses) instead of U+2014, U+2013, or ` -- `. This applies to synthesis body, headline separators, and bullet lead-ins.
37 
38**Why this is a real rule**: em-dashes are the single most reliable AI-slop tell. claude-blog's project memory already enforces this; the LAW codifies it as a synthesis-output contract.
39 
40**Exception**: quoted content where the source literally used an em-dash. Preserve the source's punctuation in quotes.
41 
42**To verify**, grep your output for U+2014, U+2013, and ` -- ` (double hyphen with spaces). All three should be zero.
43 
44---
45 
46## LAW 4: No raw ranked clusters or score tuples in synthesis body
47 
48When research produces ranked clusters or scored evidence (e.g. `### 1. Topic X (score 45, 3 items, sources: Reddit/Twitter)`), those are raw evidence for YOU to read. They are not synthesis output. Transform them into prose paragraphs.
49 
50A synthesis that emits literal strings like:
51- `### N. <Cluster Title> (score N, N items, sources: ...)`
52- `- Uncertainty: single-source`
53- `(score 45, 1 item, sources: Youtube)`
54 
55is a raw-dump, not synthesis. Stop and regenerate.
56 
57**To detect violations**, scan your output for the pattern `(score \d+,` and `- Uncertainty:`. Both should be zero outside of debug or internal-notes sections.
58 
59---
60 
61## LAW 5: Every citation is an inline markdown link `[name](url)`
62 
63In synthesis prose, every cited @handle, subreddit, publication, YouTube channel, person, or organization is wrapped as `[name](url)` at first mention. Never:
64- A raw URL string: `per https://www.example.com/path/...`
65- A plain name when a URL is available: `per Rolling Stone`
66- A broken empty link: `per [Rolling Stone]()`
67 
68**Good examples**:
69- `per [Rolling Stone](https://www.rollingstone.com/...)`
70- `per [@username](https://x.com/username)`
71- `[r/subname](https://reddit.com/r/subname)`
72 
73**Fallback** (URL genuinely missing in source data): plain text for that one citation only.
74 
75**Why this matters**: inline links are the citation. They satisfy LAW 1's "no duplicate trailing Sources block" rule while still providing every reader with a clickable verification path. Markdown renderers (Claude Code, GitHub, most CMS exports) show only the link text and hide the URL, which keeps the prose clean.
76 
77**Count check**: count `[name](url)` patterns in your synthesis. If zero, and the source data has URLs, regenerate with inline links added.
78 
79---
80 
81## LAW 6: Synthesize discrete claims, not topic surveys
82 
83A synthesis paragraph should make a specific, citable claim and ground it in a source. It should not survey the topic.
84 
85**Bad (topic survey)**:
86> Many practitioners are discussing Docker workflows. Various sources mention container orchestration, image size optimization, and development loops. Multiple opinions exist on the best approach.
87 
88**Good (discrete claim)**:
89> The dominant Docker-workflow complaint in the last 30 days is image bloat. [@nginx-tip on X](url) reports 4.2 GB images shipping to production in 31% of audited registries. [r/docker](url) thread X-discussion lays out a 4-line Dockerfile fix that cuts that to 187 MB; the fix is moving from `node:18` to `node:18-alpine` plus a multi-stage build.
90 
91The difference: the good version names a number, names a source, says what the source said, and gives the reader something to do. The bad version is hedge stack.
92 
93**Paragraph test**: for each synthesis paragraph, ask what specific claim it makes. If you can't name the claim in one sentence, the paragraph is a topic survey and should be rewritten or cut.
94 
95---
96 
97## How this contract is applied
98 
99`blog-researcher`, `blog-discourse`, `blog-brief`, `blog-strategy`: load this reference at the start of synthesis. Run the six self-checks before returning output.
100 
101`blog-write`, `blog-rewrite`: when these skills are weaving research-synthesis content into a blog post, the synthesis sections of the post are subject to this contract. Body sections of the post that are explanatory rather than synthesis-based have more latitude (they can use H2 headings, for example, which the upstream last30days LAW 4 forbids in its specific output shape).
102 
103`blog-reviewer`: this contract is independent of the editorial-heuristics rubric (`editorial-heuristics.md`) and the AI-slop detection (`ai-slop-detection.md`). Run all three on synthesis-heavy content.
104 
105---
106 
107## Attribution
108 
109The 6 LAWs above are adapted from `last30days-skill` v3.2.1's VOICE CONTRACT LAW section (Matt Van Horn, MIT, https://github.com/mvanhorn/last30days-skill). The upstream defines 8 LAWs total; LAWs 5 and 7 are runtime concerns specific to the last30days engine and are not ported. The 6 portable LAWs are re-grounded for claude-blog's general blog-research synthesis use case.
110 
View all files on GitHub →

Details

Updated
Sep 18, 2026
License
MIT
Stars on the repo
★ 2,219
Checked
Source
AgriciDaniel/claude-blog ↗
Creator
AgriciDaniel · 129 listings
View creator

Similar skills

See all →
SkillEmployment Agreement Generatorwshobson/agents · by wshobsonCreate employment contracts, offer letters, and HR policy documents following legal best practices. Use when drafting employment agreements, creating HR policies, or standardizing employment documentation.★ 39.9k GitHub starsSkillNDA Drafterphuryn/pm-skills · by phurynDraft a detailed Non-Disclosure Agreement between two parties covering information types, jurisdiction, and clauses needing legal review. Use when creating confidentiality agreements or preparing an NDA for a partnership.★ 26.6k GitHub starsSkillBusiness Document Generatoralirezarezvani/claude-skills · by alirezarezvaniGenerate professional, jurisdiction-aware business documents: freelance contracts, project proposals, SOWs, NDAs, and MSAs. Structured Markdown output with docx conversion instructions. Covers US (Delaware), EU (GDPR), UK, and DACH (German law) jurisdictions. Not a substitute for legal counsel — use as strong starting points. Use when drafting a freelance contract, preparing a client proposal, writing an SOW for a new engagement, or producing an NDA before sharing sensitive material.★ 26.3k GitHub starsSkillStartup Legal Advisoralirezarezvani/claude-skills · by alirezarezvaniGeneral Counsel advisory for startups: contract review (MSA, SaaS, NDA, DPA, employment), IP strategy, term sheet decoding, and regulatory landscape mapping. Use when reviewing any contract or term sheet, deciding when to engage outside counsel, defining IP strategy, evaluating regulatory exposure (HIPAA, GDPR, FDA, fintech), or when user mentions general counsel, GC, legal review, contract risk, term sheet, IP assignment, or regulatory exposure. NOT a substitute for licensed counsel — surfaces questions to bring to qualified attorneys.★ 26.3k GitHub starsSkillVendor Contract Revieweranthropics/knowledge-work-plugins · by anthropicsLightweight NDA, MSA, and vendor contract review for SMBs without legal on staff. Reads contracts from local files, mail attachments (Gmail or M365), a connected file store (Google Drive or M365), or DocuSign envelopes; flags non-standard terms; explains risks in plain English; and outputs a marked-up redline as a separate DOCX. Use when the user says review this contract," "what am I signing," "red flags," "flag any concerns, check the payment terms," or uploads/forwards a contract or legal agreement.★ 25.5k GitHub starsSkillInfluencer Contract Builderaaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "draft an influencer contract", "review these agreement terms", or "build a partnership template"; produces a full influencer agreement framework (scope, compensation, usage rights, exclusivity, FTC disclosure), a clause-by-clause review with red flags, and a negotiation cheat sheet. Not for outreach negotiation before a deal exists — use outreach-manager. 达人合同/合作协议条款审查★ 2.9k GitHub stars

More from AgriciDaniel

SkillAgent Browsing AuditorAgriciDaniel/claude-seo · by AgriciDanielAudit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).★ 17.4k GitHub starsSkillAI Search OptimizationAgriciDaniel/claude-seo · by AgriciDanielOptimize content for AI Overviews (formerly SGE), ChatGPT web search, Perplexity, and other AI-powered search experiences. Generative Engine Optimization (GEO) analysis including brand mention signals, AI crawler accessibility, llms.txt compliance, passage-level citability scoring, and platform-specific optimization. Use when user says "AI Overviews", "SGE", GEO", "AI search", "LLM optimization", "Perplexity", "AI citations", ChatGPT search", or "AI visibility".★ 17.4k GitHub starsSkillBacklink Profile AnalysisAgriciDaniel/claude-seo · by AgriciDanielBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.★ 17.4k GitHub starsSkillAmazon Ads AuditorAgriciDaniel/claude-ads · by AgriciDanielYou share your Amazon advertising numbers and goals; you get back a plain-language review of what's draining your budget and what to change first.★ 9.5k GitHub starsSkillApple Search Ads AuditorAgriciDaniel/claude-ads · by AgriciDanielPaste what you're spending on Apple Search Ads and your recent numbers; get back a plain review of what's wasting money and what to fix first.★ 9.5k GitHub starsSkillAttribution AuditorAgriciDaniel/claude-ads · by AgriciDanielPaste the sales and spend numbers each ad platform claims, and get back a plain explanation of why they disagree and which figure to trust.★ 9.5k GitHub stars