Agent skill

Utility Update Pm Skills

by product-on-purpose in product-on-purpose/pm-skills

Checks for newer pm-skills releases, compares local vs. An agent skill from product-on-purpose/pm-skills.

Apache-2.0Auto-check passedDevelopment

Install Utility Update Pm Skills

skills CLI
$ npx skills add product-on-purpose/pm-skills --skill utility-update-pm-skills -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install product-on-purpose/pm-skills utility-update-pm-skills --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/product-on-purpose/pm-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/utility-update-pm-skills .claude/skills/utility-update-pm-skills && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
utility-update-pm-skills
GitHub stars
716
Token cost
~3.6k tokens
SKILL.md length
1,551 words
Files
5 (incl. references)
Skills in repo
68
Repo updated
First seen
Licence
Apache-2.0

At a glance

Checks for newer pm-skills releases, compares local vs. An agent skill from product-on-purpose/pm-skills.

  • Works in 6 steps: Pre-Flight → Version Comparison → Preview → …
  • You want to bring a local pm-skills installation up to date
  • SKILL.md covers When to Use, When NOT to Use, Flags and Instructions, plus 5 more sections
  • Calls git, npm and gh

What it does

Utility Update Pm Skills is an agent skill from product-on-purpose/pm-skills. Checks for newer pm-skills releases, compares local vs. latest version, previews what would change, and updates local files after user confirmation. Generates a structured update report documenting changed files, new capabilities, and the value delta between versions. Use when you want to bring a local pm-skills installation up to date.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `HISTORY.md`, `evals/trigger-fixtures.json` and `references/EXAMPLE.md`).

It sits in Development. It works with GitHub and Git. The repository describes itself as: 68 plug-and-play, best-practice product management skills for AI agents: 30 Triple Diamond phase + 11 foundation + 12 utility + 15 tool (Foundation Sprint + Design Sprint). Plus… The licence is Apache-2.0.

When your agent uses it

  • You want to bring a local pm-skills installation up to date

Example prompts

  • “Use the utility-update-pm-skills skill to check for newer pm-skills releases, compares local vs. An agent skill from product-on-purpose/pm-skills”
  • “/utility-update-pm-skills”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Pre-Flight
  2. Version Comparison
  3. Preview
  4. Confirmation
  5. Update
  6. Post-Update

What it can do on your machine

Read from SKILL.md and the folder at commit 1cef1a9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • npm
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, npm and gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Utility Update Pm Skills loads about 3.6k tokens when it runs, and up to ~6k if it reads all its reference files. Until then it costs about 91 tokens; SKILL.md has 1,551 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~91
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from product-on-purpose/pm-skills at commit 1cef1a9, republished under its Apache-2.0 licence (© product-on-purpose). 1,551 words, ~3,559 tokens.

Download SKILL.mdSave it as .claude/skills/utility-update-pm-skills/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
utility-update-pm-skills
description
Checks for newer pm-skills releases, compares local vs. latest version, previews what would change, and updates local files after user confirmation. Generates a structured update report documenting changed files, new capabilities, and the value delta between versions. Use when you want to bring a local pm-skills installation up to date.
license
Apache-2.0
metadata.classification
utility
metadata.version
1.0.1
metadata.updated
2026-07-04
metadata.category
coordination
metadata.frameworks
triple-diamond
metadata.author
product-on-purpose
<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->

PM Skills Updater

This skill updates a local pm-skills installation to the latest public release. It validates connectivity, compares versions, previews changes, and produces a structured report documenting what was updated and what new capabilities are available.

When to Use

  • When you want to update local pm-skills to the latest release
  • When you want to check if a newer version is available
  • After a new pm-skills release is announced
  • When onboarding and you want to confirm you have the latest version

When NOT to Use

  • To create or edit individual skills -> use utility-pm-skill-builder or utility-pm-skill-iterate
  • To validate skills against conventions -> use utility-pm-skill-validate
  • If you are a maintainer working directly on the pm-skills repo (use git)
  • To pin a specific older version (this skill always targets the latest release)

Flags

FlagBehavior
(none)Full update flow: pre-flight → preview → confirm → update → report
--report-onlyPre-flight → preview → report (no files written)
--statusLightweight version check - prints current and latest version, then stops
--status behavior

When --status is provided, run only the pre-flight checks and display:

pm-skills v{local} (installed, from {source})
pm-skills v{latest} (latest, released {date})
{Status: up to date | update available ({type})}

Run utility-update-pm-skills for details, or utility-update-pm-skills --report-only for a preview.

No report file is generated. No files are written.

Instructions

When asked to update pm-skills (without --status), follow these steps:

Step 1: Pre-Flight

Run three checks before proceeding:

  1. Network access: Reach the GitHub API or repository URL (https://github.com/product-on-purpose/pm-skills). Use any available method: curl, wget, GitHub CLI (gh), or MCP tools.

  2. Latest version: Query the latest release using this fallback chain (try each in order, use the first that succeeds):

    1. GitHub API: GET /repos/product-on-purpose/pm-skills/releases/latest
    2. GitHub CLI: gh release list --repo product-on-purpose/pm-skills --limit 1
    3. Git: git ls-remote --tags https://github.com/product-on-purpose/pm-skills.git

    If all three fail (rate limiting, 404, malformed response, no network), enter degraded mode (see below).

    Record: version string, release date, release notes URL, release notes body.

  3. Local version: Read from the first available source:

    • .claude-plugin/plugin.json → version field
    • marketplace.json → plugins[0].version field
    • CHANGELOG.md → most recent version header
    • Git tags → most recent v* tag

    Version parsing: Normalize by stripping an optional v prefix and trimming whitespace. If a source is present but yields an empty, non-semver, or malformed string (invalid JSON, missing field), skip it with a warning and try the next source. Only fall back to 0.0.0 after all four sources fail.

If network access fails (degraded mode):

  • Report the failure with error details.
  • Provide manual update instructions:

    Visit https://github.com/product-on-purpose/pm-skills/releases to download the latest release. Extract the archive and copy the skills/, commands/, _workflows/, and other content directories to your local pm-skills installation.

  • Stop execution.
Step 2: Version Comparison

Compare the local version against the latest release using semver.

If local version >= latest version:

  • Report: "Your pm-skills installation is up to date (v{local})."
  • Offer to generate a report-only anyway.
  • Stop execution.

If local version < latest version:

  • Show the version delta:
    Local version:  v{local}
    Latest version: v{latest}
    Update type:    {major | minor | patch}
  • Major version warning: If the update is a major bump (e.g., v2.x to v3.x), show a prominent warning:

    This is a major version update. It may include breaking changes to skill contracts. Review the release notes before proceeding.

  • Continue to Step 3.
Step 3: Preview

Show the user what the update includes:

  1. Version delta: local version, latest version, update type.

  2. Value summary: Derive from CHANGELOG entries between the two versions, GitHub release notes, and directory diffs (new skills/, new _workflows/ files):

    • New skills and what they enable
    • Updated skills and what improved
    • New workflows and what they connect
    • Other notable changes
  3. File manifest: List of files and folders that will be written, grouped by directory with counts:

    Files to be written:
      skills/       31 files (2 new, 29 updated)
      commands/     38 files (2 new, 36 updated)
      _workflows/    9 files (1 new, 8 updated)
      other          7 files
      Total:        85 files

If --report-only: Generate the report using references/TEMPLATE.md with the banner "Report only - update was not applied." Save to _pm-skills/updates/update-report_v{latest}_report-only_{YYYY-MM-DD_HHMMSS}.md. Stop execution.

Step 4: Confirmation

Prompt the user for two decisions:

  1. Update confirmation: "These files will be overwritten. Proceed? [yes / no]"

    • If major version bump: require typing "yes" explicitly.
    • If the user declines: save a report-only and stop.
  2. Backup offer: "Create a backup of current files before updating? [yes (recommended) / no]"

    • If yes: copy all in-scope files to _pm-skills/backups/v{current}_{YYYY-MM-DD_HHMMSS}/
    • Create the _pm-skills/ directory if it doesn't exist.
Step 5: Update

Execute the update using validated-before-copy with backup:

  1. Download: Fetch the release ZIP asset (pm-skills-vX.Y.Z.zip) from the GitHub Release page to a temporary directory. This is the curated build artifact produced by build-release.sh - it includes only user-facing content and excludes docs/internal/.

  2. Validate: Confirm the extracted archive contains skills/, commands/, AGENTS.md, and .claude-plugin/plugin.json. If validation fails, report the error and stop without writing any files.

  3. Copy: Overwrite in-scope files from the extracted archive to the install root. Show progress per directory:

    Updating pm-skills v2.9.0 -> v2.10.0...
      skills/       31/31 ████████████████████  done
      commands/     38/38 ████████████████████  done
      _workflows/    9/9  ████████████████████  done
      other files    7/7  ████████████████████  done
  4. Clean up: Remove the temporary directory.

Step 6: Post-Update
  1. Smoke test:

    • Version consistency: plugin.json, marketplace.json, and CHANGELOG.md all reflect the new version. (Note: version detection in Step 1 uses first-match; the smoke test verifies all sources agree. A mismatch here suggests a release packaging issue.)
    • File integrity: AGENTS.md, skills/, commands/, _workflows/ all exist.
    • Skill count delta: count skills before and after, report the change.
    • If any check fails: warn the user with specific details. Do NOT auto-rollback. Provide recovery guidance:
      • Version mismatch: "Run the update again, or manually edit {file} to set the version to {expected}."
      • Missing files: "Re-run utility-update-pm-skills to re-download, or restore from backup: cp -r _pm-skills/backups/{dir}/* ."
      • If backup exists: Always remind the user of the backup location and restore command.
  2. Summary line: Show a single scannable confirmation:

    Updated v{old} -> v{new} | +{n} skills, +{n} workflows | Report: _pm-skills/updates/{file}
  3. Completion report: Generate using references/TEMPLATE.md and save to _pm-skills/updates/update-report_v{from}-to-v{to}_{YYYY-MM-DD_HHMMSS}.md

  4. MCP advisory: If ../pm-skills-mcp/ exists, try to read pm-skills-source.json. If the file is missing or malformed, show: "pm-skills-mcp detected but pm-skills-source.json not found or unreadable. Check the MCP repo manually." If readable, show:

    pm-skills-mcp detected at ../pm-skills-mcp/
      Embedded skills version: v{embedded}
      Updated pm-skills version: v{new}
    
      To update the MCP server's embedded skills:
        cd ../pm-skills-mcp && npm run embed-skills && npm run build
  5. Next steps:

    Next Steps:
    - Review the update report at _pm-skills/updates/{report-file}
    - Run utility-pm-skill-validate --all to verify skill integrity
    - Run local CI: bash scripts/lint-skills-frontmatter.sh
    - Check release notes: {release-url}
Show full SKILL.md (625 more words)Show less

File Scope

The updater writes only files present in the release ZIP asset (pm-skills-vX.Y.Z.zip), which is the curated build produced by build-release.sh. As of v2.30.0 the ZIP also carries the agents/ sub-agent definitions and the hooks/ activation hooks, so a ZIP install has the runtime files the dispatch skills reference. The ZIP excludes docs/internal/ and other non-user-facing content - no exclusion logic is needed at copy time.

Files included in the release ZIP (updated):

PathRationale
skills/Core skill files
commands/Slash command definitions
_workflows/Workflow chains
agents/Sub-agent definitions the utility-pm-* dispatch skills read at runtime
hooks/Activation hooks (guardrails + phase router) including hooks.json
library/Sample library and skill output samples (note: user-added samples may be overwritten)
AGENTS.mdSkill discovery for IDEs
.claude-plugin/plugin.jsonVersion + plugin metadata
marketplace.jsonMarketplace metadata
CHANGELOG.mdRelease history
README.mdPublic docs
docs/ (public guides, reference, workflows)User-facing documentation
scripts/CI/validation scripts
mkdocs.ymlDocs site config

Files NOT in the release ZIP (never overwritten):

PathRationale
docs/internal/Excluded from ZIP by build-release.sh
_NOTES/Local-only, gitignored, not in ZIP
_pm-skills/Local state (reports, backups), not in ZIP
.github/CI workflows, not in ZIP
CONTRIBUTING.md, LICENSENot in ZIP (repo-level files)

Output Contract

The skill MUST:

  • Validate network access before any remote operations
  • Show a preview before writing any files
  • Require explicit user confirmation before overwriting
  • Offer a backup before overwriting
  • Use validated-before-copy (download to temp, validate, then copy; backup is the recovery path for mid-copy failures)
  • Generate a report in both modes (report-only and completion)
  • Run the post-update smoke test
  • Show MCP advisory if sibling repo is detected

The skill MUST NOT:

  • Write files without user confirmation
  • Proceed without network access confirmation
  • Modify files outside the pm-skills directory
  • Modify docs/internal/, _NOTES/, or _pm-skills/ with upstream content
  • Auto-rollback on smoke test failure (inform the user instead)
  • Delete local files that don't exist in the upstream release

Quality Checklist

Before marking the update complete, verify:

  • Pre-flight passed: network, versions detected
  • User was shown preview before any files were written
  • User explicitly confirmed before update proceeded
  • Backup was offered (and created if accepted)
  • Archive was downloaded to temp and validated before copying
  • All in-scope files were written successfully
  • Version consistency: plugin.json, marketplace.json, CHANGELOG match
  • File integrity: AGENTS.md, skills/, commands/, _workflows/ exist
  • Skill count delta is reported (before -> after)
  • Report was generated and saved to _pm-skills/updates/
  • MCP advisory was shown if sibling repo detected
  • Next steps were presented
  • Summary line displayed

FAQ

I'm a contributor who cloned the repo. Should I use this skill? No. Use git pull or git fetch && git merge instead. This skill is for end users who installed pm-skills as a plugin or downloaded a release.

Can I update to a specific version instead of the latest? Not in v1. This skill always targets the latest release. To install a specific version, download it manually from the releases page.

What happens to my local notes and planning docs? They are never touched. The skill explicitly excludes docs/internal/, _NOTES/, and _pm-skills/ from updates. See the File Scope table.

What happens to files I added that aren't in the upstream release? They are left untouched. The skill only overwrites files that exist in the new release - it never deletes local files.

How do I undo an update? If you created a backup (the default offer), restore it: cp -r _pm-skills/backups/v{version}_{timestamp}/* . If you didn't create a backup but have git, use git checkout . to restore tracked files to their last committed state.

The update failed partway through. What do I do? The skill validates before copying (download to temp, check, then write), so partial failures are rare. If it does happen: restore from backup if available, or re-run utility-update-pm-skills to retry.

Further Reading

For a visual walkthrough and additional context, see the Updating PM Skills Guide.

© product-on-purpose, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (references) in skills/utility-update-pm-skills of product-on-purpose/pm-skills.

  • SKILL.md
  • HISTORY.md
  • evals/trigger-fixtures.json
  • references/EXAMPLE.md
  • references/TEMPLATE.md

Open the folder on GitHubat commit 1cef1a9

Compare with similar skills

Utility Update Pm Skills next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Utility Update Pm Skills compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Utility Update Pm Skills this skillproduct-on-purpose/pm-skills716—~3.6kAutomated safety check: PassApache-2.0
Contributor-First PR MergeHKUDS/OpenHarness16k1 repos~847Automated safety check: PassMIT
Create Pull Requestcline/cline70k1 repos~1.6kAutomated safety check: PassApache-2.0
Pull Request Title and Body Writeropeninterpreter/openinterpreter69k2 repos~1.1kAutomated safety check: PassApache-2.0
Draft Release Notesjamiepine/voicebox57k—~941Automated safety check: PassMIT
PR Review State Fetchprisma/orm48k—~767Automated safety check: PassApache-2.0

Similar skills

  • Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.

    16k GitHub starsUsed in 1 repo~847 tokens
    DevelopmentAuto-check passed
  • Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.

    70k GitHub starsUsed in 1 repo~1.6k tokens
    DevelopmentAuto-check passed
  • Pull Request Title and Body Writer

    openinterpreter/openinterpreter

    Rewrites the title and body of one or more pull requests with gh, leading with why the change was made, then what changed, and describing only the net result.

    69k GitHub starsUsed in 2 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Draft Release Notes

    jamiepine/voicebox

    Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.

    57k GitHub stars~941 tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Official

    Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.

    48k GitHub stars~767 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.

    70k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed

More from product-on-purpose/pm-skills

All 68 skills in this repo
  • Define Hypothesis

    product-on-purpose/pm-skills

    Defines a testable hypothesis with clear success metrics and a validation approach.

    716 GitHub stars~966 tokensUpdated 3 days ago
    Auto-check passed
  • Define Jtbd Canvas

    product-on-purpose/pm-skills

    Creates a Jobs to be Done canvas capturing the functional, emotional, and social dimensions of a customer job.

    716 GitHub stars~1.1k tokensUpdated 3 days ago
    Auto-check passed
  • Define Opportunity Tree

    product-on-purpose/pm-skills

    Creates an opportunity solution tree connecting a desired outcome to customer opportunities and candidate solutions, preventing solution-first jumps in continuous discovery.

    716 GitHub stars~1.1k tokensUpdated 3 days ago
    Auto-check passed
  • Define Problem Statement

    product-on-purpose/pm-skills

    Creates a clear problem framing document with user impact, business context, and success criteria.

    716 GitHub stars~932 tokensUpdated 3 days ago
    Auto-check passed
  • Deliver Acceptance Criteria

    product-on-purpose/pm-skills

    Generates structured Given/When/Then acceptance criteria for a user story or feature slice, covering the happy path, key failure scenarios, and non-functional expectations in testable form.

    716 GitHub stars~1k tokensUpdated 3 days ago
    Auto-check passed
  • Deliver Launch Checklist

    product-on-purpose/pm-skills

    Creates a cross-functional pre-launch checklist covering engineering, design, marketing, support, legal, and operations readiness, with owners, dates, and go/no-go criteria so nothing is missed…

    716 GitHub stars~970 tokensUpdated 3 days ago
    Auto-check passed

Works with

Categories

Questions about Utility Update Pm Skills

What does Utility Update Pm Skills do?

Checks for newer pm-skills releases, compares local vs. An agent skill from product-on-purpose/pm-skills. Utility Update Pm Skills is an agent skill from product-on-purpose/pm-skills. Checks for newer pm-skills releases, compares local vs.

When should I use Utility Update Pm Skills?

Utility Update Pm Skills fits situations like: you want to bring a local pm-skills installation up to date.

How do I install Utility Update Pm Skills in Claude Code?

Run `npx skills add product-on-purpose/pm-skills --skill utility-update-pm-skills -a claude-code`. Or copy the skill folder (skills/utility-update-pm-skills in product-on-purpose/pm-skills) into .claude/skills/utility-update-pm-skills in your project. Claude Code loads it when a task matches its description.

How do I install Utility Update Pm Skills in Codex?

Run `npx skills add product-on-purpose/pm-skills --skill utility-update-pm-skills -a codex`. Or copy the skill folder (skills/utility-update-pm-skills in product-on-purpose/pm-skills) into .agents/skills/utility-update-pm-skills in your project. Codex loads it when a task matches its description.

Can I use Utility Update Pm Skills in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add product-on-purpose/pm-skills --skill utility-update-pm-skills -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/utility-update-pm-skills, .gemini/skills/utility-update-pm-skills, .github/skills/utility-update-pm-skills and .opencode/skills/utility-update-pm-skills in your project.

What does Utility Update Pm Skills need to run?

Going by SKILL.md and its folder, Utility Update Pm Skills needs the command-line tools its instructions call (git, npm and gh).

Does Utility Update Pm Skills access the network?

SKILL.md contains no URLs. Its commands use git, npm and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Utility Update Pm Skills safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Utility Update Pm Skills use?

Utility Update Pm Skills is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Utility Update Pm Skills use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.4k tokens, read only when the agent opens those files.

What are the alternatives to Utility Update Pm Skills?

Skills that share tags, products or a category with Utility Update Pm Skills: Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Create Pull Request (cline/cline, 70k stars), Pull Request Title and Body Writer (openinterpreter/openinterpreter, 69k stars) and Draft Release Notes (jamiepine/voicebox, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Utility Update Pm Skills?

product-on-purpose (a GitHub organization) maintains it in product-on-purpose/pm-skills, which has 716 GitHub stars. The repository holds 68 skills in this directory. The repository was last updated on October 8, 2026.

Source: product-on-purpose/pm-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.