oh-my-muse/.agents/skills/add-business-module.md
lili e181669197 chore(agent-infra): 建立 agent 开发基建、清理历史 churn 并以 BC 违例整改验证
本会话三部分交付,均经 JDK21 真实构建验证(非退出码,读 BUILD SUCCESS + Tests run):

1) Agent 开发基建(机械门禁优先)
- 入口与中枢:AGENTS.md、.agents/{knowledge,rules,skills,workflows}、CLAUDE.md 订正
- 订正 .gitignore:移除对 .agent/.agents 的忽略——它们是版本化 agent 基建,须入库(此前被忽略致克隆即缺)
- 机械门禁:CI 真跑测试(maven.yml JDK21、去 -Dmaven.test.skip)、覆盖台账去硬编码、
  BC 边界 ArchUnit 门(BcBoundaryArchTest)、契约先行门(ContractFirstGateTest:Flyway 卫生 + OpenAPI 结构)
- 单一进度源 docs/mvp/进度总账.md + 7 个 BC per-module .agent + mise.toml(锁 JDK21)
- P1 增量:AiSuggestionMergeProjectionFacade(Gap A)、ContentSourceServiceImpl 事务化 outbox 回流(Gap B)

2) 过期历史文档清理(97 份 churn,git 可恢复)
- 删 docs/memorys(34)、agent-specs 审阅/执行版+迁移review(34)、superpowers/plans+specs(25)、
  design-docs/临时+memorys(4);保留 superpowers/reports/coverage(门禁依赖)
- 唯一干货蒸馏入 .agents/knowledge/external-deps-and-gotchas.md;订正大纲/映射表/基线悬空引用

3) P1 harness 验证:消除已登记 BC 违例 ContentMuseWorkOwnerFacade
- content-api 新增只读端口 MuseContentWorkOwnerApi + content-server 实现(读自有 DAL);
  AI 适配器改消费该端口、移除全部 content.dal 依赖,AI 业务规则与 4 消费者不变
- 删除 ArchUnit 豁免 → 门禁收紧(反向红 31 例 / 正向绿;适配器单测 13/0F、端口实现 7/0F)

注:muse-studio/src(SSE 相关 4 文件)与 muse-module-ai/pom.xml(移除孤儿 contract-server)
为本会话之前已存在的未提交改动,非本次工作,未纳入本提交。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 04:38:07 -07:00

2.6 KiB

skill:新增 muse-module 业务模块(BC)

类型:操作手册(skills) · 关联门禁:../rules/bc-boundaries.md../rules/contract-first.md 何时用:新增一个业务域 BC(逻辑 owner)。先确认确属新 BC(逻辑 owner 优先,勿与既有 7 BC 重叠,见 ../knowledge/project-and-architecture.md);复杂域先走评审版 spec。


标准步骤(参照既有 muse-module-meta 布局)

  1. 建两子模块 muse-cloud/muse-module-<x>/:
    • muse-module-<x>-api:对外契约(DTO / ErrorCode / facade-api 接口),供他域只读消费。
    • muse-module-<x>-server:实现。父 pom 聚合两者(参照 muse-module-meta/pom.xml)。
  2. server 包结构对齐既有(cn/iocoder/muse/module/<x>/ 下):controller(admin/app)、application(service + facade 实现)、dal(dataobject + mysql Mapper)、domainconvertenums
  3. DB 迁移:新增 muse-cloud/sql/muse/V<下一版本>__<描述>.sql;切勿编辑历史迁移ContractFirstGateTest 会校验版本唯一 / 连续 / 命名 V<版本>__<描述>.sql
  4. API 契约(契约先行):建 docs/api-contracts/<x>/openapi.yaml(OAS3,含 openapi/info/paths),并把 "<x>" 加入 ContractFirstGateTest.REQUIRED_API_DOMAINS(机械要求该域契约长存)。
  5. 注册依赖:在 muse-server/pom.xmlmuse-module-<x>-server(参照既有 dependency 块)。
  6. 守 BC 边界:不得 import 他域 .dal;跨 BC 只走对外 API / facade-api。BcBoundaryArchTest 机械兜底(新违例=红)。明确本域只产 Shadow 还是可写 Canonical,遵守双轨主权与 owner 写入边界。
  7. 测试:Mockito 单测(BaseMockitoUnitTest)覆盖业务分支;真库 / 真外部场景加 *IT.java(见 golden-journey-vertical-slice.md)。
  8. 本地验证(JDK21):mise exec -- mvn -B -pl muse-server -am test(单构建,勿并发——并发写同一 target 会致 NoSuchFileException 假错);随 CI 阻断。

收尾沉淀

  • 更新 ../knowledge/project-and-architecture.md 的 BC 表(新增一行)。
  • 维护该模块 .agent(目标 / 边界 / out-of-scope / 现状 / TODO;机制建设中)。
  • 如该域需保持 completed 台账纪律,纳入 P1rApiCoverageReportTest 口径。