feat: add deterministic daily ops SOP and verified dev lifecycle

This commit is contained in:
Codex committed 2026-10-21 16:50:11 +09:00
1 parent dac4af53e0
commit 2aafb6f92f
16 files changed
+935 -5

No files matched your search

+2
View File
@@ -1,5 +1,7 @@
# YCode Dev 启动 SOP
> **现行自动执行入口(2026-10-21):** 新会话及普通 dev 操作先遵循 [日常操作 SOP](日常操作SOP.md),调用 `node scripts/ops.mjs dev --json`、`dev-latest` 或 `restart-dev`;明确停止使用 `stop-dev`,仅作用于归属已验证的受管实例。Windows 实机流程仍需在目标机器验收,离线检查不作实机证明。下文保留详细验收标准与历史人工命令,供明确授权的诊断参考,不得在入口阻塞后自行照抄绕过。历史绝对路径、PID、端口和旧会话目录不是默认值;缺少项目路径时询问。脏工作区、依赖缺失、凭据失败等由入口结构化报告,不自动换检出、安装依赖、修复代码或循环启动。脚本报告未完成窗口核验时,不能使用第 6 节的“窗口正常响应”成功措辞。
适用:用户说“启动 dev”“启动当前代码”“启动最新代码”“使用子代理启动”。这是执行任务,目标是让正确版本的真实窗口可用;不要先做业务调研、REA、方案设计、全量测试或依赖升级。
## 0. 先选目录和版本
+86
View File
@@ -0,0 +1,86 @@
# YCode 日常操作 SOP
目的:在新对话里用一句“拉取代码”“运行 dev”准确执行已知流程,而不是重新研究项目或临时拼命令。本制度是**仓库内约定 + 固定脚本入口**,不是跨对话全局记忆,也不自动选择模型、开新任务或保证额度消耗。
## 1. 新会话只需定位一次
- 已在工具中打开本仓库:读取 `AGENTS.md`,使用已确认的仓库根目录。
- 尚未定位项目:用户给出当前机器的绝对路径;只问这一个缺失信息,不扫描整台机器、不猜历史目录。
- 默认根目录取当前 cwd 所属的 Git 仓库,并校验项目身份;也可显式传 `--root "<已确认绝对路径>"`。本入口没有跨机器路径注册表,不自动发现或切换其他检出。
- 首次使用需该检出已包含 `scripts/ops.mjs`。如果缺失,报告入口尚未安装,不能假称已启用或自行拼命令替代。
可复制的新对话首条消息(替换尖括号内容):
```text
项目是 <本机 YCode 仓库绝对路径>。请读 AGENTS.md,按 docs/协作/日常操作SOP.md 执行。现在运行 dev(当前代码,不拉取);遇到阻塞只报告错误码和日志,不自行修复。
```
之后在该上下文中直接说下面动作即可。另一台电脑或全新未打开仓库的会话仍须提供路径。
## 2. 意图 → 唯一固定动作
从已确认的仓库根目录调用,以下命令适用于 shell 与 PowerShell:
| 用户说 | 固定调用 | 边界 |
| --- | --- | --- |
| 拉取代码/同步最新代码 | `node scripts/ops.mjs pull --json` | 同步 `gitea/master`;不启动 dev |
| 运行 dev/启动 dev/启动当前代码 | `node scripts/ops.mjs dev --json` | 保留当前代码与本地修改;不拉取 |
| 拉取并启动/启动最新代码 | `node scripts/ops.mjs dev-latest --json` | 同步成功才进入 dev;同步失败不称“最新” |
| 重启 dev | `node scripts/ops.mjs restart-dev --json` | 重启当前检出的可确认归属实例;不拉取 |
| 停止 dev | `node scripts/ops.mjs stop-dev --json` | 仅停止当前目录中归属已验证的受管 dev;未知进程不杀 |
| 构建 | `node scripts/ops.mjs build --json` | 当前代码构建,含项目 build 定义的类型检查;不是全量验收 |
| 打包/生成 Windows 安装包 | `node scripts/ops.mjs package --json` | Windows x64 的安装包流程;不发布、不签名保证、不自动安装 |
| 查看状态/dev 在运行吗 | `node scripts/ops.mjs status --json` | 检查仓库与运行证据;不启动或同步 |
`doctor` 是明确要求环境诊断时的固定只读入口,不在每次操作前额外执行。除非用户指定限制,使用脚本默认超时;需要时可用 `--timeout-ms`(1000–3600000)。不将任意用户文本转成 shell 命令。
## 3. 助手执行纪律
1. 确认目录和意图后,直接调用对应入口**一次**;不要先跑全量测试、REA、业务研究、依赖升级或拆子任务。动作自身的检查由脚本执行。
2. 读取结构化终态。build/package 等可能超过工具首次等待时间;工具返回 session ID 时,允许续读同一执行会话至脚本终态或既定时间预算,不另起重复操作、不重新调用 ops。首次空输出不代表 PASS;不要把等待输出误作重新执行授权。
3. `PASS` 只表示该动作在输出证据范围内成功。dev 的端口开放、HTTP 响应或进程存活不等于真实窗口可用;窗口未核验时明确说“窗口未验证”,不宣称完整启动验收。
4. `BLOCKED`、`FAIL`、`UNSUPPORTED`:报告错误码、原因、日志与所需下一步,停止依赖该结果的操作。只允许脚本内部已编码、有超时/次数上限的恢复;模型不得自行循环重试、升级依赖、修代码或扩大检查。
5. 更复杂故障交给明确授权的诊断/修复任务;保留本次 JSON 和日志作为交接。不要借“快速执行”绕过网络、文件、进程、安装或其他审批。
## 4. 不可变安全边界
- `pull`/`dev-latest` 只接受脚本校验通过的仓库、远端和 `master`,在干净工作区快进到此次 fetch 的 `gitea/master`。不以缓存 SHA 证明最新。
- 脏工作区、分支不匹配、分叉、远端不匹配、凭据缺失或网络失败均按结构化阻塞处理;不 stash、reset、强推、改凭据、换仓库或另建 worktree。当前代码模式可保留本地修改,须如实报告 dirty。
- 不按进程名批量杀 node/Electron;仅脚本验证归属的受管实例可被重启。无法确认归属就保留并报告。
- dev 保留 `YCODE_SKIP_KERNEL_DATA_RESET=1`,不主动切换生产/测试数据目录,不发模型消息验证启动。
- 当前 dev 活跃或归属未知时,`pull`、`dev-latest`、`build`、`package` 可能阻塞,以避免覆盖正在运行的文件。用户明确要求停止后使用 `stop-dev`,再按授权执行原动作;不自动停止。未知进程不得为解除阻塞而杀掉。
- 工作区操作锁冲突不自动解锁。超时后若子进程可能仍写入,锁可能保留;不要删除锁或 PID 状态文件来绕过另一个任务。
- 打包不等于发布、上传、安装、签名或产品功能验收,这些需单独授权及证据。
## 5. 统一结果与回复
入口 JSON 的稳定顶层字段:`schemaVersion`、`action`、`status`、`ok`、`code`、`summary`、`root`、`git`、`evidence`、`logs`。取得 Git 信息后位于 `git.sha`、`git.dirty`、`git.branch`;早期失败可能没有 Git 信息。动作专属证据位于 `evidence`,日志也可能在 `evidence.logPath`。退出码:`PASS=0`、`BLOCKED=2`、`FAIL=3`、`UNSUPPORTED=4`。
回复保留以下信息;不适用或未取得的字段明确标注,不补猜值:
| 信息 | 要求 |
| --- | --- |
| 目录/版本 | 实际 `root`、SHA、dirty;本地修改存在时不称“纯提交版本” |
| 动作/结果 | `action`、`status`、`code`、简短摘要;失败不能省略错误码 |
| 日志 | JSON 返回的实际日志位置或“无日志” |
| dev | 实际 URL/端口、PID、复用或新启、窗口验证范围;不能固定写 5173 或历史 PID |
| 构建/打包 | 返回的实际产物路径;未生成就写未生成,存在旧文件不等于本次成功 |
推荐短回复:
```text
<动作>:<状态>(<code>)。
目录:<root>;版本:<SHA>;本地修改:<有/无/未知>。
<dev URL、PID 与窗口验证范围,或实际产物路径>。
日志:<实际位置/无>。<若失败:阻塞原因及需要用户决定的下一步>。
```
## 6. dev 机器检查与验收边界
- dev/重启/停止的原生生命周期当前面向 Windows;其他平台依输出明确标为 `UNSUPPORTED`,不以后台 HTTP 服务冒充 Electron 桌面启动。Windows 实际启动、停止、重启与窗口行为仍需目标机器验收,离线自测通过不等于已获 Windows 实机证明。
- dev 成功判定包含目标进程归属、响应窗口、renderer 应用目录、实际端口和仓库组件响应,并要求本次运行的可见应用 DOM 布局心跳。开发钩子 `src/main/dev-ops-health.ts` 仅在非打包且设置 ops run UUID 时启用;心跳在 `.tmp/ops/renderer-health.json`,绑定本次运行及进程,不增加网络/CDP 通道。
- 机器检查能防止“只有进程或 Local URL 就报成功”,不证明业务功能、模型调用或完整 UI 行为正确。陈述成功仍须限定为实际返回的证据。
- dev 状态、日志和心跳在本检出的 `.tmp/ops/`;调度器操作锁和日志在 Git 私有目录的 `ycode-ops/`。报告实际输出路径,不将其复制成其他机器的固定路径。
- `UNTRACKED_DEV` 不自动收编或删除;启动超时保留单个可追踪进程,不反复新建。重启和停止仅作用于 PID、创建时间及命令行归属已验证的进程树。缺少依赖按阻塞报告,不自动重装。
真实 dev 窗口的详细验收标准见 [Dev 启动 SOP](Dev启动SOP.md);业务开发与独立验收仍按原有协作流程,日常操作成功不替代产品验收。