Bmad Prd
aj-geddes/claude-code-bmad-skills
PRD facilitator (John the PM). An agent skill from aj-geddes/claude-code-bmad-skills.
PRD writing and product definition expert. An agent skill from majiayu000/spellbook.
$ npx skills add majiayu000/spellbook --skill prd-master -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install majiayu000/spellbook prd-master --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/majiayu000/spellbook.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/prd-master .claude/skills/prd-master && rm -rf skills-srcUse ~/.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/
Install the "prd-master" agent skill from https://github.com/majiayu000/spellbook/tree/main/skills/prd-master into .claude/skills/prd-master/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prd-master", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/majiayu000/spellbook/tree/main/skills/prd-masterType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add majiayu000/spellbook --skill prd-master -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install majiayu000/spellbook prd-master --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/spellbook.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/prd-master .agents/skills/prd-master && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "prd-master" agent skill from https://github.com/majiayu000/spellbook/tree/main/skills/prd-master into .agents/skills/prd-master/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prd-master", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/spellbook --skill prd-master -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install majiayu000/spellbook prd-master --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/spellbook.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/prd-master .cursor/skills/prd-master && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "prd-master" agent skill from https://github.com/majiayu000/spellbook/tree/main/skills/prd-master into .cursor/skills/prd-master/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prd-master", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/majiayu000/spellbook.git --path skills/prd-master--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add majiayu000/spellbook --skill prd-master -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install majiayu000/spellbook prd-master --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/spellbook.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/prd-master .gemini/skills/prd-master && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "prd-master" agent skill from https://github.com/majiayu000/spellbook/tree/main/skills/prd-master into .gemini/skills/prd-master/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prd-master", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install majiayu000/spellbook prd-masterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add majiayu000/spellbook --skill prd-master -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/majiayu000/spellbook.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/prd-master .github/skills/prd-master && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "prd-master" agent skill from https://github.com/majiayu000/spellbook/tree/main/skills/prd-master into .github/skills/prd-master/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prd-master", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/spellbook --skill prd-master -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install majiayu000/spellbook prd-master --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/spellbook.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/prd-master .opencode/skills/prd-master && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "prd-master" agent skill from https://github.com/majiayu000/spellbook/tree/main/skills/prd-master into .opencode/skills/prd-master/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prd-master", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
prd-masterPRD writing and product definition expert. An agent skill from majiayu000/spellbook.
Prd Master is an agent skill from majiayu000/spellbook. PRD writing and product definition expert. Use when writing PRDs, user stories, acceptance criteria, or prioritizing features. Covers RICE/MoSCoW frameworks, agile requirements, and specification best practices.
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files (for example `reference/acceptance-criteria.md`, `reference/extended.md` and `reference/prioritization.md`).
It sits in Product & Project Management, covering PRD writing, User stories and Prioritization frameworks. The repository describes itself as: Cross-runtime skills for Claude Code, Codex, and multi-agent workflows. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ed52af7. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown and gherkin).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Prd Master loads about 3.4k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 418 words of instructions outside code blocks.
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.
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.
The full file from majiayu000/spellbook at commit ed52af7, republished under its MIT licence (© majiayu000). 418 words, ~3,357 tokens.
.claude/skills/prd-master/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.These rules are mandatory. Violating them means the skill is not working correctly.
All metrics and requirements must be quantifiable. Vague descriptions are forbidden.
❌ FORBIDDEN:
- "The app should be fast"
- "Support many users"
- "Good user experience"
- "The system should be reliable"
- "Easy to use interface"
✅ REQUIRED:
- "Page load time < 2s on 4G, < 500ms on WiFi (P95)"
- "Support 10,000 concurrent users with 99.9% uptime"
- "NPS > 50, Task completion rate > 85%"
- "99.9% availability, MTTR < 1 hour"
- "User can complete checkout in < 3 clicks"Never propose a solution without clearly defining the problem first.
❌ FORBIDDEN:
"We should add a search bar to the navigation"
✅ REQUIRED:
"Problem: Users can't find products quickly (40% exit rate on catalog).
They need a way to filter 1000+ products by attributes.
Proposed solutions: search bar, smart filters, AI recommendations."All user stories must pass the INVEST criteria checklist.
❌ FORBIDDEN:
- Dependent stories that can't be delivered independently
- Stories without acceptance criteria
- Stories too large to complete in one sprint
- Stories without clear user value
✅ REQUIRED:
- [ ] Independent — Can be delivered alone
- [ ] Negotiable — Details can be discussed
- [ ] Valuable — Clear user/business value
- [ ] Estimable — Team can estimate effort
- [ ] Small — Fits in one sprint
- [ ] Testable — Has acceptance criteria| Scenario | Approach | Tool/Framework |
|---|---|---|
| Feature prioritization | Scoring model | RICE, ICE |
| Release planning | Must/Should/Could/Won't | MoSCoW |
| Customer satisfaction | Delight vs basics | Kano Model |
| Sprint planning | User stories + BDD | Given-When-Then |
| Complex requirements | Traditional PRD | Full template |
| Agile iteration | Lean requirements | User stories + acceptance criteria |
## 1. Executive Summary
- Problem statement (2-3 sentences)
- Proposed solution (1-2 sentences)
- Success metrics (3-5 key metrics)
## 2. Context & Background
- Why now? Market opportunity or user pain
- Strategic alignment with company goals
- What happens if we don't build this?
## 3. Goals & Success Metrics
- Business objectives (revenue, retention, growth)
- User objectives (satisfaction, engagement)
- Success criteria (quantifiable targets)
## 4. Target Users & Personas
- Primary users (who benefits most?)
- Secondary users (indirect beneficiaries)
- User needs, pain points, motivations
- Jobs to be done
## 5. User Stories & Use Cases
- Core user flows
- Edge cases and error scenarios
- Integration with existing features
## 6. Requirements
- Functional requirements (what it does)
- Non-functional requirements (performance, security)
- Acceptance criteria (how we verify)
## 7. Out of Scope
- What we're explicitly NOT building
- Future considerations for later phases
## 8. Design & UX
- Link to design files (Figma, etc.)
- Key design decisions
- Accessibility requirements (WCAG 2.2 AA)
## 9. Technical Considerations
- Architecture overview
- Dependencies and integrations
- Data model changes
- API contracts
## 10. Rollout & Launch Plan
- Phased rollout strategy
- Feature flags and A/B tests
- Monitoring and alerts
- Rollback plan
## 11. Open Questions & Risks
- Unknowns requiring research
- Technical risks and mitigations
- Dependencies on other teamsAs a [persona/role],
I want to [action/goal],
So that [benefit/value].Card — Brief description on index card
→ Captures essence, not details
→ Placeholder for conversation
Conversation — Discussion between team members
→ Explore edge cases
→ Clarify assumptions
→ Uncover hidden requirements
Confirmation — Acceptance criteria
→ Defines "done"
→ Testable conditions
→ Given-When-Then formatIndependent — Story stands alone, minimal dependencies
Negotiable — Details emerge through conversation
Valuable — Delivers value to users or business
Estimable — Team can estimate effort
Small — Completable within one sprint
Testable — Clear acceptance criteria## Good User Stories
### Feature: Password Reset
As a user who forgot my password,
I want to reset it via email,
So that I can regain access to my account without contacting support.
**Acceptance Criteria:**
- Given I'm on the login page
- When I click "Forgot Password"
- Then I see a form requesting my email address
- Given I've entered my registered email
- When I submit the form
- Then I receive a password reset link within 2 minutes
- Given I click the reset link within 24 hours
- When I set a new password (min 8 chars, 1 number, 1 symbol)
- Then I'm logged in automatically
### Feature: Bulk Upload
As a content manager,
I want to upload multiple products via CSV,
So that I can save time compared to manual entry.
**Acceptance Criteria:**
- Given I'm on the products page
- When I click "Bulk Upload" and select a CSV file
- Then the system validates the file format (max 10MB, .csv only)
- Given the CSV has 1000 rows
- When I start the upload
- Then I see a progress bar showing completion percentage
- Given the upload completes
- When I view the results
- Then I see: success count, error count, downloadable error report❌ Too technical
"As a user, I want the API to return a 200 status code"
→ Focus on user benefit, not implementation
❌ Too vague
"As a user, I want the system to be fast"
→ Define measurable performance targets
❌ Missing the "so that"
"As a user, I want to filter products by price"
→ Add the value: "so that I can find items within my budget"
❌ Too large (Epic)
"As a user, I want a complete e-commerce checkout experience"
→ Break into smaller stories: cart, address, payment, confirmationGiven [precondition/context]
When [action/trigger]
Then [expected outcome]
And [additional context/outcome]✓ Keep scenarios focused (one behavior per scenario)
✓ Maintain clear separation of Given/When/Then
✓ Avoid UI-specific details (test behavior, not implementation)
✓ Make criteria testable and measurable
✓ Include both happy path and edge cases
✓ Use real user interactions, not hypothetical## E-commerce Checkout
Scenario: Successful payment with saved card
Given I have items in my cart
And I'm logged in with a saved payment method
When I click "Place Order"
Then I see an order confirmation page
And I receive a confirmation email within 2 minutes
And my cart is emptied
Scenario: Payment declined
Given I'm at the payment step
When I submit payment and the card is declined
Then I see an error message: "Payment declined. Please try another card."
And I remain on the payment page
And my cart items are preserved
Scenario: Session timeout during checkout
Given I've been idle for 30 minutes
When I attempt to place an order
Then I'm redirected to login
And my cart items are preserved after re-authentication
## Search Feature
Scenario: Search with results
Given I'm on the homepage
When I search for "laptop"
Then I see results within 500ms
And results are ranked by relevance
And I see result count: "Showing 1-20 of 156 results"
Scenario: Search with no results
Given I'm on the search page
When I search for "xyznonexistent"
Then I see "No results found for 'xyznonexistent'"
And I see search suggestions or alternative queriesFor simpler features, use a checklist:
## File Upload Acceptance Criteria
- [ ] Supports formats: PDF, DOCX, XLSX (max 10MB each)
- [ ] Shows upload progress bar
- [ ] Displays file name and size after upload
- [ ] Allows removal of uploaded files
- [ ] Shows error message for unsupported formats
- [ ] Shows error message for files exceeding size limit
- [ ] Scans files for malware before processing
- [ ] Works on mobile (iOS Safari, Android Chrome)RICE Score = (Reach × Impact × Confidence) / Effort
Reach — How many users affected per time period?
(users/quarter, transactions/month)
Impact — How much does it improve their experience?
3 = Massive, 2 = High, 1 = Medium, 0.5 = Low, 0.25 = Minimal
Confidence — How certain are we?
100% = High data, 80% = Medium, 50% = Low
Effort — Person-months required
(engineering + design + PM time)Example:
| Feature | Reach | Impact | Confidence | Effort | RICE Score |
|---|---|---|---|---|---|
| Password reset | 5000/month | 3 | 100% | 1 | 15,000 |
| Dark mode | 10000/month | 0.5 | 80% | 2 | 2,000 |
| Export to PDF | 500/month | 2 | 50% | 0.5 | 1,000 |
When to use: Managing many ideas, need quantitative comparison, have user data.
ICE Score = (Impact + Confidence + Ease) / 3
Impact — 1-10: How much business/user value?
Confidence — 1-10: How certain are we?
Ease — 1-10: How easy to implement? (10 = very easy)Example:
| Feature | Impact | Confidence | Ease | ICE Score |
|---|---|---|---|---|
| One-click login | 9 | 8 | 6 | 7.7 |
| AI recommendations | 10 | 5 | 3 | 6.0 |
| Email notifications | 6 | 9 | 9 | 8.0 |
When to use: Quick prioritization, weekly grooming, growth experiments, speed over precision.
Must Have — Critical for launch, non-negotiable
Without this, the product fails
Should Have — Important but not vital
Painful to omit, but workarounds exist
Could Have — Nice to have, "vitamins not painkillers"
Include if time/resources allow
Won't Have — Explicitly out of scope
Defer to future releasesExample: MVP E-commerce Site
| Must Have | Should Have | Could Have | Won't Have |
|---|---|---|---|
| Product listing | Product reviews | Wishlist | AR try-on |
| Shopping cart | Related products | Gift wrapping | Live chat |
| Checkout | Order tracking | Discount codes | Loyalty program |
| Payment (Stripe) | Email receipts | Social sharing | Mobile app |
| User accounts | Guest checkout | Product comparison | Subscriptions |
When to use: Sprint planning, MVP scoping, release boundaries, stakeholder alignment.
Basic Needs — Must-haves, assumed by users
Absence = dissatisfaction, presence = neutral
Example: Website loads, checkout works
Performance — More is better, linear satisfaction
Example: Faster page load, more payment options
Delighters — Unexpected features that wow
Absence = neutral, presence = delight
Example: Free shipping, personalized recommendations
Indifferent — Users don't care either way
Example: Animated logo, theme customizationWhen to use: Customer-driven decisions, balancing basics vs innovation, UX improvements.
Process:
Best practice: Combine frameworks
1. Use MoSCoW to define release scope
→ Separate must-haves from nice-to-haves
2. Use RICE to rank must-haves
→ Sequence within release based on impact
3. Use Kano to ensure balance
→ Don't over-invest in basics, under-invest in delight
Example:
- All "Must Have" items → Score with RICE → Build in RICE order
- Validate with Kano → Ensure we have delighters, not just basicsDetailed material starting at ## Agile Requirements Management has been moved to reference/extended.md to keep this skill concise. Load that reference when the task requires the moved examples, command catalogs, checklists, platform details, or implementation templates.
© majiayu000, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files in skills/prd-master of majiayu000/spellbook.
Open the folder on GitHubat commit ed52af7
Prd Master 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Prd Master this skillmajiayu000/spellbook | 287 | — | ~3.4k | Automated safety check: Pass | MIT | |
| Bmad Prdaj-geddes/claude-code-bmad-skills | 488 | — | ~1.8k | Automated safety check: Notes | Custom licence | |
| Extract Featuresnurettincoban/ai-prd-workflow | 298 | — | ~1k | Automated safety check: Pass | MIT | |
| Oma Pmfirst-fluke/oh-my-agent | 1.3k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Requirement SummarizerArabelaTso/Skills-4-SE | 253 | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Ralph Tui Create Beadssubsy/ralph-tui | 2.5k | 1 repos | ~2.6k | Automated safety check: Pass | MIT |
aj-geddes/claude-code-bmad-skills
PRD facilitator (John the PM). An agent skill from aj-geddes/claude-code-bmad-skills.
nurettincoban/ai-prd-workflow
Turn PRD.md into FEATURES.md: permanent feature IDs, MoSCoW priorities, acceptance criteria and the PRD requirement each feature comes from.
first-fluke/oh-my-agent
Turn product requirements into scoped tasks with dependencies and acceptance criteria.
ArabelaTso/Skills-4-SE
Extract and summarize core features, constraints, and priorities from requirement documents.
subsy/ralph-tui
Convert PRDs to beads for ralph-tui execution. An agent skill from subsy/ralph-tui.
alirezarezvani/claude-skills
Writes INVEST-checked user stories with acceptance criteria, splits epics, plans sprints from velocity and ranks the backlog with a weighted score.
majiayu000/spellbook
Audits and repairs how coding-agent Skills are owned, copied and exposed across runtimes, from canonical sources to quarantine and retirement.
majiayu000/spellbook
Scans a repository for real evidence and proposes, or on request writes, a small stack of root and scoped AGENTS.md files with validation commands and generated-file boundaries.
majiayu000/spellbook
Plans, produces or diagnoses evidence-backed product demo videos: script, capture plan, pacing checks and verified final media built on real product behavior.
majiayu000/spellbook
Single entry point that routes long or ambiguous agent tasks, checks live state, bounds autonomous loops and leaves a resumable handoff.
majiayu000/spellbook
Scans a repository, its lockfiles and node_modules for known malicious npm package versions and install-time indicators, using a read-only Python scanner.
majiayu000/spellbook
Product management helpers: a RICE scoring script, an interview transcript analyzer and PRD templates for prioritizing features, synthesizing research and writing requirements.
Categories
PRD writing and product definition expert. An agent skill from majiayu000/spellbook. Prd Master is an agent skill from majiayu000/spellbook. PRD writing and product definition expert.
Prd Master fits situations like: acceptance criteria; prioritizing features.
Run `npx skills add majiayu000/spellbook --skill prd-master -a claude-code`. Or copy the skill folder (skills/prd-master in majiayu000/spellbook) into .claude/skills/prd-master in your project. Claude Code loads it when a task matches its description.
Run `npx skills add majiayu000/spellbook --skill prd-master -a codex`. Or copy the skill folder (skills/prd-master in majiayu000/spellbook) into .agents/skills/prd-master in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add majiayu000/spellbook --skill prd-master -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/prd-master, .gemini/skills/prd-master, .github/skills/prd-master and .opencode/skills/prd-master in your project.
SKILL.md names no scripts, command-line tools or credentials: Prd Master is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Prd Master is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Prd Master: Bmad Prd (aj-geddes/claude-code-bmad-skills, 488 stars), Extract Features (nurettincoban/ai-prd-workflow, 298 stars), Oma Pm (first-fluke/oh-my-agent, 1.3k stars) and Requirement Summarizer (ArabelaTso/Skills-4-SE, 253 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
majiayu000 (a GitHub user) maintains it in majiayu000/spellbook, which has 287 GitHub stars. The repository holds 97 skills in this directory. The repository was last updated on October 8, 2026.
Source: majiayu000/spellbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.