From 21a9f3cfada19afce82e3d236440f900e1e020d4 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 24 Aug 2026 16:43:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(skills):=20app=20=E5=88=92=E5=88=86?= =?UTF-8?q?=E8=81=8C=E8=B4=A3=E5=BD=92=20design(=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=88=92=E5=88=86=E4=B8=80=E4=B8=AA=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=87=A0=E4=B8=AAapp)=20+=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=8A=80=E8=83=BD=E8=B7=AF=E5=BE=84=E5=90=8C=E6=AD=A5=E6=9C=BA?= =?UTF-8?q?=E6=9E=84=E5=B7=A5=E4=BD=9C=E7=A9=BA=E9=97=B4=E6=96=B0=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1(=E5=8E=BB=20repos/{=E9=A1=B9=E7=9B=AE=E5=90=8D}=5Fpc/?= =?UTF-8?q?=5Fapp/=5F=E6=A8=A1=E5=9D=97,=20=E6=94=B9=20projects/docs=20+?= =?UTF-8?q?=20=E6=9C=BA=E6=9E=84=20apps/modules)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skills_library/all/sdlc-repo-standard/SKILL.md | 3 ++- .../sdlc_general/roles/agent.deploy_test/role/SKILL.md | 2 +- .../sdlc_general/roles/agent.design/role/SKILL.md | 3 ++- .../sdlc_general/roles/agent.develop/role/SKILL.md | 4 ++-- .../sdlc_general/roles/agent.qc/review-deploy/SKILL.md | 4 ++-- .../sdlc_general/roles/agent.qc/review-design/SKILL.md | 10 +++++----- .../roles/agent.qc/review-requirement/SKILL.md | 10 +++++----- .../sdlc_general/roles/agent.qc/review-test/SKILL.md | 2 +- .../sdlc_general/roles/agent.requirement/role/SKILL.md | 6 +++--- .../sdlc_general/roles/agent.test/role/SKILL.md | 2 +- 10 files changed, 24 insertions(+), 22 deletions(-) diff --git a/skills_library/all/sdlc-repo-standard/SKILL.md b/skills_library/all/sdlc-repo-standard/SKILL.md index 1233f94..4ad5751 100644 --- a/skills_library/all/sdlc-repo-standard/SKILL.md +++ b/skills_library/all/sdlc-repo-standard/SKILL.md @@ -59,10 +59,11 @@ projects/{项目名}/docs/01-design/modules/{模块名}/ ### requirement(需求分析师) - **内容**: 项目概述、用户角色及权限、功能列表(含验收标准)、非功能需求、业务流程 -- **同时创建**: 每个应用一个 `{应用名}_spec.json`(描述 referenced_modules + generated_modules) +- **不划分 app**: 一个项目有几个 app(应用)是架构决策,由 design 阶段设计师根据需求分析划分——requirement 只描述功能、不定 app 数量、不写 `{应用名}_spec.json` - **不划分模块**: 模块划分是架构决策,由 design 阶段设计师完成 ### design(系统设计师) +- **应用划分**: 根据需求分析划分一个项目有几个 app(应用)——需求只描述功能、不定 app 数量,设计师按「部署单元 / 功能聚合 / 用户边界」划到 N 个 app(每个 app = 一个入口一个端口),产出对应的 `{应用名}_spec.json` - **应用级**: `architecture.md`(系统架构、模块划分、模块间依赖、开发顺序)+ `ui-design.md`(视觉风格/主页面/交互模式/弹窗规范) - **模块级**: 每个模块在 `projects/{项目名}/docs/01-design/modules/{模块名}/` 下产出 design.md(数据设计/CRUD/处理逻辑)+ skill/SKILL.md - **更新**: `docs/01-design/modules/` 下各模块的技术栈、依赖关系、开发顺序 diff --git a/skills_library/pipelines/sdlc_general/roles/agent.deploy_test/role/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.deploy_test/role/SKILL.md index 8b15706..17331bf 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.deploy_test/role/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.deploy_test/role/SKILL.md @@ -22,7 +22,7 @@ capability: deploy_capability, bug_report_capability ### 二、真实执行部署(SSH 到测试机,Python 直跑,不是写文档) 0. **清理旧进程(先做,防止多端口/多进程残留)**:部署前先 `pkill -f "app.py"` 或按 pid 文件 kill 掉旧的模块独立进程,**只保留/重启 1 个应用进程**。应用是唯一部署单元,一台测试机只该有 1 个应用进程(一个端口),多个模块独立 app.py 进程 = 多端口问题,必须清掉。 -1. `scp -r` 应用代码(`{应用名}_app`)+ 各模块(Python 包)到测试机部署目录(从 apps/{应用名}.md 读) +1. 从机构 `apps/{应用名}/`(应用仓库)+ `modules/{模块名}/`(模块仓库)读代码,`scp -r` 到测试机部署目录(部署前先给这些仓库设置远程仓库,见 project-directory-spec 第八节) 2. SSH 到测试机执行真实部署(主机/目录/DB 均从需求读): - 建表:`mysql -h {DB_HOST} -u {DB_USER} -p{DB_PASS} {DB_NAME} < {模块}/ddl/*.sql` - 装依赖:`pip3 install -e {模块}`(模块是 Python 包,pip 安装) diff --git a/skills_library/pipelines/sdlc_general/roles/agent.design/role/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.design/role/SKILL.md index f600842..51864b2 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.design/role/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.design/role/SKILL.md @@ -8,12 +8,13 @@ capability: task_capability ## 职责 - 应用级设计:architecture.md(架构、模块划分、模块间依赖、开发顺序)+ ui-design.md(视觉风格/布局/交互模式) +- **应用划分**:一个项目有几个 app(应用),由设计师根据需求分析来设计/划分——需求只描述功能、不限定 app 数量;设计师按「部署单元 / 功能聚合 / 用户边界」把需求功能划到 N 个 app(每个 app = 一个入口一个端口),在 architecture.md 里写明 app 清单与划分理由,并产出对应的 {应用名}_spec.json - 模块级设计:每个模块的 modules/{模块名}.md + design.md + skill/SKILL.md - 模块划分 + 模块间依赖关系 + 开发顺序由设计师完成,PM 按此派发 develop 任务 - 基础模块(apppublic/sqlor/ahserver/accounting/appbase/rbac)已存在,不列为待开发模块 ## 应遵守的规范(设计前先 load_skill 加载对应全文,不要凭记忆瞎写) -- `project-directory-spec`:项目目录结构 + 设计文档落点路径(repos/{项目名}_pc/docs/01-design/、modules/)+ 应用与模块的关系(应用=唯一部署单元,模块不独立部署) +- `project-directory-spec`:机构工作空间结构(projects/apps/modules)+ 设计文档落点路径(projects/{项目}/docs/01-design/)+ 应用与模块的关系(应用=唯一部署单元,模块不独立部署;app 划分见职责「应用划分」) - `sdlc-repo-standard`:设计交付件的内容格式(templates/module-design.md、templates/module-skill.md) - `web-application-spec`:应用规范(应用结构、应用如何通过 load_{module}() 导入模块、一个入口一个端口) - `module-development-spec`:模块规范(模块是 Host-Agnostic Python 包、不是独立部署单元,无独立 app.py/端口) diff --git a/skills_library/pipelines/sdlc_general/roles/agent.develop/role/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.develop/role/SKILL.md index 50f71b4..21b69c5 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.develop/role/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.develop/role/SKILL.md @@ -16,12 +16,12 @@ capability: feature_dev_capability, bug_fix_capability ## 职责 ### 应用级 develop(design 自动派生的「应用架构」任务) -- 产出**应用脚手架**:`repos/{应用名}_app/` 应用仓库,含 `app/{应用名}.py`(唯一入口,init() 里 load 各模块)、`conf/config.json`、`build.sh`(一键部署)、`.env` +- 产出**应用脚手架**:机构 `apps/{应用名}/` 应用仓库,含 `app/{应用名}.py`(唯一入口,init() 里 load 各模块)、`conf/config.json`、`build.sh`(一键部署)、`.env` - `app/{应用名}.py` 里定义 `get_module_dbname(m)`(模块→库名映射,禁止硬编码)并在 init() 挂到 ServerEnv,逐个 `load_{模块}()` 挂载业务模块 - **应用是唯一部署单元**:一个应用 = 一个入口 = 一个端口;模块不独立部署 ### 模块级 develop(PM 按模块清单派发的「模块开发」任务) -- 按 design 阶段设计师的模块清单,为每个模块产出可运行源码,写入模块独立仓库 `repos/{模块名}/` +- 按 design 阶段设计师的模块清单,为每个模块产出可运行源码,写入机构 `modules/{模块名}/` 模块仓库 - 模块是 Python 包(无独立 app.py/端口/Dockerfile),通过 `load_{模块}()` 挂到应用;取库名用 `ServerEnv().get_module_dbname('模块名')`,禁止硬编码 DBNAME - 基础模块(apppublic / sqlor / ahserver / accounting / appbase / rbac)已存在,直接复用,不重新开发 diff --git a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-deploy/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-deploy/SKILL.md index 93da662..58f8f0e 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-deploy/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-deploy/SKILL.md @@ -17,12 +17,12 @@ capability: task_capability ## 一、部署配置落盘 - 对照 `project-directory-spec` + `webapp-deploy`: - - `repos/{项目名}_pc/config/test/` 下:`deploy.sh`、`requirements.txt`、`init-db.sh`、各模块 `app.py` 入口说明 + - `projects/{项目}/docs/04-deploy/config/test/` 下:`deploy.sh`、`requirements.txt`、`init-db.sh`、各模块 `app.py` 入口说明 - 所有模块都要纳入部署(organization/payroll/recruitment/selfservice 各模块 app.py 齐全,端口互不冲突) ## 二、部署文档落盘 -- `repos/{项目名}_pc/docs/04-deploy/deploy-test-env.md`(或 deploy-prod-env.md) +- `projects/{项目}/docs/04-deploy/deploy-test-env.md`(或 deploy-prod-env.md) - 文档里写明:各模块端口表、启动命令、真实部署步骤 ## 三、部署前条件检查(QC 核查是否做了前置检查) diff --git a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-design/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-design/SKILL.md index 8002fab..96fe43a 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-design/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-design/SKILL.md @@ -11,17 +11,17 @@ capability: task_capability ## 一、应用级设计落盘(对照 project-directory-spec + web-application-spec + module-development-spec) - 对照 `project-directory-spec`: - - `repos/{项目名}_pc/docs/01-design/architecture.md`(架构 + 模块划分 + 模块间依赖 + 开发顺序) - - `repos/{项目名}_pc/docs/01-design/ui-design.md`(视觉风格/布局/交互模式) + - `projects/{项目}/docs/01-design/architecture.md`(架构 + 模块划分 + 模块间依赖 + 开发顺序) + - `projects/{项目}/docs/01-design/ui-design.md`(视觉风格/布局/交互模式) - **应用与模块关系(关键,对照 web-application-spec + module-development-spec)**: - - 应用是唯一部署单元:一个应用 = 一个入口(`app/{应用名}.py`)= 一个端口。architecture.md 必须明确这是【单体应用】(或明确列出多个应用),**不能把功能模块设计成独立服务/微服务** + - 应用是唯一部署单元:一个应用 = 一个入口(`app/{应用名}.py`)= 一个端口。architecture.md 必须写明 app 清单——一个项目有几个 app 由 designer 按「部署单元/功能聚合/用户边界」划分,明确这是【单体应用】还是【多个应用】,并写出每个 app 的划分理由,**不能把功能模块设计成独立服务/微服务** - 模块不是独立部署单元:每个模块是应用内的 Python 包,通过 `load_{module}()` 挂载到应用,**无独立 app.py / 端口 / Dockerfile / 服务** - - 目录结构:repos/ 下应有 `{应用名}_app`(应用仓库)+ `{模块名}`(模块仓库)。若只有模块仓库没有应用仓库,或模块仓库里带了 app.py / Dockerfile → 退回(违反 module-development-spec) + - 目录结构:机构 `apps/{应用名}/`(应用仓库)+ `modules/{模块名}/`(模块仓库)。若只有模块仓库没有应用仓库,或模块仓库里带了 app.py / Dockerfile → 退回(违反 module-development-spec) - 若 architecture.md 出现"四模块服务""每模块一个端口/容器"等设计 → 退回:这是把功能模块错误设计成微服务 ## 二、模块级设计落盘 -- 每个模块:`repos/{项目名}_pc/modules/{模块名}.md`(模块清单)+ `{模块名}/design.md`(数据设计/CRUD/处理逻辑)+ `{模块名}/skill/SKILL.md`(模块技能文档) +- 每个模块:`projects/{项目}/docs/01-design/modules/{模块名}.md`(模块清单)+ `{模块名}/design.md`(数据设计/CRUD/处理逻辑)+ `{模块名}/skill/SKILL.md`(模块技能文档) - 模块划分 + 模块间依赖 + 开发顺序明确,PM 据此派发 develop 任务 - 基础模块(apppublic/sqlor/ahserver/accounting/appbase/rbac)不列为待开发模块 diff --git a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-requirement/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-requirement/SKILL.md index c5a2f0d..2e1fc1b 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-requirement/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-requirement/SKILL.md @@ -17,13 +17,13 @@ capability: task_capability ## 二、需求文档落点 -- 对照 `project-directory-spec`:需求规格说明书 `repos/{项目名}_pc/docs/00-requirement/requirement-spec.md` -- 需求评审记录 `repos/{项目名}_pc/docs/00-requirement/requirement-review.md` +- 对照 `project-directory-spec`:需求规格说明书 `projects/{项目}/docs/00-requirement/requirement-spec.md` +- 需求评审记录 `projects/{项目}/docs/00-requirement/requirement-review.md` -## 三、应用部署单元识别 +## 三、应用划分(design 职责,requirement 不产出) -- `repos/{项目名}_pc/apps/{应用名}.md`:至少一个应用,含端口、部署环境 -- 应用 = 部署单元,需求阶段只识别应用,不划分模块 +- requirement 阶段**不划分 app、不产出 apps/{应用名}.md 或 {应用名}_spec.json**(app 划分是 design 阶段的架构决策,见 design 角色技能) +- 若 requirement 越权划分了 app 或产出了 app 说明文件 → 退回 ## 四、部署环境需求明确 diff --git a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-test/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-test/SKILL.md index db07531..a5f1038 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.qc/review-test/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.qc/review-test/SKILL.md @@ -38,7 +38,7 @@ capability: task_capability ## 六、测试文档落点 -- 对照 `project-directory-spec`:`repos/{项目名}_pc/docs/03-test/` 下 test-plan.md、test-cases.md、test-report.md 真实落盘 +- 对照 `project-directory-spec`:`projects/{项目}/docs/03-test/` 下 test-plan.md、test-cases.md、test-report.md 真实落盘 ## 七、真实性核查方法 diff --git a/skills_library/pipelines/sdlc_general/roles/agent.requirement/role/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.requirement/role/SKILL.md index f1c00b7..ef0c713 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.requirement/role/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.requirement/role/SKILL.md @@ -9,12 +9,12 @@ capability: feature_propose_capability ## 职责 - **拆解需求提功能(落库,别只写文档)**:用 `propose_feature` 把需求拆解成功能点,落库 sd_features(状态 proposed),每个业务域都要有对应 feature - 产出需求规格说明书(requirement-spec.md)+ 需求评审记录(requirement-review.md) -- 识别应用(部署单元,至少一个,含端口/环境),产出 apps/{应用名}.md +- 不划分 app:一个项目有几个 app(应用)是 design 阶段的架构决策,requirement 只描述功能、不定 app 数量、不产出 apps/{应用名}.md 或 {应用名}_spec.json - 明确部署环境需求,并**落成 `env/test.json` + `env/prod.json`**(工作空间根目录,集中保存主机/SSH/端口/DB/路径/域名,是部署信息的单一事实源,见 project-directory-spec)——部署信息只在这里一份,不散落到需求/设计/代码各处,改配置只改这里 -- 需求阶段只识别应用,不划分模块(模块划分是 design 阶段的架构决策) +- 需求阶段不划分 app、不划分模块(app 划分和模块划分都是 design 阶段的架构决策) - **需求不明确时禁止编造具体值**:端口、IP、域名、账号、资源规格等需求未给出或含糊的值,**不得自己编**(编造端口 9286/编造子域名等都是错的)。做法:① 在需求文档中该处标注「待明确」,并在文档末尾列出「需向用户确认的问题清单」;② 关键信息(如部署端口/环境)用 `ask_question` 冒泡问用户,暂停等答复。宁可标注待明确,不可编一个看似合理的值。 ## 应遵守的规范(产出前先 load_skill 加载对应全文,不要凭记忆瞎写) - `feature`:功能状态机规范(propose_feature 提功能的流转规则,读本 skill 判断合法性) -- `project-directory-spec`:项目目录结构 + 需求文档落点路径(repos/{项目名}_pc/docs/00-requirement/) +- `project-directory-spec`:机构工作空间结构(projects/apps/modules)+ 需求文档落点路径(projects/{项目}/docs/00-requirement/) - `sdlc-repo-standard`:需求规格说明书的内容格式与产出行为准则 diff --git a/skills_library/pipelines/sdlc_general/roles/agent.test/role/SKILL.md b/skills_library/pipelines/sdlc_general/roles/agent.test/role/SKILL.md index ec4f70b..79e6e7a 100644 --- a/skills_library/pipelines/sdlc_general/roles/agent.test/role/SKILL.md +++ b/skills_library/pipelines/sdlc_general/roles/agent.test/role/SKILL.md @@ -32,5 +32,5 @@ capability: test_plan_capability, test_case_capability, bug_test_capability - `test-plan`:测试计划状态机规范(create_test_plan 流转规则) - `test-case`:测试用例执行状态机规范(create/pass/fail/skip/block + 失败联动建 Bug) - `bug`:Bug 状态机规范(report_bug 流转规则) -- `project-directory-spec`:测试文档落点路径(repos/{项目名}_pc/docs/03-test/) +- `project-directory-spec`:测试文档落点路径(projects/{项目}/docs/03-test/) - `sdlc-repo-standard`:测试交付件的内容格式