t
|
3b26457165
|
docs: 抬档门禁 + 1.0.0 前置(稳定契约承诺)
- **抬哪一档成为硬门禁**:破坏性条数取**目标提交里候选那一段** ⇒ `0.x` 有破坏性必须抬**次版本**(或主版本),
`≥1.0.0` 有破坏性必须抬**主版本**;只抬修订/抬次不够都阻断。无破坏性时抬哪档不限,
但候选号必须严格大于上一正式版与当前开发号(号只增不减)。
- **`1.0.0` 首见的前置**:《稳定契约承诺》必须写实(接口 / 数据模型 / 配置 / CLI 输出与退出码,
不留 `待填`/`TODO`/`TBD`)并在 `## [1.0.0]` 记录里链接它;`1.x → 2.0.0` 不重复要求。
- 同步:正本 §6 五次修正(⑭⑮)、07 发版判据表、"抬哪一档"对照表、templates/release-preflight.py、
templates/README.md、04 §M(V-14~V-17)。
验证:templates/release-preflight.py --self-test 32 分支全过;试点仓夹具 91/0、make verify 15/15。
|
2026-10-13 17:13:44 +08:00 |
|
t
|
041f18bfd2
|
docs: 开发号随提交自动递增(口径变更)
- **开发版本号自动递增**:`display_version`(development) = `<正式版本的主.次>.<自 v<正式版本> 以来的提交数>`
(0.1.1、0.1.12;恰在发布提交上 = 正式号),由 git 算出来、**不写进 CHANGELOG** ⇒
每个提交都有自己的版本号,而发布版本与 tag 仍由人批准(与"CI 不自动升版本/不打 tag"并存)。
- **浅克隆拒绝算号**(退回 `-dev+g<短SHA>`),检出步骤在有 tag 时 `--unshallow`;
接线三处(门禁 ldflags / Makefile / Dockerfile)都要接 `CommitsSinceRelease`,契约测试交叉核对。
- **发布时次版本加一**(`0.1.x` → `0.2.0`),预检挡住"候选 <= 当前开发号"。
- 同步:templates/version.py、templates/release-preflight.py、正本 §6 四次修正(⑪⑫⑬)与 §6.2 表、
07 身份表与就绪判据、templates/README.md、04 §L(V-11~V-13)。
验证:templates 两个自检全过;试点仓反向夹具 85/0、make verify 15/15。
|
2026-10-13 16:45:56 +08:00 |
|
姚章浩
|
cdf9c14901
|
docs: 就绪判据取目标提交顶部版本 + 禁用自动发布路径(口径变更)
同步本轮两处收紧(本轮不推、不打 tag、不部署):
- **就绪 = 候选版本已是目标提交里的「顶部」已发布版本**:工作区写了没提交 ⇒ 不就绪;
只在**历史**里出现过(顶部是别的版本)⇒ **也不就绪**;预检会把该提交的顶部版本打出来。
这条同时隐含"最新在最上面 / 版本只增不减"。
- **自动发布路径已禁用**:`--execute` / `--approve-*` 只保留参数兼容,传了就**明确拒绝**(rc=2),
且拒绝发生在收集事实之前 ⇒ **零写操作、零 API 调用**(自检用 spy 断言 + 扫描生产路径无 git 写命令);
输出里不再推荐自动路径,正式发版动作由人执行。
- 同步:templates/release-preflight.py;正本 01 §6 三次修正说明(⑨);07 就绪判据表与说明;
templates/README.md(即生成的 AGENTS.md);04 §K(V-9 / V-10)。
验证:templates/release-preflight.py --self-test 绿;试点仓反向夹具 84/0、make verify 15/15。
|
2026-10-13 15:48:50 +08:00 |
|
姚章浩
|
e3bb6b2018
|
docs: 正式构建核证据 + 预检两段式与就绪判据 + CI 必需 context(口径变更)
同步三项收紧(模板与正本,本轮不推、不打 tag、不部署):
- **正式构建要核证据**:完整 40 位 SHA + 指向该提交的注释 tag v<版本号> + 该提交里
CHANGELOG 顶部版本一致;缺一条 ⇒ 拒绝标为正式版(rc=2,身份退回 development)。
负例:有版本无 tag / unknown 或短 SHA / tag 指错提交 / 轻量 tag / 版本不一致;
**测试 tag 只在临时仓库里创建**。
- **发版预检分两段**:`准备建议` 与 `发布就绪判定`;就绪 = 候选版本已写进目标提交
(工作区写了没提交不算)、完整 SHA、记录检查、**必需 context 集合全部 success**、
远端 tag 已核对未占用、Release 不存在;首发必须显式指定版本号。
预检只读:不执行也不推荐自动发布路径。
- **CI 就绪**:必需 context 集合来自 .gitea/required-contexts.txt(缺失/为空 ⇒ 没有策略 ⇒ 阻断,
不许拿观察到的状态顶替);失败/缺项/pending/查询异常都阻断;
**Release 查询只有 HTTP 404 才算不存在**。
- 模板同步:templates/version.py、templates/release-preflight.py;templates/README.md
(即生成的 AGENTS.md)补两段并点明 required-contexts.txt 故意留空须填写;
01 正本 §6 三次修正说明(⑧⑨⑩)、§6.5 三态表、§6.6 必查项;07 §3.2 就绪判据表;
04 §J(V-5~V-8 四条,含负例在哪)。
验证:templates 两个自检全过(构建身份 7 组正/负例;预检就绪 19 分支 + 五个 HTTP 码);
new-project.sh bash -n 通过;试点仓反向夹具 83/0、make verify 15/15。
|
2026-10-13 15:26:50 +08:00 |
|
姚章浩
|
79c154f9af
|
docs: 版本条目改固定四类 + 破坏性变化固定写法 + 构建身份(口径变更)
对着试点仓落地时暴露的问题做的口径与模板修正(本轮不推、不打 tag、不部署):
- 条目形状:四个自定义必填节 → **固定四类** Added/Changed/Fixed/Security
(分类可省略、不许空栏目);过程记录进 docs/archive/,未合并事项进 docs/BACKLOG.md。
- 破坏性变化/迁移:固定写在 Changed 里、以 `**破坏性**` 开头并**必须链接发布文档**,
仓内 `docs/….md` 链接**对账**(不存在即红)。
- 构建身份:release_version / build_kind / commit_sha / display_version / built_at;
开发构建显示 X.Y.Z-dev+g<短SHA>(无基线 dev+g<短SHA>),**不许只显示上一正式版本号、
不许自称正式版**;release 只认显式发布上下文。
- **还没有正式版本一律放行**:不判红;首个正式版本号**由人指定**(预检把它列成阻塞项)。
- **没核对远端就不许说校验成功**:CI/预检用 `--require-remote`(本地模式明确写「未核对远端」)。
- 修正"CI 取不到 tag 所以不用 tag"的过时口径:正式版本**就是**用注释 tag,
只是**构建时不要用 git describe 取版本号**;**测试 tag 只在临时测试仓库里创建**。
- 模板同步:templates/check-changelog.py、templates/release-preflight.py、
新增 templates/version.py;ci-gate.py 的 version 项在 CI 下强制核对远端;
new-project.sh 落 scripts/version.py 并按四类重写 CHANGELOG 骨架;
README/07/模板 README 同步;04 增加 §I(V-1~V-4 四条,含负例在哪)。
验证:templates 两个检查器 --self-test 全过;new-project.sh bash -n 通过;
生成的新工程里 check_changelog --tags 绿、--identity 给出 dev+g<短SHA>、
CI=true 下 version 项因"未核对远端"判红(预期);试点仓反向夹具 80/0。
|
2026-10-13 14:59:48 +08:00 |
|
hermes
|
1b0cce283a
|
feat(templates): 同步通知链接基址(CI_PUBLIC_BASE_URL)与可信来源规则
templates/ci_report.py 同步项目版(链接基址/提交链接/回退来源 + 通知字段);templates/gitea-build.yml 上报步骤加非秘密 CI_PUBLIC_BASE_URL;templates/README.md 加'上报脚本的非秘密配置'一节;01 正本 §4.7 增链接基址与'禁止全局 URL 替换';02 Runbook 增排障条目;04 加 T-9(通知链接指向内网地址)。
|
2026-10-13 10:27:43 +08:00 |
|
姚章浩
|
e7c0200068
|
docs: 清掉 02/04 两个文档末尾的多余空行(规范仓剩余空白问题)
|
2026-10-12 17:14:15 +08:00 |
|
姚章浩
|
252da76cf7
|
fix(template): 同步 total_commits<=0 口径与 U-5 记录
|
2026-10-12 16:55:43 +08:00 |
|
姚章浩
|
bda26730f5
|
fix(template): 同批次同步 bootstrap 启动、新分支基准与 Python 锁定隔离
模板 workflow 第一步改成最小 bootstrap(空工作区里仓内脚本还不存在);ci_checkout.sh 拆成 --post-checkout(检出后校验与补取:默认分支引用、事件 before)+ --print-remote;ci_gate.py 新分支范围以远端默认分支为基准;ci-gate.py 的 Python 依赖必须按 uv.lock 安装(uv sync --frozen)、所有检查走 uv run --frozen(项目内 .venv),并断言 sys.prefix != sys.base_prefix,缺锁/只有 requirements.txt 明确失败(不再 uv pip install --system)。文档补第三轮修正记录、trap 与自检命令。
|
2026-10-12 16:45:10 +08:00 |
|
姚章浩
|
062bea41d0
|
docs: 第二轮修正记录、自检命令表与 README 入口
|
2026-10-12 11:15:32 +08:00 |
|
姚章浩
|
5b65ed9579
|
docs: 正本与 Runbook/接入文档口径同步(测试语义、CI-CD 分离、门禁唯一入口、必需检查清单)
按草案逐条落到正本,并把三处已知错误的口径改回:
① 测试语义:删掉"单测跑的是构建产物,不是源码"这条被过度推广的说法。
只有"跑产物"的套件(端到端 / 契约 / 产物自检)才必须排在构建之后;
go test 自己编译测试程序、pytest 直读源码、vitest 默认也跑源码。
写错这条的代价是给每个套件加假依赖、拖慢门禁并制造假故障。T8 同步改。
② CI 与 CD 分离:触发表删掉"推默认分支 → 自动部署测试环境",作业划分表删掉 deploy:test 行,
§4.6 标注为"项目自己的 CD、不属于通用 CI",速查表同步。
③ 门禁入口:统一为 make verify(名字可不同,但 AGENTS/Runbook/CI 必须指同一个),
§3.1、§8 清单、§9 速查表一致。
④ 新增 §4.8「必需检查清单与结果口径」:10 项必需检查的判据表 + 三条结果口径
(失败即停但汇总照做、not_run/skipped 不算过、汇总故障不能报绿),
以及预览/通知作为旁路的规则。
⑤ 接入文档:修掉"直推也拦得住"这句错口径,并写明接入器不再自动合并、
--merge-pr 会先核对状态;试点记录里那一步标注为"当时的自动合并行为已改"。
⑥ 03/04/05 里的同源表述一并同步(生成物 jobs 与假成功占位的判据)。
验证:本批 18 处精确替换在脚本里逐处断言"恰好命中 1 次"(DRY-RUN 先过一遍再应用);
替换后全仓 grep 复查,旧口径只在"说明它已被改掉"的上下文里出现。
|
2026-10-12 00:12:06 +08:00 |
|
姚章浩
|
082afcf673
|
chore(repo): 规范仓库化 —— 从项目目录移到独立仓
原先把规范放在 /srv/aiball/ci/standards/ 是分类错误:规范是跨仓的
(Weknora 三个仓 + aiball),却挂在单个项目(AI球)的目录下,
Weknora 侧的 AGENTS.md 要引用一个 aiball 路径,读起来就是错的。
改法:正本移到独立仓 ~/eng-standards(Gitea 远端 zheromiku/eng-standards
待本人网页创建),文档内 4 处旧路径引用一并更新,并补 .gitignore。
验证:git status 干净;grep 文档已无旧路径;提交信息闸门(~/.githooks/commit-msg)放行。
|
2026-10-10 14:28:21 +08:00 |
|