Commit 7e3eee46 by DaiJiezhang

Merge branch 'chore/migrate-openspec-to-matt-pocock' into 'master'

chore: migrate OpenSpec workflow to matt-pocock

See merge request !16
parents 9da1baa5 6d069ab8
...@@ -37,7 +37,6 @@ frontend/.playwright-cli/ ...@@ -37,7 +37,6 @@ frontend/.playwright-cli/
frontend/output/ frontend/output/
frontend/test-results/ frontend/test-results/
test-results/ test-results/
openspec/changes/integrate-authentication-to-master/
# 运行时上传的资产图片:由后端写入,属于本地数据而非源码。 # 运行时上传的资产图片:由后端写入,属于本地数据而非源码。
uploads/ uploads/
......
# 项目 Agent 规则
## 当前文档入口
- 当前领域背景和术语:`CONTEXT.md`
- 已确认的迁移期待办:`docs/migration-backlog.md`
- 迁移契约和接口实现要点:`scripts/contract/CONTRACT-NOTES.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`:开发完成后检查变更。
### Restore project skills
Skill files are generated directories and are intentionally ignored by Git. After a fresh clone or worktree, materialize the ten locked matt-pocock Skills for Codex and Claude Code:
```bash
npx --yes skills add mattpocock/skills --skill grill-with-docs --skill implement --skill setup-matt-pocock-skills --skill to-spec --skill to-tickets --skill code-review --skill domain-modeling --skill grilling --skill tdd --skill triage --agent codex --copy -y
npx --yes skills add mattpocock/skills --skill grill-with-docs --skill implement --skill setup-matt-pocock-skills --skill to-spec --skill to-tickets --skill code-review --skill domain-modeling --skill grilling --skill tdd --skill triage --agent claude-code --copy -y
```
安装前确认 `skills-lock.json` 没有未提交修改。安装后检查 `git diff -- skills-lock.json`,只保留本次 matt-pocock Skill 的锁定记录;如果安装器改动了其他 Skill 的 hash,先确认没有本地锁文件修改,再手动恢复对应无关差异。不要无条件覆盖整个锁文件,也不要手工改写锁定内容。
### 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 只负责代码分支、Merge Request、审查和合并。
- 修改前先读取相关 `CONTEXT.md` 和适用的 ADR;修改后验证实际行为或文档链接。
# 项目上下文
## 项目定位
本项目是学有为内部资产管理后台,用于管理公司主体、人员、手机号、企微账号及其他业务资产。
## 领域词汇
| 术语 | 含义 |
|---|---|
| 公司主体 | 资产归属或业务注册所对应的公司档案 |
| 公司人员 | 公司主体下的人员信息 |
| 手机号资产 | 台账中的手机号记录,可能来自手动建档或其他业务资产 |
| 企微账号 | 企业微信账号及其与手机号资产的关联 |
| 设备资产 | 设备及其图片、归属等信息 |
| 微信账号 | 微信业务账号资产;当前仍保留在 Java 基准侧,尚未迁移到 NestJS |
| 抖音账号 | 抖音业务账号资产;当前仍保留在 Java 基准侧,尚未迁移到 NestJS |
| 域名资产 | 域名及其账号关联资产;当前仍保留在 Java 基准侧,尚未迁移到 NestJS |
| 商户 | 商户业务资产记录;当前仍保留在 Java 基准侧,尚未迁移到 NestJS |
| 资产来源 | 记录资产从哪类业务对象创建或关联而来 |
| 系统账号 | 登录后台并受角色、状态和页面权限控制的用户 |
| 契约对拍 | 用同一组请求对比 Java 和 NestJS 响应,确认迁移行为一致 |
## 领域关系与约束
- 公司主体可以关联公司人员和多类资产。
- 手机号资产可以由人工建档,也可以由其他业务资产创建;资产来源用于保留这条追溯关系。
- 企微账号可以与手机号资产关联;变更关联时必须保留可追溯的来源语义。
- 系统账号受角色、状态和页面权限控制。
- 迁移期间 Java 与 NestJS 的对外行为需要保持一致,已确认但暂缓的行为变更记录在 `docs/migration-backlog.md`
## 文档入口
- 运行、启动和环境说明:`README.md`
- 迁移契约、错误响应和对拍实现要点:`scripts/contract/CONTRACT-NOTES.md`
- 已确认的迁移期待办:`docs/migration-backlog.md`
- 当前架构决策:`docs/adr/` 中适用的 ADR(目录不存在时不视为阻塞)
- 历史需求和设计:`docs/legacy/openspec/`
OpenSpec 已封存,不再作为新需求或当前任务的创建入口。
...@@ -13,7 +13,7 @@ docs/ 迁移待办与设计记录 ...@@ -13,7 +13,7 @@ docs/ 迁移待办与设计记录
``` ```
迁移期两个后端并行运行:Java 占 **7690**,NestJS 占 **7691** 迁移期两个后端并行运行:Java 占 **7690**,NestJS 占 **7691**
前端默认连 Java,通过环境变量可切到 NestJS,切换与回退都不需要改代码。 前端默认连 NestJS(7691);需要与 Java 对拍时使用 `pnpm dev:java`,切换不需要修改代码。
## 环境要求 ## 环境要求
......
...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; ...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_asset_device 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_asset_device 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/AssetDeviceMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/AssetDeviceMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> AssetDeviceMapper -> AssetDeviceEntity -> as_asset_device。 * 关联逻辑(调用链/数据流):后续 Service -> AssetDeviceMapper -> AssetDeviceEntity -> as_asset_device。
*/ */
@Data @Data
......
...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_company_person 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_company_person 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/CompanyPersonMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/CompanyPersonMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> CompanyPersonMapper -> CompanyPersonEntity -> as_company_person。 * 关联逻辑(调用链/数据流):后续 Service -> CompanyPersonMapper -> CompanyPersonEntity -> as_company_person。
*/ */
@Data @Data
......
...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_company_profile 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_company_profile 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/CompanyProfileMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/CompanyProfileMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> CompanyProfileMapper -> CompanyProfileEntity -> as_company_profile。 * 关联逻辑(调用链/数据流):后续 Service -> CompanyProfileMapper -> CompanyProfileEntity -> as_company_profile。
*/ */
@Data @Data
......
...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_domain_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_domain_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/DomainAccountMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/DomainAccountMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> DomainAccountMapper -> DomainAccountEntity -> as_domain_account。 * 关联逻辑(调用链/数据流):后续 Service -> DomainAccountMapper -> DomainAccountEntity -> as_domain_account。
*/ */
@Data @Data
......
...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_domain_asset 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_domain_asset 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/DomainAssetMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/DomainAssetMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> DomainAssetMapper -> DomainAssetEntity -> as_domain_asset。 * 关联逻辑(调用链/数据流):后续 Service -> DomainAssetMapper -> DomainAssetEntity -> as_domain_asset。
*/ */
@Data @Data
......
...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; ...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_douyin_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_douyin_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/DouyinAccountMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/DouyinAccountMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> DouyinAccountMapper -> DouyinAccountEntity -> as_douyin_account。 * 关联逻辑(调用链/数据流):后续 Service -> DouyinAccountMapper -> DouyinAccountEntity -> as_douyin_account。
*/ */
@Data @Data
......
...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_merchant 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_merchant 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/MerchantMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/MerchantMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> MerchantMapper -> MerchantEntity -> as_merchant。 * 关联逻辑(调用链/数据流):后续 Service -> MerchantMapper -> MerchantEntity -> as_merchant。
*/ */
@Data @Data
......
...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; ...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_phone_asset 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_phone_asset 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/PhoneAssetMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/PhoneAssetMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> PhoneAssetMapper -> PhoneAssetEntity -> as_phone_asset。 * 关联逻辑(调用链/数据流):后续 Service -> PhoneAssetMapper -> PhoneAssetEntity -> as_phone_asset。
*/ */
@Data @Data
......
...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_system_user 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_system_user 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/SystemUserMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/SystemUserMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> SystemUserMapper -> SystemUserEntity -> as_system_user。 * 关联逻辑(调用链/数据流):后续 Service -> SystemUserMapper -> SystemUserEntity -> as_system_user。
*/ */
@Data @Data
......
...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; ...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_wechat_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_wechat_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/WechatAccountMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/WechatAccountMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> WechatAccountMapper -> WechatAccountEntity -> as_wechat_account。 * 关联逻辑(调用链/数据流):后续 Service -> WechatAccountMapper -> WechatAccountEntity -> as_wechat_account。
*/ */
@Data @Data
......
...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; ...@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
/** /**
* 代码作用(白话):把数据库表 as_wecom_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。 * 代码作用(白话):把数据库表 as_wecom_account 的一行资产数据映射成 Java 对象,供后续 Mapper 和 Service 使用。
* 关联文件:asset/mapper/WecomAccountMapper.java、openspec/changes/rebuild-asset-application-foundation/design.md。 * 关联文件:asset/mapper/WecomAccountMapper.java;历史设计参考:docs/legacy/openspec/changes/rebuild-asset-application-foundation/design.md;当前领域规则见 CONTEXT.md。
* 关联逻辑(调用链/数据流):后续 Service -> WecomAccountMapper -> WecomAccountEntity -> as_wecom_account。 * 关联逻辑(调用链/数据流):后续 Service -> WecomAccountMapper -> WecomAccountEntity -> as_wecom_account。
*/ */
@Data @Data
......
# Domain Docs
本项目是单一业务上下文,领域文档位于仓库根目录。
## 开始探索前读取
- `CONTEXT.md`:当前项目背景、领域术语和系统边界。
- `docs/adr/`:如果目录存在,读取与当前工作区域相关的 ADR。
- `docs/migration-backlog.md`:涉及 NestJS 迁移期间暂缓的行为变更时读取。
- `scripts/contract/CONTRACT-NOTES.md`:涉及接口行为、错误响应或 Java/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/` 是本项目正式 Spec/Ticket 的唯一任务来源;GitLab 不重复创建同一事项的 Issue。
- GitLab 继续负责代码分支、Merge Request、审查和合并。
## 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 角色时,使用右侧对应标签。
# OpenSpec 历史档案
> 封存日期:2026-09-16
>
> OpenSpec 已停止作为本项目的需求和开发流程。本目录只保存历史 proposal、design、tasks、spec 和配置文件,不再新增或更新 change。
## 当前规则入口
需要了解当前项目时,按以下顺序查看:
```text
当前代码
> CONTEXT.md
> docs/migration-backlog.md
> docs/adr/
> docs/legacy/openspec/
```
- `CONTEXT.md`:当前领域背景、技术边界和术语。
- `docs/migration-backlog.md`:已确认的 NestJS 迁移期间待办。
- `docs/legacy/openspec/`:OpenSpec 历史资料,只用于追溯当时的需求和决定。
- 新需求:使用 matt-pocock 工作流,先澄清需求,再形成 Spec、拆分 Ticket、开发、测试和审查。
## 历史 change 索引
| Change | 档案状态 | 说明 |
|---|---|---|
| `add-company-profile-workspace` | 历史完成 | 原任务清单已全部勾选;当前实现以代码为准。 |
| `add-phone-asset-management` | 历史待核对 | 原任务仍有未勾选项,不能直接视为当前待办。 |
| `add-wecom-account-asset-creation` | 历史完成 | 原任务清单已全部勾选;当前实现以代码为准。 |
| `add-wecom-account-list` | 历史完成 | 原任务清单已全部勾选;当前实现以代码为准。 |
| `define-asset-phase1-schema` | 历史待核对 | 原任务状态与当前代码可能不一致,需按当前实现判断。 |
| `discard-local-login-animation-work` | 历史完成 | 原任务清单已全部勾选;当前实现以代码为准。 |
| `fix-local-auth-session` | 历史待核对 | 原任务仍有未勾选项,不能直接视为当前待办。 |
| `harden-company-profile-validation-errors` | 历史待核对 | 原任务仍有未勾选项,不能直接视为当前待办。 |
| `integrate-authentication-to-master` | 历史待核对 | 原任务仍有未勾选项,且相关分支已合入 master;需按当前代码判断。 |
| `merge-unmerged-auth-commits` | 历史完成 | 原任务清单已全部勾选;当前实现以代码为准。 |
| `migrate-vite-build` | 历史待核对 | 原任务仍有未勾选项,且构建方式已随 NestJS 迁移调整。 |
| `phone-protection-plan-and-account-sync` | 仅设计稿 | 只有 `design.md`,没有完整任务清单。 |
| `rebuild-asset-application-foundation` | 历史待核对 | 原任务仍有未勾选项,且当前后端结构已发生迁移。 |
## 使用规则
1. 需要查历史背景时,可以读取本目录原文。
2. 新需求不再写入 `openspec/changes/`
3. 历史 `tasks.md` 的勾选状态不是当前实现状态,也不是当前任务清单。
4. 新任务必须先与当前代码和 `docs/migration-backlog.md` 对照,确认确实未完成后再创建。
5. 新的长期技术决定从本次迁移后开始记录到 `docs/adr/`,不把旧设计自动改写成当前 ADR。
...@@ -7,6 +7,12 @@ ...@@ -7,6 +7,12 @@
"skillPath": "skills/brandkit/SKILL.md", "skillPath": "skills/brandkit/SKILL.md",
"computedHash": "735007879f5110aeae1e981a53fe74a12afde70347f9773dacd50e4697a091bf" "computedHash": "735007879f5110aeae1e981a53fe74a12afde70347f9773dacd50e4697a091bf"
}, },
"code-review": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/code-review/SKILL.md",
"computedHash": "b4f17857c85ca60af1df7d0b623dd03c2a48419f6123e714f3d9748ca744a1bf"
},
"design-taste-frontend": { "design-taste-frontend": {
"source": "Leonxlnx/taste-skill", "source": "Leonxlnx/taste-skill",
"sourceType": "github", "sourceType": "github",
...@@ -19,6 +25,12 @@ ...@@ -19,6 +25,12 @@
"skillPath": "skills/taste-skill-v1/SKILL.md", "skillPath": "skills/taste-skill-v1/SKILL.md",
"computedHash": "0a226c13d69639553cf8a7c40aa5527b026820f8ddaf7a6b263988e32ab44a27" "computedHash": "0a226c13d69639553cf8a7c40aa5527b026820f8ddaf7a6b263988e32ab44a27"
}, },
"domain-modeling": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/domain-modeling/SKILL.md",
"computedHash": "336547f3ff285e822fc70b69b170dc58bceef9c8ed5fad18de0046287d6be837"
},
"full-output-enforcement": { "full-output-enforcement": {
"source": "Leonxlnx/taste-skill", "source": "Leonxlnx/taste-skill",
"sourceType": "github", "sourceType": "github",
...@@ -31,6 +43,18 @@ ...@@ -31,6 +43,18 @@
"skillPath": "skills/gpt-tasteskill/SKILL.md", "skillPath": "skills/gpt-tasteskill/SKILL.md",
"computedHash": "7bd1bfdda0e51016ca222693401a65fc0dd9bf9487e0bd5b1740ba510f6f963a" "computedHash": "7bd1bfdda0e51016ca222693401a65fc0dd9bf9487e0bd5b1740ba510f6f963a"
}, },
"grill-with-docs": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/grill-with-docs/SKILL.md",
"computedHash": "a610223c9796f755b603f15ec114849a4b38b9ba3006acfa9bdf3cc56dd44dad"
},
"grilling": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/productivity/grilling/SKILL.md",
"computedHash": "4fa026e5979770347b3357ff5139e1e41d21c3a9f7335e9cd2811cb5b8d32f2f"
},
"high-end-visual-design": { "high-end-visual-design": {
"source": "Leonxlnx/taste-skill", "source": "Leonxlnx/taste-skill",
"sourceType": "github", "sourceType": "github",
...@@ -55,6 +79,12 @@ ...@@ -55,6 +79,12 @@
"skillPath": "skills/imagegen-frontend-web/SKILL.md", "skillPath": "skills/imagegen-frontend-web/SKILL.md",
"computedHash": "27255c7c50181e58add156b2aa2bd5325285b85f04027e4c8b73742d98d7be0a" "computedHash": "27255c7c50181e58add156b2aa2bd5325285b85f04027e4c8b73742d98d7be0a"
}, },
"implement": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/implement/SKILL.md",
"computedHash": "130cac2d72bfde8cd526bf3b754211e2fe00e84bc4d9f9c56f749b9541a3afad"
},
"industrial-brutalist-ui": { "industrial-brutalist-ui": {
"source": "Leonxlnx/taste-skill", "source": "Leonxlnx/taste-skill",
"sourceType": "github", "sourceType": "github",
...@@ -73,6 +103,12 @@ ...@@ -73,6 +103,12 @@
"skillPath": "skills/redesign-skill/SKILL.md", "skillPath": "skills/redesign-skill/SKILL.md",
"computedHash": "47eced3e960a2c961d3cbee11fa1216264f589344b586a5cbd03967cd6b9c54b" "computedHash": "47eced3e960a2c961d3cbee11fa1216264f589344b586a5cbd03967cd6b9c54b"
}, },
"setup-matt-pocock-skills": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/setup-matt-pocock-skills/SKILL.md",
"computedHash": "a45163cba56f72f5f224c46557c047d51547147a29e383e5a769ec39eecd1188"
},
"shadcn": { "shadcn": {
"source": "shadcn/ui", "source": "shadcn/ui",
"sourceType": "github", "sourceType": "github",
...@@ -84,6 +120,30 @@ ...@@ -84,6 +120,30 @@
"sourceType": "github", "sourceType": "github",
"skillPath": "skills/stitch-skill/SKILL.md", "skillPath": "skills/stitch-skill/SKILL.md",
"computedHash": "c96b580192b34167efa01f460bbc669ff4315cf97f3cf6ff85ded8029aa720b8" "computedHash": "c96b580192b34167efa01f460bbc669ff4315cf97f3cf6ff85ded8029aa720b8"
},
"tdd": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/tdd/SKILL.md",
"computedHash": "c1ed8cd854c64d4d226097255d3fa662dae4a758a1462fadd63cc10e413d88d7"
},
"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"
},
"triage": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/triage/SKILL.md",
"computedHash": "363ca4f1b97ca5227d41d3973178ab301d7c498ba41b466dfe30b6163f6d72b5"
} }
} }
} }
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