2026-05-12

This commit is contained in:
2026-05-12 12:24:11 +08:00
parent db71245cbd
commit b20da3cd06
597 changed files with 24930 additions and 35355 deletions

View File

@@ -0,0 +1,203 @@
你是一个精通 Java 微服务架构的资深技术负责人。
请基于以下统一模型评估需求的工作量。
==============================
整体工作量模型
==============================
工作量指数 W =
(单元业务复杂度 B × 单元数量 S)
× 技术复杂度系数 F(T)
× AI效率系数 G(A)
其中:
B = 单个功能单元复杂度
S = 单元数量
F(T) = 技术放大系数
G(A) = AI效率系数
请严格按照步骤执行。
====================================================
第一部分:识别功能单元(规模 S
====================================================
1. 识别最小可重复功能单元
(例如:接口、页面、报表、定时任务等)
2. 统计每类单元数量
要求:
- 不要在此阶段评估复杂度
- 仅统计数量
输出:
- 单元类型
- 每类数量
- 总数量 S
====================================================
第二部分:单元业务复杂度评估 B仅评单个单元
====================================================
假设只实现一个单元评分1-5
1. 业务规则数量
2. 状态流转复杂度
3. 异常处理复杂度
4. 边界场景复杂度
5. 需求不确定性
计算:
B = 五项平均值保留1位小数
注意:
禁止在此阶段考虑单元数量。
输出:
- 各项评分
- 单元复杂度 B
====================================================
第三部分:技术复杂度评估 F(T)
====================================================
评估技术复杂度等级 T1-5
1 = 单服务简单CRUD
2 = 单服务中等逻辑
3 = 多服务调用
4 = 涉及DB变更/MQ
5 = 分布式事务/核心链路/高并发
计算:
F(T) = 1 + 0.2 × (T - 1)
输出:
- T值
- 技术复杂度系数 F(T)
- 技术风险说明
====================================================
第四部分AI效率系数 G(A) 计算
====================================================
步骤A正向评分1-5分
1.需求清晰
2.规则明确度
3.可验证性
4.代码结构清晰度
P = 四项得分之和
步骤B架构抽象复杂度计数制
每触发一项 +1
- 策略/模板动态组合
- 插件或SPI机制
- 规则引擎/表达式驱动
- AOP深度影响核心逻辑
- Saga/TCC/补偿机制
- 多租户/动态数据源
记为 N1
步骤C变更影响范围计数制
每触发一项 +1
- 老服务接口变更
- 数据库老表变更
- 核心业务链路变更
- 公共组件修改
- 权限安全机制修改
- 分布式事务/MQ变更
- 低测试覆盖区域
记为 N2
步骤D历史耦合程度计数制
每触发一项 +1
- 巨型类
- 高复杂度方法
- 隐式调用链
- 模块边界不清晰
- 测试覆盖<30%
- 多服务共享数据库
- 无维护人/无文档
记为 N3
步骤E计算
N = N1 + N2 + N3
A = P - N
====================================================
第五部分安全门检查
====================================================
若满足任一
- 修改核心结算逻辑
- 修改分布式事务核心
- 修改权限核心鉴权
- 单测覆盖率<20%
- 无法清晰定位影响范围
标记为高风险变更
====================================================
第六部分AI效率系数映射
====================================================
若非高风险变更
A 10 G(A) = 0.55
8 A < 10 G(A) = 0.65
6 A < 8 G(A) = 0.75
3 A < 6 G(A) = 0.85
1 A < 3 G(A) = 0.95
A 0 G(A) = 1.0
====================================================
第七部分最终工作量计算
====================================================
计算
基础工作量 = B × S
技术放大后 = 基础工作量 × F(T)
最终工作量指数 W = 技术放大后 × G(A)
请输出
1. 单元数量 S
2. 单元复杂度 B
3. 技术系数 F(T)
4. AI效率系数 G(A)
5. 最终工作量指数 W
6. 综合风险等级//
7. 是否建议拆分需求
8. AI建议参与方式

View File

@@ -0,0 +1,151 @@
---
name: pmassist
description: |
产品文档协作与缺陷分析助手。用于创建或修订 PRD、FRD、DAR(Defect Analysis Report 缺陷分析报告)等产品类文档。
支持快速起草、标准迭代、严格定稿三种模式。默认优先保证交付效率,再按需补齐证据、留痕与原型。
---
# pmassist
## 核心原则
- **分文档类型执行**: PRD、FRD、DAR 使用不同严格度。
- **分阶段执行**: 草案、迭代、定稿采用不同要求,不默认一开始即使用最严格流程。
- **WWH + PDCA 默认保留,但允许轻量化执行**。
- **问答优先闭环关键问题,而非所有问题阻塞**。
- **证据优先覆盖关键结论,而非所有句子逐条索证**。
- **先可交付,再补完备性**。
---
## 0) 文档类型分流(先做)
根据用户初始描述进行分支;不确定就追问:
- **PRD**: 新需求、流程优化、产品规划、业务方案、用户体验
- **FRD**: 具体功能实现、接口/数据/流程细节、技术落地规格
- **DAR**: 线上缺陷、事故复盘、根因分析、纠正预防
> 选择后加载对应模板:
- PRD → `references/prd.md`
- FRD → `references/frd.md`
- DAR → `references/dar.md`
---
## 0.1) 执行模式选择(新增)
在确认文档类型后,必须再确认执行模式:
### A. Quick 模式
适用于:
- PRD 初稿
- 需求探索
- 信息不完整但希望先出版本
- 老需求的轻量改版
特点:
- 允许先生成 v0 草案
- 允许部分章节以 `[ASSUMPTION]` 标注
- 不要求每轮完整 PDCA 留痕
- 不要求 P0 全部解决后才继续草案输出
- 图表、证据映射表可延后到定稿前补齐
### B. Standard 模式
适用于:
- 常规 PRD/FRD
- 多方评审前的文档整理
- 需要一定可追溯性,但不需要最强审计痕迹
特点:
- 执行 WWH + PDCA
- 关键问题需要闭环
- 关键章节需要证据
- 每轮有摘要与变更记录
- 可以带未决项输出“待确认版”
### C. Strict 模式
适用于:
- FRD 正式交付
- DAR 缺陷分析
- 高风险项目
- 需要完整审计留痕的文档
特点:
- 必须完整执行 WWH + PDCA
- 必须严格问答闭环
- P0 未解答不得定稿
- 必须完成证据→章节映射
- 必须完成图表、表格、差异分析、资产深挖
### 默认策略
- **PRD 默认 Quick**
- **FRD 默认 Standard**
- **DAR 默认 Strict**
若用户未指定,按以上默认策略执行。
---
## 1) 确认工作目录与项目简称
- 默认路径:`./{项目简称}-{YYYYMMDD-HHMM}`
- 项目简称来自「需求极简概称」或「文件标题」
- 必须询问用户确认;未确认不得创建目录
---
## 1.5) 会话恢复(Resume Session)
### 触发条件
用户提供已存在的工作目录路径,或明确表达以下意图时立即执行会话恢复:
- “继续之前的工作”
- “修改 XXX 的 PRD/FRD/DAR”
- “重新编辑 {workdir} 的文档”
- “在 {workdir} 基础上调整”
- 用户直接提供形如 `./项目名-20260209-1500` 的路径
### 验证会话有效性
基础必备文件:
- `session.yaml`
- `desc.md`
增强校验文件:
- `summary.md`
- `outputs/{doc_type}.md`
若基础文件缺失 → 提示损坏,建议创建新会话
若增强文件缺失 → 允许恢复,但标记为“部分恢复”
### 状态回顾(自动生成报告)
读取以下文件:
- `session.yaml` → 获取文档类型、当前 Round、状态、模式
- `summary.md` → 回顾已完成内容(若存在)
- `questions/round_*.yaml` → 统计遗留问题(若存在)
- `outputs/{doc_type}.md` → 检查章节完成度(若存在)
- `session.yaml``prototype` 块 → 原型状态(如果启用)
生成会话状态报告并展示给用户。
### 询问工作模式
展示报告后,询问用户选择工作方式:
- **Continue**:继续当前迭代
- **Revise**:开启新轮次修订
- **Patch**:仅改局部内容
- **Prototype**:更新原型
- **Finalize**:执行最终定稿
- **Fast Draft**:基于已有材料快速重生成草案(新增)
---
## 2) 初始化工作区(确认后执行)
### 标准目录结构
```text
{workdir}/
desc.md
session.yaml
summary.md
decision_log.md
materials/
materials_index.md
rounds/
questions/
outputs/

View File

@@ -0,0 +1,270 @@
---
name: tgassist
description: |
项目开发“基座操作系统”技能。通过统一 Spec Workspace、角色协作、阶段门禁与证据追溯
让 AI on the loop 成为可执行流程,推动项目从需求到验收全程可控、可验证、可复盘。
---
# tgassist
## 核心定位(必须)
- tgassist 是 **项目级协作治理系统**,不是 PRD/FRD/DAR 文档生成器。
- **pmassist 是前序步骤且独立存在**tgassist 只接收已形成的需求输入(可由 pmassist 或人类提供)。
- tgassist 借鉴 pmassist 的“精益助理精神”和“资产深挖技巧”,但**不包含 pmassist 功能**。
## 核心规则(强制)
- **AI on the loop**:关键节点必须人类确认(初始化、阶段门禁、可选门禁启用/变更、验收/归档)。
- **大周天固定主线**:提供需求 → 明确验收标准 → 制定计划 →(可选)架构设计 → 模块任务拆分 → 功能开发 →(可选)代码评审 → 测试 → 验收评审 → 归档。
- **小周天 PDCA**:所有角色以 PDCA 闭环执行。
- **问题闭环**每轮必须生成问题清单P0/P1/P2P0 未关闭不得进入下一轮完整输出。
- **证据优先**:关键结论必须标注证据或 `[ASSUMPTION]`;需维护证据索引与章节映射。
- **资产深挖**:若存在 CodeMap/DomainMap/Runtime必须下钻至页面/字段/调用链证据层级。
- **门禁治理**:可选门禁由系统推荐、用户确认;中途变更必须走变更单并记录风险接受。
- **流程裁剪**:允许按项目规模/风险等级裁剪角色流程,但必须留痕。
- **RACI 裁剪**:角色权限矩阵可按项目规模裁剪,裁剪原因必须落盘。
- **Git 纪律可选**:关键产出是否提交 Git 由用户确认;若启用需记录摘要/角色/阶段/变更原因。
- **不做外部工具联动**:不对接 Jira/飞书/Notion/GitHub可在未来扩展
## 0) 入口与角色选择
1. 选择工作方向:初始化项目 / 需求与验收 / 开发推进 / 测试文档 / 评审验收 / 变更管理 / 复盘归档。
2. 选择角色 AssistPM / PJM / Arch / Dev / QA / Council固定 6 角色)。
3. 系统基于 workspace 缺口与风险等级给出推荐角色,用户确认后进入流程。
工作方向菜单:
| # | 方向 | 角色 | 适用场景 |
|---|------|------|----------|
| 1 | 初始化项目 | PJM | 新建 workspace填充 project.yaml/session.yaml |
| 2 | 需求与验收 | PM | 需求拆解、验收标准制定 |
| 3 | 开发推进 | Arch / Dev / PJM | 架构设计、任务跟进、代码产出、单测记录 |
| 4 | 测试文档 | QA | 用例编写、缺陷记录、回归 |
| 5 | 评审验收 | Council | 质量门禁、安全/合规审核 |
| 6 | 变更管理 | PJM / Council | 变更单录入、门禁配置变更 |
| 7 | 复盘归档 | Council / PJM | 归档、release notes、Skill 沉淀 |
## 1) 工作区初始化(必须确认)
**默认目录**`./workspace/specs/{project}-{YYYYMMDD-HHMM}`
用户可指定路径;确认前不得创建目录。
目录结构(完全重新定义):
```
{workdir}/
00_meta/
project.yaml
session.yaml
summary.md
decision_log.md
status.md
roles.md
gates.md
evidence_index.md
rounds/
questions/
01_input/
requirements.md
references/
02_acceptance/
acceptance.md
checklist.md
03_plan/
milestones.md
risks.md
dependencies.md
04_design/
architecture.md
interfaces.md
data_model.md
05_delivery/
dev_log.md
change_log.md
06_test_docs/
test_cases.md
defects.md
regression.md
07_council/
review.md
decision.md
99_archive/
release_notes.md
```
RACI 建议载体(可裁剪):
- `00_meta/roles.md`(角色职责矩阵)
初始化模板:
- 使用 `assets/workspace_template/` 作为基线目录结构与文件模板。
- 必要时用项目名称、风险等级、可选门禁配置填充 `00_meta/project.yaml``00_meta/session.yaml`
- 可选门禁清单模板位于:`assets/workspace_template/00_meta/gate_checklists/`
初始化脚本:
- `scripts/init_workspace.sh`:复制模板并填充占位符,生成新的 workspace。
- 参见 `references/project_yaml_schema.md` 了解字段规则与枚举值。
- 参见 `references/session_yaml_schema.md` 了解 session 字段规则。
门禁清单生成脚本:
- `scripts/generate_gate_checklists.sh`:根据 `00_meta/project.yaml` 中启用的可选门禁,生成 `gate_checklists_active/`
- 门禁推荐规则参见 `references/gate_recommendation_matrix.md`
## 2) 资产理解与证据索引(强制)
- 资产路径:`assets/codemap/``assets/domainmap/``assets/runtime/`
- 必须深挖证据层级:
- 前端路由/视图/分支:`codemap/frontend/**/routes.yaml``views.yaml``dialog_branches.yaml`
- 后端字段:`codemap/serve/dataobjects/java/*.yaml`
- 后端调用链:`codemap/serve/callchains/java/domains/*.yaml`
- 领域证据:`domainmap/*.yaml`
- 证据格式:
- 本地资产:`[CODEMAP:...]``[DOMAINMAP:...]``[RUNTIME:...]`
- 外部资料:`[SRC-xxx]`
- 无证据:`[ASSUMPTION]`
## 3) 大周天阶段引擎(固定主线)
阶段推进规则:
- 每阶段进入前检查 DoR输入完整性
- 每阶段完成后检查 DoD产出完整性
- 通过门禁后才允许推进到下一阶段
可选门禁(系统推荐 + 用户确认):
- 架构设计门禁
- 代码评审门禁
- 安全审核门禁
- 合规/隐私审核门禁Council Assist
## 4) 小周天(角色 PDCA流程模板
所有角色遵循:**Plan → Do → Check → Act**
### PM Assist
- Plan需求输入与证据汇总 → 明确 WWH / 范围 / 验收标准
- Do需求拆解与证据映射 → 形成问题清单
- Check验收标准一致性、范围边界、证据缺口
- Act等待人类确认 → 交付给 PJM
### PJM Assist
- Plan读取需求/验收 → 制定计划与里程碑
- Do影响边界分析模块/接口/数据/依赖/测试五类)→ 风险/资源/依赖治理
- Check计划与验收匹配、影响范围完整性
- Act任务发布与监控 → 变更单与复盘
### Arch Assist
## 你的身份
你是系统架构师,负责整体技术设计。
## 你的目标
- 设计清晰、可扩展的系统架构
- 降低长期复杂度
- 确保技术选型与约束合理
## 你可以做的事
- 技术选型
- 系统拆分
- 定义模块边界和接口规范
- 输出架构设计文档与数据模型
## 你不能做的事
- 不编写业务代码
- 不修改需求范围
- 不绕过门禁单方面冻结方案
## 工作
- Plan读取需求/约束 → 资产深挖CodeMap / DomainMap / Runtime→ 列出架构设计问题清单
- Do方案设计与技术取舍 → 关键接口定义 → 数据模型设计 → 输出 `04_design/architecture.md``interfaces.md``data_model.md`
- Check一致性/可行性/风险验证 → 确认与需求/验收标准对齐 → 证据缺口标注
- Act等待人类确认 → 按评审意见修订 → 方案冻结或进入变更控制
### Dev Assist后端示例
## 你的身份
你是后端工程师,只负责实现后端业务逻辑。
## 你的目标
- 按架构和需求实现稳定、可测试的代码
- 保证单测覆盖率达标
- 边开发边对照验收标准,不留"后补"债务
## 你可以做的事
- 编写业务代码
- 实现 API
- 编写必要的单元测试
## 你不能做的事
- 不更改架构设计
- 不新增未经批准的功能
- 不跳过单元测试或以"后补"代替
## 工作
- Plan制定任务拆分计划 → **每个可测试单元必须列出单测计划**(方法名 + 测试场景列表)
- Do功能开发 → **强制编写单元测试**(不得跳过,不得以"后补"代替)→ 边开发边对照验收标准
- Check**单测全部通过**(通过率 100% 才允许进入 Check→ 记录单测结果到 `dev_log.md` → 总结到06_test_docs → 可选代码评审
- Act等待人类确认 → 按修改意见修订计划 → 进入下一轮
## 留痕载体
- `05_delivery/dev_log.md`
**单元测试强制规则**
- 每个 Service 方法必须有对应单测(覆盖正常路径 + 至少 1 个异常/边界路径)
- 单测必须在功能开发完成后、Check 阶段前执行完毕
- 单测结果必须以结构化表格记录到 `05_delivery/dev_log.md``## 单元测试记录` 区块
- 单测未通过(或未执行)视为 DoD 未达成,**禁止推进到下一阶段**
- 单测覆盖率低于 **80%**(核心业务方法)须在 dev_log.md 中标注原因并获得人类确认
### QA Assist
## 你的身份
你是测试工程师,专门负责找问题。
## 你的目标
- 覆盖所有验收标准
- 发现边界与异常情况
- 尽可能暴露缺陷和风险
## 你可以做的事
- 设计测试用例与覆盖矩阵
- 提出反例和异常场景
- 发现逻辑漏洞并记录缺陷
## 你不能做的事
- 不修复代码
- 不修改需求
- 不跳过回归复测
## 工作
- Plan制定测试策略与范围 → 输出测试用例计划(覆盖正常路径 + 边界 + 异常)
- Do用例编写与覆盖矩阵输出 → 执行测试 → 缺陷记录与归类(`06_test_docs/defects.md`
- Check回归与复测记录 → 确认缺陷关闭状态 → 覆盖矩阵完整性验证
- Act测试总结 → 等待人类确认/评审 → 缺陷未关闭不得推进验收
## 留痕载体
- `06_test_docs/test_cases.md``defects.md``regression.md`
### Council Assist
- Plan汇总证据包 → 准备门禁检查清单
- Do质量门禁 →(可选)安全审核 →(可选)合规/隐私审核
- Check问题清单与整改要求
- Act评审决议 → 验收结论 → 归档
## 5) 合规/隐私最小清单Council Assist 推荐)
- 合法性/公平性/透明性(告知与合法依据)
- 目的限定与用途限制
- 数据最小化与数据质量
- 存储期限与删除策略
- 安全保障与访问控制
- 个体权利响应(访问/更正/删除)
- 责任与可证明性(审计/制度/记录)
- DPIA/隐私影响评估(高风险必做)
## 6) 变更管理(强制)
任何变更必须记录:
- 变更原因、影响范围、风险等级、回滚方案
- 责任人、确认人、时间
- 是否影响门禁配置(如需变更须二次确认)
## 7) 留痕与交付物
必须落盘:
- `summary.md`(每轮摘要)
- `decision_log.md`(关键决策)
- `rounds/round_N.md`PDCA 过程)
- `questions/round_N.yaml`(问题清单)
- `evidence_index.md`(证据索引)
- `roles.md`RACI按规模裁剪
## 8) 禁止事项
- 未确认即创建目录/更改门禁
- 未关闭 P0 问题即推进阶段
- 无证据断言关键结论

View File

@@ -0,0 +1,2 @@
# Decision Log
- {{date}}: 初始化项目与基础规则确认。

View File

@@ -0,0 +1,5 @@
# Evidence Index
| ID | Title | Type | Source | Date | Path | Notes |
|---|---|---|---|---|---|---|
| SRC-001 | | | | | | |

View File

@@ -0,0 +1,12 @@
# Architecture Review Checklist
| Item | Description | Status | Evidence | Notes |
|---|---|---|---|---|
| Scope | Architecture scope matches requirements | | | |
| Constraints | Constraints and assumptions documented | | | |
| Interfaces | Key interfaces defined | | | |
| Data model | Core data model documented | | | |
| Tradeoffs | Tradeoffs and alternatives evaluated | | | |
| Risks | Architecture risks identified and mitigations planned | | | |
| Non-functional | Performance, availability, security targets defined | | | |
| Evolution | Migration/compatibility plan documented | | | |

View File

@@ -0,0 +1,12 @@
# Code Review Checklist
| Item | Description | Status | Evidence | Notes |
|---|---|---|---|---|
| Requirements | Implementation matches acceptance criteria | | | |
| Tests | Unit/functional tests updated and passing | | | |
| Error handling | Errors handled and user-facing behavior defined | | | |
| Performance | Performance impact assessed | | | |
| Security | Security considerations reviewed | | | |
| Maintainability | Code readability and structure acceptable | | | |
| Compatibility | Backward compatibility assessed | | | |
| Logging/Monitoring | Observability changes documented | | | |

View File

@@ -0,0 +1,13 @@
# Privacy & Compliance Review Checklist
| Item | Description | Status | Evidence | Notes |
|---|---|---|---|---|
| Lawfulness/Transparency | Legal basis and user notices are documented | | | |
| Purpose limitation | Data use limited to defined purposes | | | |
| Data minimization | Only necessary data collected | | | |
| Data quality | Data accuracy and update mechanisms defined | | | |
| Storage limitation | Retention period defined and enforced | | | |
| Security safeguards | Security controls for personal data | | | |
| Individual rights | Access/rectify/delete requests supported | | | |
| Accountability | Audit trail and responsibility defined | | | |
| DPIA | DPIA completed for high-risk processing | | | |

View File

@@ -0,0 +1,12 @@
# Security Review Checklist
| Item | Description | Status | Evidence | Notes |
|---|---|---|---|---|
| Threat model | Threat model exists for new/changed components | | | |
| AuthN/AuthZ | Access control and permission checks reviewed | | | |
| Secrets | Secrets managed securely (no hard-coded secrets) | | | |
| Input validation | User/externally sourced inputs validated | | | |
| Dependencies | Third-party dependencies reviewed/approved | | | |
| Logging | Security-relevant events logged | | | |
| Incident response | Rollback/mitigation plan documented | | | |
| Data protection | Sensitive data protected in transit/at rest | | | |

View File

@@ -0,0 +1,43 @@
# Gates (DoR / DoD)
> 每阶段进入前检查 DoR完成后检查 DoD可选门禁由系统推荐、用户确认。
## 需求输入
- DoR: 需求来源明确;背景/目标初步描述
- DoD: 需求文本落盘;证据索引初版
## 验收标准
- DoR: 需求范围与目标明确
- DoD: 验收标准可测试;范围边界明确
## 计划制定
- DoR: 验收标准确认
- DoD: 里程碑/资源/风险/依赖落盘
## 架构设计(可选)
- DoR: 复杂度/风险达到门槛
- DoD: 架构方案/接口/数据模型落盘并评审
## 模块任务拆分
- DoR: 计划确认
- DoD: 任务列表与责任人明确
## 功能开发
- DoR: 任务清单确认
- DoD: 实现记录与单测/自测结果
## 代码评审(可选)
- DoR: 评审门禁启用
- DoD: 评审结论与整改记录
## 测试
- DoR: 可测试版本与用例准备
- DoD: 测试报告/缺陷清单/回归记录
## 验收评审
- DoR: 证据包齐全
- DoD: 评审决议与整改清单
## 归档
- DoR: 所有门禁通过
- DoD: 归档文档与复盘记录

View File

@@ -0,0 +1,27 @@
schema:
name: tgassist.project
version: "0.1"
project:
name: "{{project_name}}"
alias: "{{project_alias}}"
description: "{{project_desc}}"
owner: "{{project_owner}}"
created_at: "{{date}}"
governance:
scale: "small|medium|large"
risk_level: "low|medium|high"
optional_gates:
architecture_design: "enabled|disabled"
code_review: "enabled|disabled"
security_review: "enabled|disabled"
privacy_compliance: "enabled|disabled"
git_policy:
enabled: "true|false"
commit_format: "[role][phase] summary - reason"
evidence_sources:
codemap: "assets/codemap/"
domainmap: "assets/domainmap/"
runtime: "assets/runtime/"

View File

@@ -0,0 +1,7 @@
round: {{round}}
questions:
- id: Q{{round}}-1
priority: P0
question: "..."
options: ["...", "...", "其他"]
status: pending

View File

@@ -0,0 +1,16 @@
# Roles (RACI)
> 按项目规模裁剪并记录原因。
| 阶段/角色 | PM | PJM | Arch | Dev | QA | Council |
|---|---|---|---|---|---|---|
| 需求输入 | R | C | I | I | I | I |
| 验收标准 | A | C | C | I | I | I |
| 计划制定 | C | A/R | C | I | I | I |
| 架构设计(可选) | C | C | A/R | I | I | I |
| 任务拆分 | C | A/R | C | R | I | I |
| 功能开发 | I | C | C | A/R | I | I |
| 代码评审(可选) | I | C | C | A/R | I | I |
| 测试 | I | C | I | C | A/R | I |
| 验收评审 | C | C | C | C | C | A/R |
| 归档 | I | A/R | I | I | I | C |

View File

@@ -0,0 +1,21 @@
# Round {{round}}
## Plan
- WWH 填充度:
- 本轮目标:
- 需要读取的资产与资料:
- 需要提出的问题:
## Do
- 资产读取:
- 分析与产出:
- 提问:
## Check
- 目标覆盖:
- 证据充分性:
- 逻辑一致性:
## Act
- 更新 summary/decision_log/session
- 规划下一轮

View File

@@ -0,0 +1,43 @@
schema:
name: tgassist.session
version: "0.1"
status:
current_phase: "demand"
current_round: 1
state: "in_progress"
last_updated: "{{date}}"
phases:
- name: "demand"
status: "in_progress"
- name: "acceptance"
status: "pending"
- name: "plan"
status: "pending"
- name: "architecture"
status: "optional"
- name: "decompose"
status: "pending"
- name: "develop"
status: "pending"
- name: "code_review"
status: "optional"
- name: "test"
status: "pending"
- name: "acceptance_review"
status: "pending"
- name: "archive"
status: "pending"
questions:
p0_open: 0
p1_open: 0
p2_open: 0
metrics:
evidence_count: 0
mermaid_count: 0
table_count: 0
assumptions: []

View File

@@ -0,0 +1,10 @@
# Status
- 当前阶段:{{current_phase}}
- 当前轮次:{{current_round}}
- 阻塞问题:{{p0_count}}
- 关键决策:{{last_decision}}
- 最近更新:{{date}}
## 下一步
- {{next_action}}

View File

@@ -0,0 +1,2 @@
# Summary
- {{date}}: 初始化项目,进入 Round 1。

View File

@@ -0,0 +1,7 @@
# Requirements
## 背景与目标
## 需求概述
## 证据/参考

View File

@@ -0,0 +1,5 @@
# Acceptance
## 验收标准
## 范围边界

View File

@@ -0,0 +1,5 @@
# Acceptance Checklist
| Item | Description | Status | Evidence |
|---|---|---|---|
| | | | |

View File

@@ -0,0 +1,5 @@
# Dependencies
| Dependency | Type | Impact | Owner | Status |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,5 @@
# Milestones
| Milestone | Date | Owner | Status |
|---|---|---|---|
| | | | |

View File

@@ -0,0 +1,5 @@
# Risks
| Risk | Level | Mitigation | Owner | Status |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,7 @@
# Architecture
## Overview
## Tradeoffs
## Evidence

View File

@@ -0,0 +1,5 @@
# Data Model
| Entity | Fields | Constraints | Notes |
|---|---|---|---|
| | | | |

View File

@@ -0,0 +1,5 @@
# Interfaces
| Interface | Owner | Input | Output | Notes |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,5 @@
# Change Log
| Change | Reason | Impact | Decision | Date |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,90 @@
# 开发日志 (05_delivery/dev_log.md)
> **项目**: {project_name}
> **更新规则**: 每个任务完成或有重要产出时更新;单元测试执行后**必须**填写"单元测试记录"区块
---
## 任务状态总览
| 任务 | 负责人 | Day | 状态 | 完成时间 | 备注 |
|------|--------|-----|------|----------|------|
| T-xxx | — | — | ⬜ 待开始 | — | — |
> 状态说明:✅ 完成 / 🔄 进行中 / ⬜ 待开始 / ❌ 阻塞
---
## 开发日志详情
### {YYYY-MM-DD} | Round N | Dev Assist — {任务编号} {任务名称}
**PDCA 阶段**: Do — 代码产出
**本轮产出**:
| 文件 | 模块 | 说明 |
|------|------|------|
| — | — | — |
**关键设计决策**:
- (记录影响后续维护的设计选择)
**DoD 验证清单**:
- [ ] ...
**遗留问题**:
- (无则写"无"
---
## 单元测试记录
> ⚠️ **强制要求**:每个任务的单测必须在进入 Check 阶段前完成并记录。
> 单测未通过或未记录 = DoD 未达成 = 禁止推进下一阶段。
### {任务编号} {任务名称} — 单测计划与结果
**执行时间**: {YYYY-MM-DD HH:MM}
**执行人**: {name}
**测试框架**: JUnit 5 / Mockito或实际使用框架
#### 单测结果明细
| 测试类 | 测试方法 | 场景描述 | 结果 | 备注 |
|--------|----------|----------|------|------|
| `XxxServiceTest` | `testSave_success` | 正常创建,返回主键 | ✅ PASS | — |
| `XxxServiceTest` | `testSave_missingOrderNo` | 订单号为空,抛 BusinessException | ✅ PASS | — |
| `XxxServiceTest` | `testSave_invalidProvider` | 服务商不存在,抛 BusinessException | ✅ PASS | — |
| `XxxServiceTest` | `testList_emptyResult` | 无数据时返回空 Page | ✅ PASS | — |
> 结果说明:✅ PASS / ❌ FAIL / ⚠️ SKIP须注明原因
#### 覆盖率摘要
| 类 | 方法数 | 已覆盖 | 覆盖率 | 是否达标≥80% |
|----|--------|--------|--------|-----------------|
| `XxxService` | — | — | —% | — |
> 覆盖率低于 80% 须填写原因,并获得人类确认后方可推进:
> - 原因:
> - 确认人:
> - 确认时间:
#### 失败/跳过明细(若有)
| 测试方法 | 失败原因 | 修复状态 | 修复时间 |
|----------|----------|----------|----------|
| — | — | — | — |
---
## 变更记录
> 暂无变更
---
## 阻塞记录
> 暂无阻塞

View File

@@ -0,0 +1,5 @@
# Defects
| ID | Summary | Severity | Status | Evidence |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,5 @@
# Regression
| Version | Cases | Pass | Fail | Notes |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,5 @@
# Test Cases
| Case | Scope | Steps | Expected | Status |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,5 @@
# Decision
| Item | Decision | Owner | Due | Status |
|---|---|---|---|---|
| | | | | |

View File

@@ -0,0 +1,7 @@
# Review
## Summary
## Issues
## Decision

View File

@@ -0,0 +1,7 @@
# Release Notes
## Highlights
## Changes
## Risks

View File

@@ -0,0 +1,16 @@
# Gate Recommendation Matrix (tgassist)
> System recommends gates based on project scale and risk level. User confirmation is required.
## Matrix
| Risk \ Scale | Small | Medium | Large |
|---|---|---|---|
| Low | (none) | Code Review | Code Review |
| Medium | Code Review + Security Review | Architecture + Code Review + Security Review | Architecture + Code Review + Security Review |
| High | Architecture + Code Review + Security Review + Privacy/Compliance | Architecture + Code Review + Security Review + Privacy/Compliance | Architecture + Code Review + Security Review + Privacy/Compliance |
## Notes
- Architecture gate recommended when system complexity is medium or above.
- Privacy/Compliance gate recommended for high-risk or personal data handling projects.
- User can override recommendations, but must record decision and risk acceptance.

View File

@@ -0,0 +1,50 @@
# project.yaml Schema (tgassist)
## Fields
- `schema.name`:
- Value: `tgassist.project`
- `schema.version`:
- Value: `0.1`
- `project.name`:
- Human-readable project name
- `project.alias`:
- Short slug used for directory naming
- `project.description`:
- One-line description
- `project.owner`:
- Primary owner (role/person)
- `project.created_at`:
- ISO date (YYYY-MM-DD)
- `governance.scale`:
- Enum: `small | medium | large`
- `governance.risk_level`:
- Enum: `low | medium | high`
- `governance.optional_gates`:
- `architecture_design`: `enabled | disabled`
- `code_review`: `enabled | disabled`
- `security_review`: `enabled | disabled`
- `privacy_compliance`: `enabled | disabled`
- `governance.git_policy`:
- `enabled`: `true | false`
- `commit_format`: string, default `[role][phase] summary - reason`
- `evidence_sources`:
- `codemap`: path string
- `domainmap`: path string
- `runtime`: path string
## Notes
- Optional gates default to `disabled` until user confirms.
- Risk level drives recommended optional gates.
- If `git_policy.enabled=true`, commits must include summary, role, phase, and change reason.

View File

@@ -0,0 +1,44 @@
# session.yaml Schema (tgassist)
## Fields
- `schema.name`:
- Value: `tgassist.session`
- `schema.version`:
- Value: `0.1`
- `status.current_phase`:
- Enum: `demand | acceptance | plan | architecture | decompose | develop | code_review | test | acceptance_review | archive`
- `status.current_round`:
- Integer (>= 1)
- `status.state`:
- Enum: `in_progress | awaiting_answers | finalized`
- `status.last_updated`:
- ISO date (YYYY-MM-DD)
- `phases`:
- List of phase objects
- Each phase has:
- `name` (same enum as `current_phase`)
- `status`: `pending | in_progress | completed | optional`
- `questions`:
- `p0_open`: integer
- `p1_open`: integer
- `p2_open`: integer
- `metrics`:
- `evidence_count`: integer
- `mermaid_count`: integer
- `table_count`: integer
- `assumptions`:
- List of strings
## Notes
- Phase progression requires DoR/DoD checks and gate approvals.
- `state` becomes `awaiting_answers` when P0 questions remain.

View File

@@ -0,0 +1,93 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'USAGE'
Usage:
generate_gate_checklists.sh --project PATH [options]
Required:
--project PATH Workspace root (contains 00_meta/project.yaml)
Optional:
--output PATH Output directory for active gate checklists
(default: <project>/00_meta/gate_checklists_active)
--template PATH Template dir (default: skills/tg/assets/workspace_template/00_meta/gate_checklists)
-h, --help Show help
USAGE
}
die() {
echo "error: $*" >&2
exit 1
}
command -v python3 >/dev/null 2>&1 || die "python3 is required"
project=""
output=""
template_dir=""
while [[ $# -gt 0 ]]; do
case "$1" in
--project) project="$2"; shift 2;;
--output) output="$2"; shift 2;;
--template) template_dir="$2"; shift 2;;
-h|--help) usage; exit 0;;
*) die "unknown arg: $1";;
esac
done
[[ -z "$project" ]] && die "--project is required"
project_yaml="$project/00_meta/project.yaml"
[[ -f "$project_yaml" ]] || die "missing $project_yaml"
if [[ -z "$output" ]]; then
output="$project/00_meta/gate_checklists_active"
fi
if [[ -z "$template_dir" ]]; then
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
template_dir="${script_dir}/../assets/workspace_template/00_meta/gate_checklists"
fi
mkdir -p "$output"
enabled_gates=$(python3 - "$project_yaml" <<'PY'
import re, sys
path = sys.argv[1]
patterns = {
"architecture_design": "architecture_review.md",
"code_review": "code_review.md",
"security_review": "security_review.md",
"privacy_compliance": "privacy_review.md",
}
found = {k: False for k in patterns}
for line in open(path, 'r', encoding='utf-8'):
m = re.match(r"\s*(architecture_design|code_review|security_review|privacy_compliance)\s*:\s*\"?(\w+)\"?", line)
if m:
found[m.group(1)] = (m.group(2).strip().lower() == "enabled")
files = []
for k, v in found.items():
if v:
files.append(patterns[k])
print(" ".join(files))
PY
)
if [[ -z "$enabled_gates" ]]; then
echo "No optional gates enabled."
exit 0
fi
for f in $enabled_gates; do
src="$template_dir/$f"
[[ -f "$src" ]] || die "template missing: $src"
cp "$src" "$output/"
echo "Copied: $f"
done
echo "Active gate checklists generated at: $output"

View File

@@ -0,0 +1,158 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'USAGE'
Usage:
init_workspace.sh --name NAME [options]
Required:
--name NAME Project name
Optional:
--alias ALIAS Project alias (default: slugified name)
--desc DESC Project description
--owner OWNER Project owner
--scale small|medium|large Project scale (default: medium)
--risk low|medium|high Risk level (default: medium)
--gate-architecture enabled|disabled Optional gate (default: disabled)
--gate-code-review enabled|disabled Optional gate (default: disabled)
--gate-security enabled|disabled Optional gate (default: disabled)
--gate-privacy enabled|disabled Optional gate (default: disabled)
--git-enabled true|false Git policy enabled (default: false)
--git-commit-format FORMAT Commit format (default: "[role][phase] summary - reason")
--output PATH Output directory (default: ./workspace/specs/{alias}-YYYYMMDD-HHMM)
-h, --help Show help
USAGE
}
die() {
echo "error: $*" >&2
exit 1
}
command -v python3 >/dev/null 2>&1 || die "python3 is required"
project_name=""
project_alias=""
project_desc=""
project_owner=""
scale="medium"
risk="medium"
_gate_arch="disabled"
_gate_code_review="disabled"
_gate_security="disabled"
_gate_privacy="disabled"
git_enabled="false"
git_commit_format="[role][phase] summary - reason"
output=""
while [[ $# -gt 0 ]]; do
case "$1" in
--name) project_name="$2"; shift 2;;
--alias) project_alias="$2"; shift 2;;
--desc) project_desc="$2"; shift 2;;
--owner) project_owner="$2"; shift 2;;
--scale) scale="$2"; shift 2;;
--risk) risk="$2"; shift 2;;
--gate-architecture) _gate_arch="$2"; shift 2;;
--gate-code-review) _gate_code_review="$2"; shift 2;;
--gate-security) _gate_security="$2"; shift 2;;
--gate-privacy) _gate_privacy="$2"; shift 2;;
--git-enabled) git_enabled="$2"; shift 2;;
--git-commit-format) git_commit_format="$2"; shift 2;;
--output) output="$2"; shift 2;;
-h|--help) usage; exit 0;;
*) die "unknown arg: $1";;
esac
done
[[ -z "$project_name" ]] && die "--name is required"
if [[ -z "$project_alias" ]]; then
project_alias=$(echo "$project_name" | tr '[:upper:] ' '[:lower:]-' | tr -cd 'a-z0-9-')
fi
if [[ -z "$output" ]]; then
output="./workspace/specs/${project_alias}-$(date +%Y%m%d-%H%M)"
fi
if [[ -e "$output" ]]; then
die "output already exists: $output"
fi
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
template_dir="${script_dir}/../assets/workspace_template"
mkdir -p "$output"
cp -R "$template_dir"/. "$output"/
date_str="$(date +%Y-%m-%d)"
export TG_PROJECT_NAME="$project_name"
export TG_PROJECT_ALIAS="$project_alias"
export TG_PROJECT_DESC="$project_desc"
export TG_PROJECT_OWNER="$project_owner"
export TG_DATE="$date_str"
export TG_SCALE="$scale"
export TG_RISK="$risk"
export TG_GATE_ARCH="$_gate_arch"
export TG_GATE_CODE_REVIEW="$_gate_code_review"
export TG_GATE_SECURITY="$_gate_security"
export TG_GATE_PRIVACY="$_gate_privacy"
export TG_GIT_ENABLED="$git_enabled"
export TG_GIT_COMMIT_FORMAT="$git_commit_format"
export TG_CURRENT_PHASE="demand"
export TG_CURRENT_ROUND="1"
export TG_P0_COUNT="0"
export TG_LAST_DECISION="-"
export TG_NEXT_ACTION="collect requirements"
replace_file() {
python3 - "$1" <<'PY'
import os
from pathlib import Path
path = Path(os.environ["TARGET_FILE"])
data = path.read_text()
repl = {
"project_name": os.environ.get("TG_PROJECT_NAME", ""),
"project_alias": os.environ.get("TG_PROJECT_ALIAS", ""),
"project_desc": os.environ.get("TG_PROJECT_DESC", ""),
"project_owner": os.environ.get("TG_PROJECT_OWNER", ""),
"date": os.environ.get("TG_DATE", ""),
"current_phase": os.environ.get("TG_CURRENT_PHASE", ""),
"current_round": os.environ.get("TG_CURRENT_ROUND", ""),
"p0_count": os.environ.get("TG_P0_COUNT", ""),
"last_decision": os.environ.get("TG_LAST_DECISION", ""),
"next_action": os.environ.get("TG_NEXT_ACTION", ""),
}
for k, v in repl.items():
data = data.replace("{{" + k + "}}", v)
# project.yaml optional fields
if path.name == "project.yaml":
data = data.replace("small|medium|large", os.environ.get("TG_SCALE", "medium"))
data = data.replace("low|medium|high", os.environ.get("TG_RISK", "medium"))
data = data.replace("enabled|disabled", "enabled" if os.environ.get("TG_GATE_ARCH") == "enabled" else "disabled", 1)
data = data.replace("enabled|disabled", "enabled" if os.environ.get("TG_GATE_CODE_REVIEW") == "enabled" else "disabled", 1)
data = data.replace("enabled|disabled", "enabled" if os.environ.get("TG_GATE_SECURITY") == "enabled" else "disabled", 1)
data = data.replace("enabled|disabled", "enabled" if os.environ.get("TG_GATE_PRIVACY") == "enabled" else "disabled", 1)
data = data.replace("true|false", "true" if os.environ.get("TG_GIT_ENABLED") == "true" else "false", 1)
data = data.replace("[role][phase] summary - reason", os.environ.get("TG_GIT_COMMIT_FORMAT", "[role][phase] summary - reason"))
path.write_text(data)
PY
}
for f in \
"$output/00_meta/project.yaml" \
"$output/00_meta/session.yaml" \
"$output/00_meta/summary.md" \
"$output/00_meta/decision_log.md" \
"$output/00_meta/status.md"; do
export TARGET_FILE="$f"
replace_file "$f"
done
echo "Workspace initialized at: $output"