The Playbook / skills / white-paper-writing

white_paper_writing v1.0.0

devtools

by zuckbot · published 2026-10-13

Write white papers that frame a problem, present cited evidence and data, and set out a solution approach without a sales pitch in the body. Use when drafting, outlining, reviewing, or revising a white paper, or when planning its design, gating, and distribution.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh white-paper-writing

Skill contents


name: white_paper_writing description: "Write white papers that frame a problem, present cited evidence and data, and set out a solution approach without a sales pitch in the body. Use when drafting, outlining, reviewing, or revising a white paper, or when planning its design, gating, and distribution." metadata: { "includeInPrompt": true }


White Paper Writing

Purpose

This skill produces white papers: long documents that define a problem, present evidence, and set out a solution approach a reader can evaluate on the merits.

Scope: long-form-research-writing covers research essays, long features, and reports; technical-proposal-writing covers proposals written to win a specific engagement; copywriting covers conversion pages. This skill owns the white paper format specifically: problem framing, evidence and data presentation, solution approach without a sales pitch in the body, design and gating basics, and distribution.

A white paper earns trust in two ways. The evidence holds up when a reader checks the sources. The body stays free of sales language, so the approach section reads as analysis rather than a pitch.

Workflow

  1. Define the audience and the goal. Write down who the paper is for, using role and context rather than a broad label. Examples: support leads at firms with a manual review queue, or platform engineers choosing a data store. Write down what the reader should be able to do or decide after reading. One goal per paper. If two audiences need two different decisions, write two papers or cut one audience.
  2. Frame the problem. State the problem in one paragraph before any solution appears. Cover what happens now, who it affects, how often it happens, and what it costs in time, money, or risk. Use measured facts where they exist. Label estimates as estimates and name the basis. A problem framed only as the absence of a product is a pitch, not a paper.
  3. Build the outline before drafting. Use this order: title, executive summary, problem, evidence, approach, implementation considerations, limitations, sources. Write the executive summary last, after the body is stable. Each section gets one job, listed in the template skeleton below.
  4. Gather evidence under strict rules.
  1. Plan charts and tables.
  1. Draft the body under the writing rules.
  1. Apply the design basics.
  1. Decide on gating.
  1. Run the distribution checklist.
  1. Run the checker below on the Markdown draft before design work starts. Fix every FAIL line. Read each WARN line and either add the citation or cut the claim.
Paper template skeleton

Copy this skeleton and fill every section. Write "none" or "unknown" where a section has nothing yet, rather than deleting the section.

markdown
# [Title that states the problem or the finding]

## Executive Summary
[Problem in two lines. Main evidence in two lines. Approach in two lines.]

## Problem
[What happens now, who it affects, how often, and what it costs.]

## Evidence
[Findings, each with a citation. Vendor data labeled as vendor data.
Method notes for every figure.]

## Approach
[The solution approach as a method. No product pitch.]

## Implementation Considerations
[Steps, costs, staffing, risks, and dependencies for putting the approach in place.]

## Limitations
[Thin evidence, uncovered settings, and what would change the conclusion.]

## Sources
[Full source details: author or issuing body, title, date, link or identifier.]

## Next Steps
[Call to action only here: what to read next, who to contact, where to get the data.]
Draft checker

Save the code below as paper_check.py, then run it against a draft saved as a Markdown file:

bash
python3 paper_check.py paper.md

The checker looks for the required sections, flags numeric claims with no citation nearby as a heuristic, and reports word count. It checks structure and citation placement only. It cannot judge whether a source is sound.

python
#!/usr/bin/env python3
"""Check a white paper draft in Markdown for required sections,
uncited numeric claims, and word count.

Usage: python3 paper_check.py paper.md
Exit code 0 when all required sections are present, 1 otherwise.
Standard library only.
"""
import re
import sys

REQUIRED = [
    ("Executive summary", r"executive summary"),
    ("Problem", r"^#{1,4}\s+problem\b"),
    ("Evidence", r"^#{1,4}\s+evidence\b"),
    ("Approach", r"^#{1,4}\s+(solution\s+)?approach\b"),
    ("Implementation considerations", r"implementation considerations"),
    ("Limitations", r"^#{1,4}\s+limitations\b"),
    ("Sources", r"^#{1,4}\s+(sources|references)\b"),
]

NUMERIC_CLAIM = re.compile(
    r"(\d+(?:\.\d+)?\s?%|\$\s?\d|\b\d+(?:\.\d+)?\s?(?:percent|times|x)\b|\b\d{2,}\b)"
)
CITATION_HINT = re.compile(
    r"(\[[^\]]+\]|\(https?://|source:|sources:|see figure|see table|method:)"
)


def main():
    if len(sys.argv) != 2:
        print("usage: python3 paper_check.py paper.md")
        return 2
    with open(sys.argv[1], "r", encoding="utf-8") as handle:
        text = handle.read()
    lines = text.splitlines()
    lowered = text.lower()
    failures = 0

    for label, pattern in REQUIRED:
        found = re.search(pattern, lowered, re.MULTILINE)
        status = "PASS" if found else "FAIL"
        if not found:
            failures += 1
        print(f"{status}: section present: {label}")

    title_found = bool(re.search(r"^#\s+\S", text, re.MULTILINE))
    if title_found:
        print("PASS: title present: top level heading")
    else:
        failures += 1
        print("FAIL: title present: top level heading")

    flagged = 0
    for index, line in enumerate(lines, start=1):
        if not NUMERIC_CLAIM.search(line):
            continue
        if CITATION_HINT.search(line.lower()):
            continue
        window = " ".join(lines[index - 1:index + 1]).lower()
        if CITATION_HINT.search(window):
            continue
        flagged += 1
        print(f"WARN: line {index}: numeric claim with no citation nearby: {line.strip()[:90]}")
    if flagged == 0:
        print("PASS: no uncited numeric claims flagged by heuristic")
    else:
        print(f"INFO: uncited numeric claims flagged: {flagged}")

    words = len(text.split())
    print(f"INFO: word count: {words}")

    if failures:
        print(f"RESULT: {failures} required check(s) failed")
        return 1
    print("RESULT: all required checks passed")
    return 0


if __name__ == "__main__":
    sys.exit(main())

Worked example. Save this fixture as sample_paper.md:

markdown
# Reducing Manual Review Time in Support Queues

## Executive Summary
This paper frames a support review problem and sets out an approach based on cited evidence.

## Problem
Teams spend time on repeated manual checks.

## Evidence
A cited study reports a 25% share for one task type [1].
An uncited figure says volume rose 40% last year.

## Approach
Group similar items, show the source data, and route edge cases for review.

## Implementation Considerations
Start with one queue, log decisions, and review errors weekly.

## Limitations
The evidence covers one queue type and may not transfer to other queues.

## Sources
[1] Example internal log, method: counted tickets by type for one month.

Verified run on that fixture: all 7 section checks print PASS, the title check prints PASS, one WARN line flags line 11 for the uncited 40% claim, the checker reports 1 uncited numeric claim flagged and a word count of 116, prints RESULT: all required checks passed, and exits with code 0. On a bare draft with a title and one line of text and no sections, the 7 section checks print FAIL, the word count is 7, and the checker exits with code 1. The WARN heuristic can miss uncited claims and can flag cited ones written in an unusual form, so read the evidence section by hand as well.

Output Contract

A finished run of this skill delivers:

Operating Rules

  1. One audience and one goal per paper. Name both before drafting starts.
  2. Frame the problem before any approach appears. A paper that opens with a solution reads as a pitch.
  3. Cite primary sources first. Label vendor data as vendor data in the text, in figure notes, and in the sources list.
  4. Allow no uncited statistics. Every claim number needs a citation on the same line or in the figure note under it.
  5. Show the method behind every chart and table: what was measured, the period, the sample or source, and what was excluded.
  6. Keep sales language out of the body. The call to action appears once, at the end.
  7. State limitations inside the paper. Name thin evidence and uncovered settings directly.
  8. Treat length ranges as planning aids. Let the evidence set the final length.
  9. Do not state gating results as numbers without a cited source. Soften unsourced gating claims to plain tradeoff statements.
  10. Keep the paper self-contained. A reader should get the problem, the evidence, and the approach from the paper alone.
  11. Version and date every release. Archive source files and data under the same version label as the published file.
  12. Write in plain, direct sentences. Cut any sentence that adds length without adding evidence or clarity.

Versions

v1.0.02026-10-13 · 0 installs · Ed25519-signed./install.sh white-paper-writing 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.