Commit 9ce3fa0c by DaiJiezhang

chore: configure matt-pocock workflow

parent 67e980ee
# 项目 Agent 规则
## 当前文档入口
- 当前领域背景和术语:`CONTEXT.md`
- 已确认的迁移期待办:`docs/migration-backlog.md`
- 历史需求、设计和任务:`docs/legacy/openspec/`
- 新的长期技术决定:未来按需创建 `docs/adr/`
历史 OpenSpec 只用于追溯,不作为当前任务清单。当前代码和当前文档优先于历史记录。
## Agent skills
### Engineering workflow
新需求按以下顺序处理:
```text
grill-with-docs
→ to-spec
→ to-tickets
→ implement
→ code-review
```
- `grill-with-docs`:澄清需求、领域词汇和技术决定。
- `to-spec`:把已讨论内容整理成 Spec。
- `to-tickets`:把 Spec 拆成可独立验收的 Ticket,并声明阻塞关系。
- `implement`:按 Spec 或 Ticket 开发、测试和提交。
- `code-review`:开发完成后检查变更。
### Issue tracker
正式 Spec 和 Ticket 使用本地 Markdown,位于 `.scratch/<feature-slug>/`,并提交到 Git。详细约定见 `docs/agents/issue-tracker.md`
GitLab 用于代码分支、Merge Request、代码审查和合并,不为同一事项重复创建 GitLab Issue。
### Triage labels
使用默认五类 triage 标签,详细映射见 `docs/agents/triage-labels.md`
### Domain docs
本项目使用单一上下文:`CONTEXT.md``docs/agents/domain.md`。未来新增长期技术决定时,再创建 `docs/adr/` 中的 ADR。
## 工作流边界
- 新需求从 matt-pocock 流程开始,不新建根目录 `openspec/``docs/legacy/openspec/changes/`
- 历史 `tasks.md` 不等同于当前任务清单;创建新 Ticket 前先核对当前代码和 `docs/migration-backlog.md`
- 正式 `.scratch/` 文件提交到 Git;临时讨论不写入 `.scratch/`
- 同一任务只选择 `.scratch/` 或 GitLab Issue 之一作为任务来源。
- 修改前先读取相关 `CONTEXT.md` 和适用的 ADR;修改后验证实际行为或文档链接。
# 项目上下文
## 项目定位
本项目是学有为内部资产管理后台,用于管理公司主体、人员、手机号、企微账号及其他业务资产。
## 当前技术结构
- 前端:Vue 3 + Vite,部署前缀为 `/asset/`
- 默认后端:TypeScript NestJS,前端开发代理默认指向 `127.0.0.1:7691`
- Java 后端:迁移期间保留,用作行为契约对拍基准,默认端口 `7690`
- 数据库:现有 MySQL 数据库,表名使用 `as_` 前缀;NestJS 的 Prisma schema 由现有数据库反向生成,只作只读映射。
- 前端包管理器:pnpm;`frontend/package.json` 中的 `packageManager``volta` 字段是版本约束。
## 迁移边界
NestJS 迁移期间,Java 和 NestJS 并行运行。契约对拍要求两个后端的行为保持一致,因此迁移期间确认过的行为变更记录在 `docs/migration-backlog.md`,在契约全绿并完成迁移前不主动修改。
当前已迁移的主要模块包括:
- 认证和系统账号;
- 公司档案和公司人员;
- 手机号资产;
- 企业微信账号;
- 设备资产。
## 领域词汇
| 术语 | 含义 |
|---|---|
| 公司主体 | 资产归属或业务注册所对应的公司档案 |
| 公司人员 | 公司主体下的人员信息 |
| 手机号资产 | 台账中的手机号记录,可能来自手动建档或其他业务资产 |
| 企微账号 | 企业微信账号及其与手机号资产的关联 |
| 设备资产 | 设备及其图片、归属等信息 |
| 资产来源 | 记录资产从哪类业务对象创建或关联而来 |
| 系统账号 | 登录后台并受角色、状态和页面权限控制的用户 |
| 契约对拍 | 用同一组请求对比 Java 和 NestJS 响应,确认迁移行为一致 |
## 当前规则
- 前端默认使用 NestJS;需要与 Java 对拍时使用 `pnpm dev:java`
- 两个后端共享现有数据库,禁止在迁移期间执行 Prisma migration 改动表结构。
- 资产来源关系是业务可追溯信息,修改资产关联规则时需要保留来源语义。
- 角色、会话、软删除和错误响应属于迁移契约的一部分,行为变更先记录到迁移待办,再单独决策。
## 文档优先级
```text
当前代码
> CONTEXT.md
> docs/migration-backlog.md
> docs/adr/ 中适用的当前 ADR
> docs/legacy/openspec/ 中的历史资料
```
OpenSpec 已封存到 `docs/legacy/openspec/`,不再作为新需求或当前任务的创建入口。
# Domain Docs
本项目是单一业务上下文,领域文档位于仓库根目录。
## 开始探索前读取
- `CONTEXT.md`:当前项目背景、领域术语和系统边界。
- `docs/adr/`:如果目录存在,读取与当前工作区域相关的 ADR。
- `docs/migration-backlog.md`:涉及 NestJS 迁移期间暂缓的行为变更时读取。
如果某个文档或目录尚不存在,继续当前工作,不要把它当作阻塞项;新的领域决定在确认后再创建对应文档。
## 术语约定
需求、Ticket、重构提案和测试名称使用 `CONTEXT.md` 中的领域词汇。需要的新概念不在词汇表中时,先确认它是项目真实概念还是临时命名。
## 决策冲突
如果新方案与已有 ADR 冲突,必须明确指出冲突的 ADR 和原因,不要静默覆盖旧决定。
# Issue tracker: Local Markdown
本项目的正式 Spec 和 Ticket 使用仓库内的 Markdown 文件,代码协作仍使用 GitLab 分支和 Merge Request。
## 目录约定
- 一个功能一个目录:`.scratch/<feature-slug>/`
- 功能 Spec:`.scratch/<feature-slug>/spec.md`
- 实施 Ticket:`.scratch/<feature-slug>/issues/<NN>-<slug>.md`
- Ticket 从 `01` 开始按依赖顺序编号,每个 Ticket 单独一个文件。
- Ticket 顶部使用 `Status:` 记录 triage 状态,标签映射见 `docs/agents/triage-labels.md`
- 评论和讨论追加到文件末尾的 `## Comments` 标题下。
## Git 约定
- 正式 Spec 和 Ticket 必须提交到 Git,确保不同 worktree 和电脑可以读取同一份任务记录。
- 临时讨论和一次性草稿不写入 `.scratch/`
- 同一事项只能选择 `.scratch/` 或 GitLab Issue 作为唯一任务来源,不重复创建。
- GitLab 继续负责代码分支、Merge Request、审查和合并,不承担本地 Spec/Ticket 的重复记录。
## Skill 行为
当 Skill 要“发布到 issue tracker”时,在 `.scratch/<feature-slug>/` 下创建或更新对应 Markdown 文件。
当 Skill 要“读取 Ticket”时,根据用户提供的功能目录或 Ticket 路径读取对应文件。
依赖关系写在每个 Ticket 的 `Blocked by:` 行中;只有所有阻塞 Ticket 完成后,后续 Ticket 才可开始。
# Triage Labels
matt-pocock Skills 使用五个标准 triage 角色。本项目使用相同的标签字符串。
| Skill 角色 | 本项目标签 | 含义 |
|---|---|---|
| `needs-triage` | `needs-triage` | 维护者需要评估事项 |
| `needs-info` | `needs-info` | 等待需求方补充信息 |
| `ready-for-agent` | `ready-for-agent` | 需求完整,可交给 Agent 实施 |
| `ready-for-human` | `ready-for-human` | 需要人工实施或决策 |
| `wontfix` | `wontfix` | 明确不处理 |
以后 Skill 提到标准 triage 角色时,使用右侧对应标签。
......@@ -31,6 +31,12 @@
"skillPath": "skills/gpt-tasteskill/SKILL.md",
"computedHash": "7bd1bfdda0e51016ca222693401a65fc0dd9bf9487e0bd5b1740ba510f6f963a"
},
"grill-with-docs": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/grill-with-docs/SKILL.md",
"computedHash": "a610223c9796f755b603f15ec114849a4b38b9ba3006acfa9bdf3cc56dd44dad"
},
"high-end-visual-design": {
"source": "Leonxlnx/taste-skill",
"sourceType": "github",
......@@ -55,6 +61,12 @@
"skillPath": "skills/imagegen-frontend-web/SKILL.md",
"computedHash": "27255c7c50181e58add156b2aa2bd5325285b85f04027e4c8b73742d98d7be0a"
},
"implement": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/implement/SKILL.md",
"computedHash": "130cac2d72bfde8cd526bf3b754211e2fe00e84bc4d9f9c56f749b9541a3afad"
},
"industrial-brutalist-ui": {
"source": "Leonxlnx/taste-skill",
"sourceType": "github",
......@@ -73,17 +85,35 @@
"skillPath": "skills/redesign-skill/SKILL.md",
"computedHash": "47eced3e960a2c961d3cbee11fa1216264f589344b586a5cbd03967cd6b9c54b"
},
"setup-matt-pocock-skills": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/setup-matt-pocock-skills/SKILL.md",
"computedHash": "a45163cba56f72f5f224c46557c047d51547147a29e383e5a769ec39eecd1188"
},
"shadcn": {
"source": "shadcn/ui",
"sourceType": "github",
"skillPath": "skills/shadcn/SKILL.md",
"computedHash": "0dc0edeeaec2ae491ae506806517866a3f9bd48d04e0458feb37e0252862891f"
"computedHash": "d04e43ec01e921558b93bb8046c14a42a22556689a2827243df900825a4e1604"
},
"stitch-design-taste": {
"source": "Leonxlnx/taste-skill",
"sourceType": "github",
"skillPath": "skills/stitch-skill/SKILL.md",
"computedHash": "c96b580192b34167efa01f460bbc669ff4315cf97f3cf6ff85ded8029aa720b8"
},
"to-spec": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/to-spec/SKILL.md",
"computedHash": "0ee8caf20fc7df94db53e76f42588fb01eee88c6f8dc97e7a3a0565be8978e74"
},
"to-tickets": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/to-tickets/SKILL.md",
"computedHash": "4aba8639f46b55ede011866f83e9e87ae10482b72c14848389e5801eba0b37bf"
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment