From 4baf2023f09b90c2c6a977ceb06275b40cd4ee34 Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 20 Oct 2026 02:49:24 +0000 Subject: [PATCH] task: define goal and scope for docker test image card Why: user requested a Docker test image (system env + SSH + headless browser) for isolated container-based testing; card records the authorized boundary, requirements R1-R4 and the unit plan before dispatching the bounded implementation unit. Evidence: triage NEW receipt /tmp/docker-image-triage.json; startup precheck READY at R0=162c5a0160 (SELF, in-card). Impact: .task metadata only; no code behavior change. Refs: policy/delivery.md; AGENT-EXECUTION.md --- .task/feature-docker-test-image.md | 39 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/.task/feature-docker-test-image.md b/.task/feature-docker-test-image.md index d81b5d93..0f28c2b6 100644 --- a/.task/feature-docker-test-image.md +++ b/.task/feature-docker-test-image.md @@ -9,7 +9,7 @@ - 分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false - 需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=614aefe70dd97a672de9522beee5fece3da4719ee310d1c7cfc4d13fea081ac2;triage_receipt=/tmp/docker-image-triage.json;receipt_sha256=bc1c9cab074d853273d064a98599c6ef2519aa4022f2272bcc0830d3d97d01c0 -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> +- 授权与交付终点:用户直接请求(2026-10-20):为本系统准备 Docker 测试镜像(含系统环境、SSH、无头浏览器),后续测试用该镜像启动容器做隔离测试。终点=镜像定义与构建/验证入口合入 main:docker/ 定义文件 + Makefile image-build/image-verify + docker/README.md,镜像本机构建通过、容器内环境自检通过。未授权事项:不改动 modules/**、CI/治理脚本、部署形态(本仓交付仍非容器化);不发布镜像到外部 registry;不把本镜像用于生产部署。 - 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进) - 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md) - 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入) @@ -19,15 +19,19 @@ ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +目标:一份可重复构建的测试环境镜像定义(docker/),镜像内提供与本机开发一致的工具链(Go 1.27.1、Node 26.10.0、Python 3.14、git、make)、SSH 服务(仅公钥、专用 dev 用户)与无头浏览器(Playwright 1.64.0 chromium,系统级缓存 /opt/ms-playwright),供后续以 `docker run` 启动一次性容器、挂载仓库做隔离测试。 + +入口/影响:新增 docker/(Dockerfile、entrypoint.sh、verify-env.sh、README.md);根 Makefile 新增 image-build / image-verify 两个目标。不嵌入仓库代码与任何密钥;不改变 `make test`/CI 行为;不引入部署容器化。 + +非目标:镜像注册表发布、CI 内构建镜像、多架构构建、给镜像装业务代码/子模块、Windows/macOS 镜像。 ## Agent 实施收据 路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。 -| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 | -|---|---|---|---|---|---|---|---|---|---|---| -| 待定义 | — | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | — | +| docker-test-image | docker/**、Makefile | AGENT-EXECUTION.md(agent-execution/v1) | implementation | cursor→antigravity→pi(紧急 codex) | 待运行 | 待运行 | NOT_RUN | NOT_RUN | NOT_RUN | /tmp/docker-image-unit1-receipt.json | + +- 配置摘要来源:AGENT-EXECUTION.md `agent-execution` 块(schema v1;implementation 候选 cursor/agy/pi,每候选至多 3 次,紧急 codex 一次,fallback_to_host=never);运行收据由 scripts/agent-exec run 写出后原样保留在源码外路径。 ## 关联方向与规划 @@ -39,24 +43,27 @@ | ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | |---|---|---|---|---|---|---| -| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | +| R1 | 测试环境镜像定义:docker/ 内 Dockerfile 固定 ubuntu:24.04(amd64)+ Go 1.27.1 + Node 26.10.0 + Python 3.14(deadsnakes)+ git/make/openssh-server/sudo + Playwright 1.64.0 chromium(/opt/ms-playwright) | 与本机开发工具链版本一致(实测:go1.27.1 / v26.10.0 / 3.14.8 / playwright 1.64.0),避免测试行为漂移 | 高 | `docker build -t agent-system-test-env:dev docker/` 退出 0 | 无 | 已确认 | +| R2 | SSH 就绪:容器以 root 入口前台跑 sshd;PermitRootLogin no、PasswordAuthentication no;dev 用户(UID 1000、NOPASSWD sudo);host key 首启生成;authorized_keys 运行时只读挂载注入 | 隔离测试需要经 SSH 进入容器;公钥注入避免镜像携带凭据 | 高 | 容器内 `sshd -t` 通过;dev 存在且 sudo NOPASSWD;镜像内无任何私钥/secret | R1 | 已确认 | +| R3 | 无头浏览器可用:镜像内预装 playwright 1.64.0 chromium 及系统依赖,ENV PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright | frontend e2e(@playwright/test ^1.50.1,解析 1.64.0)容器内可直接跑;版本对齐避免浏览器 revision 漂移 | 高 | verify-env.sh 中 chromium --headless --dump-dom about:blank 输出 HTML | R1 | 已确认 | +| R4 | 构建/验证入口与文档:Makefile image-build / image-verify;docker/README.md 覆盖构建、启动(端口映射、--shm-size、公钥挂载、仓库挂载 /workspace)、容器内跑 e2e 示例与安全边界 | 用户后续直接用这两个入口启动隔离测试容器 | 中 | `make image-build`、`make image-verify` 可用;README 含最小可复现命令 | R1–R3 | 已确认 | ## 方案与计划 -- 方案引用:待填写(含对象版本) -- 实施计划引用:待填写(含增量与需求 ID) -- 测试计划引用:待填写(含需求 ID 与验收条件) +- 方案引用:本卡「目标与非目标」+ 单元包 /tmp/unit-docker-test-image.json(digest 由运行收据记录);固定版本事实:go1.27.1、node v26.10.0、python 3.14.8、playwright 1.64.0(本机实测于 2026-10-20) +- 实施计划引用:单单元 docker-test-image(docker/** + Makefile 内聚小任务,合为一个包) +- 测试计划引用:R1–R4 验收条件 = worker 窄检查(docker build + 容器内 verify-env.sh);host 权威验证在 apply 后本仓重跑同两命令 ## 阶段记录 | 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 | |---|---|---|---|---|---| -| 需求拆解 | 待定 | 待执行 | — | — | — | -| 需求评估 | 待定 | 待执行 | — | — | — | -| 需求表确认 | 待定 | 待执行 | — | — | — | -| 方案设计 | 待定 | 待执行 | — | — | — | -| 实施计划 | 待定 | 待执行 | — | — | — | -| 实施与自检 | 待定 | 待执行 | — | — | — | +| 需求拆解 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | AGENTS.md 路由 + policy/delivery.md | +| 需求评估 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | 本卡需求表 R1–R4 | +| 需求表确认 | R0=162c5a0160 | 已完成 | 用户直接请求即授权 | 2026-10-20 | 授权与交付终点节 | +| 方案设计 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | 见方案与计划 | +| 实施计划 | R0=162c5a0160 | 已完成 | host 主模型 | 2026-10-20 | 单元 docker-test-image(单元包 /tmp/unit-docker-test-image.json) | +| 实施与自检 | R0=162c5a0160 | 进行中 | 外部 Agent(agent-per-unit) | 2026-10-20 | scripts/agent-exec run | | 正式测试与验收 | 待定 | 待执行 | — | — | — | | 代码 Review | 待定 | 待执行 | — | — | — | | 合入 | 待定 | 待执行 | — | — | — | @@ -66,7 +73,7 @@ | 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 | |---|---|---|---|---|---|---|---| -| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 | +| I1 | docker/ 镜像定义可构建、容器内自检通过 | 单一交付 | build+verify 通过即停,不做镜像优化迭代 | 授权与交付终点节 | NOT_RUN | 待评估 | 待评估 | ## 同步记录