Ver código fonte

feat: restructure TG Live Game documentation and update workflow

- Updated CLAUDE.md to define project constraints and document hierarchy for TG Live Game.
- Removed outdated workflow.md and integrated relevant content into CLAUDE.md for clarity.
- Added new templates for architecture and module design to streamline project setup.
- Adjusted workspace.json to reflect changes in active files and project structure.
yb 3 semanas atrás
pai
commit
86192eed42

+ 27 - 29
.obsidian/workspace.json

@@ -4,24 +4,21 @@
     "type": "split",
     "children": [
       {
-        "id": "c98823febcca3cf6",
+        "id": "641f1712d7930278",
         "type": "tabs",
         "children": [
           {
-            "id": "f6052adcefbf7489",
+            "id": "18265060efc4f04b",
             "type": "leaf",
             "state": {
-              "type": "canvas",
+              "type": "markdown",
               "state": {
-                "file": "yshop/database.canvas",
-                "viewState": {
-                  "x": 5,
-                  "y": 627.0327860402742,
-                  "zoom": -0.33604920313201503
-                }
+                "file": "workflow.md",
+                "mode": "source",
+                "source": false
               },
-              "icon": "lucide-layout-dashboard",
-              "title": "database"
+              "icon": "lucide-file",
+              "title": "workflow"
             }
           }
         ]
@@ -186,16 +183,30 @@
       "bases:创建新数据库": false
     }
   },
-  "active": "f6052adcefbf7489",
+  "active": "18265060efc4f04b",
   "lastOpenFiles": [
+    "tg-live-game/workflow.md",
+    "workflow.md",
+    "tg-live-game/_project.md",
+    "tg-live-game/architecture-v1.canvas",
+    "tg-live-game/CLAUDE.md",
+    "tg-live-game/discuss-2024-12-31.md",
+    "tg-live-game/rtsp-cloudflare-stream.canvas",
+    "templates/module.canvas.template",
+    "templates/subsystem.canvas.template",
+    "templates/architecture.canvas.template",
+    "templates/module.claude.md.template",
+    "templates/subproject.claude.md.template",
+    "templates/project.claude.md.template",
+    "README.md",
+    "CLAUDE.md",
     "yshop/architecture.canvas",
+    "yshop/yshop-drink/README.md",
+    "yshop/yshop-drink/CLAUDE.md",
+    "templates",
     "yshop/backend-modules.canvas",
     "yshop/CLAUDE.md",
-    "yshop/yshop-drink/CLAUDE.md",
-    "yshop/yshop-drink/README.md",
     "yshop/database.canvas",
-    "CLAUDE.md",
-    "README.md",
     "architecture.canvas",
     "yshop/yshop-drink-uniapp/CLAUDE.md",
     "AGENTS.md",
@@ -203,13 +214,6 @@
     "yshop/yshop-drink-vue/src/views/infra/demo/demo03/inner/components/Demo03GradeList.vue",
     "yshop/yshop-drink-vue/src/views/infra/demo/demo03/normal/components/Demo03GradeForm.vue",
     "yshop/yshop-drink-vue/src/views/infra/demo/demo03/inner/components/Demo03CourseForm.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/inner/components/Demo03CourseList.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/normal/components/Demo03CourseForm.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/inner/components/Demo03GradeForm.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/erp/components/Demo03GradeList.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/erp/components/Demo03GradeForm.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/erp/components/Demo03CourseList.vue",
-    "yshop/yshop-drink-vue/src/views/infra/demo/demo03/erp/components/Demo03CourseForm.vue",
     "yshop/yshop-drink-vue/public/UEditor22/third-party/video-js/font/vjs.svg",
     "yshop/yshop-drink-vue/public/UEditor22/themes/default/images/wordpaste.png",
     "yshop/yshop-drink-vue/public/UEditor22/themes/default/images/word.gif",
@@ -233,12 +237,6 @@
     "yshop/yshop-drink-uniapp/uni_modules/uv-ui/readme.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-ui/changelog.md",
     "yshop/yshop-drink-uniapp/uni_modules/uv-transition/readme.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-transition/changelog.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-tooltip/readme.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-tooltip/changelog.md",
-    "yshop/yshop-drink-uniapp/uni_modules/uv-toolbar/readme.md",
-    "tg-live-game/architecture-v1.canvas",
-    "tg-live-game/rtsp-cloudflare-stream.canvas",
     "pwtk-admin-web/architecture-v1.canvas",
     "askyi/askyi-h5/pages.canvas",
     "askyi/askyi-taro/pages.canvas",

+ 137 - 96
CLAUDE.md

@@ -1,124 +1,165 @@
-# TG Live Game - Claude Code 配置
+# Vibe Coding CN - 元规范 (Level 0)
 
-## 项目信息
+> 本文件定义整个工作空间的约束规范,所有子项目必须遵循。
 
-| 属性 | 值 |
-|------|-----|
-| 项目名称 | tg-live-game |
-| 项目类型 | project-group (多项目组) |
-| 包含子项目 | tg-live-game-hono (后端), tg-live-game-web (前端) |
+## 文档层级体系
 
-## 子项目
+| 级别 | 目录 | 文件 | 职责 |
+|------|------|------|------|
+| 0级 | `/` (本目录) | `CLAUDE.md` | 工作流程、文档标准、Canvas规范 |
+| 1级 | `/[project]/` | `CLAUDE.md` + `architecture.canvas` | 项目配置、整体架构 |
+| 2级 | `/[project]/[subproject]/` | `CLAUDE.md` + `*.canvas` | 子项目配置、子系统架构 |
+| 3级 | `/[project]/[subproject]/[module]/` | `*.canvas` | 模块详细设计(可选) |
 
-| 子项目 | 类型 | 技术栈 | 目录 |
-|--------|------|--------|------|
-| tg-live-game-hono | 后端 API | Hono + Cloudflare Workers + D1 | `./tg-live-game-hono/` |
-| tg-live-game-web | 前端应用 | Vue 3 + TypeScript + Vite | `./tg-live-game-web/` |
+**约束继承**:下级继承上级所有约束,可添加但不可违反。
 
-## 关联配置
+---
 
-### Obsidian 文档路径
-```
-文档根目录: /Users/jamesw/dev_workspace/vibe-coding-cn
-项目文档:   /Users/jamesw/dev_workspace/vibe-coding-cn/tg-live-game
-```
-
-### Vibe Kanban 项目
-| 项目 | Kanban ID |
-|------|-----------|
-| tg-live-game-hono | `7c6bb2ce-90a2-4e96-bc04-5facdcdb337f` |
-| tg-live-game-web | `32214e97-f833-485f-8c7c-cf4d82327e0b` |
-
-## 多项目协作开发规范
+## 工作流程约束
 
-### 启动方式
-```bash
-# 在父目录启动 Claude Code,可同时操作前后端
-cd /Users/jamesw/dev_workspace/frontend/tg-live-game
-claude
+### 开发流程
+```
+Canvas 设计 → CLAUDE.md 配置 → 代码实现 → 测试验证
 ```
 
-### 开发顺序
+### 前后端协作顺序
 同时涉及前后端的功能,按以下顺序开发:
-1. **后端 API** (`tg-live-game-hono/`) - 先实现接口
-2. **前端调用** (`tg-live-game-web/`) - 再实现页面
-
-### 任务关联
-在 Obsidian canvas 中创建关联任务时,使用以下格式:
-
-**后端任务**:
+1. **后端 API** - 先实现接口
+2. **前端调用** - 后实现页面
+
+### 任务管理
+- 任务从 Obsidian Canvas 开始
+- 使用 Vibe Kanban 跟踪进度
+- 任务编号格式:`任务YYYYMMDD-NN[-suffix]`
+
+---
+
+## 文档命名规范
+
+| 文件名 | 用途 | 级别 |
+|--------|------|------|
+| `CLAUDE.md` | AI 配置文件 | 0/1/2级 |
+| `architecture.canvas` | 整体/子系统架构图 | 1/2级 |
+| `database.canvas` | 数据库设计 | 2级 |
+| `[feature].canvas` | 功能/模块设计 | 2/3级 |
+| `workflow.md` | 工作流程说明 | 任意 |
+
+---
+
+## Canvas 节点规范
+
+### 颜色编码标准(所有级别统一)
+
+| 颜色代码 | 颜色 | 含义 | 用途 |
+|----------|------|------|------|
+| `"1"` | 红色 | 入口/标题 | 项目入口点、系统标题 |
+| `"2"` | 橙色 | 配置/存储 | 数据库、缓存、配置层 |
+| `"3"` | 黄色 | 业务模块 | 核心业务功能模块 |
+| `"4"` | 绿色 | 用户端 | 小程序、H5、移动端 |
+| `"5"` | 青色 | 管理端 | 后台管理系统 |
+| `"6"` | 蓝色 | 后端服务 | API、后端系统 |
+
+### 1级 Canvas 必须节点 (architecture.canvas)
+
+```json
+必须包含:
+- title: 项目标题 (color: "1")
+- user-client: 用户端入口 (color: "4")  // 如有
+- admin-client: 管理端入口 (color: "5") // 如有
+- backend: 后端服务 (color: "6")
+- database: 数据存储 (color: "2")
+- external: 外部服务 (color: "2")       // 如有
 ```
-任务YYYYMMDD-NN-hono
-─────────────────
-后端:功能名称
 
-project: tg-live-game-hono
-related: 任务YYYYMMDD-NN-web
+### 2级 Canvas 必须节点
 
-1. 需求描述
+```json
+必须包含:
+- title: 子系统标题 (color: "1")
+- entry: 入口点 (color: "6")
+- modules[]: 功能模块列表 (color: "3")
+- dependencies: 依赖服务 (color: "2")   // 如有
 ```
 
-**前端任务**:
-```
-任务YYYYMMDD-NN-web
-─────────────────
-前端:功能名称
+### 3级 Canvas 必须节点
 
-project: tg-live-game-web
-related: 任务YYYYMMDD-NN-hono
-depends: 任务YYYYMMDD-NN-hono
+```json
+必须包含:
+- title: 模块标题 (color: "1")
+- api: 接口定义 (color: "6")           // 如有
+- data-model: 数据模型 (color: "2")
+- flow: 业务流程 (color: "3")
+```
 
-1. 需求描述
+---
+
+## 技术栈参考
+
+### 后端技术栈
+| 场景 | 推荐技术 |
+|------|----------|
+| 轻量级 API | Hono + Cloudflare Workers |
+| 全栈 Java | Spring Boot 3 + MyBatis Plus |
+| 数据库 | D1 (Cloudflare) / MySQL |
+| 缓存 | Redis / KV |
+
+### 前端技术栈
+| 场景 | 推荐技术 |
+|------|----------|
+| Web 管理后台 | Vue 3 + Vite + Element Plus |
+| 小程序/H5 | UniApp + Vue 3 |
+| 移动端 | UniApp / Taro |
+
+### 部署平台
+| 平台 | 用途 |
+|------|------|
+| Cloudflare | Workers, D1, Stream, Pages |
+| Vercel | 静态站点, Serverless |
+
+---
+
+## Git 提交规范
+
+### Commit 类型
+| 类型 | 说明 |
+|------|------|
+| `feat` | 新功能 |
+| `fix` | Bug 修复 |
+| `docs` | 文档更新 |
+| `style` | 代码格式 |
+| `refactor` | 重构 |
+| `test` | 测试 |
+| `chore` | 构建/工具 |
+
+### 格式
 ```
+<type>: <description>
 
-### 任务字段说明
-| 字段 | 含义 | 必填 |
-|------|------|------|
-| `project` | 目标 Kanban 项目名 | ✅ |
-| `related` | 关联任务编号 | 可选 |
-| `depends` | 依赖任务(需先完成) | 可选 |
-
-### 代码提交
-分别在各子项目目录提交:
-```bash
-# 后端
-cd tg-live-game-hono && git add . && git commit -m "feat: xxx"
-
-# 前端
-cd tg-live-game-web && git add . && git commit -m "feat: xxx"
+[optional body]
 ```
 
-## 系统架构
+---
 
-```
-Mac摄像头 → RTMPS → Cloudflare Stream → HLS → tg-live-game-web
-                         ↑
-                    tg-live-game-hono (API)
-```
+## 模板使用
 
-## 开发命令
+所有新项目使用 `/templates/` 下的模板:
 
-### 后端 (tg-live-game-hono)
-```bash
-cd tg-live-game-hono
-npm install       # 安装依赖
-npm run dev       # 本地开发 (localhost:8787)
-npm run deploy    # 部署到 Cloudflare
-```
+| 模板文件 | 用途 |
+|----------|------|
+| `project.claude.md.template` | 1级项目 CLAUDE.md |
+| `subproject.claude.md.template` | 2级子项目 CLAUDE.md |
+| `module.claude.md.template` | 3级模块 CLAUDE.md |
+| `architecture.canvas.template` | 1级项目架构图 |
+| `subsystem.canvas.template` | 2级子系统架构图 |
+| `module.canvas.template` | 3级模块设计图 |
 
-### 前端 (tg-live-game-web)
-```bash
-cd tg-live-game-web
-npm install       # 安装依赖
-npm run dev       # 本地开发 (localhost:3000)
-npm run build     # 构建生产版本
-```
+---
 
-## 核心文档
+## 现有项目
 
-| 文档 | 位置 | 内容 |
+| 项目 | 类型 | 状态 |
 |------|------|------|
-| 整体架构 | Obsidian: `architecture-v1.canvas` | 系统架构图 |
-| 后端架构 | Obsidian: `tg-live-game-hono/architecture.canvas` | API 架构 |
-| 数据库设计 | Obsidian: `tg-live-game-hono/d1-database.canvas` | D1 表结构 |
-| 认证系统 | Obsidian: `tg-live-game-hono/auth-system.canvas` | JWT + RBAC |
+| `tg-live-game/` | 直播游戏系统 | 开发中 |
+| `yshop/` | 点餐系统 | 开发中 |
+| `askyi/` | 问答应用 | 开发中 |
+| `pwtk-admin-web/` | 管理后台 | 开发中 |

+ 16 - 0
templates/architecture.canvas.template

@@ -0,0 +1,16 @@
+{
+	"nodes":[
+		{"id":"title","type":"text","text":"# {{PROJECT_NAME}} 系统架构\n\n**版本**: {{VERSION}}\n**描述**: {{PROJECT_DESCRIPTION}}","x":0,"y":-300,"width":400,"height":100,"color":"1"},
+		{"id":"user-client","type":"text","text":"## 用户端\n\n`{{USER_CLIENT_NAME}}`\n\n**技术栈**:\n- {{USER_TECH_1}}\n- {{USER_TECH_2}}\n\n**功能**:\n- {{USER_FEATURE_1}}\n- {{USER_FEATURE_2}}","x":-300,"y":-100,"width":260,"height":240,"color":"4"},
+		{"id":"admin-client","type":"text","text":"## 管理端\n\n`{{ADMIN_CLIENT_NAME}}`\n\n**技术栈**:\n- {{ADMIN_TECH_1}}\n- {{ADMIN_TECH_2}}\n\n**功能**:\n- {{ADMIN_FEATURE_1}}\n- {{ADMIN_FEATURE_2}}","x":100,"y":-100,"width":260,"height":240,"color":"5"},
+		{"id":"backend","type":"text","text":"## 后端服务\n\n`{{BACKEND_NAME}}`\n\n**技术栈**:\n- {{BACKEND_TECH_1}}\n- {{BACKEND_TECH_2}}\n\n**端口**: {{PORT}}","x":-100,"y":200,"width":300,"height":180,"color":"6"},
+		{"id":"database","type":"text","text":"## 数据存储\n\n**{{DB_TYPE}}**\n- {{DB_DESC_1}}\n- {{DB_DESC_2}}\n\n**缓存**: {{CACHE_TYPE}}","x":-300,"y":480,"width":220,"height":160,"color":"2"},
+		{"id":"external","type":"text","text":"## 外部服务\n\n**{{EXTERNAL_1}}**\n- {{EXTERNAL_1_DESC}}\n\n**{{EXTERNAL_2}}**\n- {{EXTERNAL_2_DESC}}","x":100,"y":480,"width":220,"height":160,"color":"2"}
+	],
+	"edges":[
+		{"id":"edge-user-backend","fromNode":"user-client","fromSide":"bottom","toNode":"backend","toSide":"left","label":"REST API"},
+		{"id":"edge-admin-backend","fromNode":"admin-client","fromSide":"bottom","toNode":"backend","toSide":"right","label":"REST API"},
+		{"id":"edge-backend-db","fromNode":"backend","fromSide":"bottom","toNode":"database","toSide":"top"},
+		{"id":"edge-backend-external","fromNode":"backend","fromSide":"bottom","toNode":"external","toSide":"top"}
+	]
+}

+ 12 - 0
templates/module.canvas.template

@@ -0,0 +1,12 @@
+{
+	"nodes":[
+		{"id":"title","type":"text","text":"# {{MODULE_NAME}} 模块设计\n\n**所属子系统**: {{PARENT_SUBSYSTEM}}\n**职责**: {{MODULE_RESPONSIBILITY}}","x":0,"y":-200,"width":360,"height":100,"color":"1"},
+		{"id":"api","type":"text","text":"## API 接口\n\n| 端点 | 方法 | 描述 |\n|------|------|------|\n| `{{API_1}}` | {{METHOD_1}} | {{DESC_1}} |\n| `{{API_2}}` | {{METHOD_2}} | {{DESC_2}} |","x":-200,"y":-40,"width":280,"height":160,"color":"6"},
+		{"id":"data-model","type":"text","text":"## 数据模型\n\n**{{ENTITY_NAME}}**\n\n| 字段 | 类型 | 描述 |\n|------|------|------|\n| {{FIELD_1}} | {{TYPE_1}} | {{FIELD_DESC_1}} |\n| {{FIELD_2}} | {{TYPE_2}} | {{FIELD_DESC_2}} |","x":120,"y":-40,"width":280,"height":180,"color":"2"},
+		{"id":"flow","type":"text","text":"## 业务流程\n\n```\n{{STEP_1}}\n    ↓\n{{STEP_2}}\n    ↓\n{{STEP_3}}\n    ↓\n{{STEP_4}}\n```","x":-40,"y":200,"width":200,"height":200,"color":"3"}
+	],
+	"edges":[
+		{"id":"edge-api-flow","fromNode":"api","fromSide":"bottom","toNode":"flow","toSide":"left","label":"调用"},
+		{"id":"edge-flow-data","fromNode":"flow","fromSide":"right","toNode":"data-model","toSide":"bottom","label":"读写"}
+	]
+}

+ 48 - 0
templates/module.claude.md.template

@@ -0,0 +1,48 @@
+# {{MODULE_NAME}} 模块 - Claude Code 配置
+
+> 3级模块配置 | 继承自 {{PARENT_SUBPROJECT}} (2级)
+
+## 模块信息
+
+| 属性 | 值 |
+|------|-----|
+| 模块名称 | {{MODULE_NAME}} |
+| 所属子项目 | {{PARENT_SUBPROJECT}} |
+| 职责 | {{MODULE_RESPONSIBILITY}} |
+
+## 功能列表
+
+| 功能 | 描述 | 状态 |
+|------|------|------|
+| {{FEATURE_1}} | {{FEATURE_1_DESC}} | {{STATUS: 待开发/开发中/已完成}} |
+| {{FEATURE_2}} | {{FEATURE_2_DESC}} | {{STATUS}} |
+
+## 数据模型
+
+| 实体 | 描述 | 主要字段 |
+|------|------|----------|
+| {{ENTITY_1}} | {{ENTITY_1_DESC}} | {{FIELDS}} |
+
+## 接口定义
+
+| 接口 | 方法 | 描述 | 参数 |
+|------|------|------|------|
+| `{{API_PATH}}` | {{METHOD}} | {{API_DESC}} | {{PARAMS}} |
+
+## 依赖关系
+
+| 依赖模块 | 依赖类型 | 说明 |
+|----------|----------|------|
+| {{DEP_MODULE}} | {{DEP_TYPE: 强依赖/弱依赖}} | {{DEP_DESC}} |
+
+## 核心文档
+
+| 文档 | 位置 | 内容 |
+|------|------|------|
+| 模块设计 | `design.canvas` | 详细设计图 |
+
+---
+
+## 模块特定约束
+
+<!-- 在此添加本模块特有的约束,不可违反上级规范 -->

+ 63 - 0
templates/project.claude.md.template

@@ -0,0 +1,63 @@
+# {{PROJECT_NAME}} - Claude Code 配置
+
+> 1级项目配置 | 继承自 0级元规范
+
+## 项目信息
+
+| 属性 | 值 |
+|------|-----|
+| 项目名称 | {{PROJECT_NAME}} |
+| 项目类型 | {{PROJECT_TYPE: single/project-group}} |
+| 项目描述 | {{PROJECT_DESCRIPTION}} |
+
+## 子项目
+
+<!-- 如果是 project-group 类型,列出所有子项目 -->
+
+| 子项目 | 类型 | 技术栈 | 目录 |
+|--------|------|--------|------|
+| {{SUBPROJECT_NAME}} | {{TYPE: backend/frontend/mobile}} | {{TECH_STACK}} | `./{{SUBPROJECT_DIR}}/` |
+
+## 关联配置
+
+### Obsidian 文档路径
+```
+文档根目录: /Users/yibu/dev_workspace/vibe-coding-cn
+项目文档:   /Users/yibu/dev_workspace/vibe-coding-cn/{{PROJECT_NAME}}
+```
+
+### Vibe Kanban 项目
+| 项目 | Kanban ID |
+|------|-----------|
+| {{KANBAN_NAME}} | `{{KANBAN_ID}}` |
+
+## 系统架构
+
+<!-- ASCII 架构图或简要说明 -->
+
+```
+{{ARCHITECTURE_DIAGRAM}}
+```
+
+## 开发命令
+
+### {{SUBPROJECT_1}}
+```bash
+cd {{SUBPROJECT_DIR}}
+npm install       # 安装依赖
+npm run dev       # 本地开发
+npm run build     # 构建
+```
+
+## 核心文档
+
+| 文档 | 位置 | 内容 |
+|------|------|------|
+| 整体架构 | `architecture.canvas` | 系统架构图 |
+| {{DOC_NAME}} | `{{DOC_PATH}}` | {{DOC_DESCRIPTION}} |
+
+---
+
+## 项目特定约束
+
+<!-- 在此添加本项目特有的约束,不可违反 0 级规范 -->

+ 72 - 0
templates/subproject.claude.md.template

@@ -0,0 +1,72 @@
+# {{SUBPROJECT_NAME}} - Claude Code 配置
+
+> 2级子项目配置 | 继承自 {{PARENT_PROJECT}} (1级)
+
+## 子项目信息
+
+| 属性 | 值 |
+|------|-----|
+| 子项目名称 | {{SUBPROJECT_NAME}} |
+| 所属项目 | {{PARENT_PROJECT}} |
+| 类型 | {{TYPE: backend/frontend/mobile/admin}} |
+| 技术栈 | {{TECH_STACK}} |
+
+## 技术栈详情
+
+| 类别 | 技术 |
+|------|------|
+| 框架 | {{FRAMEWORK}} |
+| 语言 | {{LANGUAGE}} |
+| 构建工具 | {{BUILD_TOOL}} |
+| 包管理器 | {{PACKAGE_MANAGER}} |
+
+## 目录结构
+
+```
+{{SUBPROJECT_NAME}}/
+├── src/
+│   ├── {{DIR_1}}/        # {{DIR_1_DESC}}
+│   ├── {{DIR_2}}/        # {{DIR_2_DESC}}
+│   └── {{DIR_3}}/        # {{DIR_3_DESC}}
+├── {{CONFIG_FILE}}       # 配置文件
+└── package.json
+```
+
+## 开发命令
+
+```bash
+cd {{SUBPROJECT_NAME}}
+{{INSTALL_CMD}}           # 安装依赖
+{{DEV_CMD}}               # 本地开发
+{{BUILD_CMD}}             # 构建
+{{TEST_CMD}}              # 测试
+```
+
+## 核心文档
+
+| 文档 | 位置 | 内容 |
+|------|------|------|
+| 子系统架构 | `architecture.canvas` | 模块关系图 |
+| {{DOC_NAME}} | `{{DOC_PATH}}` | {{DOC_DESCRIPTION}} |
+
+## API 端点
+
+<!-- 如果是后端项目 -->
+
+| 端点 | 方法 | 描述 |
+|------|------|------|
+| `/api/{{ENDPOINT}}` | {{METHOD}} | {{DESCRIPTION}} |
+
+## 页面路由
+
+<!-- 如果是前端项目 -->
+
+| 路由 | 页面 | 描述 |
+|------|------|------|
+| `/{{ROUTE}}` | {{PAGE}} | {{DESCRIPTION}} |
+
+---
+
+## 子项目特定约束
+
+<!-- 在此添加本子项目特有的约束,不可违反上级规范 -->

+ 16 - 0
templates/subsystem.canvas.template

@@ -0,0 +1,16 @@
+{
+	"nodes":[
+		{"id":"title","type":"text","text":"# {{SUBSYSTEM_NAME}} 子系统架构\n\n**所属项目**: {{PARENT_PROJECT}}\n**技术栈**: {{TECH_STACK}}","x":0,"y":-200,"width":360,"height":100,"color":"1"},
+		{"id":"entry","type":"text","text":"## 入口点\n\n`{{ENTRY_FILE}}`\n\n**职责**:\n- {{ENTRY_RESP_1}}\n- {{ENTRY_RESP_2}}","x":0,"y":-40,"width":240,"height":140,"color":"6"},
+		{"id":"module-1","type":"text","text":"### {{MODULE_1_NAME}}\n\n**职责**:\n- {{MODULE_1_RESP_1}}\n- {{MODULE_1_RESP_2}}","x":-280,"y":160,"width":200,"height":140,"color":"3"},
+		{"id":"module-2","type":"text","text":"### {{MODULE_2_NAME}}\n\n**职责**:\n- {{MODULE_2_RESP_1}}\n- {{MODULE_2_RESP_2}}","x":-40,"y":160,"width":200,"height":140,"color":"3"},
+		{"id":"module-3","type":"text","text":"### {{MODULE_3_NAME}}\n\n**职责**:\n- {{MODULE_3_RESP_1}}\n- {{MODULE_3_RESP_2}}","x":200,"y":160,"width":200,"height":140,"color":"3"},
+		{"id":"dependencies","type":"text","text":"## 依赖服务\n\n- {{DEP_1}}\n- {{DEP_2}}\n- {{DEP_3}}","x":0,"y":360,"width":200,"height":120,"color":"2"}
+	],
+	"edges":[
+		{"id":"edge-entry-m1","fromNode":"entry","fromSide":"bottom","toNode":"module-1","toSide":"top"},
+		{"id":"edge-entry-m2","fromNode":"entry","fromSide":"bottom","toNode":"module-2","toSide":"top"},
+		{"id":"edge-entry-m3","fromNode":"entry","fromSide":"bottom","toNode":"module-3","toSide":"top"},
+		{"id":"edge-m2-dep","fromNode":"module-2","fromSide":"bottom","toNode":"dependencies","toSide":"top"}
+	]
+}

+ 124 - 0
tg-live-game/CLAUDE.md

@@ -0,0 +1,124 @@
+# TG Live Game - Claude Code 配置
+
+## 项目信息
+
+| 属性 | 值 |
+|------|-----|
+| 项目名称 | tg-live-game |
+| 项目类型 | project-group (多项目组) |
+| 包含子项目 | tg-live-game-hono (后端), tg-live-game-web (前端) |
+
+## 子项目
+
+| 子项目 | 类型 | 技术栈 | 目录 |
+|--------|------|--------|------|
+| tg-live-game-hono | 后端 API | Hono + Cloudflare Workers + D1 | `./tg-live-game-hono/` |
+| tg-live-game-web | 前端应用 | Vue 3 + TypeScript + Vite | `./tg-live-game-web/` |
+
+## 关联配置
+
+### Obsidian 文档路径
+```
+文档根目录: /Users/yibu/dev_workspace/vibe-coding-cn
+项目文档:   /Users/yibu/dev_workspace/vibe-coding-cn/tg-live-game
+```
+
+### Vibe Kanban 项目
+| 项目 | Kanban ID |
+|------|-----------|
+| tg-live-game-hono | `7c6bb2ce-90a2-4e96-bc04-5facdcdb337f` |
+| tg-live-game-web | `32214e97-f833-485f-8c7c-cf4d82327e0b` |
+
+## 多项目协作开发规范
+
+### 启动方式
+```bash
+# 在父目录启动 Claude Code,可同时操作前后端
+cd /Users/yibu/dev_workspace/vibe-coding-cn/tg-live-game
+claude
+```
+
+### 开发顺序
+同时涉及前后端的功能,按以下顺序开发:
+1. **后端 API** (`tg-live-game-hono/`) - 先实现接口
+2. **前端调用** (`tg-live-game-web/`) - 再实现页面
+
+### 任务关联
+在 Obsidian canvas 中创建关联任务时,使用以下格式:
+
+**后端任务**:
+```
+任务YYYYMMDD-NN-hono
+─────────────────
+后端:功能名称
+
+project: tg-live-game-hono
+related: 任务YYYYMMDD-NN-web
+
+1. 需求描述
+```
+
+**前端任务**:
+```
+任务YYYYMMDD-NN-web
+─────────────────
+前端:功能名称
+
+project: tg-live-game-web
+related: 任务YYYYMMDD-NN-hono
+depends: 任务YYYYMMDD-NN-hono
+
+1. 需求描述
+```
+
+### 任务字段说明
+| 字段 | 含义 | 必填 |
+|------|------|------|
+| `project` | 目标 Kanban 项目名 | ✅ |
+| `related` | 关联任务编号 | 可选 |
+| `depends` | 依赖任务(需先完成) | 可选 |
+
+### 代码提交
+分别在各子项目目录提交:
+```bash
+# 后端
+cd tg-live-game-hono && git add . && git commit -m "feat: xxx"
+
+# 前端
+cd tg-live-game-web && git add . && git commit -m "feat: xxx"
+```
+
+## 系统架构
+
+```
+Mac摄像头 → RTMPS → Cloudflare Stream → HLS → tg-live-game-web
+                         ↑
+                    tg-live-game-hono (API)
+```
+
+## 开发命令
+
+### 后端 (tg-live-game-hono)
+```bash
+cd tg-live-game-hono
+npm install       # 安装依赖
+npm run dev       # 本地开发 (localhost:8787)
+npm run deploy    # 部署到 Cloudflare
+```
+
+### 前端 (tg-live-game-web)
+```bash
+cd tg-live-game-web
+npm install       # 安装依赖
+npm run dev       # 本地开发 (localhost:3000)
+npm run build     # 构建生产版本
+```
+
+## 核心文档
+
+| 文档 | 位置 | 内容 |
+|------|------|------|
+| 整体架构 | Obsidian: `architecture-v1.canvas` | 系统架构图 |
+| 后端架构 | Obsidian: `tg-live-game-hono/architecture.canvas` | API 架构 |
+| 数据库设计 | Obsidian: `tg-live-game-hono/d1-database.canvas` | D1 表结构 |
+| 认证系统 | Obsidian: `tg-live-game-hono/auth-system.canvas` | JWT + RBAC |

+ 0 - 242
tg-live-game/workflow.md

@@ -1,242 +0,0 @@
-# 开发工作流
-
-> 本文档描述 Obsidian + Vibe Kanban + Claude Code 三者协作的工作流程
-
-## 三者角色定位
-
-| 角色 | 定位 | 特点 |
-|------|------|------|
-| **Obsidian** | 设计中心 | 批量规划、可视化设计、长期文档 |
-| **Vibe Kanban** | 任务中心 | 状态管理、进度追踪、快速创建 |
-| **Claude Code** | 执行中心 | 连接两者,执行开发 |
-
-## 任务创建的两种路径
-
-### 路径 A:从 Kanban 直接创建(快速任务)
-
-```
-用户在 Kanban 创建任务
-         ↓
-Claude Code 读取任务
-         ↓
-Claude Code 查阅 Obsidian 文档理解上下文
-         ↓
-执行开发
-         ↓
-更新 Kanban 状态
-```
-
-**适用场景**:bug 修复、小功能迭代、不需要详细设计的任务
-
-### 路径 B:从 Obsidian Canvas 批量创建(规划任务)
-
-```
-用户在 Obsidian Canvas 设计架构
-         ↓
-添加任务卡片(带 project/depends 字段)
-         ↓
-Claude Code 解析 Canvas
-         ↓
-同步到对应的 Kanban 项目
-         ↓
-按依赖顺序执行开发
-         ↓
-更新 Kanban 状态
-```
-
-**适用场景**:新功能规划、前后端联动开发、批量任务创建
-
-## 数据同步方向
-
-| 从 → 到 | 方式 | 说明 |
-|---------|------|------|
-| Obsidian → Kanban | 手动命令 | Canvas 任务卡片同步到看板 |
-| Kanban → Claude | 自动读取 | 开发时读取任务列表 |
-| Claude → Kanban | 自动更新 | 完成后更新任务状态 |
-| Obsidian → Claude | 只读查阅 | 读取架构文档理解需求 |
-
-## 三者关系
-
-```
-┌─────────────────────────────────────────────────────────────────┐
-│  Obsidian (文档中心 - 单一数据源)                                  │
-│  路径: /Users/jamesw/dev_workspace/vibe-coding-cn/tg-live-game   │
-│  ├── 架构设计 (*.canvas)                                         │
-│  ├── 需求文档                                                    │
-│  └── 任务卡片 → 同步到 Kanban                                     │
-└─────────────────────────────────────────────────────────────────┘
-                         ↓ 读取文档 / 同步任务
-┌─────────────────────────────────────────────────────────────────┐
-│  Vibe Kanban (任务管理)                                           │
-│  ├── tg-live-game-hono: 7c6bb2ce-90a2-4e96-bc04-5facdcdb337f    │
-│  ├── tg-live-game-web:  32214e97-f833-485f-8c7c-cf4d82327e0b    │
-│  └── 任务状态: todo → inprogress → inreview → done               │
-└─────────────────────────────────────────────────────────────────┘
-                         ↓ 领取任务 / 执行开发
-┌─────────────────────────────────────────────────────────────────┐
-│  Claude Code (代码开发)                                           │
-│  启动目录: /Users/jamesw/dev_workspace/frontend/tg-live-game/    │
-│  ├── tg-live-game-hono/  (后端)                                  │
-│  └── tg-live-game-web/   (前端)                                  │
-└─────────────────────────────────────────────────────────────────┘
-```
-
-## 多项目协作工作流
-
-### 场景:同时设计前后端功能
-
-当一个功能需要前后端同时开发时(如"用户列表"功能):
-
-```
-1. Obsidian 设计阶段
-   ├── 在 canvas 画架构图
-   └── 创建两个关联的任务卡片
-       ├── 任务20260103-01-hono (后端 API)
-       └── 任务20260103-01-web  (前端页面)
-
-2. 任务同步阶段
-   ├── 解析任务卡片的 project 字段
-   ├── hono 任务 → tg-live-game-hono Kanban
-   └── web 任务 → tg-live-game-web Kanban
-
-3. Claude Code 开发阶段
-   ├── 在父目录 tg-live-game 启动
-   ├── 读取关联任务,理解依赖关系
-   ├── 先开发后端 (depends 优先)
-   └── 再开发前端
-
-4. 代码提交阶段
-   ├── cd tg-live-game-hono && git commit
-   └── cd tg-live-game-web && git commit
-```
-
-## 任务卡片格式
-
-### 单项目任务
-
-```
-任务YYYYMMDD-NN
-
-任务标题
-
-project: tg-live-game-hono
-
-1. 需求描述
-2. 具体要求
-```
-
-### 关联任务(前后端)
-
-**后端任务**:
-```
-任务YYYYMMDD-NN-hono
-─────────────────
-后端:用户列表 API
-
-project: tg-live-game-hono
-related: 任务YYYYMMDD-NN-web
-
-1. 实现 GET /api/users
-2. 返回分页数据
-```
-
-**前端任务**:
-```
-任务YYYYMMDD-NN-web
-─────────────────
-前端:用户列表页面
-
-project: tg-live-game-web
-related: 任务YYYYMMDD-NN-hono
-depends: 任务YYYYMMDD-NN-hono
-
-1. 调用用户列表 API
-2. 表格展示用户数据
-```
-
-### 字段说明
-
-| 字段 | 含义 | 用途 |
-|------|------|------|
-| `project` | 目标 Kanban 项目名 | 决定任务创建到哪个看板 |
-| `related` | 关联任务编号 | 表示任务之间的关系 |
-| `depends` | 依赖任务编号 | 表示需要先完成的任务 |
-
-## 文件路径映射
-
-| 位置 | 路径 | 用途 |
-|------|------|------|
-| Obsidian 项目文档 | `vibe-coding-cn/tg-live-game/` | 架构设计、需求文档 |
-| Obsidian 后端文档 | `vibe-coding-cn/tg-live-game/tg-live-game-hono/` | 后端架构 |
-| Obsidian 前端文档 | `vibe-coding-cn/tg-live-game/tg-live-game-web/` | 前端架构 |
-| 代码父目录 | `frontend/tg-live-game/` | Claude Code 启动位置 |
-| 后端代码 | `frontend/tg-live-game/tg-live-game-hono/` | Hono API |
-| 前端代码 | `frontend/tg-live-game/tg-live-game-web/` | Vue 应用 |
-
-## Claude Code 启动说明
-
-```bash
-# 多项目开发(推荐)
-cd /Users/jamesw/dev_workspace/frontend/tg-live-game
-claude
-
-# 单项目开发(仅后端)
-cd /Users/jamesw/dev_workspace/frontend/tg-live-game/tg-live-game-hono
-claude
-
-# 单项目开发(仅前端)
-cd /Users/jamesw/dev_workspace/frontend/tg-live-game/tg-live-game-web
-claude
-```
-
-## 交替式开发模式(批量任务)
-
-当 Obsidian 一次性创建多个前后端任务,需要交替开发和验证时:
-
-### 依赖链设计
-
-用 `depends` 字段串联任务,形成执行顺序:
-
-```
-任务01-hono (后端 API A)     ← 无依赖,最先执行
-    ↓
-任务01-web  (前端调用 A)     depends: 任务01-hono
-    ↓
-任务02-hono (后端 API B)     depends: 任务01-web
-    ↓
-任务02-web  (前端调用 B)     depends: 任务02-hono
-    ↓
-...
-```
-
-### Canvas 中的表示
-
-```
-┌──────────────────┐     ┌──────────────────┐
-│ 任务01-hono      │ ──→ │ 任务01-web       │
-│ 后端:用户列表   │     │ 前端:用户列表   │
-│ project: hono    │     │ depends: 01-hono │
-└──────────────────┘     └──────────────────┘
-                              │
-                              ↓ depends
-┌──────────────────┐     ┌──────────────────┐
-│ 任务02-hono      │ ──→ │ 任务02-web       │
-│ 后端:用户详情   │     │ 前端:用户详情   │
-│ depends: 01-web  │     │ depends: 02-hono │
-└──────────────────┘     └──────────────────┘
-```
-
-### 执行顺序
-
-Claude Code 按 `depends` 链自动排序执行:
-1. 任务01-hono → 开发后端 API A
-2. 任务01-web → 开发前端调用 A,验证
-3. 任务02-hono → 开发后端 API B
-4. 任务02-web → 开发前端调用 B,验证
-
-## 相关文档
-
-- [[architecture-v1]] - 整体系统架构
-- [[tg-live-game-hono/_project]] - 后端项目配置
-- [[tg-live-game-hono/workflow]] - 后端开发工作流
-- [[tg-live-game-web/_project]] - 前端项目配置

+ 5 - 5
workflow.md

@@ -4,11 +4,11 @@
 
 ## 三者角色定位
 
-| 角色 | 定位 | 特点 |
-|------|------|------|
-| **Obsidian** | 设计中心 | 批量规划、可视化设计、长期文档 |
-| **Vibe Kanban** | 任务中心 | 状态管理、进度追踪、快速创建 |
-| **Claude Code** | 执行中心 | 连接两者,执行开发 |
+| 角色              | 定位   | 特点              |
+| --------------- | ---- | --------------- |
+| **Obsidian**    | 设计中心 | 批量规划、可视化设计、长期文档 |
+| **Vibe Kanban** | 任务中心 | 状态管理、进度追踪、快速创建  |
+| **Claude Code** | 执行中心 | 连接两者,执行开发       |
 
 ## 任务创建的两种路径