Spec Review Summary
Purpose
Produce a concise, plain-language review summary of a specification so the reader can
decide quickly whether to approve it, without reading the full spec. The typical input is
a dotCMS Spec-Kit "PR 1 of 2" carrying a spec.md, but any spec PR or document works.
This skill is for the reviewer of a spec someone else wrote. It is complementary to the
speckit-* skills, which operate inside the spec authoring workflow.
Inputs
The user may share any combination of:
- A GitHub PR URL or number (e.g.
https://github.com/dotCMS/core/pull/37190 or 37190)
- Related GitHub issue links
- Local file paths or pasted documents
Workflow
- Fetch the PR (if a PR was given):
gh pr view <number> --repo <owner/repo> --json title,body,state,author,files,additions,deletions,baseRefName,headRefName
gh pr diff <number> --repo <owner/repo> to read the actual spec content
- Infer the repo from the URL; default to
dotCMS/core when only a number is given.
- Follow the trail: if the PR body or spec references a driving issue, parent epic, or
investigation issue and the summary would be materially better for it, fetch those with
gh issue view — but only what's needed; don't crawl everything.
- Read any extra docs the user shared (local files with Read, URLs with WebFetch).
- Classify the PR first: is it spec-only (docs, no code) or does it carry
implementation? State this up front — it changes what "reviewing" means.
Output format
Lead with a TL;DR paragraph: what the PR is (spec-only vs. code), what it adds, and the
one-sentence essence of the proposal.
Then these sections, in prose (short paragraphs and bullets — no walls of headers for a
simple spec):
- The problem, in simple words — the underlying issue as a story a non-expert teammate
can follow. Include the key numbers (measurements, counts, thresholds) because they carry
the argument.
- The proposed fix — what will actually change and why this approach was chosen over
alternatives the spec considered and rejected. Note anything explicitly optional/descopable.
- Scope — explicitly split in scope vs. out of scope, including hypotheses ruled
out and related findings deliberately not pursued.
- Implications — blast radius (shared components touched beyond the surfacing feature),
behavior-change guarantees, accepted residual risks/limitations, backward compatibility,
and any trade-off the spec is quiet about (memory, performance, migration).
- Test coverage — what tests exist in THIS PR (for spec-only PRs: typically none, by
design — say so and cite the TDD/process rule if applicable), and what the spec's success
criteria / acceptance scenarios commit future tests to prove. Flag success criteria that
are qualitative ("low count", "a handful") and will need pinning down.
Close with anything a reviewer should push back on: ambiguities, unstated assumptions,
missing sections, or scope creep. If there is nothing, don't invent it.
Visuals
The goal is clarity: a cold reader should grasp the whole picture from the visuals alone.
Skip visuals entirely when the spec is trivial or purely textual (a naming/policy change)
and a picture would add nothing; don't force one.
Mermaid diagram (always, when a visual helps). One mermaid diagram of the core
mechanism, ~5–12 nodes, real names (config keys, classes, endpoints) and real numbers,
quoted labels where they contain parentheses/colons. Include it in the chat summary as a
**Designed SVG visuals (only in HTML deliverables — see below).** When producing an HTML
deliverable, build:
- **A mechanism diagram** as hand-authored inline SVG. Prefer a **before/after layout**:
the same pipeline drawn twice ("Today" / "Proposed"), unchanged parts explicitly marked
"unchanged", the one thing that changes tagged (e.g. a "the only change" pill), and the
costly path drawn as a visually heavy arrow that becomes thin/dashed in the after panel.
Show real names and real numbers on the marks. Draw capacities/quantities as proportional
shapes when possible (e.g. a gauge that visibly overflows), not just as text. Wrap in
`<figure>` with a `<figcaption>` stating the claim and give the `<svg>` `role="img"` +
`aria-label`. Inline SVG needs no JavaScript: it renders offline in any browser.
- **A small chart and/or stat tiles whenever the spec's argument rests on measurements.**
A number pair like "~688 → 1–2 queries" is a pair of stat tiles; a capacity-vs-population
claim is a bar chart with a dashed threshold line. Direct-label everything; single hue +
neutral; text in ink tokens, never in series color.
- If diagramming or data-viz helper skills are available in your environment (e.g.
`artifact-diagramming`, `dataviz`), load them before drawing; if not, follow the
guidance above directly.
- Also embed the mermaid source in the HTML inside a collapsed
`<details><summary>Mermaid source — paste into GitHub</summary>` block, so the
copy-pasteable source travels with the document without duplicating the SVG's story.
## Deliverables
Adapt to what your environment supports — the chat summary is the one non-negotiable
deliverable.
1. **Chat summary** (always) — the sections above, with the ```mermaid fence inline.
2. **Standalone HTML file** (when the spec is substantial enough that visuals help) —
a self-contained `.html` page with the same sections and the SVG visuals as primary
figures (each in its own `overflow-x: auto` panel). Requirements:
- Full document skeleton (`<!DOCTYPE html>`, `<html>`, `<head>` with
`<meta charset="utf-8">`, `<body>`).
- For the collapsed mermaid-source block, load mermaid from CDN
(`https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs`,
`startOnLoad: true`, theme matched to `prefers-color-scheme`). Tell the user the
mermaid rendering needs internet; the SVG figures do not.
- Clickable links to the spec PR, its driving issue, and any parent epic/investigation
issues referenced (a footer "References" line works well).
- Name the file after the PR (e.g. `spec-review-pr-37190.html`) and write it somewhere
outside the repo working tree (a temp/scratch directory), then tell the user the path —
or deliver it through your client's file-sending mechanism if it has one. Never leave
it in the repo where it could be committed accidentally.
3. **Hosted/shareable page** (optional, only if your client supports publishing artifacts) —
publish the same page and give the user the link. Reuse the same artifact URL when
re-reviewing the same PR, so one spec keeps one page.
**Verifying rendering** (when browser tooling is available): render the HTML file and
screenshot each `<figure>`, eyeballing for label collisions/overflow. If your browser
tooling blocks `file:` URLs, serve the directory with `python3 -m http.server` in the
background, navigate, verify, then kill the server and remove any tool-generated folders
(e.g. `.playwright-mcp`) from the repo. Known quirk: that server sends no charset header,
so em-dashes/× may appear garbled in test screenshots — that's the test harness, not the
page; the standalone file carries its own `<meta charset>`. If no browser tooling is
available, skip verification and say so.
## Style rules
- Simple words. Explain jargon inline the first time it appears (e.g. "N+1 pattern — one
query per row instead of one query total").
- Keep the key measurements and identifiers exact (query counts, config keys, class names).
- Link every PR/issue mentioned as a markdown link.
- Match the user's language (English or Spanish).
- Selective, not compressed: drop detail that doesn't change the approve/request-changes
decision, but write what remains in full sentences.
1---2name: dot-pr-spec-summary3description: Summarize a spec PR (or any spec document) in simple words — proposed fix, scope, implications, and test coverage — so a reviewer can decide whether to approve without reading the full spec. Use when the user shares a PR URL/number or a spec document and asks to review, summarize, or understand it. Typical input is a Spec-Kit "PR 1 of 2" carrying a spec.md. Works in English and Spanish.4---56# Spec Review Summary78## Purpose910Produce a concise, plain-language review summary of a specification so the reader can11decide quickly whether to approve it, without reading the full spec. The typical input is12a dotCMS Spec-Kit "PR 1 of 2" carrying a `spec.md`, but any spec PR or document works.1314This skill is for the **reviewer** of a spec someone else wrote. It is complementary to the15`speckit-*` skills, which operate inside the spec *authoring* workflow.1617## Inputs1819The user may share any combination of:20- A GitHub PR URL or number (e.g. `https://github.com/dotCMS/core/pull/37190` or `37190`)21- Related GitHub issue links22- Local file paths or pasted documents2324## Workflow25261. **Fetch the PR** (if a PR was given):27 - `gh pr view <number> --repo <owner/repo> --json title,body,state,author,files,additions,deletions,baseRefName,headRefName`28 - `gh pr diff <number> --repo <owner/repo>` to read the actual spec content29 - Infer the repo from the URL; default to `dotCMS/core` when only a number is given.302. **Follow the trail**: if the PR body or spec references a driving issue, parent epic, or31 investigation issue and the summary would be materially better for it, fetch those with32 `gh issue view` — but only what's needed; don't crawl everything.333. **Read any extra docs** the user shared (local files with Read, URLs with WebFetch).344. **Classify the PR first**: is it spec-only (docs, no code) or does it carry35 implementation? State this up front — it changes what "reviewing" means.3637## Output format3839Lead with a **TL;DR** paragraph: what the PR is (spec-only vs. code), what it adds, and the40one-sentence essence of the proposal.4142Then these sections, in prose (short paragraphs and bullets — no walls of headers for a43simple spec):4445- **The problem, in simple words** — the underlying issue as a story a non-expert teammate46 can follow. Include the key numbers (measurements, counts, thresholds) because they carry47 the argument.48- **The proposed fix** — what will actually change and why this approach was chosen over49 alternatives the spec considered and rejected. Note anything explicitly optional/descopable.50- **Scope** — explicitly split **in scope** vs. **out of scope**, including hypotheses ruled51 out and related findings deliberately not pursued.52- **Implications** — blast radius (shared components touched beyond the surfacing feature),53 behavior-change guarantees, accepted residual risks/limitations, backward compatibility,54 and any trade-off the spec is quiet about (memory, performance, migration).55- **Test coverage** — what tests exist in THIS PR (for spec-only PRs: typically none, by56 design — say so and cite the TDD/process rule if applicable), and what the spec's success57 criteria / acceptance scenarios commit future tests to prove. Flag success criteria that58 are qualitative ("low count", "a handful") and will need pinning down.5960Close with anything a reviewer should push back on: ambiguities, unstated assumptions,61missing sections, or scope creep. If there is nothing, don't invent it.6263## Visuals6465The goal is clarity: a cold reader should grasp the whole picture from the visuals alone.66Skip visuals entirely when the spec is trivial or purely textual (a naming/policy change)67and a picture would add nothing; don't force one.6869**Mermaid diagram (always, when a visual helps).** One mermaid diagram of the core70mechanism, ~5–12 nodes, real names (config keys, classes, endpoints) and real numbers,71quoted labels where they contain parentheses/colons. Include it in the chat summary as a72```mermaid fence — it renders if pasted into GitHub (PR comments render mermaid natively).7374**Designed SVG visuals (only in HTML deliverables — see below).** When producing an HTML75deliverable, build:7677- **A mechanism diagram** as hand-authored inline SVG. Prefer a **before/after layout**:78 the same pipeline drawn twice ("Today" / "Proposed"), unchanged parts explicitly marked79 "unchanged", the one thing that changes tagged (e.g. a "the only change" pill), and the80 costly path drawn as a visually heavy arrow that becomes thin/dashed in the after panel.81 Show real names and real numbers on the marks. Draw capacities/quantities as proportional82 shapes when possible (e.g. a gauge that visibly overflows), not just as text. Wrap in83 `<figure>` with a `<figcaption>` stating the claim and give the `<svg>` `role="img"` +84 `aria-label`. Inline SVG needs no JavaScript: it renders offline in any browser.85- **A small chart and/or stat tiles whenever the spec's argument rests on measurements.**86 A number pair like "~688 → 1–2 queries" is a pair of stat tiles; a capacity-vs-population87 claim is a bar chart with a dashed threshold line. Direct-label everything; single hue +88 neutral; text in ink tokens, never in series color.89- If diagramming or data-viz helper skills are available in your environment (e.g.90 `artifact-diagramming`, `dataviz`), load them before drawing; if not, follow the91 guidance above directly.92- Also embed the mermaid source in the HTML inside a collapsed93 `<details><summary>Mermaid source — paste into GitHub</summary>` block, so the94 copy-pasteable source travels with the document without duplicating the SVG's story.9596## Deliverables9798Adapt to what your environment supports — the chat summary is the one non-negotiable99deliverable.1001011. **Chat summary** (always) — the sections above, with the ```mermaid fence inline.1022. **Standalone HTML file** (when the spec is substantial enough that visuals help) —103 a self-contained `.html` page with the same sections and the SVG visuals as primary104 figures (each in its own `overflow-x: auto` panel). Requirements:105 - Full document skeleton (`<!DOCTYPE html>`, `<html>`, `<head>` with106 `<meta charset="utf-8">`, `<body>`).107 - For the collapsed mermaid-source block, load mermaid from CDN108 (`https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs`,109 `startOnLoad: true`, theme matched to `prefers-color-scheme`). Tell the user the110 mermaid rendering needs internet; the SVG figures do not.111 - Clickable links to the spec PR, its driving issue, and any parent epic/investigation112 issues referenced (a footer "References" line works well).113 - Name the file after the PR (e.g. `spec-review-pr-37190.html`) and write it somewhere114 outside the repo working tree (a temp/scratch directory), then tell the user the path —115 or deliver it through your client's file-sending mechanism if it has one. Never leave116 it in the repo where it could be committed accidentally.1173. **Hosted/shareable page** (optional, only if your client supports publishing artifacts) —118 publish the same page and give the user the link. Reuse the same artifact URL when119 re-reviewing the same PR, so one spec keeps one page.120121**Verifying rendering** (when browser tooling is available): render the HTML file and122screenshot each `<figure>`, eyeballing for label collisions/overflow. If your browser123tooling blocks `file:` URLs, serve the directory with `python3 -m http.server` in the124background, navigate, verify, then kill the server and remove any tool-generated folders125(e.g. `.playwright-mcp`) from the repo. Known quirk: that server sends no charset header,126so em-dashes/× may appear garbled in test screenshots — that's the test harness, not the127page; the standalone file carries its own `<meta charset>`. If no browser tooling is128available, skip verification and say so.129130## Style rules131132- Simple words. Explain jargon inline the first time it appears (e.g. "N+1 pattern — one133 query per row instead of one query total").134- Keep the key measurements and identifiers exact (query counts, config keys, class names).135- Link every PR/issue mentioned as a markdown link.136- Match the user's language (English or Spanish).137- Selective, not compressed: drop detail that doesn't change the approve/request-changes138 decision, but write what remains in full sentences.