关于 pythia-conventions
pythia-conventions 是用于借助 pythia 制定并检查项目命名与 lint 约定的技能。它从数据库架构中提取模式,与书面规范核对,并在记录规则前验证覆盖情况。
主要功能
- 01扫描架构对象名称
- 02核对架构与书面规范
- 03初始化约定文件
- 04检查命名规则覆盖率
- 05配置机器检查的 lint 规则
适用场景
- 01从成熟架构中采用约定
- 02应用更改前验证命名模式
- 03记录旧命名例外
- 04执行项目专属 lint 规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ thaildhe172591/ pythia --skill pythia-conventions安装后在 Claude Code 中输入/pythia-conventions确认已加载。
详细介绍
采用项目约定
开始时说明:“正在使用 pythia-conventions——我会先从架构中读取模式。”
**阶段:**学习 → 询问 — 从架构中推导,在文档不一致处询问,然后再编写配置
每个成熟的架构中都已有约定。它们体现在对象名称、标准文档或资深开发者的脑海中。本流程会将其整理为两个文件:一个记录工具每次写入时都会检查的模式,另一个记录供今后每次 Agent 会话在写入前阅读的说明。
铁律
NO PATTERN WRITTEN DOWN BEFORE THE SCHEMA HAS AGREED WITH IT
如果某个模式与已有对象不匹配,那就不是约定,而是猜测;它会在每次应用时都发出警告,直到有人将其删除。
工作流
-
从数据库中读取实际情况,不要凭记忆判断。
pythia conventions --scan它会对每个对象名称进行分词,并按类型提出模式。即使已有文档,也要执行这一步;千万不要自己逐页查看成千上万个名称:这正是该命令的用途,你的上下文最好留给其他事情。
-
**阅读开发者的文档(如果有)。**基础系统的标准、Wiki 页面、旧项目的规则都可以。留意正则表达式无法表达的内容:调用层依赖的参数前缀、每个查询都必须筛选的列、事务可以提交的位置、规范的日期或金额表示方式。这些内容应写入说明部分。
-
**核对差异,并在两者不一致时明确指出。**文档说明意图;架构反映事实。如果架构与文档中的规则相矛盾,可能有三种情况:没人遵循这条规则、这条规则只适用于新代码,或者存在值得报告的偏差。询问开发者是哪一种,不要默默自行决定。
-
**编写
.pythia/conventions.json。**以扫描结果为基础,再根据文档缩小范围。如果想先生成骨架,可以运行pythia conventions --init创建一组空文件。 -
验证——这一步正是此技能的重点。
pythia conventions --check它会报告每种类型的覆盖率,并列出不匹配的名称。
结果 含义 所有名称都匹配 模式确实成立;保留它 约 90% 以上匹配,只有少数不匹配 确实存在例外——在第 6 步中列出 低于 90% 模式有误,而不是架构有问题;扩大或拆分模式,然后再次检查 没有该类型的对象 规则尚未经过测试;只有预计会新增此类对象时才保留 -
**记录例外,并说明原因。**有意违反规则的对象——从基础平台移植来的名称、名称属于公共接口的旧入口点。说明重命名为何比接受警告代价更高。没有说明的例外会被下一位处理者“修复”。
-
编写
.pythia/conventions.md。对每条规则,都要说明违反规则的代价,而不只是规则本身。“参数前缀必须是b_/a_”很容易被忽略;“调用层会根据前缀绑定,因此前缀错误会导致字段静默地无法绑定”则不会。有明确后果的规则才会得到遵循。
由 LEAD 规则进行机器检查:lint 块
正则表达式无法检查、但 linter 可以检查的规则,应与 naming 一起写入 conventions.json——此后每次运行 pythia lint 和应用预览时都会检查这些规则,autopilot 也不会提交 error:
"lint": {
"rules": {"varchar2-byte-semantics": "error", "dbms-output": "off"},
"require_comments": "error",
"required_columns": ["CREATED_BY", "CREATED_AT"],
"param_prefix": "^P_",
"forbid": [{"id": "no-sysdate", "pattern": "\\bSYSDATE\\b",
"message": "use SYSTIMESTAMP", "severity": "warning"}]
}
严重级别:off、info、warning、error。pythia lint --json 会列出所有内置规则 ID。衡量新规则时,采用与命名模式相同的方法:对少量现有对象运行 lint(将 pythia src 的输出写入文件)——如果一条规则对整个代码库都会触发,那它就只适用于新代码,并且要明确说明。
从团队已在使用的旧基础项目中采用约定
将连接指向该架构,并在那里执行第 1 步和第 2 步——包含成千上万个对象的基础系统,是了解现存项目规范最可靠的依据,远胜于任何人的回忆。然后将连接切换到新项目并运行 --check:覆盖率会告诉你,新架构实际继承了多少基础项目的规范。
危险信号 — 如果发现自己有以下想法,请立即停止
| 想法 | 现实情况 |
|---|---|
| “我只看文档就能写出这些模式” | 文档描述意图;Schema 记录实际发生的情况。先扫描。 |
| “覆盖率达到 80% 就够了” | 每次应用时,每个遗漏项都会发出警告。修正模式或记录例外。 |
| “我会把所有对象名称都读一遍,弄清楚情况” | --scan 就能做到,而且不会占用你的上下文。 |
| “Schema 不一致,所以文档错了” | 这可能是仅适用于新代码的规则。请确认。 |
| “每行一条规则就够了” | 不说明代价的规则,人们会跳过。 |
何时不应使用此技能
- 按现有风格编写单个对象 → 使用
pythia-write,它会读取这些文件,并使用similar处理细节。 - 记录包含步骤和关卡的工作流 → 使用
pythia-skill-author。 命名和风格属于这里;流程则属于技能。