Planner
penpot/penpot
Read-only planning and architecture analysis — produce a structured implementation plan with task breakdown, acceptance criteria, sizing, and checkpoints.
为深蹲、卧推、硬拉、负重引体、推举等力量主项制定、解释、调整或复盘完整的 8—12 周周期,并交付含主项渐进曲线的可本地打开训练计划 HTML。用于用户要求规划组数、次数、重量、RPE/RIR、顶组、回退组、减量、测试、渐进规则或未完成分支,或要求把训练计划做成网页、总览页、可视化计划时。
$ npx skills add LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LZheng0411/Lzheng-fitness lzheng-strength-cycle-planner --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/LZheng0411/Lzheng-fitness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/lzheng-strength-cycle-planner .claude/skills/lzheng-strength-cycle-planner && 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 "lzheng-strength-cycle-planner" agent skill from https://github.com/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-planner into .claude/skills/lzheng-strength-cycle-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lzheng-strength-cycle-planner", 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/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-plannerType 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 LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LZheng0411/Lzheng-fitness lzheng-strength-cycle-planner --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LZheng0411/Lzheng-fitness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/lzheng-strength-cycle-planner .agents/skills/lzheng-strength-cycle-planner && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "lzheng-strength-cycle-planner" agent skill from https://github.com/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-planner into .agents/skills/lzheng-strength-cycle-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lzheng-strength-cycle-planner", 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 LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LZheng0411/Lzheng-fitness lzheng-strength-cycle-planner --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LZheng0411/Lzheng-fitness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/lzheng-strength-cycle-planner .cursor/skills/lzheng-strength-cycle-planner && 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 "lzheng-strength-cycle-planner" agent skill from https://github.com/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-planner into .cursor/skills/lzheng-strength-cycle-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lzheng-strength-cycle-planner", 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/LZheng0411/Lzheng-fitness.git --path skills/lzheng-strength-cycle-planner--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 LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LZheng0411/Lzheng-fitness lzheng-strength-cycle-planner --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LZheng0411/Lzheng-fitness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/lzheng-strength-cycle-planner .gemini/skills/lzheng-strength-cycle-planner && 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 "lzheng-strength-cycle-planner" agent skill from https://github.com/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-planner into .gemini/skills/lzheng-strength-cycle-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lzheng-strength-cycle-planner", 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 LZheng0411/Lzheng-fitness lzheng-strength-cycle-plannerInstalls 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 LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LZheng0411/Lzheng-fitness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/lzheng-strength-cycle-planner .github/skills/lzheng-strength-cycle-planner && 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 "lzheng-strength-cycle-planner" agent skill from https://github.com/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-planner into .github/skills/lzheng-strength-cycle-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lzheng-strength-cycle-planner", 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 LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LZheng0411/Lzheng-fitness lzheng-strength-cycle-planner --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LZheng0411/Lzheng-fitness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/lzheng-strength-cycle-planner .opencode/skills/lzheng-strength-cycle-planner && 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 "lzheng-strength-cycle-planner" agent skill from https://github.com/LZheng0411/Lzheng-fitness/tree/main/skills/lzheng-strength-cycle-planner into .opencode/skills/lzheng-strength-cycle-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lzheng-strength-cycle-planner", 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.
lzheng-strength-cycle-planner为深蹲、卧推、硬拉、负重引体、推举等力量主项制定、解释、调整或复盘完整的 8—12 周周期,并交付含主项渐进曲线的可本地打开训练计划 HTML。用于用户要求规划组数、次数、重量、RPE/RIR、顶组、回退组、减量、测试、渐进规则或未完成分支,或要求把训练计划做成网页、总览页、可视化计划时。
Lzheng Strength Cycle Planner is an agent skill from LZheng0411/Lzheng-fitness. 为深蹲、卧推、硬拉、负重引体、推举等力量主项制定、解释、调整或复盘完整的 8—12 周周期,并交付含主项渐进曲线的可本地打开训练计划 HTML。用于用户要求规划组数、次数、重量、RPE/RIR、顶组、回退组、减量、测试、渐进规则或未完成分支,或要求把训练计划做成网页、总览页、可视化计划时。
Its SKILL.md is about 1.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts, reference files and assets (for example `agents/openai.yaml`, `references/cycle-design-rules.md` and `references/cycle-html-contract.md`).
The repository describes itself as: Lzheng的开源健身 Agent Skill 知识库. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c9f0b57. 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.
Ships 2 files in scripts/ (Python), which the agent can run.
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.
Lzheng Strength Cycle Planner loads about 1.3k tokens when it runs, and up to ~7.6k if it reads all its reference files. Until then it costs about 44 tokens; SKILL.md has 262 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); the scripts in this folder are not scanned.
The full file from LZheng0411/Lzheng-fitness at commit c9f0b57, republished under its MIT licence (© LZheng0411). 262 words, ~1,292 tokens.
.claude/skills/lzheng-strength-cycle-planner/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.为一个明确的力量动作生成可执行、可反馈、可调整的 8—12 周周期。把计划视为待验证的训练假设,不把固定重量表当作必须完成的命令。
生成或调整计划前读取:
专家库只提供约束与判断:一般结构优先 Eric Helms,力量停滞、专项性、变量实验或峰值使用 Greg Nuckols + Eric Helms,目标与现实脱节或是否回到基础时才使用 Dan John。当前表现、周期重量、最终处方和写入权始终归本 Skill;没有真实交叉变量时不制造多人讨论。
先建立“已核验 / 用户直接提供 / 缺失或冲突”的事实表。用户已给出的内容不要重复询问;缺少会改变计划结构的信息时,用一轮紧凑问题补齐,不要边猜边生成精确重量表。
至少确认:
负重自重动作还要确认体重,并使用“体重 + 附加重量”判断总系统负荷。
出现冲突时,优先级为:用户当次明确确认的近期完整记录 > 已授权且可核验的当前训练记录 > 用户明确标注为历史的成绩 > 估算。记录日期、动作名称和重量单位;器械重量、总系统负荷和附加重量不得混写。
根据目标分配积累期、强度期、实现期和减量/验证期。阶段长度不是固定生理定律;以有效暴露次数、表现趋势和恢复反馈为准。
明确每次暴露只承担一个主要任务:强度、训练量、技术、变式或恢复。
不要混淆“回退组”和“未完成/退行分支”。
首组 RPE→末组 RPE,例如 75kg 4×6 @6→7。不要只写 75kg 4×6 @7 后再依赖全局说明解释;固定重量与次数下,RPE 随组数上升是正常现象。为顶组和回退组分别说明:
只有确实存在有价值的条件分支时才输出“未完成/退行方案”。固定减量日、轻技术日或无需分支的训练不要硬塞退行组。
用户要求制定周期时,最终输出必须包含:
在文字交付完成后,按 references/training-plan-website-spec.md 创建可直接双击打开的 HTML 页面。把网页视为计划的可视化版本,而非另一套独立数据:网页中的基本信息、动作、组次、重量、RPE、周次和调整规则必须与文字计划逐项一致。
先按 references/cycle-html-contract.md 把当次最终计划整理为 JSON 数据,再用 scripts/render_strength_cycle_html.py 和唯一模板 assets/strength-cycle-template.html 生成 HTML。网页结构、导航、配色、图表位置、坐标轴、阶段带和响应式规则来自模板;动作、阶段、重量、容量、周数、测试目标和 SVG 路径必须由当次数据生成。不得复制其他计划的图表数值、手改曲线坐标或手写另一套页面。
每个主项必须在 <h3> 与完整周期表之间拥有一张强度/容量图;仅有一个主项时只生成一张,多个主项分别生成。
容量优先按职责日正式组的 重量 × 组数 × 次数 计算;不同动作的容量口径、低频暴露和自重/归零周必须在图表脚注写清。
图表曲线必须使用生成器的 Fritsch–Carlson 单调三次插值;峰谷只能落在真实数据点,低频动作不得补造空周数据。
生成器默认拒绝覆盖已有文件。实质修订先创建新版本,再把 JSON 和 HTML 一同复核;只有用户明确授权时才可使用 --force。
用户指定输出位置时使用该位置;否则先读取已初始化系统的 系统/lzheng-system.json,把专项周期 JSON 与 HTML 保存到 output_locations.cycles;只有尚未建立系统配置时,才保存到 LZHENG_FITNESS_HOME/plans/ 或当前工作目录的 lzheng-fitness-output/plans/。客户交付或产品样例只使用脱敏资料。
新计划的文件名必须为 YYYY年MM月DD日-训练对象-周期目标训练计划.html。单项示例:2026年07月28日-负重引体-3RM提升训练计划.html;整套计划示例:2026年07月29日-四日制全身-力量提升训练计划.html。日期按 Asia/Shanghai 的首次制定日书写,月、日必须补零。
对同一计划的实质修改,保留首次制定日期并追加 -v02、-v03 等版本号;新周期使用新的制定日期。不得使用“最新版”“最终版”等不稳定名称,也不得覆盖已有文件。
使用内嵌 CSS 的独立 HTML,不依赖网络、构建服务或登录。页面必须在桌面和手机上可读。
默认复用本 Skill 的 assets/header-lineart.png,保持白底、左侧标题、右侧线稿的同一视觉。交付到任何单文件上传场景时,必须用 scripts/inline_html_image.py 把线稿嵌入 HTML;禁止交付依赖相对本地图片路径的网页。仅当用户明确不要人物图或输出场景不适合时,才改为纯文字页头。
使用 render_strength_cycle_html.py 时,页头线稿会随生成过程直接内嵌;已有网页需要补嵌线稿时,继续使用 inline_html_image.py。
用户只要口头问答、明确拒绝文件,或只要求复盘时,不创建网页;其余“制定 / 修改 / 重做训练计划”默认创建。
修订既有计划时,创建新版本后对新 HTML、文字执行基准和汇总表做全文 RPE 审计:除单组顶组、测试尝试和明确标注的历史实际记录外,不得遗留 多组 × 次数 @单一 RPE 或静态 RPE 区间的旧式处方。
不要只给原则、示意周或前三周样例后声称已经完成周期。
交付前确认:
首组 RPE→末组 RPE;没有仅靠页面说明补救的旧式静态 RPE 写法。<polyline>、复制来的 SVG 坐标或外链资源。© LZheng0411, 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 10 other files (scripts, references, assets) in skills/lzheng-strength-cycle-planner of LZheng0411/Lzheng-fitness.
Open the folder on GitHubat commit c9f0b57
Lzheng Strength Cycle Planner 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 |
|---|---|---|---|---|---|---|
| Lzheng Strength Cycle Planner this skillLZheng0411/Lzheng-fitness | 119 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Plannerpenpot/penpot | 61k | — | ~2.7k | Automated safety check: Pass | MPL-2.0 | |
| Agent Plannerruvnet/ruflo | 74k | 2 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Agent Goal Plannerruvnet/ruflo | 74k | 2 repos | ~842 | Automated safety check: Pass | MIT | |
| Agent Code Goal Plannerruvnet/ruflo | 74k | 2 repos | ~3.6k | Automated safety check: Pass | MIT | |
| Credit Cycle Analysissickn33/agentic-awesome-skills | 47k | 1 repos | ~4.2k | Automated safety check: Pass | MIT |
penpot/penpot
Read-only planning and architecture analysis — produce a structured implementation plan with task breakdown, acceptance criteria, sizing, and checkpoints.
ruvnet/ruflo
Agent skill for planner - invoke with $agent-planner. An agent skill from ruvnet/ruflo.
ruvnet/ruflo
Agent skill for goal-planner - invoke with $agent-goal-planner
ruvnet/ruflo
Agent skill for code-goal-planner - invoke with $agent-code-goal-planner
sickn33/agentic-awesome-skills
Debtor and creditor credit-cycle analysis: weighted collection or payment days, ageing buckets, credit limit utilisation and gap against benchmark.
sickn33/agentic-awesome-skills
旅行/行程规划需求时使用:规划去某地旅行、X天X城、带老人孩子、自驾、假期安排等。产出逐日行程表、预算估算(经济/舒适/奢华三档)、交通住宿建议、景点美食清单。必须先问预算,预算未确认只输出问题清单;事实数据带来源和查询日期。
LZheng0411/Lzheng-fitness
基于用户当前状态、Skill 内置健身知识和最新官方指南,完成问诊、安全筛查、P0—L3 分层、固定器械与自由重量动作选择、完整训练计划、短期降级方案、时间快照及移动端友好 HTML 交付。用于用户要求制定、重做、解释或可视化增肌、减脂、体态重组、健康、基础力量或综合健身计划,以及询问一周练几次、如何分化、动作怎样选时;不用于单次训练复盘、医疗康复或未经用户确认的单项力量周期调用。
LZheng0411/Lzheng-fitness
将训练计划 JSON、执行基准、训练复盘、可选 Notion 导出和内置界面素材组装为可离线打开的个人健身工作台,并完成数据刷新、壁纸替换、内置文档阅读、可选 Obsidian 编辑、响应式页面、发布副本与自动校验。用于用户要求从零构建、迁移、重建、替换背景、打包、同步、修复或发布健身工作台,或希望在新电脑上复刻同款个人训练系统时;不用于制定个性化训练处方、单次训练复盘或医疗建议。
LZheng0411/Lzheng-fitness
初始化、升级、诊断、校验和迁移 Lzheng 本地训练系统,并把增肌、减脂、力量与综合健身计划、训练复盘和健身工作台串成单一主源闭环。用于用户刚下载/刚安装、说开始建立健身系统、想增肌/减脂/提升力量、新电脑搭建、系统升级或工作台异常排查;首次使用时由 AI 自然语言接管引导,不要求用户先找 README、命令或 Skill 名称。
LZheng0411/Lzheng-fitness
建立、校验和复盘与当前训练计划联动的通用营养系统,包括建档、重训练/普通训练/休息日目标、餐食估算候选、用户确认入账和趋势调整;不用于疾病营养治疗、过敏原诊断或把照片估算包装成精确事实。
LZheng0411/Lzheng-fitness
为 Lzheng 计划、力量周期、训练复盘和停训接回 Skill 提供六个可移植、来源限定的训练专家模块,包含来源边界、覆盖矩阵、问题路由、知识卡、协作选择和验证状态;用于内部选择最少必要专家并保留分歧条件,不作为名人角色扮演、医疗诊断或独立动态处方入口。
LZheng0411/Lzheng-fitness
将抖音或本地健身教学视频核对为有起止点的分段课程,用直接教读者怎么做的详细解释生成播放器,接入现有知识库并按用户授权完成发布和线上验证;支持复用更新,不把视频建议自动写成个人训练处方。
为深蹲、卧推、硬拉、负重引体、推举等力量主项制定、解释、调整或复盘完整的 8—12 周周期,并交付含主项渐进曲线的可本地打开训练计划 HTML。用于用户要求规划组数、次数、重量、RPE/RIR、顶组、回退组、减量、测试、渐进规则或未完成分支,或要求把训练计划做成网页、总览页、可视化计划时。. Lzheng Strength Cycle Planner is an agent skill from LZheng0411/Lzheng-fitness.
Run `npx skills add LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a claude-code`. Or copy the skill folder (skills/lzheng-strength-cycle-planner in LZheng0411/Lzheng-fitness) into .claude/skills/lzheng-strength-cycle-planner in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a codex`. Or copy the skill folder (skills/lzheng-strength-cycle-planner in LZheng0411/Lzheng-fitness) into .agents/skills/lzheng-strength-cycle-planner 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 LZheng0411/Lzheng-fitness --skill lzheng-strength-cycle-planner -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lzheng-strength-cycle-planner, .gemini/skills/lzheng-strength-cycle-planner, .github/skills/lzheng-strength-cycle-planner and .opencode/skills/lzheng-strength-cycle-planner in your project.
Going by SKILL.md and its folder, Lzheng Strength Cycle Planner needs Python for the scripts in its folder. Our summary lists: Python 3.
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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Lzheng Strength Cycle Planner is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.3k tokens (SKILL.md is roughly 5.2k 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 6.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Lzheng Strength Cycle Planner: Planner (penpot/penpot, 61k stars), Agent Planner (ruvnet/ruflo, 74k stars), Agent Goal Planner (ruvnet/ruflo, 74k stars) and Agent Code Goal Planner (ruvnet/ruflo, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LZheng0411 (a GitHub user) maintains it in LZheng0411/Lzheng-fitness, which has 119 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on September 29, 2026.
Source: LZheng0411/Lzheng-fitness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.