소스 정보
- 저장소
- docevilOck/agent-skills-hook
- 최근 소스 활동
- 2026년 7월 2일 09:41
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 2
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/docevilOck/agent-skills-hook --skill ddev-arch명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | ddev-arch |
| description | 【禁止自动加载 — 不可被「技能强制评估」自动匹配】仅限用户手动调用。初始化项目级长期架构规范文档,建立模块边界、依赖规则和变更门禁,约束后续代码修改范围。 |
这是项目级架构边界契约,目标是让 AI(和人)在修改代码前知道:模块职责是什么、边界在哪里、哪些依赖允许、哪些改动会破坏架构。
仓库目录映射 服务于架构约束:帮助 AI 把改动限制在正确模块内ddev-spec:针对某一次代码改动,编写临时实现架构文档。它必须读取并遵守本 skill 产出的项目级架构规范。AGENTS.md,不要在探索完成前提前定稿。00_仓库集成架构.md(按"仓库集成架构模板"),再为每个独立代码单元写各自的 01_架构总览.md 和模块文档。单单元仓库:直接写 01_架构总览.md(按"单单元架构总览模板")。技术栈字段必须填写实际检测到的语言,后续步骤以此为分流依据.md,图附近标注用途说明01_架构总览.md 中声明的技术栈,按 lang-audit-matrix.md 分流到对应的审计策略(详见下方"项目依赖与封装审计"章节)。多单元仓库时,每个单元独立产出审计文档(放在各自子目录下)01_架构总览.md 中声明的技术栈,按 lang-audit-matrix.md 分流到对应的审计策略(详见下方"构建变体与环境审计"章节)AGENTS.md 或 CLAUDE.md)按以下优先级判定模块边界:
CMakeLists.txt、Makefile、go.mod、Cargo.toml 等)且互不直接源码依赖#include/import 交叉引用,则判定为多个独立代码单元。多单元场景下,每个单元独立产出架构文档(各自的结构总览+模块边界),顶层另出 00_仓库集成架构.md 描述单元间的交互、数据流和联合构建关系。单单元场景直接走后续 1-7 条规则检测模块边界。main()、app init、注册函数等入口,反向追踪调用链来聚合文件CMakeLists.txt、Makefile、Cargo.toml 等,就是一个模块uart_*.c、spi_*.c、auth_*.py、handler_*.go),每组为一个模块module/sub_a/、module/sub_b/),子模块独立成文,编号用两级序号(如 02-01_子模块名.md)不确定边界时,宁可先拆小并写明"边界待确认",不要把多个职责合成一个大模块。
所有模块统一单文件,只包含架构约束内容。
仓库只包含一套代码时,采用扁平结构:
docs/architecture/
├── 01_架构总览.md # 项目简介、架构原则、依赖规则、变更门禁、模块列表
├── stdlib-wrappers.md # [C/C++ 项目] 标准库函数替代封装 API 参考
├── dependency-audit.md # [非 C 项目] 依赖审计报告
├── modules/
│ ├── 02_<模块名>.md # 模块约束:职责+边界+接口+依赖+状态所有权+修改范围+检查清单
│ ├── 03_<模块名>.md
│ └── 03-01_<子模块名>.md # 子模块
└── diagrams/ # 架构图文件(手写 ASCII 到 .md)
└── *.md
仓库包含多套独立编译、互不源码依赖的代码单元时(异构多核、多服务/多应用、多固件镜像等),每单元独立出架构文档,顶层放单元间集成架构:
docs/architecture/
├── 00_仓库集成架构.md # 各单元间的交互关系、数据流、通信协议、联合构建与部署
├── <unit_a>/ # 独立代码单元 A(以单元实际目录名或简称命名,如 linux-4.9、melis-v3.0)
│ ├── 01_架构总览.md
│ ├── stdlib-wrappers.md # 或 dependency-audit.md(按各单元语言独立审计)
│ ├── modules/
│ │ └── 02_<模块名>.md
│ └── diagrams/
├── <unit_b>/ # 独立代码单元 B
│ ├── 01_架构总览.md
│ ├── modules/
│ └── diagrams/
└── ...
判定标准:独立代码单元 = 有独立的构建系统入口 + 不与其他单元的源码发生
#include/import交叉引用。各单元的依赖审计(stdlib-wrappers.md或dependency-audit.md)在各自子目录下独立产出。
在写架构文档之后,必须对工程的依赖和封装做审计。审计策略依赖 01_架构总览.md 中声明的技术栈。
进入分流决策前,必须用 Read 读取 references/lang-audit-matrix.md,根据技术栈确定审计策略。禁止凭记忆或猜测选择审计方案。
主 agent 读取 01_架构总览.md 的「技术栈」字段,判断项目语言:
当项目语言为 C 时执行。目标:让后续所有编码和审查工作都知道"这个工程对每个标准库函数有没有自己的封装、有的话应该用哪个"。
审计目标仅为发现工程封装,产出 API 参考文档,不调查裸调现状。
主 agent 拉独立子代理,按以下搜索范围全量扫描工程:
搜索范围(按函数类别):
| 类别 | 标准库函数 |
|---|---|
| 内存分配 | malloc, calloc, realloc, free |
| 字符串操作 | strcpy, strncpy, strcat, strncat, strlen, strcmp, strncmp, strstr, strchr, strrchr, strdup |
| 格式化 | sprintf, snprintf, vsprintf, vsnprintf, sscanf |
| 内存操作 | memcpy, memmove, memset, memcmp, memchr |
| 文件 I/O | fopen, fclose, fread, fwrite, fprintf, fscanf, fgets, fputs, fseek, ftell, remove, rename |
| 标准输出 | printf, puts, putchar |
| 通用工具 | atoi, atol, strtol, strtoul, abs, rand, srand, qsort, bsearch |
| 断言/终止 | assert, abort, exit |
| 时间 | time, localtime, strftime, sleep, usleep |
子代理搜索方法:
*.h)和源文件(*.c)中,对每个标准库函数名做 grep,找到:
#if/#ifdef/#if defined())门控:
thirdparty/、third_party/、external/、lib/ 等目录,识别工程中引入的第三方库(如 FatFs、lwIP、mbedTLS、FreeRTOS 等),检查:
*_port.c、*_conf.h、*_config.h)注入了工程封装子代理输出格式:
## 标准库替代封装审计 — 第 N 轮
### 已发现的替代封装
| 标准库函数 | 工程封装 | 签名 | 所在文件 | 增强特性 |
|-----------|---------|------|---------|---------|
| malloc | os_malloc | void *os_malloc(size_t size) | src/os/heap.c:42 | 内存池、失败日志 |
| free | os_free | void os_free(void *ptr) | src/os/heap.c:78 | 指针置 NULL |
### 本轮尚未覆盖的标准库函数
| 函数 | 原因(未搜索到 或 搜索结果不明确) |
|------|----------------------------------|
审计完成后,将所有发现合并写入 docs/architecture/stdlib-wrappers.md:
# 标准库函数替代封装参考
> 最后审计时间:<日期>
> 审计轮次:<N> 轮
> 本文档由 ddev-arch 标准库审计流程生成,后续所有代码编写和审查必须以此为参考。
## 内存分配
| 标准库函数 | 工程封装 | 签名 | 所在文件 | 说明 |
|-----------|---------|------|---------|------|
| malloc | `os_malloc` | `void *os_malloc(size_t size)` | `src/os/heap.c:42` | 内存池分配,自动对齐 8 字节 |
| free | `os_free` | `void os_free(void *ptr)` | `src/os/heap.c:78` | 回收到内存池,自动置 NULL |
| calloc | `os_calloc` | `void *os_calloc(size_t n, size_t size)` | `src/os/heap.c:65` | 封装 calloc + 零初始化校验 |
| realloc | —(无封装,禁止使用) | — | — | 工程内存池不支持 realloc |
## 字符串操作
| 标准库函数 | 工程封装 | 签名 | 所在文件 | 说明 |
|-----------|---------|------|---------|------|
| ... | ... | ... | ... | ... |
## 格式化
...
## 文件 I/O
...
## 断言
| assert | `MOD_ASSERT` | `#define MOD_ASSERT(expr)` | `include/common/mod_assert.h:15` | 失败时写日志 + 复位 |
## 条件编译门控
> 以下列出所有替代封装依赖的条件编译宏。**使用封装前必须确认对应宏已开启**,否则封装可能降级为 fallback 实现、空操作或导致编译错误。
| 封装函数 | 门控宏 | 定义位置 | 默认状态 | 开启时行为 | 关闭时行为 |
|---------|--------|---------|---------|-----------|-----------|
| `os_malloc` | `USE_OS_HEAP` | `src/config.h:12` | ✅ 开启 | 内存池分配,自动对齐 | fallback 到标准 `malloc` |
| `os_free` | `USE_OS_HEAP` | `src/config.h:13` | ✅ 开启 | 回收到内存池,自动置 NULL | fallback 到标准 `free` |
| —(示例,按实际工程填写) | — | — | — | — | — |
### 门控宏速查表
| 门控宏 | 默认值 | 影响范围 | 定义文件 |
|--------|--------|---------|---------|
| `USE_OS_HEAP` | 开启 | 内存分配/释放全部封装 | `src/config.h:12` |
| —(示例,按实际工程填写) | — | — | — |
## 第三方库适配状态
| 第三方库 | 版本 | 源码目录 | 适配方式 | 适配状态 | 备注 |
|---------|------|---------|---------|---------|------|
| FatFs | R0.14b | | 配置宏 → | ✅ 已适配 | — |
| mbedTLS | 3.4.0 | | → | ✅ 已适配 | — |
| lwIP | 2.1.2 | — | — | ⚠️ 未使用 | — |
如果第三方库适配状态为"未适配":
该库的内存分配/文件 I/O/断言可能绕过工程封装体系
必须在此标注风险等级和允许的例外范围
后续审查中如果发现该库裸调标准库,视为已知风险,不阻塞但必须追踪
stdlib-wrappers.md 必须包含「条件编译门控」章节和门控宏速查表当项目语言为 C++ / Rust / Go / Python / TS / JS / Java 时执行。目标:记录依赖清单、识别风险依赖、标注关键封装。
Cargo.toml、go.mod、pyproject.toml、package.json、pom.xml 等)unsafe 封装、自定义 allocator、no_std 策略unsafe/cgo 使用、标准库替代封装os.path 封装)dependency-audit.md:包含依赖树 + 关键封装清单 + 风险依赖标注# 项目依赖审计
> 最后审计时间:<日期>
> 项目语言:<语言>
> 本文档由 ddev-arch 依赖审计步骤生成。
## 依赖清单
| 包名 | 版本 | 类型 | 用途 | 风险 |
|------|------|------|------|------|
| ... | ... | direct/dev | ... | — / ⚠️ deprecated / 🔴 CVE-xxxx |
## 标准库替代封装
<!-- 列出项目中对标准库的封装函数,无则标注"本项目未使用标准库替代封装" -->
| 标准库函数/类 | 工程封装 | 所在文件 | 增强特性 |
|-------------|---------|---------|---------|
## 风险依赖
<!-- 列出已废弃、有已知漏洞、或版本过旧的依赖 -->
| 包名 | 当前版本 | 风险类型 | 建议操作 |
|------|---------|---------|---------|
当项目语言为 Generic(无法匹配任何已知语言)时:
dependency-manifest.md,仅包含文件路径清单在写架构文档之后、注入 AGENTS.md 规则之前,必须审计项目的构建变体和环境配置。审计策略依赖 01_架构总览.md 中声明的技术栈,按 lang-audit-matrix.md 分流。
主 agent 读取 01_架构总览.md 的「技术栈」字段,判断:
cfg.h、VERSION_MAJOR、#define MODELNAME 等信号)→ 执行下方「机型宏扫描与注入」(完整流程)grep -rl "VERSION_MAJOR\|FIRMWARE_VERSION" --include="*_cfg.h",列出所有配置头文件#define MODELNAME / //#define MODELNAME 对,或 #define PRINTER_MODEL (N) 枚举值,或 #if defined(MODEL) 分支project=、model=、-DMODEL= 等变量,以及输出产物路径(out/、build/、firmware_*.bin)| 特征 | 类型 | 注入位置 |
|---|---|---|
每个机型有自己的子目录(如 project/pos/i9/),目录下已有或可以创建 CLAUDE.md | 多机型分目录 | 每个机型子目录的 CLAUDE.md |
单个 Makefile/构建脚本,通过不同宏切换机型(如 PRINTER_MODEL 值) | 单构建多机型 | 仓库根目录的 CLAUDE.md 或 AGENTS.md |
| 单一机型,无分支 | 单机型 | 仓库根目录的 CLAUDE.md 或 AGENTS.md |
<机型子目录>/CLAUDE.md如果子目录下已有 CLAUDE.md 或 AGENTS.md,在合适位置追加机型信息;否则新建 CLAUDE.md:
## <机型名>
- **机型宏**:`<MODEL_MACRO>`(定义在 `<路径>/<文件>:<行号>`)
- **编译指令**:`<构建命令>`
- **编译产物**:`<产物路径>`
- **说明**:<机型用途或特性的一句话说明>
### 代码阅读前置条件
**本目录下的所有代码均以 `<MODEL_MACRO>` 宏启用为前提。** 阅读代码时:
1. 先确认机型宏 `#define <MODEL_MACRO>` 处于活跃状态
2. 所有 `#if defined(<MODEL_MACRO>)` 分支生效,其余 `#elif`/`#else` 分支忽略
3. 机型宏变更后,必须同步更新本文件中的机型宏和编译指令
CLAUDE.md在架构规范段落之后追加:
## 机型说明
本仓库通过 <选择机制> 切换机型,当前活跃机型为 `<MODEL_MACRO>`。
| 机型宏 | 说明 | 编译指令 | 编译产物 |
|--------|------|----------|----------|
| `<MACRO_A>` | <说明> | `<命令>` | `<路径>` |
| `<MACRO_B>` | <说明> | `<命令>` | `<路径>` |
### 代码阅读前置条件
1. 阅读代码前,必须先确认当前使用的机型宏
2. 所有代码理解以该机型宏 `#define` 为前提,只阅读该机型宏对应的 `#if`/`#elif` 分支
3. 机型宏通过 `<方式>` 切换(如修改 cfg.h 中的 `#define`、修改 Makefile 变量等)
4. **机型宏变更后,必须同步更新本文件中的"当前活跃机型"和相关编译指令**
CLAUDE.md## 机型说明
- **机型宏**:`<MODEL_MACRO>`
- **编译指令**:`<构建命令>`
- **编译产物**:`<产物路径>`
机型宏信息注入 CLAUDE.md 后,以下规则同时写入,成为 AI 的行为约束:
#if/#elif 分支。CLAUDE.md 中的机型说明、编译指令和产物路径。当项目为非嵌入式 C/C++ 或其他语言时执行。目标:记录构建命令、产物路径和环境配置。
CMakeLists.txt、Makefile、meson.build、BUILDCargo.toml([profile] 段)go.mod + Makefile(如有)pyproject.toml([project.scripts] 段)、setup.py、Makefilepackage.json(scripts 段)、webpack.config.js、vite.config.tspom.xml、build.gradlecmake --build build、cargo build --release、go build ./...)build/、dist/、target/、out/).env、.env.example、config/、environments/ 等,记录关键环境变量和配置切换方式CLAUDE.md:在根目录 CLAUDE.md 中追加简化版构建说明## 构建说明
- **构建系统**:<CMake / Cargo / Go / ...>
- **构建命令**:`<标准构建命令>`
- **编译产物**:`<产物路径>`
- **环境变量**:
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| ... | ... | ... |
如果项目无多环境/多变体,简化为:
## 构建说明
- **构建命令**:`<命令>`
- **编译产物**:`<路径>`
所有架构文档生成后,按以下策略写入架构规范读取和变更门禁规则(按实际模块名和路径调整):
AGENTS.md -> 更新 AGENTS.mdCLAUDE.md -> 更新 CLAUDE.mdCLAUDE.md(不创建 AGENTS.md)以下为写入内容模板:
<!-- 由 ddev-arch 自动生成 -->
## 项目架构规范
本仓库已建立项目级架构规范,位于 `docs/architecture/`。
<!-- 多单元仓库时追加:仓库包含 <N> 个独立代码单元,先读 00_仓库集成架构.md 了解整体关系。 -->
### 修改代码前
<!-- 多单元仓库时:先确认代码所属的代码单元,再读该单元的架构文档 -->
<!-- 单单元仓库时直接引用 01_架构总览.md -->
- 先读架构总览文档的"依赖规则"和"架构变更门禁"
- 读对应模块的约束文件(按实际路径:`modules/0X_<模块名>.md` 或 `<单元>/modules/0X_<模块名>.md`)
- 修改必须优先落在模块约束标注的"允许修改范围"内,不要因为路径相近就跨模块改代码
- 如果实现需要突破模块边界、增加反向依赖、移动文件、改变公共接口或迁移状态所有权,必须先更新架构文档,再改代码
### 架构变更门禁
以下变化视为架构变更,不能只改代码:
- 新增、删除、合并或拆分模块
- 改变模块职责或数据所有权
- 新增跨模块依赖,尤其是反向依赖、循环依赖或下层依赖上层
- 修改公共接口、协议、持久化格式、构建产物或外部可见行为
- 将原本私有的状态、函数或文件提升为跨模块共享
<!-- 项目语言为嵌入式 C/C++ 时,追加机型说明段(由"构建变体与环境审计"步骤写入) -->
<!-- 其他语言时,追加构建说明段(由"构建变体与环境审计"步骤写入) -->
对于需要写入根目录 CLAUDE.md 的机型说明(单构建多机型或单机型),在上述模板之后追加"机型宏扫描与注入"章节中对应类型的模板。
如果目标文件(AGENTS.md 或 CLAUDE.md)已存在,检查是否已有架构规范相关段落,有则更新内容,无则追加在合适位置。同样检查是否已有机型说明段落,有则更新,无则追加。
01_架构总览.md 按以下结构编写:
# 项目架构总览
## 项目简介
- 项目名称:<名称>
- 技术栈:<语言/框架/平台>
- 一句话定位:<这个项目是干什么的>
## 架构原则
<!-- 写 3-7 条会真实约束改代码的原则,不写空泛口号 -->
- <原则1:例如 UI 层不得直接访问持久化层>
- <原则2:例如 设备状态只归 Driver Context 持有>
## 模块全景图
<!-- 展示最终 ASCII 图;图前标注用途 -->
## 模块列表
| 序号 | 模块名 | 约束文件 | 职责 | 允许依赖 |
|------|--------|---------|------|----------|
| 02 | <模块A> | [02_<模块A>.md](modules/02_<模块A>.md) | <职责> | <模块B> |
| 03 | <模块B> | [03_<模块B>.md](modules/03_<模块B>.md) | <职责> | — |
## 依赖规则
<!-- 写清允许方向、禁止方向、是否允许跨层调用、公共接口归属 -->
- 允许:`<模块A>` → `<模块B>`
- 禁止:`<模块B>` → `<模块A>`
- 公共接口必须定义在:`<路径>`
## 架构变更门禁
- 新增跨模块调用前,必须更新对应模块约束文件
- 改变核心状态所有权前,必须更新对应模块约束文件
## 仓库顶层目录结构
- `src/` - 主源码,包含模块 <A>、<B>
- `include/` - 公共头文件
- `tests/` - 测试代码
当仓库包含多个独立代码单元时,在顶层 docs/architecture/ 下产出 00_仓库集成架构.md,按以下结构编写:
# 仓库集成架构
## 仓库简介
- 仓库名称:<名称>
- 代码单元数量:<N> 个
- 仓库类型:<异构多核 / 多服务 / 多固件镜像 / 其他>
## 代码单元清单
| 单元名 | 架构文档路径 | 技术栈 | 构建系统 | 说明 |
|--------|-------------|--------|---------|------|
| <unit_a> | [<unit_a>/01_架构总览.md](<unit_a>/01_架构总览.md) | <C/Linux Kbuild> | `make` | <一句话说明该单元做什么> |
| <unit_b> | [<unit_b>/01_架构总览.md](<unit_b>/01_架构总览.md) | <C/Melis RTOS> | `make` | <一句话说明该单元做什么> |
## 单元间交互关系
<!-- ASCII 图展示各单元的交互关系,标注通信协议、数据流向 -->
### 通信方式
| 从(单元) | 到(单元) | 方式 | 协议/接口 | 说明 |
|-----------|-----------|------|----------|------|
| <unit_a> | <unit_b> | IPC / 网络 / 共享内存 / 文件 | <协议名> | <说明> |
### 数据流
<!-- 描述关键数据在各单元间的流动路径 -->
## 联合构建与部署
- 构建顺序:<先构建 A,再构建 B>
- 产物聚合方式:<打包脚本 / 烧录工具>
- 联合产物路径:`<路径>`
## 跨单元约束
<!-- 某单元的变更可能影响另一单元的场景 -->
- <unit_a> 的 <接口/协议> 变更会影响 <unit_b> 的 <功能>
所有模块统一使用单文件模板,只包含架构约束内容。
# <模块名>
## 模块职责
<一句话说清这个模块负责什么>
## 职责边界
- 负责:<本模块必须承担的职责>
- 不负责:<容易误放进本模块、但不属于本模块的职责>
## 对外接口
- 头文件/导出入口:`src/<路径>/xxx.h`
- 公开函数/类/命令:`<symbol>`
- 外部可见行为:<协议/文件/接口/构建产物>
## 仓库目录映射
- 主目录:`src/<实际路径>/`
- 核心文件:
- `src/<路径>/xxx.c` - <文件职责>
- `src/<路径>/xxx.h` - <头文件职责>
- 测试目录:`tests/<路径>/`
## 允许依赖
- 可依赖:`<模块B>`,原因:<为什么允许>
- 被依赖:`<模块C>` 会调用本模块的 `<接口>`
- 禁止依赖:`<模块D>`,原因:<会造成反向依赖>
## 状态与数据所有权
- 本模块拥有:<状态/结构体/配置/缓存/设备句柄>
- 本模块只读:<来自其他模块的数据>
## 允许修改范围
- 可以改:<模块内实现文件/私有函数/局部数据结构>
- 谨慎改:<公共接口/共享结构体/配置格式>
- 必须先更新架构文档再改:<职责迁移/依赖新增>
## 修改前检查清单
- 本次改动是否仍在"允许修改范围"内
- 是否新增了模块依赖或改变依赖方向
- 是否改变了公共接口、外部行为或状态所有权
若模块内有子模块边界,子模块独立成文,使用同上模板,编号用两级序号(如 02-01_子模块名.md)。
在任何 ASCII 图动笔之前,必须执行 Skill("ddev-diagram") 加载绘制规范。加载完成前禁止写任何 ASCII 图到 .md。
加载后严格遵守:
优先画:
初始化完成后,逐项检查:
| 检查项 | 标准 |
|---|---|
| 模块覆盖 | 所有可识别模块都有对应文档,无遗漏 |
| 职责边界 | 每个模块约束文件都写清"负责"和"不负责" |
| 依赖约束 | 总览和模块约束文件都写清允许依赖与禁止依赖 |
| 状态所有权 | 关键状态、配置、缓存、句柄都有明确归属 |
| 修改门禁 | 每个模块约束文件都有"允许修改范围"和"修改前检查清单" |
| 路径可定位 | 每个模块的"仓库目录映射"指向真实存在的目录/文件 |
| 图完整 | 架构总览有模块依赖图 |
| 交叉引用正确 | 模块间依赖关系在文档中有标注且路径正确 |
| 一致命名 | 模块名、文档名、图中标签三者一致 |
| 配置文件注入 | 仓库根 AGENTS.md 或 CLAUDE.md(按写入策略)含架构规范索引和变更门禁 |
| 语言声明 | 各单元 01_架构总览.md(单单元或多单元)的技术栈字段已填写实际检测到的语言 |
| 构建信息 | 构建命令、产物路径已写入对应 CLAUDE.md(按语言策略) |
| 检查项 | 标准 |
|---|---|
| 单元清单 | 00_仓库集成架构.md 已列出全部独立代码单元,无遗漏 |
| 交互关系 | 仓库集成架构已描述单元间通信方式、数据流和联合构建部署 |
| 跨单元约束 | 仓库集成架构已标注跨单元变更影响的约束规则 |
| 单元间路径 | 所有交叉引用路径正确指向各单元子目录下的文档 |
| 检查项 | 标准 |
|---|---|
| 标准库审计 | stdlib-wrappers.md 已生成,至少 2 轮审计,覆盖全部函数类别,无遗漏 |
| 标准库审计质量 | 所有替代封装签名准确,所在文件路径和行号正确 |
| 条件编译门控 | 所有替代封装的条件编译门控宏已审计,stdlib-wrappers.md 含「条件编译门控」章节和门控宏速查表 |
| 第三方库适配 | 所有引入的第三方库均已在审计表中记录适配状态;未适配的已标注风险 |
| 检查项 | 标准 |
|---|---|
| 机型宏注入 | 各机型子目录 CLAUDE.md 或根 CLAUDE.md 含机型宏、编译指令、产物路径和代码阅读前置条件 |
| 机型宏完整性 | 所有 cfg.h 中定义的机型宏均已被扫描和记录,无遗漏 |
| 检查项 | 标准 |
|---|---|
| 依赖审计 | dependency-audit.md 已生成,依赖清单已解析,直接依赖无遗漏 |
| 依赖完整性 | 包管理器配置文件已解析,关键依赖和风险依赖已标注 |
架构规范不是一次性的。以下情况必须更新:
AGENTS.md 或 CLAUDE.md(按写入策略判断目标文件)00_仓库集成架构.md 的单元清单和交互关系,新增/删除对应单元子目录下的全套架构文档(仅多单元仓库)00_仓库集成架构.md 的"单元间交互关系"和"跨单元约束"(仅多单元仓库)stdlib-wrappers.md 的对应条目(仅 C/C++ 项目)CLAUDE.md 中的机型说明、编译指令和产物路径(仅嵌入式 C/C++ 项目)CLAUDE.md 中追加新机型的机型宏、编译指令和产物路径说明(仅嵌入式 C/C++ 项目)dependency-audit.md 的对应条目(非 C 项目)CLAUDE.md 中的构建说明(所有项目)架构规范初始化完成后,不必自动进入实现工作流。仅在用户后续发起具体代码改动时,才按需要触发 ddev-spec,并让该实现文档显式遵守 docs/architecture/ 中的项目级约束。
SOC 직업 분류 기준