fix(ticket-management): 标题分隔符改半角连字符 - —— 【域-闸门】(用户定:不用 /);splitTitle 与 rename 同步

This commit is contained in:
2026-09-22 16:22:56 +08:00
parent 9e47a23642
commit 6cd695574b
2 changed files with 5 additions and 5 deletions
+3 -3
View File
@@ -21,9 +21,9 @@ description: 用 Gitea 工单库做「人读 + 机读」双面管理 —— 标
## 2 标题规范
- **前缀(必填,单括号、`/` 分隔)**:`【订单】` `【库存】` `【结算】` `【商品】` `【报表】` `【平台】` `【其他】`;带闸门时**合并成一个括号**:`【域/闸门】`(例 `【报表/等口径】`)—— **不要写两个括号**(`【报表】【等口径】` 已废止)。
- **前缀(必填,单括号、`/` 分隔)**:`【订单】` `【库存】` `【结算】` `【商品】` `【报表】` `【平台】` `【其他】`;带闸门时**合并成一个括号**:`【域-闸门】`(例 `【报表-等口径】`)—— 分隔符用**半角连字符 `-`**;**不要写两个括号**(`【报表】【等口径】` 已废止)。
- 词表**可按项目替换**,但**改动须登记**;新域先用 `【其他】`,**同域攒够 3 条再立**新前缀。
- **闸门(可选)**:`/等口径` `/等取证` `/等部署` —— **仅当「不能开工」**;可开工 ⇒ 括号里只有域。
- **闸门(可选)**:`-等口径` `-等取证` `-等部署` —— **仅当「不能开工」**;可开工 ⇒ 括号里只有域。
- **准入三问**(新增任何段都要过):① 列表页会按它筛 / 排吗?② 能否从正文推出(能推就别重复占位)?③ 生命周期里会变几次(反复变 = 每次都要改标题)?
- 按此三问:**问题域、闸门**通过;**优先级**(churn 大)· **端** · **环境** · **版本** · **客户 / 店铺**(敏感)· **批次**(用 milestone)全部不通过。
@@ -99,6 +99,6 @@ node bin/ticket.mjs rename 142 --repo xbc/xbc --domain=平台 [--gate=等口径]
1. 标题以 `【…】` 开头,且内文 ∈ 问题域词表;
2. 正文第一行存在且含 `域=`;
3. **标题主域 = 首行 `域=` 的 L1**;
4. 标题 `/` 后的闸门 ∈ 词表 **且** 等于首行 `闸门=`;**可开工时标题不得带 `/闸门`**(多写即 FAIL);
4. 标题 `-` 后的闸门 ∈ 词表 **且** 等于首行 `闸门=`;**可开工时标题不得带 `-闸门`**(多写即 FAIL);
5. 人读部分(第一个 `<!--` 之前)**不含**工作区路径与内部分析编号 —— 判据用**具体前缀**(`codes/` · `分析/数据/` · `分析/D-`…`分析/F-` · `分析/_tmp` · `分析/_archive` · `86 §` · `80 · V` · 盘符路径);⚠ **不要用裸 `分析/`**(会误伤中文词组,如「进货分析/商品维度」);
6. 正文若含 `<!--` ⇒ 该注释块必须含 `ref-owner:`。
+2 -2
View File
@@ -40,7 +40,7 @@ function mkApi(opt) {
function splitTitle(title) {
const brackets = []; let s = String(title || "").trim();
while (s.startsWith("【")) { const e = s.indexOf("】"); if (e < 0) break; brackets.push(s.slice(1, e)); s = s.slice(e + 1).trim(); }
const parts = brackets.length ? brackets[0].split("/").map(function (x) { return x.trim(); }) : [];
const parts = brackets.length ? brackets[0].split("-").map(function (x) { return x.trim(); }) : [];
return { brackets: brackets, parts: parts, rest: s };
}
function firstLine(body) { return String(body || "").split(NL)[0] || ""; }
@@ -133,7 +133,7 @@ async function cmdRename(api, opt, n) {
let inner = dom;
if (opt.gate && opt.gate !== "可开工") {
if (GATES.indexOf(opt.gate) < 0) { console.log("闸门不在词表:" + opt.gate); return 1; }
inner = dom + "/" + opt.gate;
inner = dom + "-" + opt.gate;
}
const title = "【" + inner + "】" + sp.rest;
if (opt["dry-run"]) { console.log("[dry-run] " + r.j.title + " → " + title); return 0; }