@@ -32,6 +32,16 @@ docs/design/ # Design docs (SAS architecture, subsystem designs, phase p
3232- ** Design overview** → ` docs/design/00-概述.md ` (master plan — written pre-implementation, may be outdated; code is source of truth)
3333- ** Phase details** → ` docs/design/P0-P7 ` (implementation plans, all phases complete — may diverge from actual code)
3434
35+ ## DOCUMENT ROUTING
36+
37+ - 根 ` README.md ` 只保留面向普通读者的项目介绍、快速开始、构建/测试入口、项目结构和贡献入口。
38+ - 目录级规则、协作约定、修改 checklist、验证入口、局部职责边界和不要假设的事项,统一写入最近的 ` AGENTS.md ` 。
39+ - ` docs/AGENTS.md ` 是文档目录索引和文档类型路由;` docs/conventions.md ` 记录长期工程约定。
40+ - ` docs/adr/AGENTS.md ` 、` docs/rfcs/AGENTS.md ` 、` docs/specs/AGENTS.md ` 、` docs/plans/AGENTS.md ` 和 ` docs/templates/AGENTS.md ` 分别管理对应文档类型。
41+ - ` tests/AGENTS.md ` 、` xtask/AGENTS.md ` 和 crate-local ` AGENTS.md ` 是各目录的局部运行手册。
42+ - 新增目录级 README 默认不允许。确实需要新增时,必须确认它是面向仓库外普通读者的入口,并说明为什么不能放入最近的 ` AGENTS.md ` 、设计文档、ADR/RFC、Spec 或 Plan。
43+ - README 与 ` AGENTS.md ` 冲突时,以 ` AGENTS.md ` 为准,并在同一变更中修正冲突。
44+
3545## CODE MAP
3646| Module | Purpose | Key Files |
3747| --------| ---------| -----------|
@@ -76,7 +86,8 @@ docs/design/ # Design docs (SAS architecture, subsystem designs, phase p
7686### Environment
7787- ** 容器优先** :凡是能在 Dev Container / Docker 中完成的构建、检查、` pre-commit ` 、固件构建、QEMU 运行和系统测试,都应在容器内执行,不要为本项目修改宿主机工具链。
7888- ** 宿主机边界** :宿主机只负责 Docker 或兼容容器运行时、Git、编辑器/AI agent 和已有 Dev Container 入口工具;不要在宿主机安装 Rust nightly、交叉编译器、QEMU、固件构建依赖或其他项目开发依赖来绕过容器。
79- - ** 命令入口** :在宿主机发起命令时优先使用 ` devcontainer exec --workspace-folder . <command> ` ,或使用当前已构建的项目开发镜像运行等价命令。
89+ - ** 命令入口** :宿主机先按 ` .devcontainer/AGENTS.md ` 设置 ` DEVCONTAINER_NAME=simplekernel-devcontainer-{username}-{branch} ` ,再通过 Dev Container CLI 或手动 fallback 启动常驻容器。项目命令优先使用 ` docker exec -w /workspace "$DEVCONTAINER_NAME" <command> ` ;` devcontainer exec --workspace-folder . <command> ` 仅作为临时交互入口。
90+ - ** CI 工具链一致性** :CI、Dev Container 和本地容器应使用 ` .devcontainer/Dockerfile ` 声明的工具链。不要在 workflow 中临时安装 Rust、cargo 子命令、QEMU 或交叉工具链来补齐缺失环境;发现镜像缺工具时,先修复 Dockerfile 或重建开发镜像。
8091- ** 例外** :只有正在修复容器自身配置、文档/Git 等入口操作,或任务明确要求无需项目工具链的本地操作时,才考虑宿主机执行;说明原因并保持宿主/容器步骤边界清晰。
8192
8293### Git
@@ -91,6 +102,7 @@ docs/design/ # Design docs (SAS architecture, subsystem designs, phase p
91102- ** 机器可读格式** :` .json ` 文件保持严格 JSON,不写注释、不留尾随逗号;需要说明时写在相邻文档。
92103- ** 文件规模** :手写源码超过 300 行时 review 应检查职责边界;原则上不超过 500 行,超过时 PR 需说明暂不拆分理由或拆分计划。
93104- ** 运行时配置** :FDT、MMIO、timer 频率、core count、QEMU 参数、固件路径和硬件拓扑等运行时/platform 输入必须显式校验;缺失或非法输入应 fail fast,不用 ` Default ` 、` unwrap_or(...) ` 等隐式 fallback 掩盖。
105+ - ** 目录级文档** :可由局部 ` AGENTS.md ` 承载的目录说明、模块协作规则、工具运行手册和测试目录索引,不再新增 README。
94106
95107### Rust
96108- ** Language** : Rust nightly, ` #![no_std] ` , ` #![no_main] ` , edition 2024
@@ -133,31 +145,44 @@ docs/design/ # Design docs (SAS architecture, subsystem designs, phase p
133145- Cargo workspace: root package (kernel) + ` xtask ` (build tool)
134146
135147## COMMANDS
136- 宿主机侧执行项目命令时使用 ` devcontainer exec --workspace-folder . <command> ` 。
148+ 宿主机侧先按 SimpleKernel 命名规则设置常驻容器名,再启动 Dev Container:
149+
150+ ``` bash
151+ DEVCONTAINER_USER=" $( id -un | sed -E ' s/[^[:alnum:]_.-]+/-/g; s/^-+//; s/-+$//' ) "
152+ DEVCONTAINER_BRANCH=" $( git branch --show-current | sed -E ' s/[^[:alnum:]_.-]+/-/g; s/^-+//; s/-+$//' ) "
153+ if [ -z " $DEVCONTAINER_BRANCH " ]; then
154+ echo " detached HEAD is not allowed for the devcontainer name" >&2
155+ exit 1
156+ fi
157+ export DEVCONTAINER_NAME=" simplekernel-devcontainer-${DEVCONTAINER_USER} -${DEVCONTAINER_BRANCH} "
158+ devcontainer up --workspace-folder .
159+ ```
160+
161+ 后续项目命令通过同一个常驻容器执行:
137162
138163``` bash
139164# Build kernel
140- devcontainer exec -- workspace-folder . cargo xtask build --arch riscv64
141- devcontainer exec -- workspace-folder . cargo xtask build --arch aarch64
165+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask build --arch riscv64
166+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask build --arch aarch64
142167
143168# Run in QEMU (via xtask — handles FIT image + TFTP + QEMU)
144- devcontainer exec -- workspace-folder . cargo xtask run --arch riscv64 --timeout 30
145- devcontainer exec -- workspace-folder . cargo xtask run --arch aarch64 --timeout 30
169+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask run --arch riscv64 --timeout 30
170+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask run --arch aarch64 --timeout 30
146171
147172# Debug (GDB on localhost:1234)
148- devcontainer exec -- workspace-folder . cargo xtask debug --arch riscv64
173+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask debug --arch riscv64
149174
150175# System tests in QEMU
151- devcontainer exec -- workspace-folder . cargo xtask test --arch riscv64 --timeout 30
152- devcontainer exec -- workspace-folder . cargo xtask test --arch riscv64 --name panic-test --timeout 30
153- devcontainer exec -- workspace-folder . cargo xtask test --list
176+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask test --arch riscv64 --timeout 30
177+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask test --arch riscv64 --name panic-test --timeout 30
178+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask test --list
154179
155180# Format + lint check
156- devcontainer exec -- workspace-folder . cargo fmt --check
157- devcontainer exec -- workspace-folder . cargo clippy -- -D warnings
181+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo fmt --check
182+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo clippy -- -D warnings
158183
159184# Documentation
160- devcontainer exec -- workspace-folder . cargo doc --no-deps
185+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo doc --no-deps
161186```
162187
163188** QEMU 超时** :在 QEMU 中运行内核或测试时经常出现卡死或无限循环打印日志的情况。所有通过 Bash 工具执行的 QEMU 相关命令(` cargo xtask run ` 、` cargo xtask test ` )** 必须设置 30 秒超时** (` timeout: 30000 ` )。超时后应 ` pkill -f qemu-system ` 清理残留进程。
@@ -171,9 +196,9 @@ devcontainer exec --workspace-folder . cargo doc --no-deps
171196每个测试是独立的 ` #![no_std] ` 裸机二进制,启动独立 QEMU 实例,拥有干净的内核环境。
172197
173198``` bash
174- devcontainer exec -- workspace-folder . cargo xtask test --arch riscv64 --timeout 30
175- devcontainer exec -- workspace-folder . cargo xtask test --arch riscv64 --name frame-test/alloc --timeout 30
176- devcontainer exec -- workspace-folder . cargo xtask test --list
199+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask test --arch riscv64 --timeout 30
200+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask test --arch riscv64 --name frame-test/alloc --timeout 30
201+ docker exec -w / workspace " $DEVCONTAINER_NAME " cargo xtask test --list
177202```
178203
179204测试基础设施位于 ` tests/test_harness/ ` ,核心是 ` test_main! ` 宏:
@@ -250,6 +275,7 @@ test_harness::test_main!(simplekernel::boot::InitLevel::Full, run_test, should_p
250275- ** Session Prompt** (输出格式参考): ` docs/audit/review-session-prompt.md `
251276- ** ADR 目录** (架构决策记录): ` docs/adr/ `
252277- ** ADR 模板** : ` docs/templates/adr-template.md `
278+ - ** 文档目录入口** : ` docs/AGENTS.md `
253279
254280### 审计工作流
255281
0 commit comments