diff --git a/docs/proposals/2026-10-14-versioned-dependency-review-remediation.md b/docs/proposals/2026-10-14-versioned-dependency-review-remediation.md index 327ba8f..87f7ebb 100644 --- a/docs/proposals/2026-10-14-versioned-dependency-review-remediation.md +++ b/docs/proposals/2026-10-14-versioned-dependency-review-remediation.md @@ -18,7 +18,7 @@ 三个必需作业 `test`、`test-pg`、`svc-realcombo` 的受信父步骤继续按白名单获取固定来源,只在获取步骤环境中读取 checkout token;父步骤校验镜像、工作区卷身份、固定 SHA 与无凭据的本地 mirror 配置。受信父步骤经 Docker socket 启动一个子容器运行该作业**全部候选源码命令**,包括 Dev `make test/build`、RDM 固定 pin 构建、Backend PG/Redis、双进程 HTTP 与真实生命周期。父容器不得在子容器启动前运行候选 Makefile、Go/npm 脚本或测试。 -子容器只挂载本次作业的工作区卷,**不挂** Docker socket、`/var/run/act`、父容器 HOME 或凭据文件;使用只读根文件系统、丢弃 Linux capabilities、`no-new-privileges`、独立 PID 及临时 `/tmp`,仅工作区与明确缓存路径可写。受信准备在子容器内安装/核对固定 Go 1.27.1、Node 22、Python 与本作业所需系统工具后再执行候选命令。PG/Redis 作业可共享父作业的网络命名空间以访问本机测试服务,但不能共享其文件系统或 Docker socket。子容器创建失败、工具版本不符、挂载/负例检查失败或任何候选命令失败时,原作业失败;三个必需 job/context 名称保持不变,禁止跳过作业换绿。 +受信父步骤先以**空构建上下文、无 token/build secret** 的固定安装配方构建并记录本作业的 executor 镜像;镜像内含/核对 Go 1.27.1、Node 22、Python、`rg`、`sqlite3`、`ss` 及 PG/Redis 作业所需客户端,构建阶段不得执行候选仓代码。随后启动的候选子容器只挂载本次作业的工作区卷,**不挂** Docker socket、`/var/run/act`、父容器 HOME 或凭据文件;其根文件系统只读,丢弃 Linux capabilities,启用 `no-new-privileges`、独立 PID 与临时 `/tmp`,仅工作区和明确缓存路径可写。工具安装在镜像构建阶段完成,不能在只读候选容器中临时安装或以缺工具为由跳过测试。PG/Redis 作业可共享父作业的网络命名空间以访问本机测试服务,但不能共享其文件系统或 Docker socket。镜像构建/身份检查、子容器创建、工具版本、挂载/负例检查或任何候选命令失败时,原作业失败;三个必需 job/context 名称保持不变,禁止跳过作业换绿。 已做的**一次性机制探针**:本机 Bubblewrap 可隐藏 SSH 文件;当前 `gitea/runner-images:ubuntu-latest` 容器内安装 Bubblewrap 后因命名空间权限被拒;受信父容器可启动共享工作区卷与网络、无 Docker socket、cap-drop、只读根文件系统的子容器,SELF `/tmp/dependency-ci-child-sandbox-probe-20261014-01a1345f.json`。探针仅证明容器机制,不证明完整 Go/npm/PG/浏览器工作流或平台工作流来源;完整 CI 必须在新 HEAD 重跑。共享 runner 配置和分支保护不在本设计中直接修改。