Document Critique

Document Critique

This skill audits any document — proposal, playbook, RFC, spec, policy brief, marketing piece — against a named set of standards and returns a structured, evidence-based critique in a fixed four-section shape.

The output is built for downstream consumers (reviewers, exec sign-off, audit trails). Every finding cites the section, quote, or claim it applies to. Every assertion that a claim is false, an assumption is wrong, or a blind spot exists is backed by either a verifiable source or an explicit verify before use flag.

The skill operates in two modes:

Mode Purpose Default?
critique Single-document, multi-axis evidence-based critique (the four-section output described in this skill’s main process). Yes
diff Two-version comparison that produces a markdown diff guide summarizing what changed between an original and a final version, so document reviewers know exactly what they’re checking. No — opt in with --mode diff

If the caller does not specify a mode, default to critique. If two versions of the same document are supplied (two paths, two URLs, or --original + --final), ask once: “I see two versions — produce a diff guide?” If the caller does not answer within the same turn, default to critique against the second (assumed-newer) document and surface the assumption in the preamble.

When not to use

Invocation

/critique <document-text-or-path-or-url> [--standards "<comma-separated list>"] [--doc-type "<type>"] [--audience "<audience>"]
/critique --mode diff <original-path-or-url> <final-path-or-url> [--doc-type "<type>"] [--audience "<audience>"]

If --standards is omitted, default to: technical accuracy, industry best practices, general logical rigor and clarity. If --doc-type is omitted, infer from the document and state the inference explicitly in the preamble. If --audience is omitted, infer from the document and state the inference explicitly in the preamble. In diff mode --standards is ignored — diff mode reports what changed, it does not evaluate against standards. If the caller wants both, run diff first, then critique on the final version.

Process

Step 1 — Ingest and frame

  1. Read the entire document. If the document exceeds ~12,000 tokens (~48,000 characters), tell the caller and ask whether to (a) audit the full document in one pass at risk of context pressure, or (b) audit named sections only.
  2. Record three framing facts in working memory: documentType, evaluationStandards, targetAudience. If any were inferred rather than supplied, label them as inferred.
  3. Note any explicit hard requirements the document declares about itself (e.g., “must be IEEE 829 compliant”, “must meet PCI-DSS”). These become mandatory standards in addition to the caller-supplied ones.
  4. Standards conflict tie-breaker: if two named standards give contradictory guidance for the same claim (e.g., IEEE Std 829-2008 strictness vs. a vendor playbook’s brevity), evaluate against the more specific standard or, if specificity is equal, the more recently revised standard. Surface the conflict itself as a Pass A “Gaps” finding so the caller can see the trade-off, and audit the conflicting claim against both standards in that single finding.

Step 2 — Run analytical passes

Passes A–G are independent of each other. Run them in parallel if the execution environment supports fan-out, or sequentially if not. Collect every finding before producing output.

Every finding must include: pass letter, document location (section heading, page, paragraph, or quoted phrase), the issue, the standard it violates, the severity, and the evidence or source that supports the claim.

Pass A — Strengths and Weaknesses (vs. named standards)

Pass B — Factual rigor: verifiable falsehoods

Flag any claim that is verifiably untrue. A finding qualifies as a falsehood only when:

If a claim looks suspicious but cannot be verified with available sources, classify it as a verify before use item in Pass C instead. Do not call it a falsehood without evidence.

Pass C — Flawed assumptions

List the assumptions the text makes — both stated and implicit. For each assumption, mark one of:

Only risky and wrong assumptions become findings. wrong is severity High by default. risky is severity Medium unless the failure mode is irreversible or affects safety, security, or compliance, in which case promote to High.

Pass D — Implicit blind spots

Identify beliefs, scope choices, or systemic gaps the author has not surfaced but that compromise validity. Examples:

A blind spot is in scope only if you can name (a) what is missing and (b) what would change in the document if it were addressed.

Pass E — Anticipated objections and customer responses

Predict pushback from the named targetAudience and any other stakeholders the document affects. For each predicted objection, record:

Generic-objection filter: apply this test before listing an objection — “Would the same objection apply if the document’s topic and claims were completely different (e.g., swap MongoDB for a tax filing system)?” If yes, the objection is generic; drop it. Only keep objections that depend on this document’s specific claims, audience, or context.

Pass F — Practical problems on implementation

If the document’s instructions or plan were executed as written, what would go wrong in the real world? For each problem, record:

Only include problems that follow from text actually in the document — do not invent generic operational risks.

Pass G — Derived questions and resolutions

List the crucial unanswered questions that arise naturally from reading the document. For each question:

Skip questions that the document already answers. Skip questions whose answers fall outside the document’s stated goals.

Step 3 — Triage findings

Score each finding by impact:

Level Criteria Action
Critical If shipped, causes regulatory, security, safety, or financial harm Always surface
High Materially weakens the document’s core argument or plan Always surface
Medium Reduces clarity, completeness, or persuasiveness without breaking the core Surface
Low Polish, style, or preference Skip unless trivially fixable in one line

Drop Low findings from the final output unless they are one-line, judgment-free fixes.

Step 4 — Output the critique

Output length cap: within each subsection (Good, Gaps, Falsehoods, Flawed Assumptions, Blind Spots, Objections, Practical Problems, Derived Questions, Resolutions), surface up to 8 bullets. If more qualifying findings exist, keep the highest-severity 8 and append a single italic line under that subsection: _…and N more findings of equal or lower severity not shown._

Output exactly this skeleton — keep the headings verbatim because downstream consumers parse them.

Preamble: documentType=<value> (inferred? yes/no) · evaluationStandards=<list> (inferred? yes/no) · targetAudience=<value> (inferred? yes/no) · readability=<full | partial — call out unreadable sections here>

1. Strengths & Weaknesses Evaluation
   The Good:
   - <bullet>
   The Gaps:
   - <bullet — cite section + standard violated>

2. Factual & Logical Rigor
   Falsehoods:
   - <bullet — cite claim + contradicting source>
   Flawed Assumptions:
   - <bullet — mark wrong | risky, give failure mode>
   Implicit Blind Spots:
   - <bullet — name what is missing and what would change if addressed>

3. Anticipated Friction & Risks
   Objections & Customer Responses:
   - <bullet — name role, triggering claim, why they push back>
   Practical Problems:
   - <bullet — failing step, failure mode, blast radius>

4. Secondary Questions & Next Steps
   Derived Questions:
   - <bullet — checkable phrasing>
   Resolutions:
   - <bullet — specific section / person / test / source>

Summary: X critical, Y high, Z medium findings across N passes.

If a subsection has no findings, write - None. rather than omitting the subsection.

Quality bar — critique mode

The critique passes quality bar when:

Diff mode — version diff guide for reviewers

Diff mode is a separate process from the critique passes above. Use it when the caller supplies two versions of the same document and wants a markdown guide telling reviewers what changed between them. The output is descriptive, not evaluative — it surfaces changes, it does not judge them.

Step D1 — Ingest both versions

  1. Read both files in full. If only one is provided, ask once for the other and stop if none is supplied.
  2. Identify each version with a stable label: explicit --original / --final flags, the positional order, or filename hints (e.g., …V2.md → original, …V3.md → final). Surface the label assignment in the preamble so reviewers can confirm.
  3. If the two versions are byte-identical, stop and report: No changes detected between the two versions.
  4. Capture a baseline: line count of each version, size delta in lines, and whether either side declares an internal version stamp (Version: …, frontmatter version:, etc.). If the in-document version stamp did not change but the filename did, flag it in the Metadata caveats subsection so the reviewer is not surprised.

Step D2 — Produce a structural diff

  1. Prefer a real diff: run diff -u <original> <final> (or the language-appropriate equivalent) and use its hunks as evidence. If neither version is on disk, fall back to section-aligned comparison: split both texts on their heading hierarchy (or paragraph boundaries if no headings exist), pair sections by matching heading text or sequence, and compare paired sections paragraph-by-paragraph. Unmatched sections become Added/Removed; matched sections with text differences become Edited. Do not do raw line-by-line equality — it produces meaningless hunks on rewrapped paragraphs.
  2. Group hunks into change categories:
    • Added — content that exists only in the final version.
    • Removed — content that exists only in the original version.
    • Edited — text present in both but materially changed (link target swap, wording change, threshold change, code-snippet change, table-row change).
    • Moved — content that exists in both versions but at a different position. Only flag a move if the content is otherwise unchanged; if it was reworded while moving, classify as Edited and note the position change in the row.
  3. For each hunk, decide whether it is substantive (changes meaning, action, threshold, link target, code snippet, terminology, scope, structure) or cosmetic (whitespace, anchor regeneration, identical-link rewording, typo fix with no semantic shift). Cosmetic-only hunks are excluded from the per-change table and reported as a single aggregate row.

Step D3 — Classify each substantive change

For every substantive hunk, record:

Step D4 — Output the diff guide

Output a single markdown document with the exact section order below. Keep headings verbatim — downstream reviewers parse them.

# Diff Guide — <document title or filename>

**Original:** <label or path>
**Final:** <label or path>
**Lines:** <orig> → <final> (Δ <signed integer>)
**In-document version stamp:** <orig> → <final> (or `unchanged` / `not present`)
**Diff source:** <`shell diff` (paths on disk) | `line-aligned comparison` (text-only) | `partial — only one side on disk`> — if anything other than `shell diff`, note that rows may miss whitespace-level or structural changes a real diff would catch.

## Scope summary

<One paragraph: is this a structural change, an editorial pass, a content addition, a correction, or a mix? Name the dominant theme in plain language.>

## What changed

| # | Location | Category | What changed | Why reviewers should care | Risk |
|---|---|---|---|---|---|
| 1 | <section / line> | Added/Removed/Edited/Moved | <one sentence> | <one sentence or "Editorial only"> | none/behavior/accuracy/link/scope/version |

(One row per substantive change. Cap rows at 30; if there are more, keep the highest-risk 30 and append the truncation line below the table.)

_…and N additional substantive changes of `none` risk not shown — see raw diff for completeness._

## Cosmetic / non-substantive changes

<One aggregate line: count of whitespace-only, anchor-regenerated, or typo-fix hunks. List them only if the reviewer asks.>

## What did **not** change

- <Section heading or topic that a reviewer might expect to have changed but did not. List 3-6 items so reviewers don't waste time re-verifying stable content.>

## Metadata caveats

- <Filename / in-document version mismatch, missing version bump, author block changes, or any inconsistency between what the diff implies and what the metadata says. Write `- None.` if none.>

## Suggested reviewer focus

1. <Highest-risk change, by name.>
2. <Next highest, by name.>
3. <…up to 5 items. Order by Risk descending, then by reviewer effort descending.>

Diff-mode quality bar

The diff guide passes quality bar when:

Diff-mode constraints

Constraints — critique mode