Review Hog Blind Spots General
PostHog/posthog
The general blind-spot check for PostHog Review, the final sweep that runs after every enabled review perspective has reviewed a chunk.
Run a risk-scaled blind-spot discovery pass over a converged, exported frame BETWEEN /think and /spec-to-plan (the seventh origin skill, third leg in flow order): pressure-test the spec through…
$ npx skills add agentculture/culture --skill challenge -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install agentculture/culture challenge --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/agentculture/culture.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/challenge .claude/skills/challenge && 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 "challenge" agent skill from https://github.com/agentculture/culture/tree/main/.claude/skills/challenge into .claude/skills/challenge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "challenge", 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/agentculture/culture/tree/main/.claude/skills/challengeType 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 agentculture/culture --skill challenge -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install agentculture/culture challenge --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentculture/culture.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/challenge .agents/skills/challenge && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "challenge" agent skill from https://github.com/agentculture/culture/tree/main/.claude/skills/challenge into .agents/skills/challenge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "challenge", 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 agentculture/culture --skill challenge -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install agentculture/culture challenge --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentculture/culture.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/challenge .cursor/skills/challenge && 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 "challenge" agent skill from https://github.com/agentculture/culture/tree/main/.claude/skills/challenge into .cursor/skills/challenge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "challenge", 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/agentculture/culture.git --path .claude/skills/challenge--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 agentculture/culture --skill challenge -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install agentculture/culture challenge --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentculture/culture.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/challenge .gemini/skills/challenge && 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 "challenge" agent skill from https://github.com/agentculture/culture/tree/main/.claude/skills/challenge into .gemini/skills/challenge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "challenge", 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 agentculture/culture challengeInstalls 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 agentculture/culture --skill challenge -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/agentculture/culture.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/challenge .github/skills/challenge && 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 "challenge" agent skill from https://github.com/agentculture/culture/tree/main/.claude/skills/challenge into .github/skills/challenge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "challenge", 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 agentculture/culture --skill challenge -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install agentculture/culture challenge --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentculture/culture.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/challenge .opencode/skills/challenge && 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 "challenge" agent skill from https://github.com/agentculture/culture/tree/main/.claude/skills/challenge into .opencode/skills/challenge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "challenge", 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.
challengeRun a risk-scaled blind-spot discovery pass over a converged, exported frame BETWEEN /think and /spec-to-plan (the seventh origin skill, third leg in flow order): pressure-test the spec through…
Challenge is an agent skill from agentculture/culture. Run a risk-scaled blind-spot discovery pass over a converged, exported frame BETWEEN /think and /spec-to-plan (the seventh origin skill, third leg in flow order): pressure-test the spec through structured lenses, route every finding back through the existing deterministic moves as proposed-only content the human adjudicates, and on a clean pass record the examined lenses/surfaces and residual uncertainty — never a claim that there are no unknown unknowns. Use when the user says "challenge this spec", "blind-spot…
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Culture turns isolated stochastic agents into cooperative, inspectable, improvable artificial colleagues. The licence is Apache-2.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d5b5715. 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 bash).
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.
Challenge loads about 4.1k tokens when it runs. Until then it costs about 219 tokens; SKILL.md has 1,859 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 agentculture/culture at commit d5b5715, republished under its Apache-2.0 licence (© agentculture). 1,859 words, ~4,082 tokens.
.claude/skills/challenge/SKILL.md (or your agent's skills folder).The skill is named challenge; it is the blind-spot discovery leg of
the devague method — the seventh origin skill, sitting third in flow
order, between the spec leg and the plan leg:
scope -> think -> challenge -> spec-to-plan -> assign-to-workforce -> deviate -> summarize-deliveryBefore this leg existed, a frame could converge on precisely stated claims while the original framing was still incomplete: open questions only captured uncertainty someone had already noticed — nothing actively hunted omitted dimensions, hidden dependencies, or assumptions shared by everyone in the frame, and no record existed of which surfaces were ever examined (issue 73's problem statement). Strictly speaking, an unknown unknown cannot be listed directly — once articulated, it becomes a known unknown. The useful capability is therefore to raise the odds of discovering blind spots and lower the cost of the surprises that remain, not to promise their elimination.
That is the surprise-cost rationale: an articulated blind spot becomes a
known unknown the method can manage; an unexamined one surfaces later as a
mid-run /deviate or a production surprise. Discovery before planning is
cheaper than either — a proposed claim the human rejects costs minutes; the
same gap found mid-fan-out stops a wave, and found in production it costs
whatever the blast radius costs.
This doc is written for two readers. The operator — the main agent — runs
the pass: sweeps the lenses, drives the deterministic CLI move by move, and
proposes findings. The gate-owning human adjudicates: every finding lands
proposed, and confirming, rejecting, or resolving it is the human exercising
the existing spec gate (gate 1) — challenge adds no fourth gate, mirroring
how /deviate amends gate 2 rather than adding one.
The timing is a recorded decision — quote it, don't re-derive it:
the challenge pass runs after /think exports: challenge the converged, exported frame before
devague plan new; findings reopen the frame, reconverge, and re-export the same dated spec file — /think stays self-contained (resolves q1)
— decision c17 in docs/specs/2026-07-15-challenge-skill.md.
Concretely: /think finishes its own arc (converge, export) untouched. Then
/challenge pressure-tests the exported spec before devague plan new
seeds a plan from it. Findings land as proposed claims, honesty conditions,
questions, or parks — which reopens the frame — the human adjudicates, the
frame reconverges, and devague export re-exports the same dated
file (docs/specs/<created-date>-<slug>.md; exports are prefixed with the
frame's creation date, so a re-export overwrites in place rather than
spawning a duplicate). That reconverge-and-re-export loop repeats until the
pass's findings are all adjudicated and the spec artifact carries them.
The pass is mandatory but proportional: lightweight for ordinary work, rigorous for high-risk work (integration option 1 from issue 73, per the issue author — a distinct operator skill, no new CLI engine until the workflow proves it needs one). Which work is high-risk is likewise a recorded decision:
the named escalation signals that deepen the pass from lightweight to rigorous: migrations, security-sensitive work, distributed state, hardware, destructive operations, other hard-to-reverse changes, concurrency hazards, and any surface that can lose user data (resolves q3)
— decision c19 in docs/specs/2026-07-15-challenge-skill.md.
If any escalation signal applies, run the rigorous form: every lens, deliberate counter-evidence hunting, and cheap probes where they would settle a real question. If none applies, a lightweight sweep — one pass over the lenses against the exported spec, minutes not hours — satisfies the method. Lightweight never means skipped: even the lightest pass leaves durable records (see the hard rules).
Sweep the exported spec, the live frame, and the surfaces the idea touches through these structured lenses (from issue 73):
.devague/ state)./think has
already exported, and no plan seeded from it yet (devague status shows
where the frame stands; the exported spec-md is the artifact under
challenge).--origin llm and lands
proposed — the pass cannot silently convert speculation into confirmed
requirements.devague review lists every proposal with
ids; devague confirm / devague reject / devague question --resolve
are user-only decisions. This is the existing spec gate doing its job.devague converge, then devague export —
the same dated spec file now carries the adjudicated findings and the
pass's provenance (the exported spec renders scope entries in its
Scope exploration section).devague scope
entries, one per lens/surface, e.g. challenge pass / concurrency lens: devague/store.py) and what residual uncertainty remains (park). A bare
"no issues found" is not an outcome this skill produces.Challenge keeps no parallel prose-only artifact — the frame is the record, and every output category from issue 73 has an existing deterministic move to land in:
| Output category (issue 73) | What it is | Landing move |
|---|---|---|
| known facts | something the pass established, with provenance | capture --kind requirement / --kind decision / --kind boundary (--origin llm → lands proposed) |
| assumptions | beliefs the frame leaned on unstated | capture --kind assumption --origin llm, then pressure-test with interrogate --honesty / --hard-question / --contradicts |
| known unknowns / open questions | articulated uncertainty | question "<text>" when it needs a user decision; park --kind unknown_nonblocking|unknown_blocking when not decidable now |
| unexamined surfaces | what this pass did not (or could not) look at | devague scope "<surface>" --finding "<what was and wasn't examined, and why>" |
| residual surprise risk | uncertainty that survives the pass | park on the frame while speccing; devague plan risk --kind <kind> once the plan exists |
| resilience measures | containment, rollback, recovery the surprise cost demands | spec-side capture --kind requirement / --kind boundary; plan-side devague plan risk (see below) |
Every finding names the lens and surface it came from (the
challenge pass / <lens>: <surface> convention in scope entries; provenance
citations inside claim text). That provenance bar is how the method hunts
blind spots without encouraging speculative issue generation — a finding
you cannot trace to something you actually read is speculation, not a
finding.
Where a resilience measure lands is a recorded decision:
resilience measures land in both spec and plan by nature: spec-side as requirement/boundary claims when they change what to build, plan-side as plan risks or tasks when they change how to build it — the skill coaches which is which (resolves q2)
— decision c18 in docs/specs/2026-07-15-challenge-skill.md.
The coaching: ask "does this change what ships, or how it gets
built?" A rollback path the user needs, a fail-closed version check, a
containment boundary — those change the product: capture them spec-side as
requirement / boundary claims so the re-exported spec carries them.
A staging sequence, a merge-order constraint, an uncertainty the workforce
must build around — those change the build: land them plan-side via
devague plan risk --kind <kind> (blocking or nonblocking, honestly chosen)
once /spec-to-plan seeds the plan, where the plan's convergence gate keeps
blocking risks visible until resolved.
devague scope entries — plus
the residual uncertainty that remains — park — so the pass leaves durable
provenance instead of a comforting absolute (issue 73 success criteria;
the anti-fabrication contract in docs/llm-guidance.md).--origin llm and lands proposed;
only the user's confirm makes it real. The pass must not be able to
silently convert speculation into confirmed requirements.capture,
interrogate, question, park, devague scope, devague plan risk —
nothing else. No parallel prose artifact, no new CLI verb, engine, or
state model (issue 20; issue 73's stated preference). If it didn't land in
a move, it didn't land./scope./deviate amends gate 2
rather than adding one.Challenging the exported spec for a store-schema migration (illustrative
slug store-schema-v3) — "migrations" and "any surface that can lose user
data" are both c19 escalation signals, so the pass runs rigorous:
# Entry condition: /think exported docs/specs/2026-07-15-store-schema-v3.md
# and no plan exists yet. Depth: rigorous (migration + data-loss signals).
# adjacent-systems lens: an older installed devague reads the same store
devague capture --origin llm --kind assumption "older installed devague binaries refuse a v3 store via the fail-closed schema_version check in devague/store.py"
devague interrogate c9 --origin llm --honesty "a v2-reading binary pointed at a v3 store exits with the version hint, not a traceback"
devague scope "challenge pass / adjacent-systems lens: devague/store.py schema_version gate" --finding "older binaries fail closed on v3; seeded the compat assumption" --seeds c9
# failure-mode lens: the migration can die halfway
devague capture --origin llm --kind requirement "migration writes to a temp file and renames — a killed run never leaves a half-written store"
# overlooked-actors lens: needs a user decision, not a guess
devague question "do mesh agents share one store, or does each checkout own its own?"
# reversibility lens: genuinely unknown, not decidable now
devague park "whether a v3->v2 downgrade path is ever needed" --kind unknown_nonblocking
# concurrency lens found nothing — record the clean pass, not a conclusion
devague scope "challenge pass / concurrency lens: devague/store.py + delivery_store.py" --finding "single-writer CLI, no locking today; clean pass — residual risk only if two agents ever share a checkout"
# --- HUMAN adjudicates: the existing spec gate at work ---
devague review
devague confirm c9 h4 c10
devague question --resolve q1 --decision "each checkout owns its own store"
# Reconverge and re-export — the SAME dated file, now carrying the pass
devague converge
devague export
# Residual risk that changes HOW to build lands plan-side once
# /spec-to-plan seeds the plan:
devague plan new --frame store-schema-v3
devague plan risk "two agents sharing a checkout could interleave store writes mid-migration" --kind unknown_nonblockingEvery finding above is traceable to a lens and a surface; the clean lens is
recorded as examined rather than silently dropped; and nothing the agent
proposed became confirmed without the human's confirm.
Once the frame reconverges and the same dated spec file is re-exported, the
pass is done — the examined surfaces, residual uncertainty, and adjudicated
findings all live in frame state and render into the spec artifact. Continue
with /spec-to-plan as usual: the plan seeds from the challenged frame, and
any residual surprise risk you routed plan-side lands via
devague plan risk as first-class plan state. If a surprise still gets
through mid-fan-out, that is /deviate's job — and every approved dN
deviation record is evidence for what the next challenge pass's lenses
should look harder at.
This is a first-party skill — its origin is agentculture/devague, the
seventh in the outbound family after /scope, /think, /spec-to-plan,
/assign-to-workforce, /deviate, and /summarize-delivery, sitting third
in flow order as the blind-spot discovery leg between /think and
/spec-to-plan. guildmaster pulls it from here and broadcasts it to the
AgentCulture mesh; because devague is upstream, it is never re-vendored
back from guildmaster's re-broadcast copy. The cite, don't import policy
still holds: downstream repos copy it, they don't symlink or depend on it.
See docs/skill-sources.md.
© agentculture, 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
Just SKILL.md in .claude/skills/challenge of agentculture/culture.
Open the folder on GitHubat commit d5b5715
Challenge 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 |
|---|---|---|---|---|---|---|
| Challenge this skillagentculture/culture | 114 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Review Hog Blind Spots GeneralPostHog/posthog | 40k | — | ~475 | Automated safety check: Pass | Custom licence | |
| Blind Spot Passsangrokjung/claude-forge | 852 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Blind Spot Scanlijigang/ljg-skills | 7.5k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Agent Challengesruvnet/ruflo | 74k | 2 repos | ~995 | Automated safety check: Pass | MIT | |
| Challengealirezarezvani/claude-skills | 28k | 1 repos | ~1.7k | Automated safety check: Pass | MIT |
PostHog/posthog
The general blind-spot check for PostHog Review, the final sweep that runs after every enabled review perspective has reviewed a chunk.
sangrokjung/claude-forge
Use before starting work in a domain you don't know well, to surface the "unknown unknowns" — the things you don't even know to ask about — and learn just enough to prompt and decide well.
lijigang/ljg-skills
Reads yesterday's AI conversations, identifies one thinking blind spot, picks a WeRead book chapter to address it and writes an analysis note.
ruvnet/ruflo
Agent skill for challenges - invoke with $agent-challenges. An agent skill from ruvnet/ruflo.
alirezarezvani/claude-skills
Pre-mortem plan analysis. An agent skill from alirezarezvani/claude-skills.
alsk1992/CloddsBot
Unified risk engine with VaR, stress testing, volatility regimes, and automated controls
agentculture/culture
Show a Culture agent's full configuration in one read-only view: its system-prompt file (CLAUDE.md / AGENTS.md / GEMINI.md), the parallel culture.yaml, and the agent's local .claude/skills index.
agentculture/culture
CI/CD lane for culture: branch, commit, push, create PR, wait for automated reviewers, fetch comments, fix or pushback, reply, resolve threads.
agentculture/culture
All agent communication from culture: in-mesh chat (channels, DMs, mentions, knowledge sharing) via culture channel CLI, AND cross-repo hand-off briefs to sibling-repo agents (agentirc, steward…
agentculture/culture
Cross-repo + mesh communication: file tracked GitHub issues on sibling repos, comment on existing issues, fetch issues with body + comments to inline current state into briefs, and send live…
agentculture/culture
Fan out a converged devague plan's dependency waves to parallel agents in isolated git worktrees, one agent per task per wave, with TDD-gated merges by the main agent.
agentculture/culture
Switch a PyPI package install between the production index, TestPyPI pre-release builds, and a local editable checkout.
Run a risk-scaled blind-spot discovery pass over a converged, exported frame BETWEEN /think and /spec-to-plan (the seventh origin skill, third leg in flow order): pressure-test the spec through…. Challenge is an agent skill from agentculture/culture. Run a risk-scaled blind-spot discovery pass over a converged, exported frame BETWEEN /think and /spec-to-plan (the seventh origin skill, third leg in flow order): pressure-test the spec through structured lenses, route every finding back through the existing deterministic moves as proposed-only content the human adjudicates, and on a clean pass record the examined lenses/surfaces and residual uncertainty — never a claim that there are no unknown unknowns.
Challenge fits situations like: the user says challenge this spec; blind-spot pass; pressure-test the frame; what are we missing.
Run `npx skills add agentculture/culture --skill challenge -a claude-code`. Or copy the skill folder (.claude/skills/challenge in agentculture/culture) into .claude/skills/challenge in your project. Claude Code loads it when a task matches its description.
Run `npx skills add agentculture/culture --skill challenge -a codex`. Or copy the skill folder (.claude/skills/challenge in agentculture/culture) into .agents/skills/challenge 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 agentculture/culture --skill challenge -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/challenge, .gemini/skills/challenge, .github/skills/challenge and .opencode/skills/challenge in your project.
SKILL.md names no scripts, command-line tools or credentials: Challenge 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.
Challenge is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k 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 Challenge: Review Hog Blind Spots General (PostHog/posthog, 40k stars), Blind Spot Pass (sangrokjung/claude-forge, 852 stars), Blind Spot Scan (lijigang/ljg-skills, 7.5k stars) and Agent Challenges (ruvnet/ruflo, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
agentculture (a GitHub organization) maintains it in agentculture/culture, which has 114 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on August 23, 2026.
Source: agentculture/culture on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.