Skip to content

Commit 9ea2da7

Browse files
MRNIUcodex
andcommitted
docs(repo): 统一 AGENTS 入口和开发容器命名
将目录级 README 迁移为就近 AGENTS.md,并在根 AGENTS、docs/AGENTS、crates/AGENTS 和模板中明确 AGENTS-first 的文档路由规则。 收敛 Dev Container 规则到 simplekernel-devcontainer 命名体系,补充 .devcontainer/AGENTS.md,统一本地镜像、常驻容器和 GHCR 镜像名称,并让 README、CONTRIBUTING、docs/docker 和 CI workflow 使用同一套入口。 移除 CI 中临时安装 rustup/cargo-deny 的兜底路径,要求开发镜像提供工具链,并让 dev-image workflow 覆盖整个 .devcontainer 配置面。 Verification: - jq empty .devcontainer/devcontainer.json - ruby YAML parse for dev-image.yml, workflow.yml, docs.yml, setup action - git diff --cached --check - staged sensitive-text scan Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Niu Zhihong <zhihong@nzhnb.com>
1 parent 203cda9 commit 9ea2da7

56 files changed

Lines changed: 356 additions & 238 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.devcontainer/AGENTS.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<!-- Copyright The SimpleKernel Contributors -->
2+
3+
# Dev Container
4+
5+
本目录定义 SimpleKernel 的开发、CI 和 QEMU 系统测试容器环境。宿主机只负责 Git、Docker
6+
或兼容容器运行时、编辑器 / AI agent,以及 Dev Container CLI;Rust nightly、交叉编译器、
7+
QEMU、固件构建依赖、pre-commit、Mermaid 和 GitHub CLI 都在容器内使用。
8+
9+
## 命名规则
10+
11+
本仓库使用自己的容器和镜像命名,不继承其他项目名称。
12+
13+
| 用途 | 名称 |
14+
|------|------|
15+
| Dev Container 显示名 | `simplekernel-devcontainer` |
16+
| 本地开发镜像 | `simplekernel-devcontainer:latest` |
17+
| 常驻 Dev Container 容器名 | `simplekernel-devcontainer-{username}-{branch}` |
18+
| CI / GHCR Dev Container 镜像 | `ghcr.io/simple-xx/simplekernel-devcontainer:{latest,sha}` |
19+
| 项目运行时容器 | 无;内核只在 Dev Container 内启动的 QEMU 中运行 |
20+
21+
`username``branch` 必须归一化为 Docker 容器名允许的字符。`branch` 来自当前具名
22+
Git 分支;detached HEAD 状态不得启动常驻 Dev Container。不要依赖 Docker 自动生成的
23+
随机名称作为常规入口。
24+
25+
## 启动入口
26+
27+
使用编辑器 Dev Container 或 CLI 前,先在宿主机 shell 中设置本仓库命名规则要求的
28+
`DEVCONTAINER_NAME`
29+
30+
```bash
31+
DEVCONTAINER_USER="$(id -un | sed -E 's/[^[:alnum:]_.-]+/-/g; s/^-+//; s/-+$//')"
32+
DEVCONTAINER_BRANCH="$(git branch --show-current | sed -E 's/[^[:alnum:]_.-]+/-/g; s/^-+//; s/-+$//')"
33+
if [ -z "$DEVCONTAINER_BRANCH" ]; then
34+
echo "detached HEAD is not allowed for the devcontainer name" >&2
35+
exit 1
36+
fi
37+
export DEVCONTAINER_NAME="simplekernel-devcontainer-${DEVCONTAINER_USER}-${DEVCONTAINER_BRANCH}"
38+
```
39+
40+
标准入口:
41+
42+
```bash
43+
devcontainer up --workspace-folder .
44+
docker exec -w /workspace "$DEVCONTAINER_NAME" cargo xtask build --arch riscv64
45+
```
46+
47+
`devcontainer exec --workspace-folder . <command>` 也可用于临时交互,但文档化验证和 PR
48+
证据优先写成 `docker exec -w /workspace "$DEVCONTAINER_NAME" <command>`,这样容器名、
49+
工作目录和复用边界都明确。
50+
51+
## 手动 Docker fallback
52+
53+
没有 Dev Container CLI,或正在排查 Dev Container CLI 本身时,才手动创建常驻容器。
54+
`docker run` 只用于创建后台容器;项目命令仍通过 `docker exec` 执行。
55+
56+
```bash
57+
docker build --pull=false -f .devcontainer/Dockerfile -t simplekernel-devcontainer:latest .devcontainer
58+
docker inspect "$DEVCONTAINER_NAME" >/dev/null 2>&1 || docker run -d \
59+
--name "$DEVCONTAINER_NAME" \
60+
--mount "type=bind,src=$(pwd),dst=/workspace" \
61+
-w /workspace \
62+
simplekernel-devcontainer:latest sleep infinity
63+
if [ "$(docker inspect -f '{{.State.Running}}' "$DEVCONTAINER_NAME")" != "true" ]; then
64+
docker start "$DEVCONTAINER_NAME" >/dev/null
65+
fi
66+
docker exec -w /workspace "$DEVCONTAINER_NAME" git config --global --add safe.directory /workspace
67+
```
68+
69+
重建同名容器前,先确认旧容器没有需要保留的状态。需要保留的内核、固件、文档或测试产物
70+
必须写回当前仓库的 `target/``docs-out/` 或文档声明的产物目录。
71+
72+
## 产物路径
73+
74+
| 产物 | 宿主机路径 | 容器内路径 | 说明 |
75+
|------|------------|------------|------|
76+
| Cargo 产物 | `target/` | `/workspace/target/` | 内核 ELF、调试文件、启动目录和固件 |
77+
| 固件产物 | `target/firmware/<arch>/` | `/workspace/target/firmware/<arch>/` | OpenSBI、U-Boot、OP-TEE、ATF 输出 |
78+
| 启动产物 | `target/<target-triple>/<profile>/boot/` | `/workspace/target/<target-triple>/<profile>/boot/` | `boot.fit``boot.scr.uimg``rootfs.img` |
79+
| 文档发布产物 | `docs-out/` | `/workspace/docs-out/` | `docs.yml` 生成并上传的 Pages artifact |
80+
| 临时文件 | `.tmp/` | `/workspace/.tmp/` | 可清理暂存 |
81+
82+
不要把唯一产物留在容器临时文件系统、匿名 volume、`/tmp``/home/dev`、上级目录或项目外缓存目录。

.devcontainer/Dockerfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,5 +135,14 @@ RUN cargo install --locked cargo-deny && \
135135
cargo install --locked mdbook && \
136136
chmod -R a+w "$CARGO_HOME"
137137

138+
# Dev Container 交互用户。构建阶段仍使用 root 安装工具,运行阶段使用 dev。
139+
RUN useradd -m -s /usr/bin/zsh dev && \
140+
echo 'dev ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/dev && \
141+
chmod 0440 /etc/sudoers.d/dev && \
142+
mkdir -p /workspace && \
143+
chown dev:dev /workspace
144+
138145
# 默认 shell 设为 zsh
139146
ENV SHELL=/usr/bin/zsh
147+
148+
WORKDIR /workspace

.devcontainer/devcontainer.json

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
{
2-
"name": "SimpleKernel",
2+
"name": "simplekernel-devcontainer",
33
"build": {
4-
"dockerfile": "Dockerfile"
4+
"dockerfile": "Dockerfile",
5+
"options": [
6+
"--tag",
7+
"simplekernel-devcontainer:latest"
8+
]
59
},
6-
"postCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder} && git submodule update --init --recursive --depth 1 && rustup show",
10+
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
11+
"workspaceFolder": "/workspace",
12+
"runArgs": [
13+
"--name",
14+
"${localEnv:DEVCONTAINER_NAME}"
15+
],
16+
"remoteUser": "dev",
17+
"updateRemoteUserUID": true,
18+
"containerEnv": {
19+
"CARGO_HOME": "/usr/local/cargo",
20+
"RUSTUP_HOME": "/usr/local/rustup",
21+
"CARGO_TARGET_DIR": "${containerWorkspaceFolder}/target",
22+
"TMPDIR": "${containerWorkspaceFolder}/.tmp"
23+
},
24+
"postCreateCommand": "mkdir -p ${containerWorkspaceFolder}/target ${containerWorkspaceFolder}/.tmp && git config --global --add safe.directory ${containerWorkspaceFolder} && git submodule update --init --recursive --depth 1 && pre-commit install --install-hooks && rustup show && cargo fetch --locked && cargo --version && cargo clippy --version && rustfmt --version && qemu-system-riscv64 --version && qemu-system-aarch64 --version && mkimage -V && gh --version && pre-commit --version && mmdc --version",
725
"customizations": {
826
"vscode": {
927
"settings": {

.github/actions/setup/action.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ runs:
2525
git config --global --add safe.directory '*'
2626
git submodule update --init --recursive --depth 1
2727
28-
# TODO: 合回 main 后触发 dev-image 重建,届时删除 rustup fallback 安装逻辑
2928
- name: Setup Rust toolchain
3029
shell: bash
3130
run: |
@@ -34,10 +33,9 @@ runs:
3433
export CARGO_HOME="${CARGO_HOME:-/usr/local/cargo}"
3534
export RUSTUP_HOME="${RUSTUP_HOME:-/usr/local/rustup}"
3635
export PATH="$CARGO_HOME/bin:$PATH"
37-
if ! command -v rustup &>/dev/null; then
38-
apt-get update && apt-get install -y --no-install-recommends curl ca-certificates
39-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
40-
sh -s -- -y --default-toolchain none --no-modify-path
36+
if ! command -v rustup >/dev/null 2>&1; then
37+
echo "::error title=Missing Rust toolchain::rustup is not available in the SimpleKernel dev image. Rebuild the image from .devcontainer/Dockerfile instead of installing Rust in CI."
38+
exit 1
4139
fi
4240
{
4341
echo "CARGO_HOME=$CARGO_HOME"
@@ -50,8 +48,8 @@ runs:
5048
uses: actions/cache@v4
5149
with:
5250
path: |
53-
~/.cargo/registry
54-
~/.cargo/git
51+
/usr/local/cargo/registry
52+
/usr/local/cargo/git
5553
key: ${{ inputs.cache-key-prefix }}-${{ runner.arch }}-${{ hashFiles('Cargo.lock', 'rust-toolchain.toml') }}
5654
restore-keys: |
5755
${{ inputs.cache-key-prefix }}-${{ runner.arch }}-

.github/workflows/dev-image.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ on:
66
push:
77
branches: [main]
88
paths:
9-
- '.devcontainer/Dockerfile'
9+
- '.devcontainer/**'
1010
- '.github/workflows/dev-image.yml'
1111
workflow_dispatch:
1212

1313
env:
14-
IMAGE: ghcr.io/simple-xx/simplekernel-dev
14+
IMAGE: ghcr.io/simple-xx/simplekernel-devcontainer
1515

1616
jobs:
1717
build-and-push:

.github/workflows/docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
build-docs:
2222
runs-on: ubuntu-24.04-arm
2323
container:
24-
image: ghcr.io/simple-xx/simplekernel-dev:latest
24+
image: ghcr.io/simple-xx/simplekernel-devcontainer:latest
2525
steps:
2626
- uses: actions/checkout@v4
2727
with:

.github/workflows/workflow.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
contents: read
2525
packages: read
2626
container:
27-
image: ghcr.io/simple-xx/simplekernel-dev:latest
27+
image: ghcr.io/simple-xx/simplekernel-devcontainer:latest
2828
steps:
2929
- uses: actions/checkout@v4
3030
with:
@@ -68,9 +68,7 @@ jobs:
6868
run: cargo test -p memory_types -p config -p page_table_entry
6969

7070
- name: Dependency audit
71-
run: |
72-
cargo install --locked cargo-deny || true
73-
cargo deny check
71+
run: cargo deny check
7472

7573
build:
7674
needs: check
@@ -79,7 +77,7 @@ jobs:
7977
contents: read
8078
packages: read
8179
container:
82-
image: ghcr.io/simple-xx/simplekernel-dev:latest
80+
image: ghcr.io/simple-xx/simplekernel-devcontainer:latest
8381
strategy:
8482
fail-fast: false
8583
matrix:

AGENTS.md

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

CONTRIBUTING.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,24 @@
99
开发环境默认使用 Dev Container。宿主机只保留 Docker 或兼容容器运行时、Git、编辑器/AI agent 和已有 Dev Container 入口工具;不要为了本项目在宿主机安装 Rust nightly、交叉编译器、QEMU、固件构建依赖或其他项目开发依赖。
1010

1111
```bash
12+
DEVCONTAINER_USER="$(id -un | sed -E 's/[^[:alnum:]_.-]+/-/g; s/^-+//; s/-+$//')"
13+
DEVCONTAINER_BRANCH="$(git branch --show-current | sed -E 's/[^[:alnum:]_.-]+/-/g; s/^-+//; s/-+$//')"
14+
if [ -z "$DEVCONTAINER_BRANCH" ]; then
15+
echo "detached HEAD is not allowed for the devcontainer name" >&2
16+
exit 1
17+
fi
18+
export DEVCONTAINER_NAME="simplekernel-devcontainer-${DEVCONTAINER_USER}-${DEVCONTAINER_BRANCH}"
1219
devcontainer up --workspace-folder .
13-
devcontainer exec --workspace-folder . bash
20+
docker exec -w /workspace "$DEVCONTAINER_NAME" bash
1421
```
1522

1623
宿主机侧常用命令:
1724

1825
```bash
19-
devcontainer exec --workspace-folder . cargo xtask build --arch riscv64
20-
devcontainer exec --workspace-folder . cargo xtask test --arch riscv64
21-
devcontainer exec --workspace-folder . cargo fmt --check
22-
devcontainer exec --workspace-folder . cargo clippy -- -D warnings
26+
docker exec -w /workspace "$DEVCONTAINER_NAME" cargo xtask build --arch riscv64
27+
docker exec -w /workspace "$DEVCONTAINER_NAME" cargo xtask test --arch riscv64
28+
docker exec -w /workspace "$DEVCONTAINER_NAME" cargo fmt --check
29+
docker exec -w /workspace "$DEVCONTAINER_NAME" cargo clippy -- -D warnings
2330
```
2431

2532
通过 Bash 工具运行 QEMU 相关命令时必须设置 30 秒超时;超时后清理残留 QEMU 进程。
@@ -37,11 +44,11 @@ devcontainer exec --workspace-folder . cargo clippy -- -D warnings
3744

3845
| 改动 | 必须同步检查 |
3946
|------|--------------|
40-
| 启动流程、命令、测试入口变化 | `README.md``docs/README.md`、相关设计或计划文档 |
47+
| 启动流程、命令、测试入口变化 | `README.md``docs/AGENTS.md`、相关局部 `AGENTS.md`、相关设计或计划文档 |
4148
| 架构不变量变化 | `docs/adr/`、SAD/SDD、`AGENTS.md` |
4249
| 项目长期约定、Copyright、注释、文件规模、运行时配置规则变化 | `AGENTS.md``docs/conventions.md` |
4350
| Git/commit/DCO/提交模板变化 | `AGENTS.md``README.md`、本文件、`.gitmessage`、PR 模板 |
44-
| 公开 trait、错误码、类型或模块边界变化 | 代码文档注释、SDD、模块 README |
51+
| 公开 trait、错误码、类型或模块边界变化 | 代码文档注释、SDD、最近的局部 `AGENTS.md` |
4552
| 固件、第三方源码或外部交付物变化 | `3rd/` 记录、`README.md`、相关 ADR/设计/审计文档 |
4653
| QEMU、固件链路或目标平台假设变化 | `README.md`、相关设计文档、相关测试说明 |
4754

0 commit comments

Comments
 (0)