PhotoPrism 仓库提交规范实战指南:Commit 消息、GitHub Issue 与文档风格全解析
后端前端图像处理人工智能AI 应用【免费下载链接】photoprismAI-Powered Photos App ✨项目地址https://gitcode.com/gh_mirrors/ph/photoprism点击查看免费下载导读本文以 PhotoPrism 仓库的.claude/rules/commit-and-docs-style.md规范文件为核心系统讲解该开源项目在Commit 消息、GitHub Issue、文档写作三个维度的统一约定从 80 字符以内的祈使句提交格式到以 User Story 开头、以 MUST/SHOULD/MAY 验收清单收尾的 Issue 结构再到 Chicago 风格 Title Case 与美式英语的文档规范。读完本文你将掌握一套可直接套用的可合并、可追溯、可验收的贡献标准无论是向 PhotoPrism 提交代码还是参与其他 Go/Vue 大型仓库协作都能照此实践。一、Commit 消息一句话说清改了什么1.1 句式与前缀PhotoPrism 要求 Commit 消息使用简洁的祈使句主语concise, imperative subjects并以一个单词的前缀one-word prefix标注改动所属的领域或主题Config: Add tests for darktable-cli path detection前缀即领域词如Config、Docker、Search、PWA、Faces等。这种前缀 冒号 祈使句的结构让git log在扫视时即可按模块过滤也便于自动生成变更摘要。1.2 关联 Issue 或 PR 编号如果该提交与具体 Issue 或 Pull Request 相关需要在消息中引用其编号Docker: Use two stage build to reduce image size #123 #5632编号紧跟在标题之后供维护者在 GitHub 上快速跳转对应讨论。1.3 硬性限制80 字符Commit 消息不得超过 80 个字符。这条限制配合 72/80 字符的行业惯例保证消息在终端、git log --oneline、代码托管平台界面上都不会被截断。1.4 禁止 AI 署名尾注规范明确规定不得在 Commit 消息中添加Co-Authored-By: Claude …或其他任何 AI 作者署名尾注AI-authorship trailer。这与 AGENTS.md 中Do not addCo-Authored-Byor any other AI-authorship trailer的说明一致目的有二一是保持提交历史的署名真实可信二是避免污染 Git 历史元数据。即使提交内容由 AI 辅助生成也应保持人类作者负责制的提交形式。二、GitHub Issue从标题到验收清单的完整结构2.1 标题祈使句 大写前缀Issue 标题必须满足三点简洁concise使用祈使语气imperative mood以单个大写前缀 冒号 空格开头示例Search: Add filter for RAW image formats而Bug 标题的写法相反——它陈述什么不工作states what does not work而不是祈使句PWA: Unable to download or share files仓库模板中已经内置了这种前缀风格.github/ISSUE_TEMPLATE/bug_report.yml 的默认标题为Bug: Edit the title before submittingfeature-request.yml 为Feature: Edit the title before submitting提交者只需替换冒号后的内容。2.2 描述User Story 开场每条 Issue 描述必须以一句 User Story 开头格式为**As a role, I want goal, so that outcome.**即作为某个角色我想要某个目标以便获得某个结果。这是需求沟通的最小闭环它同时回答了谁、要什么、为什么值得做三个问题。feature-request.yml 与 feature-request.md 都将该句式作为必填项并明确要求Feature requests MUST begin with a one sentence user story。2.3 正文分节统一使用三级标题Issue 描述中的章节统一使用level-3 Markdown 标题###例如### Acceptance Criteria。feature-request.md 模板给出了推荐的章节组合### Background—— 解决什么问题、为什么对大量用户有价值### Additional Context—— 补充截图与背景### Open Questions—— 待澄清的开放问题### Acceptance Criteria—— 验收标准在 User Story 之后需要依次给出预期行为摘要summary of the expected behavior、设计理由rationale、技术考量technical considerations与约束constraints让评审者无需追问即可理解方案的来龙去脉。2.4 验收标准MUST / SHOULD / MAY 语义化清单描述必须以Acceptance Criteria验收标准检查清单结尾规则如下使用 GitHub 清单语法- [ ]每条标准必须清晰、可测试、无歧义每条必须使用以下需求等级关键词之一关键词含义适用场景MUST必须满足否则该 Issue 不算完成核心功能与必要行为SHOULD强烈建议但非严格必需推荐行为、体验优化MAY可选的增强锦上添花的功能示例来自 feature-request.md 模板- [ ] component MUST expected behavior - [ ] component SHOULD expected behavior - [ ] component MAY expected behavior2.5 清单的维护纪律及时勾选当某条标准的实现完成并经过验证后将其标记为- [x]未验证、未实现或跳过的MAY增强项保持- [ ]不勾。完成判定一个 Issue 只有在所有MUST项都被勾选时才视为完成绝不允许仅凭计划或未运行的测试就勾选never tick a box on the strength of a plan alone or an unrun test。联动更新当某个提交满足了一部分标准时先在对应的检查框上更新再引用该 Issue。代理边界Agent 只有在用户明确要求时才能创建、编辑、关闭、重新打开、改标签或修改 GitHub Issue。这套测试驱动验收的理念在 Pull Request 模板中同样可见.github/PULL_REQUEST_TEMPLATE.md 要求包含自动化单元/验收测试、SQLite 3 与 MariaDB 10.5.12 的数据库兼容性验证、Chrome/Safari/Firefox 响应式测试等验收项。三、Issue 类型按代码本应做什么分类3.1 类型体系与查询方式本仓库的 Issue 模板使用 GitHub 的type:属性而不是bug/idea标签。类型是在组织层面配置的不在仓库内因此规范建议用以下命令读取而不是凭空假设gh api orgs/photoprism/issue-types --jq .[].name截至 2026 年 9 月可用类型为Task、Bug、Feature、Enhancement和Epic。提交流程同样可用 CLI 完成无需打开 Web 界面gh issue create --type name # 提交时设置类型 gh issue edit --type name # 事后修改类型3.2 四种类型的判别标准Bug、Enhancement、Feature、Task的区分依据是代码原本应当做什么而非工作量大小类型定义典型场景Bug已实现但不符合文档说明的损坏功能功能存在但行为异常Enhancement在已正常工作的功能之上新增能力现有功能的能力扩展Feature完全不存在的全新功能从零开始的能力建设Task本应工作但从未完整开发、需要打磨或更新的事项如依赖升级既不是回归也不是对正常行为的增加半成品、待完善、升级更新3.3 标题即快速判别法规范给出了一个高效的判题技巧标题本身就是测试。如果标题读起来天然像一个失败描述如Faces: Slow recognition after a correction它就是Bug如果标题读起来天然像祈使句它就不是Bug。确定类型后标题措辞要与类型匹配——Bug 陈述故障其余类型陈述期望行为。3.4 半成品机制选Task而非Bug一个常见的误判场景某个机制接了一半线——辅助函数已存在、代码意图可辨但没有任何调用方。这不是Bug因为没有任何功能发生回归它只是从未被完成。此时应选择Task而不是把意图争论成缺陷。Epic则是跟踪型 Issue保持开启状态直到其下所有子 Issue 全部关闭。四、文档与规范可预测的排版与用词4.1 产品名与拼写文档中产品名一律写作PhotoPrism。所有文档、标题、Issue 与 PR 文本、Commit 消息使用美式英语behavior、color、labeled、license、analyze、normalize、optimize而不是英式的-our/-ise/-re/-lled变体。代码片段、标识符、文件路径、引用的第三方许可名称等按原样保留不做改写。4.2 Chicago 风格 Title Case标题大小写文档标题采用Chicago 风格标题大小写Chicago-style title case并带有代码与路径感知的规范化规则大写首词、冒号/破折号/句末标点后的第一个词、所有主要词含连字符复合词的第二部分。小写仅限三个字母及以下的冠词、短连词、短介词且不处于上述位置时。保留缩略词大写如 API、CLI、HTTP、JSON以及斜杠分隔的缩略词组如 CSV/TSV。保留规范关键词大写以规范语义使用的 RFC 2119 / RFC 8174 关键词MUST、SHOULD、MAY、SHALL、REQUIRED、RECOMMENDED、OPTIONAL保持大写。若标题中偶然使用了这类词导致大小写混杂如What You must Not应改写措辞如What You Do Not而不是手工修大小写——因为下一次格式化运行会撤销手工修改。保留行内代码原样行内代码foo、文件路径如docs/foo-bar.md、斜杠命令如/grill-me内容不做大小写重排。标题中表示并列关系时用而非And/Or。4.3 命令行示例与时间戳书写 CLI 示例或脚本时选项标志放在位置参数之前除非命令本身要求其他顺序。请求与响应示例中使用RFC 3339 UTC 时间戳文档与测试中使用合法valid的 ID、UID 和 UUID 示例保证示例可直接复制验证。4.4specs/嵌套仓库的访问边界嵌套的specs/子仓库不一定存在于每个克隆环境中不要在主仓库添加依赖specs/路径的Makefile目标。自动生成的配置与命令参考位于specs/generated/下Agent 不得读取、分析或修改其中的任何内容。严禁在公开产物中引用specs/路径——包括 Issue 正文、PR 描述、包 README如frontend/README.md、internal/*/README.md、顶层CODEMAP.md/GLOSSARY.md、specs/之外的代码注释。外部读者会看到 404且会泄露私有子仓库的存在。唯一的例外是AGENTS.md和CLAUDE.md中的提示。保存任何面向公众的文件前可用此命令快速自检grep -n specs/ file若存在匹配行说明仍有遗漏。4.5 文档维护刷新日期每次修改文档内容后需刷新文档顶部的**Last Updated:**日期格式如January 20, 2026不带时间仅做格式或空白类编辑时保持不变。仓库根目录的 AGENTS.md 即为实例其头部标注**Last Updated:** September 27, 2026且全文与本文规范保持一致——实际上.claude/rules/commit-and-docs-style.md与AGENTS.md的 Style Notes 章节互为印证后者是前者在仓库层面的总纲。五、在仓库中的落地模板与配套规则上述规范并非纸上谈兵仓库中已有一整套可用的工程化支撑.github/ISSUE_TEMPLATE/bug_report.yml结构化的 Bug 表单内置type: Bug、默认标题、必填的What is not working as documented?、复现步骤、软件版本、设备信息、网络环境反向代理/防火墙/VPN/CDN等字段把 2.1-2.2 节的规范固化为表单校验。.github/ISSUE_TEMPLATE/feature-request.ymlFeature 表单强制 User Story、问题陈述、方案、备选方案并将 Acceptance Criteria 设计为带 MUST/SHOULD/MAY 占位符的必填文本域。.github/ISSUE_TEMPLATE/feature-request.mdMarkdown 版模板展示了### Background、### Open Questions、### Acceptance Criteria、### References的完整分节以及- [ ] component MUST/SHOULD/MAY expected behavior的清单写法。.github/PULL_REQUEST_TEMPLATE.mdPR 模板同样要求 Description、Related Issues 与 Acceptance Criteria把实现即验证的原则延伸到合并请求。AGENTS.md仓库代理总则其 Style Notes 章节与commit-and-docs-style.md逐条对应Commit 消息、Issue 类型、User Story、验收清单、Title Case、RFC 3339 时间戳并补充了 Go/JS 代码注释规则、测试覆盖要求与容器/宿主机开发模式约定构成完整的人机协作贡献守则。六、快速自查清单提交任何改动前按以下清单过一遍即可与仓库规范对齐Commit祈使句 单词前缀关联了 Issue/PR 编号≤ 80 字符没有 AI 署名尾注Issue 标题简洁、祈使语气、大写前缀 冒号 空格Bug 标题是否改为陈述故障Issue 描述以**As a role, I want goal, so that outcome.**开头章节用###结尾是 MUST/SHOULD/MAY 验收清单类型按代码本应做什么选择Bug/Enhancement/Feature/Task/Epic半成品选Task文档标题符合 Chicago Title Case美式拼写选项标志在前RFC 3339 UTC 时间戳与合法 ID/UID/UUID 示例specs/公开产物中grep -n specs/无匹配未触碰specs/generated/日期内容变更后刷新了**Last Updated:**这套规范的价值在于让每个 Commit 可扫读、每个 Issue 可验收、每篇文档可预测。对于 PhotoPrism 这类规模庞大、由 AI 辅助开发与社区共建的仓库统一的格式约定就是协作的润滑剂——遵循它你的贡献就能顺畅进入审查、测试与合并流程。赞分享后端前端图像处理人工智能AI 应用【免费下载链接】photoprismAI-Powered Photos App ✨项目地址https://gitcode.com/gh_mirrors/ph/photoprism点击查看免费下载相关推荐Apache Ossie与NVIDIA GSF转换器完全指南3步搞定双向语义模型互转Apache Ossie与NVIDIA GSF转换器完全指南3步搞定双向语义模型互转 Apache Ossie 前身为 Open Semantic Inte后端数据建模数据集成NG-ZORRO 提交信息规范实战指南基于 commit-msg 技能生成 Conventional Commit 消息NG ZORRO 提交信息规范实战指南基于 commit msg 技能生成 Conventional Commit 消息 导读 本文以 NG ZORRO 仓库UI组件前端Qwen Code 白标桌面客户端构建教程一份 brand.json 如何产出 DMG/EXE/AppImage/deb 安装包Qwen Code 白标桌面客户端构建教程一份 brand.json 如何产出 DMG/EXE/AppImage/deb 安装包 Qwen Code 仓库内置人工智能AI Agent代码智能体工具调用交互助手CLIQwen上一篇KMS_VL_ALL_AIO一站式智能激活解决方案彻底告别Windows和Office激活烦恼下一篇iPhone USB网络共享驱动安装实战指南3步解决Windows连接问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI Agent 面试题 203:如何设计Agent的LLM调用链路追踪?

AI Agent 面试题 203:如何设计Agent的LLM调用链路追踪?

🔥 AI Agent 面试题 203:如何设计Agent的LLM调用链路追踪?摘要:本文深入解析了「如何设计Agent的LLM调用链路追踪?」这一 AI Agent 领域的核心面试题。文章从 多模型协同 的基本概念出发,系统性地剖析了 链…

2026/9/30 6:53:05 阅读更多 →
AI Agent 面试题 197:如何处理LLM输出的不确定性和随机性?

AI Agent 面试题 197:如何处理LLM输出的不确定性和随机性?

🔥 AI Agent 面试题 197:如何处理LLM输出的不确定性和随机性?摘要:本文深入解析了「如何处理LLM输出的不确定性和随机性?」这一 AI Agent 领域的核心面试题。文章从 LLM 选型与评估 的基本概念出发,系统性地…

2026/9/30 6:53:05 阅读更多 →
AI Agent 面试题 192:Prompt缓存技术(如Claude的Prompt Caching)如何优化Agent性能?

AI Agent 面试题 192:Prompt缓存技术(如Claude的Prompt Caching)如何优化Agent性能?

🔥 AI Agent 面试题 192:Prompt缓存技术(如Claude的Prompt Caching)如何优化Agent性能?摘要:本文深入解析了「Prompt缓存技术(如Claude的Prompt Caching)如何优化Agent性能&#xff…

2026/9/30 6:53:05 阅读更多 →

最新新闻

系统参数配置实战:从内核参数到配置管理一次讲透

系统参数配置实战:从内核参数到配置管理一次讲透

1. 别把配置当杂活:先想清楚参数从哪里来 做运维和开发这些年,我最大的感受就是:系统参数配置这个事,看起来就是改几个数字、加几行配置,真正踩过坑的人才知道,它其实是整个系统稳定性的地基。很多线上事故…

2026/9/30 7:41:25 阅读更多 →
CSS Grid网格布局实战:从网格线到二维页面骨架的原理与避坑指南

CSS Grid网格布局实战:从网格线到二维页面骨架的原理与避坑指南

从table布局一路折腾到float、flex,我做前端这些年,布局方案换了一茬又一茬。第一次看到display: grid在页面上铺开一张规整的网格时,说实话有点恍惚——这就是我折腾了多少个通宵想要的东西。CSS Grid网格布局,现在大家习惯直接叫…

2026/9/30 7:41:25 阅读更多 →
纯CSS3实现双半圆进度条:从渐变到遮罩的完整实战

纯CSS3实现双半圆进度条:从渐变到遮罩的完整实战

1. 双半圆进度条到底是什么,为什么2026年还要拿它当考题 先给没做过这个组件的朋友描述一下画面:页面顶部是一块240像素宽的半圆盘,弧线从左侧9点钟方向起步,像转速表一样沿着上沿往右爬,爬到右侧3点钟方向就是100%。有…

2026/9/30 7:41:25 阅读更多 →
Redis内存管理:过期策略与淘汰策略全面解析及实战避坑

Redis内存管理:过期策略与淘汰策略全面解析及实战避坑

1. 先把两个策略的边界划清楚:一个管过期,一个管满员 很多人在刚接触Redis的时候,很容易把“过期策略”和“淘汰策略”搅在一起。面试时候被问到“Redis内存满了会怎么样”,经常有同学张口就说“把过期的key删掉”,这个…

2026/9/30 7:41:25 阅读更多 →
CSS网页布局实战手册:从文档流到Flex/Grid的完整指南

CSS网页布局实战手册:从文档流到Flex/Grid的完整指南

做前端这些年,被问得最多的永远是同一个问题——CSS 网页布局到底怎么学?明明浮动、定位、flex、grid 每条都背得下来,真拿到一张设计稿,还是不知道用什么、怎么排、为什么一刷新就错位。这篇文章我打算把布局这整条线从头捋一遍&…

2026/9/30 7:41:25 阅读更多 →
银河麒麟V10SP1重装怎么保住数据盘?UUID与fstab挂载全流程

银河麒麟V10SP1重装怎么保住数据盘?UUID与fstab挂载全流程

简介:银河麒麟桌面操作系统V10SP1重装教程,重点解决保留“数据盘”不丢失的难题。内容面向具备一定Linux操作基础的技术人员与高级用户,适用于需在系统升级或重装时保护个人数据的场景。文档以PDF形式提供,共1个文件,压…

2026/9/30 7:40:24 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →