Harness Engineering 搭建指南(一):项目入口与架构基线

概述

系列定位:在项目中要搭建出完整的Harness Engineering四层文档体系,基本分为6步,接下来我会通过本系列共 6 篇文章,指导从零搭建 Harness Engineering 四层文档体系,最终实现从 BRD/PRD 到代码交付的一站式 AI 开发与自检闭环。

本篇定位:第 1 步------在编写任何业务代码之前,建立项目入口文件和架构基线文档,为后续所有文档和 AI Agent 行为提供锚点。


1. 为什么第一步是"项目入口 + 架构基线"

1.1 核心问题

当你用 IDEA 新建一个 Java 项目时,面对的是空工程。此时 AI Agent 对你的项目一无所知:

  • 项目用什么技术栈?版本是什么?
  • 模块怎么划分?依赖方向是什么?
  • 数据怎么流转?有哪些核心流程?
  • 代码资产有哪些基类和接口可以复用?

如果这些信息不存在,后续的 Rules 层(硬性约束)无从写起------因为你无法约束一个尚未定义的架构。

1.2 本步要解决的三件事

问题 解决方式 产出文件
AI Agent 不知道项目"是什么" 编写项目入口文件 AGENTS.mdREADME.md
AI Agent 不知道"怎么分层" 编写架构知识文档 docs/architecture/overview.mdboundaries.mddata-flow.mdcode-assets.md
所有 .md 文件缺乏统一的元信息规范 建立文档元信息 front matter 规范 每个文件的 YAML 头

2. 需要创建的文件清单

复制代码
项目根/
├── AGENTS.md                              # AI Agent 项目入口
├── README.md                              # 项目整体说明
└── docs/
    └── architecture/
        ├── overview.md                    # 系统架构概览
        ├── boundaries.md                  # 模块边界与依赖约束
        ├── data-flow.md                   # 数据流转路径
        └── code-assets.md                 # 代码资产清单

共 6 个文件,全部是 Markdown 文档,不涉及任何代码。


3. 逐个文件编写指南

3.1 AGENTS.md--- AI Agent 的"第一印象"

定位

AGENTS.md 是 AI Agent 进入项目后读取的第一个文件,类似于人类新员工的"入职手册",AGENTS.md写地图,不是写百科全书。它必须在一屏内传达:项目是做什么的、技术栈是什么、去哪里找更多信息。

关键设计原则
  • AGENTS.md 控制在 50-100 行。超过就说明你在写百科全书了
  • "你想做什么 → 去哪里看" 比 "这是什么"更有效------面向任务而非面向知识
  • 硬性规则单独列出,这些是 CI 会强制验证的,不是 "建议"。
必须包含的章节
markdown 复制代码
# AGENTS.md

## 项目简介
{一段话描述项目做什么、解决什么问题、核心技术选型}

## 技术栈基线(不允许擅自升级)
- JDK: {版本}
- Spring Boot: {版本}
- {其他关键依赖及版本}
{每个版本后标注"不可升级"的约束}

## 快速导航
| 你想做什么 | 去哪里看 |
|-----------|---------|
| 查看 Rules 层规则 | .qoder/rules/*.md |
| 查看 Skills 层技能 | .qoder/skills/*.md |
| 了解系统架构 | docs/architecture/*.md |
{...}

## 硬性规范(CI 强制验证,违反即拒绝合并)
| 规则 | 禁止 | 验证方式 |
|------|------|---------|
| 模块依赖只能向上:common→dal→business→ext→app→runner | 反向依赖/跨层引用 | ArchUnit |
| JSON 统一用 FastJSON 1.2.83 | Jackson / Gson | PMD |
| HTTP 统一用 OkHttp3 + HttpClientFactory | RestTemplate / Apache HttpClient | PMD |

## 提交规范
- feat: 新功能
- fix: 修复 Bug
- refactor: 重构
- docs: 文档变更
- test: 测试
- chore: 构建/配置
编写要点
  1. 技术栈基线必须精确到版本号 :AI Agent 会严格遵循这些版本约束。如果写 JDK 1.8,AI 就不会用 varrecord 等 Java 9+ 语法。当技术栈多时可以单独放入一个文档
  2. 快速导航表是文档索引的入口:后续 5 步创建的所有文档都要在此表中注册
  3. 保持精简:控制在 50~100 行以内,AI Agent 每次任务都会加载此文件
实际示例
markdown 复制代码
---
last_updated: 2026-06-26
status: active          # active | deprecated | draft
owner: @zhangsan
---

# AGENTS.md

## 项目简介
第三方数据交换平台,对接XXX/XXX/XXX等供应商,完成数据采集、加工、分片批量编排与结果持久化。

## 技术栈基线(不允许擅自升级)
技术栈基线详见 `.qoder/rules/always-on.md` 第 1 节(JDK 1.8 / Spring Boot 2.3 / MyBatis-Plus 3.4 / FastJSON 唯一 / OkHttp3 统一)。

## 快速导航(你想做什么 → 去哪里看)

| 你想做什么 | 去哪里看 |
|-----------|---------|
| **--- Rules 层(始终生效,CI 强制验证)** | |
| 写代码前确认技术红线 | .qoder/rules/always-on.md |
| 确认开发流程顺序/门禁 | .qoder/rules/agent-workflow.md |
| 不确定类/方法怎么命名 | .qoder/rules/java-code-style.md |
| 写测试时不确定框架/Mock 策略 | .qoder/rules/java-testing.md |
| **--- Skills 层(按场景触发)** | |
| 收到 PRD 要开发 | .qoder/skills/prd-to-code.md |
| 全流程编排/断点恢复 | .qoder/skills/flow-orchestration.md |
| 设计文档写好了要评审 | .qoder/skills/design-review.md |
| 新增供应商对接 | .qoder/skills/add-vendor-adapter.md |
| 新增数据库表 | .qoder/skills/add-entity-mapper.md |
| 新增对外 API 接口 | .qoder/skills/add-api-endpoint.md |
| 提交前检查文档健康度 | .qoder/skills/doc-gardening.md |
| 交付前自动治理巡检 | .qoder/skills/auto-governance.md |
| **--- Wiki 层(按需查阅)** | |
| 设计新功能前查有哪些基类可复用 | docs/architecture/code-assets.md |
| 确认模块归属和依赖方向 | docs/architecture/boundaries.md |
| 设计功能时参考数据怎么流转 | docs/architecture/data-flow.md |
| 不确定异常怎么抛/错误码怎么定 | docs/conventions/error-handling.md |
| 不确定日志格式/traceId 怎么传 | docs/conventions/logging.md |
| Linter 报错后查规则详情和修复指引 | docs/conventions/linter-rules.md |
| 写 PRD 时参照模板 | docs/reference/prd-template.md |
| 业务方提需求时参照 BRD→PRD 指南 | docs/reference/brd-to-prd-guide.md |
| 查/新增错误码 | docs/reference/error-codes.md |
| 查/新增 API 定义 | docs/reference/api.spec.yaml |
| 写设计文档时用模板 | docs/design/_template.md |
| PR 提交前逐项自检 | docs/changes/pr-checklist.md |
| 变更前做影响分析 | docs/changes/impact-analysis.md |
| 了解整体 AI Coding 开发流程 | docs/ai-coding-guide.md |
| **--- 自动化层脚本** | |
| 环境前置检查 | build/automation/scripts/pre-check.ps1 |
| Git Worktree 自动化管理 | build/automation/scripts/worktree-manager.ps1 |
| 采集构建/测试/Linter 客观数据 | build/automation/scripts/collect-sidecar.ps1 |
| 自动衰减检测 | build/automation/scripts/decay-detector.ps1 |
| 生成治理报告 | build/automation/scripts/governance-report.ps1 |
| 文档全景索引一致性检测 | build/automation/scripts/index-sync-check.ps1 |
| **--- 代码定位** | |
| 找启动入口 | exchange-runner/.../WebApplication.java |
| 找 HTTP 控制器 | exchange-runner/.../controller/ |
| 找 SOA 同步单笔服务 | exchange-soa-service/.../SyncSingleService.java |
| 批量调度入口(XXL-JOB) | exchange-runner/.../ShardingScheduler.java |
| 找供应商适配器 | exchange-ext/exchange-ext-{tianchuang,youmeng,baihang}/ |
| Maven 环境与 Nacos 配置 | pom.xml (profiles 章节) |

## 硬性规则(CI 强制验证,违反即拒绝合并)

| 规则 | 禁止 | 验证方式 |
|------|------|---------|
| 模块依赖只能向上:common→dal→business→ext→app→runner | 反向依赖/跨层引用 | ArchUnit |
| JSON 统一用 FastJSON 1.2.83 | Jackson / Gson | PMD |
| HTTP 统一用 OkHttp3 + HttpClientFactory | RestTemplate / Apache HttpClient | PMD |
| 数据库用 DalManager.of(beanName) | 直接注入 Mapper | PMD |
| 事务用 TransactionTemplate 编程式 | @Transactional 注解 | PMD |
| 日志用 @Slf4j + 占位符 | LoggerFactory / System.out | Checkstyle |
| 注入用 @Resource / 构造器 | 字段级 @Autowired | Checkstyle |
| 线程池用 BatchExecutorTemplate / Builder | 裸 new ThreadPoolExecutor | PMD |
| 限流用 Resilience4j + RateLimitFactory | 自行实现限流 | PMD |
| traceId 用 @MDC + ContextHolder | 线程切换丢失 traceId | PMD |
| 配置用 Nacos | 硬编码环境地址/密钥 | Checkstyle |
| commit 前缀:feat/fix/refactor/docs/test/chore | 无前缀或不规范 | Git Hook |
| 交付前必须通过自动治理巡检 | 跳过巡检直接交付 | agent-workflow.md §8 |
| 完整规则 → `.qoder/rules/` 全部 4 个文件 | | |

关键提醒:此文件会在后续步骤中持续更新------每新增一个 Rules、Skills 或 Wiki 文件,都要在"快速导航"表中注册对应条目。


3.2 README.md --- 面向人类的入口

定位

README.md 面向人类开发者(非 AI),提供项目概览、模块拓扑、启动方式和环境准备。与 AGENTS.md 互补:AGENTS.md 偏"约束",README.md 偏"说明"。

建议包含的章节
  • 项目简介(1~2 段话)
  • 模块拓扑图(ASCII 或 Mermaid)
  • 技术栈表(与 AGENTS.md 一致,但可更详细)
  • 环境准备(JDK、Maven、MySQL、Redis 版本要求)
  • 启动方式(本地开发、测试、生产)
  • 模块说明链接(指向各模块的 readme.md

实际示例
markdown 复制代码
---
last_updated: 2026-06-26
status: active
owner: @zhangsan
---

# app-exchange-port

第三方系统数据交换平台,对接天创/友盟/百行等外部供应商,完成数据采集、加密转换、分片批量编排与结果持久化。

## 技术栈

| 层面 | 选型 |
|------|------|
| JDK | 1.8 |
| 框架 | Spring Boot 2.3.12 + Spring Cloud Hoxton.SR12 + Alibaba Cloud 2021.1 |
| 持久化 | MyBatis-Plus 3.4.3 + MySQL 8.0.28 + Dynamic Datasource |
| 缓存 | Redis + Caffeine |
| 调度 | XXL-JOB 2.2.0 |
| HTTP | OkHttp3 3.14.9(统一客户端) |
| JSON | FastJSON 1.2.83(唯一序列化库) |
| 限流 | Resilience4j |
| 配置中心 | Nacos |
| 测试 | JUnit 5.6.3 + Mockito 3.12.4 |

> 完整技术约束见 `.qoder/rules/always-on.md`

## 模块结构

依赖只能向上流动,严禁反向依赖或跨层引用:
common → dal → business → ext → app → runner          (Web 部署链路)
common → dal → business → ext → soa-service → app-soa → deploy-set  (SOA 部署链路)

| 模块 | 职责 |
|------|------|
| exchange-common | 通用基础设施:trace / juc / cache / scheduler / http / sentinel / event |
| exchange-dal | 仓储层:entity / mapper / manager / datasource |
| exchange-business | 核心业务层:core(async/sync/lifecycle) / base / ext / infra |
| exchange-ext | 供应商适配层:tianchuang(天创)/ youmeng(友盟)/ baihang(百行) |
| exchange-app | 应用编排层:config / trigger / admin / facade |
| exchange-runner | Web 部署包:WebApplication + controllers |
| exchange-api | SOA 接口契约(独立发布,仅依赖 Lombok) |
| exchange-soa-service | SOA 服务实现:SyncSingleService + RateLimitDelegate |
| exchange-app-soa | SOA 应用配置 |
| exchange-deploy-set | 部署集合(pom 聚合)→ exchange-soa-runner |
| exchange-test | 集成测试集 |

## 快速开始

### 环境要求

- JDK 1.8
- Maven 3.6+
- MySQL 8.0
- Redis
- Nacos(⚠️ exchange-test 模块下的 `app-exchange-port.yml` 需与 Nacos 上 `namespace=dev1` 保持一致)

### 构建

```bash
mvn clean package -DskipTests

### 启动

项目有两个部署入口:

| 部署形态 | 启动类 | 模块 | 用途 |
|---------|--------|------|------|
| Web 应用 | `com.jzsk.exchange.WebApplication` | exchange-runner | 批量调度、手动触发、管理运维、监控 |
| SOA 服务 | `com.jzsk.exchange.SoaRunner` | exchange-deploy-set/exchange-soa-runner | 同步单笔请求(Dubbo/HTTP) |

## 运维接口

| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 批量执行 | GET | `/schedule/triggerBatch/{YYYY-MM-DD~HH}/{planId}/{sourceIds}` | 手动触发批量数据交换。时间到小时,如 `2024-12-23~09` |
| 数据分片 | GET | `/schedule/trigger/{clusterSize}/{clusterIndex}` | 指定集群规模和机器索引执行分片 |
| 监控面板 | GET | `/monitor` | 查看线程池(阻塞任务数/线程参数)、全局配置、业务配置 |
| ⚠️ 重置数据 | GET | `/schedule/reset/{YYYY-MM-DD~HH}/{tb_name}` | 清理目标表数据,**仅限测试环境**。时间作为验证密码,`{tb_name}` 为目标表名 |

> **日志排查**:基于 traceId 查找上下文,主/子线程 traceId 可关联查询,搜索关键词 `start,parentTraceId=` 或 `start,preTraceId=`

## 重要配置

| 配置项 | 说明 | 备注 |
|--------|------|------|
| `exchange.biz.global` | 全局业务配置 | --- |
| `exchange.biz.global.close` | 全局开关 | 关闭后阻塞下一批扫描 |
| `exchange.biz.global.executors` | 线程池配置 | ⚠️ 阻塞队列数不可修改 |
| `spring.redis` | Redis 客户端配置 | ⚠️ 目前不可动态修改 |
| `spring.redis.pool` | Redis 连接池 | --- |
| `xxl.job` | XXL-JOB 分布式调度配置 | --- |

## 开发指南

| 你想做什么 | 去哪里看 |
|-----------|---------|
| 了解 AI Coding 规范化开发流程 | [docs/ai-coding-guide.md](docs/ai-coding-guide.md) |
| AI Agent 项目入口(导航地图) | [AGENTS.md](AGENTS.md) |
| 查看技术红线和 CI 验证规则 | `.qoder/rules/always-on.md` |
| 了解系统架构和数据流转 | [docs/architecture/overview.md](docs/architecture/overview.md) |
| 确认模块边界和依赖方向 | [docs/architecture/boundaries.md](docs/architecture/boundaries.md) |
| 查看可复用的基类/接口清单 | [docs/architecture/code-assets.md](docs/architecture/code-assets.md) |

## 文档目录

docs/
├── architecture/    架构知识(overview / boundaries / code-assets / data-flow)
├── conventions/     编码规范(naming / error-handling / testing / logging / linter-rules)
├── design/          功能设计文档(_template + feature-*.md)
├── reference/        参考资料(prd-template / api.spec.yaml / error-codes)
├── changes/          变更管理(pr-checklist / impact-analysis)
└── plans/           迭代计划(current-sprint / backlog)

## 变更记录

见 [CHANGELOG.md](CHANGELOG.md)

3.3 docs/architecture/overview.md --- 架构概览

定位

这是 Wiki 层的第一个文档,为 AI Agent 提供系统全局视角。AI Agent 在 PRD 解析阶段会加载此文件理解项目全貌。

必须包含的章节
章节 内容 为什么 AI 需要知道
定位 项目解决什么问题 帮助 AI 理解业务上下文
技术栈明细 全部技术选型及版本 决定 AI 能使用哪些技术
模块全景 所有 Maven 模块及其职责 AI 需要知道代码放在哪个模块
部署入口 启动类和部署形态 AI 需要知道在哪里暴露接口
核心流程 一句话概括主要业务流程 AI 需要理解数据流转方向
编写模板
markdown 复制代码
---
last_updated: 2026-06-29
status: active
owner: @zhangsan
---

# 系统架构概览

## 定位
{一段话:项目解决什么问题,核心能力是什么}

## 技术栈
| 层面 | 技术选型 |
|------|---------|
| JDK | 1.8 |
| 框架 | Spring Boot 2.3.12 + Spring Cloud |
| 持久化 | MyBatis-Plus + MySQL |
| 缓存 | Redis + Caffeine |
| HTTP | OkHttp3 + HttpClientFactory |
| JSON | FastJSON |
| 配置中心 | Nacos |
| 测试 | JUnit 5 + Mockito |

## 模块全景
{ASCII 图或 Mermaid,展示所有 Maven 模块及其层次关系}

## 部署入口
| 部署形态 | 入口类 | 模块 | 职责 |
|---------|--------|------|------|
| Web 应用 | WebApplication | {module} | {职责} |
| SOA 服务 | {Runner} | {module} | {职责} |

## 核心流程
{用编号列表概括 1~3 个核心业务流程,详见 data-flow.md}
实际示例
markdown 复制代码
---
last_updated: 2026-03-28
status: active          # active | deprecated | draft
owner: @zhangsan
---

# 系统架构概览

## 定位

app-exchange-port 是一个第三方系统数据交换平台,负责对接天创(Tianchuang)、友盟(Youmeng)、百行(Baihang)等外部供应商,完成数据采集、加密转换、分片批量编排、结果持久化与文件处理。

## 技术栈

| 层面 | 技术选型 |
|------|---------|
| JDK | 1.8 |
| 框架 | Spring Boot 2.3.12 + Spring Cloud Hoxton.SR12 + Alibaba Cloud 2021.1 |
| 持久化 | MyBatis-Plus 3.4.3 + MySQL 8.0.28 + Dynamic Datasource 3.5.0 + HikariCP 3.4.5 |
| 缓存 | Redis (Lettuce / Jedis 3.3.0) + Caffeine 2.8.8 |
| 调度 | XXL-JOB 2.2.0 + 自研 @Trigger/@Job 调度框架 |
| HTTP | OkHttp3 3.14.9 + HttpClientFactory |
| 限流 | Resilience4j-ratelimiter + RateLimitFactory |
| 监控 | CAT + 自研 HttpMonitorInterceptor |
| JSON | FastJSON 1.2.83 |
| 对象映射 | MapStruct 1.5.2 + Lombok 1.18.12 |
| 配置中心 | Nacos(namespace: dev1 / test1 / pre / prod) |
| 消息 | RocketMQ (ons-client 1.8.8) |
| 测试 | JUnit 5.6.3 + Mockito 3.12.4 |

## 模块全景
\```
app-exchange-port (root pom)
├── exchange-common          通用基础设施:trace / juc / cache / scheduler / http / sentinel / event
├── exchange-dal             仓储层:entity / mapper / manager / datasource
├── exchange-business        核心业务层:core(async/sync/lifecycle) / base / ext / infra
├── exchange-ext             供应商适配层(pom 聚合)
│   ├── exchange-ext-tianchuang   天创适配器
│   ├── exchange-ext-youmeng      友盟适配器(文件批处理)
│   └── exchange-ext-baihang      百行适配器
├── exchange-app             应用编排层:config / trigger / admin / facade
├── exchange-runner          Web 部署包:WebApplication + controllers
├── exchange-api             SOA 接口契约(独立发布,仅依赖 Lombok)
├── exchange-soa-service     SOA 服务实现:SyncSingleService + RateLimitDelegate
├── exchange-app-soa         SOA 应用配置
├── exchange-deploy-set      部署集合(pom 聚合)
│   └── exchange-soa-runner  SOA 部署包
└── exchange-test            集成测试集
\```

## 双部署入口

| 部署形态 | 入口类 | 模块 | 职责 |
|---------|--------|------|------|
| Web 应用 | `WebApplication` | exchange-runner | 批量调度、手动触发、管理运维、监控 |
| SOA 服务 | SOA Runner | exchange-deploy-set/exchange-soa-runner | 同步单笔请求(Dubbo/HTTP) |

## 核心流程

1. **同步单笔**:外部系统 → SOA 接口 → `SyncSingleService.request()` → 限流 → 构造上下文 → HTTP 调用供应商 → 结果解析 → 返回
2. **异步批量**:XXL-JOB 触发 → `PlanLifecycleTrigger.trigInit()` → 数据分片 → 分区任务执行(同步/异步) → 结果持久化 → 文件处理(友盟)

详细流程见 [data-flow.md](data-flow.md)。

3.4 docs/architecture/boundaries.md --- 模块边界与依赖约束

定位

这是整个 Harness 体系最关键的架构文档之一。 AI Agent 在每次影响分析(PRD-to-Code Step 2)时都会加载此文件,判断代码应该放在哪个模块、依赖是否合规。

必须包含的内容
  1. 依赖方向图(ASCII 图,清晰展示谁依赖谁)
  2. 铁律声明(依赖只能向上流动,禁止反向/跨层)
  3. 各模块职责(每个模块的"做什么"和"不做什么")
  4. 跨模块约束(如数据库访问方式、配置注册方式、扩展点规则)
编写模板
markdown 复制代码
---
last_updated: 2026-06-29
status: active
owner: @zhangsan
---

# 模块边界与依赖约束

## 依赖方向图
{ASCII 图:从底层到高层展示模块依赖关系}

**铁律:依赖只能向上流动,禁止反向依赖或跨层引用。**

## 各模块职责

### {module-common}
- **职责**:通用基础设施,业务无关
- **内容**:{列出此模块包含的核心功能}
- **禁止**:{明确列出不能做的事}

### {module-dal}
- **职责**:仓储层,操作数据库
- **内容**:Entity / Mapper / Manager / 数据源配置
- **禁止**:包含业务逻辑

{...其他模块}

## 跨模块约束
| 约束 | 说明 |
|------|------|
| 数据库访问方式 | {如通过 DalManager.of()} |
| 配置注册方式 | {如在何处注册} |
| 扩展点规则 | {如新增供应商必须新建子模块} |
编写要点
  • 每个模块的"禁止"项与 Rules 层的硬性约束一一对应
  • 依赖方向图必须使用 ASCII 或 Mermaid,确保 AI Agent 能解析
  • 模块职责描述要精确到"子目录"级别
实际示例
markdown 复制代码
---
last_updated: 2026-03-28
status: active          # active | deprecated | draft
owner: @zhangsan
---

# 模块边界与依赖约束

## 依赖方向图

\```
exchange-common          ← 最底层,无项目内依赖
      ↑
exchange-dal             ← 依赖 common
      ↑
exchange-business        ← 依赖 dal + common
      ↑
exchange-ext (聚合)      ← 依赖 business
  ├── ext-tianchuang
  ├── ext-youmeng
  └── ext-baihang
      ↑
exchange-app             ← 依赖全部 ext 子模块
      ↑
exchange-runner          ← 依赖 app(Web 部署包)

exchange-api             ← 独立模块,仅依赖 Lombok,独立发布 0.0.1.RELEASE
      ↑
exchange-soa-service     ← 依赖 api + ext-tianchuang + ext-baihang
      ↑
exchange-app-soa         ← 依赖 soa-service
      ↑
exchange-deploy-set / exchange-soa-runner  ← 依赖 app-soa(SOA 部署包)
\```

**铁律:依赖只能向上流动,禁止反向依赖或跨层引用。**

## 各模块职责

### exchange-common
- **职责**:通用基础设施,业务无关
- **内容**:trace(traceId 传播)、juc(线程池/闭锁)、cache(Redis 锁/布隆过滤器)、scheduler(@Trigger/@Job 调度框架)、http(HttpClientFactory/监控拦截器)、sentinel(限流/CAT 监控)、event(EventBus)、shutdown(优雅停机)
- **禁止**:引入任何业务模块依赖

### exchange-dal
- **职责**:仓储层,操作数据库
- **内容**:entity(DO 模型)、mapper(MyBatis-Plus Mapper)、manager(Manager 模板方法封装)、datasource(数据源配置)
- **禁止**:包含业务逻辑;直接被 ext/runner 引用

### exchange-business
- **职责**:核心业务逻辑
- **内容**:
  - `core/` --- 接口规范与核心编排(async 异步流程、sync 同步流程、lifecycle 生命周期)
  - `base/` --- 对 core 接口的通用基础实现(HttpJsonPostRequestProcessor、HttpResultParserStrategy)
  - `ext/` --- 增强功能(通知等)
  - `infra/` --- 基础设施(InfraExecutorFactory)
  - `exception/` --- 业务异常定义
- **禁止**:直接依赖具体供应商 SDK

### exchange-ext(及子模块)
- **职责**:按供应商接口规范定制适配器
- **模式**:每个子模块继承 business 中的抽象基类(InputConvertor、HttpResultParser、PortResultConvertor、PlanPartitionTaskProcessor 等)
- **ext-tianchuang**:天创 AES 加密 + MD5 签名 + 同步请求
- **ext-youmeng**:友盟文件批处理(CSV 读取、OSS 上传、批量计算、超时判定、布隆过滤)
- **ext-baihang**:百行征信数据对接
- **禁止**:被其他 ext 子模块互相引用

### exchange-app
- **职责**:全流程编排与全局配置
- **内容**:config(BizConfiguration/RedisConfiguration/AppConfig)、trigger(PlanLifecycleTrigger/AsyncTrigger/AsyncCompleteTrigger)、admin(管理操作)、facade(查询门面)
- **禁止**:直接操作 HTTP 客户端或数据库 Mapper

### exchange-runner
- **职责**:Web 部署入口
- **内容**:WebApplication 启动类、controllers(Schedule/Admin/Monitor/JobInfo/JobLifeCycle/TargetData)、ShardingScheduler(XXL-JOB 分片调度)
- **禁止**:包含核心业务逻辑,仅做请求转发与触发

### exchange-api
- **职责**:SOA 接口契约定义
- **内容**:SyncSingleRequestProvider 接口、RequestDTO/ResponseDTO、CodeEnum
- **特点**:独立版本号 0.0.1.RELEASE,独立发布到 Nexus,仅依赖 Lombok

### exchange-soa-service
- **职责**:SOA 接口实现
- **内容**:SyncSingleService(同步单笔)、HttpJsonPostRateLimitDelegate(限流委托)

## 跨模块约束

| 约束 | 说明 |
|------|------|
| Manager 模式 | 数据库操作必须通过 `DalManager.of(beanName)` 获取 Manager 实例,禁止直接注入 Mapper |
| 配置注册 | 供应商配置类需在 `BizConfiguration.preInitAppConfig()` 中注册到 PortConfigFactory / PlanConfigFactory |
| 扩展点 | 新增供应商必须新建 ext 子模块,禁止在 business 中硬编码供应商逻辑 |

3.5 docs/architecture/data-flow.md --- 数据流转

定位

描述系统中数据如何在模块间流转。AI Agent 在设计文档生成阶段(Step 3)会参考此文件,确保新功能的数据流转路径与现有架构一致。

必须包含的内容
  1. 每种核心流程的调用链路图(从入口到出口的完整路径)
  2. 关键数据结构说明(DTO、Context、Config 等)
  3. 数据库表流转(数据从哪个表流到哪个表)
  4. 跨线程的上下文传播(如 traceId 传播机制)
编写要点
  • 使用 ASCII 流程图,每个节点标注所属模块和类名
  • 关键数据结构用表格列出,标明所属模块
  • 一个流程一个章节,不要混在一起
实际示例
markdown 复制代码
---
last_updated: 2026-03-28
status: active          # active | deprecated | draft
owner: @zhangsan
---

# 数据流转

## 流程一:同步单笔请求(SOA)

\```
外部调用方
  │
  ▼
SyncSingleRequestProvider.request(RequestDTO)        ← exchange-api 接口契约
  │
  ▼
SyncSingleService.request()                           ← exchange-soa-service
  │
  ├─ 1. 参数校验(macro.portId / macro.appId / body.reqId / body.userId / body.phoneMd5)
  ├─ 2. 通过 PortConfigFactory.getPortConfig(portId) 获取供应商端口配置
  ├─ 3. 通过 PlanContextFactory.initContext(appId, portId) 构造计划上下文
  ├─ 4. 构造 PortRequestContext(含 SourceData、PortRequest、PortTraceInfo)
  │
  ▼
HttpJsonPostRateLimitDelegate.execute(context)        ← 限流委托
  │
  ├─ Resilience4j RateLimiter 获取许可
  │
  ▼
HttpJsonPostRequestProcessor                          ← exchange-business/base
  │
  ├─ InputConvertor.buildInput()                      ← ext 模块(如 TCInputConvertor)
  │    └─ 供应商特定的加密/签名逻辑(AES / MD5)
  ├─ HttpClientFactory 获取 OkHttp 客户端
  ├─ 发起 HTTP POST 请求
  │
  ▼
HttpResultParserStrategy                              ← exchange-business/base
  │
  ├─ HttpResultParser.parse()                         ← ext 模块(如 TCHttpResultParser3605)
  │    └─ 解析供应商返回的加密响应体
  ├─ PortResultConvertor.convert()                    ← ext 模块(如 TCPortResultConvertor)
  │    └─ 转换为统一 ResponseBodyDTO
  │
  ▼
ResponseDTO.successInstance(body)                     ← 返回调用方
\```

### 关键数据结构

| 结构 | 模块 | 说明 |
|------|------|------|
| `RequestDTO` | exchange-api | macro(portId, appId) + body(reqId, userId, phoneMd5, ext) |
| `ResponseDTO` | exchange-api | macro(success, code, message) + body(reqId, content) |
| `PortRequestContext` | exchange-business | 封装端口请求上下文(ExchangePortRefWrap + PortRequest + PortTraceInfo) |
| `SyncPortConfig` | exchange-business | 供应商端口配置(url, tokenId, 限流参数等) |

---

## 流程二:异步批量分片执行(XXL-JOB)

\```
XXL-JOB 调度中心
  │
  ▼
ShardingScheduler / ScheduleController                ← exchange-runner
  │
  ├─ ShardingUtil.getShardingVo() 获取分片参数(shardIndex / clusterSize)
  ├─ 构造 SchedulerScope + PlanSchedulerContext
  │
  ▼
PlanLifecycleTrigger.trigInit()                       ← exchange-app
  │
  ▼
PlanTaskInitializer                                    ← exchange-business/core/lifecycle
  │
  ├─ 1. 按 planId 查询 SourceData 未处理数据量
  ├─ 2. 按 clusterSize / shardIndex 计算分片 Segment(startId ~ endId)
  ├─ 3. 创建 PlanExecRecord(计划执行记录)
  ├─ 4. 创建 PlanDetailExecRecord(明细执行记录)
  ├─ 5. 创建 PlanPartitionTask / PlanDetailPartitionTask(分区任务)
  │
  ▼
PlanPartitionTaskDriver                                ← exchange-business/core/lifecycle
  │
  ├─ 遍历分区任务
  ├─ PlanPartitionTaskProcessor.process()             ← 同步: SyncPlanPartitionTaskProcessor / 异步: 自定义
  │    │
  │    ├─ 按 cursor 游标分批拉取 SourceData
  │    ├─ PortRequestProcessor / BatchPortRequestProcessor
  │    │    └─ 调用供应商接口(复用同步单笔的 HTTP 通道)
  │    ├─ PortResultConvertor 转换结果
  │    ├─ ResultBatchSaveProcessor 批量写入 TargetData
  │    └─ 更新游标 cursor / 分区状态
  │
  ▼
PlanSegmentPersistence                                 ← 持久化分段结果
  │
  ▼
PartitionsAggregation                                  ← 分区聚合
  │
  ├─ 全部分区完成后
  ├─ 更新 PlanExecRecord / PlanDetailExecRecord 状态为 SUBMIT
  │
  ▼
AsyncProcessor.afterProcess()                          ← 后续处理
  │
  ├─ 友盟:AsyncFileProcessor(文件上传 OSS、CSV 读取、批量计算)
  ├─ 更新执行记录状态
  └─ 事务保证(TransactionTemplate 编程式事务)
\```

### 数据库表流转

\```
tb_source_data ──分片──▶ tb_plan_exec_record ──▶ tb_plan_detail_exec_record
                              │                          │
                              ▼                          ▼
                   tb_plan_partition_task ◀──▶ tb_plan_detail_partition_task
                              │
                              ▼
                     tb_target_data(结果表)
                              │
                   tb_plan_file_record(文件记录,友盟异步)
                   tb_non_exist_data(不存在数据,布隆过滤)
                   tb_retry_data(重试数据)
\```

---

## 流程三:友盟文件批处理(异步增强)

\```
友盟供应商回调
  │
  ▼
AsyncTaskBatchFetchProcessor.process()                 ← exchange-ext-youmeng
  │
  ├─ 获取文件信息与解压密码
  ├─ 落库 PlanFileRecord
  │
  ▼
AsyncReadTrigger.planFileExecute()                     ← CSV 读取触发
  │
  ├─ CSVStreamReader 读取文件行
  ├─ YmLineDataProcessor 逐行处理
  ├─ 布隆过滤不存在数据(RedisBloomFilter)
  ├─ 批量写入 TargetData
  │
  ▼
YmAsyncFileProcessor                                   ← 文件后处理
  │
  ├─ BatchComputeHelper 批量计算
  ├─ OSS 文件上传
  ├─ TimeoutJudeEventHandler 超时判定
  └─ deleteFileSafely 清理本地文件
\```

---

## traceId 跨线程传播

\```
主线程
  │  @MDC(types={TIMER, LOG}) → MDCAspect 注入 traceId
  │
  ▼
ContextHolder / MDCTemplate
  │  捕获当前 traceId 上下文
  │
  ▼
子线程(BatchExecutorTemplate / InfraExecutorFactory)
  │  ContextHolder.runWithContext() 恢复 traceId
  │
  ▼
日志关联查询:",start,parentTraceId=" 或 ",start,preTraceId="
\```

3.6 docs/architecture/code-assets.md --- 代码资产清单

定位

记录项目中所有可复用的基类、接口和工厂。AI Agent 在设计文档生成阶段(Step 3)会查询此文件,决定新增类应该继承哪个基类。

必须包含的内容
资产类型 记录内容
基类/抽象类 类名、所属模块、职责、关键方法、子类列表
接口 接口名、所属模块、方法签名、实现类列表
工厂 工厂名、产出物、注册方式
Manager 模式 模式 A / 模式 B 的选择决策树
编写要点
  • 新建项目时此文件可能只有少量条目(甚至为空框架),随着代码积累逐步完善
  • 使用表格格式,便于 AI Agent 结构化解析
  • 每个 Manager 模式要给出选择依据(什么情况用模式 A,什么情况用模式 B)
实际示例
markdown 复制代码
---
last_updated: 2026-06-24
status: active
owner: @zhangsan
---

# 代码资产清单

> **定位**:本文档列出项目中所有可复用的基类、接口、工厂和工具类,供 AI Agent 在技术设计阶段(prd-to-code Step 3)快速选择正确的继承/实现目标,避免临时探索代码。
> **维护规则**:新增基类/接口/工厂时必须同步更新本清单。

---

## 1. business/core --- 核心接口与抽象类

### 1.1 供应商适配器基类

| 类型 | 名称 | 路径 | 用途 | 选择条件 |
|------|------|------|------|---------|
| 接口 | `HttpResultParser` | exchange-business/base/ | HTTP 响应解析 | 新增供应商需要解析 HTTP 响应时实现 |
| 接口 | `PortResultConvertor` | exchange-business/core/sync/ | 端口结果转换 | 新增供应商需要转换结果数据时实现 |
| 接口 | `SupplierConvertor` | exchange-business/core/sync/ | 供应商转换器 | 需要统一供应商转换逻辑时实现 |
| 接口 | `PortRequestProcessor` | exchange-business/core/sync/ | 端口请求处理器 | 需要自定义请求发送逻辑时实现 |
| 抽象类 | `InputConvertor` | exchange-business/ext/ | 请求参数转换 | 新增供应商需要构造请求参数时继承 |

### 1.2 同步流程组件

| 类型 | 名称 | 路径 | 用途 |
|------|------|------|------|
| 类 | `HttpHandler` | core/sync/ | HTTP 调用处理器(封装 OkHttp3 调用) |
| 类 | `BatchPortRequestProcessor` | core/sync/ | 批量端口请求处理器 |
| 类 | `SyncPlanSegmentProcessor` | core/sync/ | 同步计划分段处理器 |
| 类 | `SyncPlanSegmentPersistence` | core/sync/ | 同步计划分段持久化 |
| 类 | `SyncPlanPartitionTaskProcessor` | core/sync/ | 同步计划分区任务处理器 |
| 类 | `ResultBatchSaveProcessor` | core/sync/ | 结果批量保存处理器 |
| 类 | `DefaultPlanDetailInitProcessor` | core/sync/ | 默认计划详情初始化处理器 |

### 1.3 策略类

| 类型 | 名称 | 路径 | 用途 |
|------|------|------|------|
| 类 | `HttpResultParserStrategy` | base/ | HTTP 结果解析策略(按 beanName 查找实现) |
| 类 | `PortResultConvertStrategy` | core/sync/ | 端口结果转换策略(按 beanName 查找实现) |

### 1.4 工厂类

| 类型 | 名称 | 路径 | 用途 |
|------|------|------|------|
| 类 | `PortConfigFactory` | core/model/config/factory/ | 端口配置工厂(按 portId 获取 PortConfig) |
| 类 | `PlanConfigFactory` | core/model/config/factory/ | 计划配置工厂(按 planId 获取 PlanConfig) |
| 类 | `AppConfigFactory` | core/model/config/factory/ | 应用配置工厂 |
| 类 | `PortRequestFactory` | core/model/factory/ | 端口请求工厂 |
| 类 | `PlanContextFactory` | core/model/factory/ | 计划上下文工厂 |
| 类 | `ScanContextFactory` | core/model/factory/ | 扫描上下文工厂 |

---

## 2. business/base --- 通用基础实现

| 类型 | 名称 | 路径 | 用途 |
|------|------|------|------|
| 类 | `HttpJsonPostRequestProcessor` | base/ | HTTP JSON POST 请求处理器(默认实现 PortRequestProcessor) |
| 类 | `HttpJsonPostReqConfig` | base/ | HTTP POST 请求配置 |
| 类 | `BeanUtils` | base/ | Bean 工具类(ApplicationContextAware) |
| 类 | `PhoneMd5Appender` | base/ | 手机号 MD5 追加器(实现 PlanRequestAppender) |

---

## 3. common/scheduler --- 调度框架基类

| 类型 | 名称 | 路径 | 用途 | 选择条件 |
|------|------|------|------|---------|
| 抽象类 | `BaseSchedulerCxtFactory<E,T>` | common/scheduler/ | 调度上下文工厂基类 | 新增调度任务时继承,实现 construct() 和 parser() |
| 抽象类 | `BaseScheduleContext<T>` | common/scheduler/model/ | 调度上下文基类 | 新增调度上下文时继承 |
| 类 | `BaseSchedulerConfig` | common/scheduler/model/ | 调度配置基类 | 新增调度配置时继承 |
| 接口 | `Trigger` | common/scheduler/ | 触发器接口 | 新增触发器时实现 |
| 类 | `SchedulerFactory` | common/scheduler/ | 调度工厂(XXL-JOB 集成) | 自动注册,无需继承 |

---

## 4. common/trace --- 链路追踪组件

| 类型 | 名称 | 路径 | 用途 |
|------|------|------|------|
| 类 | `MDCTemplate` | common/trace/ | MDC 操作模板(traceId 设置/清除/获取) |
| 类 | `ContextHolder` | common/trace/ | 线程上下文持有器(跨线程传递 traceId) |
| 类 | `ContextTaskDecorator` | common/trace/juc/ | 线程池任务装饰器(自动传递 traceId) |
| 类 | `DecoratorThreadPoolExecutor` | common/trace/juc/ | 装饰线程池(自动传递 traceId) |
| 类 | `MDCAspect` | common/trace/aspect/ | MDC 切面(@MDC 注解处理) |
| 类 | `TraceContextWrap` | common/trace/ | 追踪上下文包装器 |

---

## 5. common/juc --- 线程池组件

| 类型 | 名称 | 路径 | 用途 |
|------|------|------|------|
| 类 | `BatchExecutorTemplate` | common/juc/ | 批量执行模板 |
| 类 | `ThreadPoolExecutorBuilder` | common/juc/ | 线程池构建器 |

---

## 6. dal --- 数据访问层基类

### 6.1 Manager 接口

| 名称 | 用途 | 选择条件 |
|------|------|---------|
| `DalManager<T>` | 基础 Manager 接口(extends IService + BeanNameAware) | 所有 Manager 的根接口 |
| `TargetDataManager<T>` | 目标数据 Manager | 新增供应商目标数据表时实现 |
| `DefaultTargetDataManager` | 默认目标数据 Manager(TargetData 表) | 操作通用 tb_target_data 表时使用 |
| `SourceDataManager` | 源数据 Manager | 操作 tb_source_data 表时使用 |
| `PlanExecRecordManager` | 计划执行记录 Manager | 操作 tb_plan_exec_record 表时使用 |
| `PlanDetailExecRecordManager<T>` | 计划详情执行记录 Manager | 操作 tb_plan_detail_exec_record 表时使用 |
| `PlanPartitionTaskManager` | 计划分区任务 Manager | 操作 tb_plan_partition_task 表时使用 |
| `PlanDetailPartitionTaskManager` | 计划详情分区任务 Manager | 操作 tb_plan_detail_partition_task 表时使用 |
| `PlanFileRecordManager` | 计划文件记录 Manager | 操作 tb_plan_file_record 表时使用 |
| `NonExistDataManager` | 不存在数据 Manager | 操作 tb_non_exist_data 表时使用 |
| `RetryDataManager` | 重试数据 Manager | 操作 tb_retry_data 表时使用 |

### 6.2 Manager 实现模式

项目中存在两种 Manager 模式,根据是否需要 `DalManager.of(beanName)` 动态获取来选择:

#### 模式 A:DalManager(需动态获取时使用)

适用场景:计划执行、分区任务、目标数据等需要在 business 层通过 beanName 动态获取的 Manager。

\```
接口层: XxxManager extends DalManager<XxxEntity>
实现层: XxxManagerImpl extends BaseManager<XxxMapper, XxxEntity> implements XxxManager
获取方式: DalManager.of("xxxManagerImpl") 获取 Bean 实例
\```

实际使用:`PlanDetailPartitionTaskManager`、`PlanPartitionTaskManager`、`PlanDetailExecRecordManager`、`TargetDataManager`/`DefaultTargetDataManager`

#### 模式 B:IService(直接注入时使用)

适用场景:源数据、重试数据、文件记录等只需在固定代码中通过 @Resource 注入的简单 Manager。

\```
接口层: XxxManager extends IService<XxxEntity>
实现层: XxxManagerImpl extends ServiceImpl<XxxMapper, XxxEntity> implements XxxManager
获取方式: @Resource 注入
\```

实际使用:`SourceDataManager`、`RetryDataManager`、`PlanFileRecordManager`、`PlanExecRecordManager`、`NonExistDataManager`

#### 选择规则

| 条件 | 选择 |
|------|------|
| business 层需要通过 `DalManager.of("beanName")` 动态获取 | 模式 A(DalManager + BaseManager) |
| 仅需在固定代码中通过 `@Resource` 注入 | 模式 B(IService + ServiceImpl) |
| 不确定时默认 | 模式 B(更简单,后续如需动态获取再重构为模式 A) |

---

## 7. soa-service --- SOA 服务基类

| 类型 | 名称 | 路径 | 用途 | 选择条件 |
|------|------|------|------|---------|
| 类 | `SyncSingleService` | soa-service/ | 同步单笔服务(实现 SyncSingleRequestProvider) | 新增同步单笔查询接口时参考 |
| 类 | `SyncSingleQueryService` | soa-service/ | 同步查询服务(实现 SyncSingleRequestYmProvider) | 新增高并发查询接口时参考 |
| 类 | `QueryRateLimitDelegate` | soa-service/ | 查询限流委托(extends BaseRateLimitTemplate) | 新增限流查询时继承 |
| 类 | `HttpJsonPostRateLimitDelegate` | soa-service/ | HTTP POST 限流委托(extends BaseRateLimitTemplate) | 新增限流 HTTP 调用时继承 |

### SOA Service 实现模式

\```
1. exchange-api 定义 Provider 接口 + RequestDTO/ResponseDTO
2. exchange-soa-service 创建 Service 类 implements Provider 接口
3. @Slf4j + @Component + @MDC 注解
4. 参数校验 → 上下文构造 → 限流委托 → HTTP 调用 → 结果封装
5. exchange-deploy-set 修改 spring/spring-dubbo-provider.xml 注册 Dubbo 服务
\```

---

## 8. ext --- 供应商适配器参考实现

| 供应商 | 模块 | 关键类 | 参考场景 |
|--------|------|--------|---------|
| 天创 | exchange-ext-tianchuang | TCInputConvertor, TCHttpResultParser3605/3606, TCPortResultConvertor | 同步请求 + AES 加密 + MD5 签名 |
| 百行 | exchange-ext-baihang | BhInputConvertor, BhHttpResultParser, BhPortResultConvertor, BhTargetData | 征信数据 + 自有 Entity |
| 友盟 | exchange-ext-youmeng | YmContextRegister, YmPlanDetailInitProcessor, YmTaskFetchProcessor, YmAsyncFileProcessor | 异步文件批处理 + CSV + OSS |

### 新增供应商适配器选择条件

\```
PRD 要求同步请求 + 加密签名 → 参考 ext-tianchuang 模式
PRD 要求异步文件批处理     → 参考 ext-youmeng 模式
PRD 要求征信数据对接       → 参考 ext-baihang 模式
PRD 要求高并发实时查询     → 参考 SyncSingleQueryService + QueryRateLimitDelegate 模式
\```

---

## 9. 基类选择决策树

\```
PRD 需要新增什么?
│
├─ 新增数据库表/字段
│  └─ Entity extends BaseTargetData (或新建 Entity implements Serializable)
│     Mapper extends BaseMapper
│     Manager 接口:
│     ├─ 需 DalManager.of() 动态获取 → extends DalManager → Impl extends BaseManager (模式 A)
│     └─ 仅 @Resource 注入 → extends IService → Impl extends ServiceImpl (模式 B)
│     Mapper XML (如有自定义 SQL)
│
├─ 新增供应商适配器
│  ├─ 需要构造请求参数 → 继承 InputConvertor
│  ├─ 需要解析 HTTP 响应 → 实现 HttpResultParser
│  ├─ 需要转换结果数据 → 实现 PortResultConvertor
│  └─ 需要处理分区任务 → 实现 PlanPartitionTaskProcessor
│
├─ 新增 SOA 服务接口
│  ├─ 需要限流 → 继承 BaseRateLimitTemplate
│  ├─ 需要限流 + HTTP 调用 → 参考 HttpJsonPostRateLimitDelegate
│  └─ 需要限流 + 查询 → 参考 QueryRateLimitDelegate
│
├─ 新增调度任务
│  ├─ 上下文工厂 → 继承 BaseSchedulerCxtFactory
│  ├─ 调度上下文 → 继承 BaseScheduleContext
│  ├─ 调度配置 → 继承 BaseSchedulerConfig
│  └─ 触发器 → 实现 Trigger
│
├─ 新增 REST Controller
│  └─ 参考 add-api-endpoint.md 场景一
│
└─ 新增事件处理
   └─ 实现 EventHandler<C, E>
\```

4. 文档元信息规范

所有 .md 文件头部必须包含 YAML front matter

yaml 复制代码
---
last_updated: 2026-06-29
status: active          # active | deprecated | draft
owner: @zhangsan
---
字段 说明 为什么需要
last_updated 最后更新日期,格式 YYYY-MM-DD 文档健康度扫描时检测过期(>90天标记 stale)
status active / draft / deprecated 区分生效中、草稿、已废弃的文档
owner 文档负责人 发现问题时知道找谁

过期检测规则(后续自动化层会用到):

  • last_updated 距今 > 90 天 → 标记为 stale
  • last_updated 距今 > 180 天 → 标记为 critical
  • status: draft → 标记为待发布
  • owner 缺失 → 标记为 orphan(无主文档)

5. 完成验证清单

完成本步后,逐项检查:

  • AGENTS.md 存在,包含项目简介、技术栈基线(精确到版本号)、快速导航表、提交规范
  • README.md 存在,包含模块拓扑图和环境准备说明
  • docs/architecture/overview.md 存在,包含技术栈明细、模块全景、部署入口、核心流程
  • docs/architecture/boundaries.md 存在,包含依赖方向图、各模块职责(含禁止项)、跨模块约束
  • docs/architecture/data-flow.md 存在,包含每种核心流程的调用链路图
  • docs/architecture/code-assets.md 存在(可为框架结构,随代码积累完善)
  • 所有.md 文件头部包含 YAML front matter(last_updated / status / owner)
  • AGENTS.md 的快速导航表中已注册本步创建的所有文档路径

6. 与下一步的衔接

本步建立了架构基线,定义了"模块怎么分层"和"依赖方向是什么"。下一步需要在此基础上编写 Rules 层(硬性约束)------将架构边界转化为 AI Agent 必须遵守的规则。

复制代码
Step 1(本步)                    Step 2(下一步)
┌─────────────────┐              ┌─────────────────┐
│ AGENTS.md       │    定义约束    │ always-on.md    │ ← 技术栈锁定
│ overview.md     │ ──────────▶   │ agent-workflow   │ ← 流程约束
│ boundaries.md  │    依赖方向    │ java-code-style │ ← 代码风格
│ data-flow.md   │    转化为规则   │ java-testing    │ ← 测试规则
└─────────────────┘              └─────────────────┘

衔接关系

  • boundaries.md 中的依赖方向图 → always-on.md 第 2 节"模块依赖方向"
  • overview.md 中的技术栈 → always-on.md 第 1 节"技术栈锁定"
  • 各模块的"禁止"项 → always-on.md 中对应的硬性约束
  • 核心流程 → agent-workflow.md 中的强制流程顺序

说明

  • 实际示例的格式是markdown格式,在示例中出现\符号是因为格式采用markdown编辑的,若不转译就会直接markdown格式断裂。使用时将\去掉即可