Files
2026-07-20 07:43:57 +02:00

144 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: unidesk-daddev
description: UniDesk 分布式敏捷开发流程,覆盖真实运行面探测、最小可逆 patch/热补实验、YAML/Git/自动 CI/CD 持久化和原入口验收。处理跨节点、跨 host、跨 lane 的 bug、HotFix、运行面调试、临时恢复或对接 HWLAB/AgentRun/UniDesk 真实运行面时必须使用。
---
# 分布式敏捷开发流程
> 遵循规范: 本 Skill 遵循 [Skill(cli-spec)](file:///root/.agents/skills/cli-spec/SKILL.md) 规范(精简版,仅保留与流程相关的硬约束)。
- `$unidesk-devlevel` 定义 L0-L3 四种可反复使用的开发方式:
- 本 skill 只在某一级需要跨 host 观察、最小可逆实验、故障收敛或真实入口复测时接管现场闭环;
- 不把现场修复过程解释成等级变化。
- 遇到 L2/L3 问题时,优先把根因缩小到可复现的最低等级做小回环;修复后再逐级回归到原问题运行面。
## DAD-DEV SPEC
- 流程与交付
- 现场闭环
- unidesk-daddev 不是固定发布脚本,而是现场修复闭环。
- P1 先在真实 provider / host / pod / lane 上观察事实,再判断根因。
- P2 用最小、可撤、可解释的运行面实验或等价实验验证方向。
- P2 允许按调试需要实施运行面 patch 或热补:
- 只用于验证根因、缩小故障面或临时恢复用户入口;
- 开始前记录目标对象、现状、预期、影响范围和回退方式;
- 选择最小变更,避免数据迁移、Secret 反解、不可逆写入和第二 authority;
- 不得把 patch 制造的状态当作 GitOps desired、自动交付成功或最终验收证据。
- P3 把有效修复收敛回 Git、项目声明的交付路径和可审计 provenance。
- P3 必须把 P2 中成立的变更收敛到正式交付:
- 写回 owning YAML、源码或受控 renderer
- 通过正常 PR 和自动 CI/CD/GitOps 交付;
- 主动撤销临时 patch,或确认它已被声明式交付覆盖;
- 禁止长期保留隐藏运行面真相。
- P4 用用户报告的同一入口或 Web 等价 CLI 验收;单测、PR、构建和理论推导不能单独关闭 issue。
- 公共运行面事故最短路径
- 适用范围
- 两个及以上业务、消费者、Provider 或受控通道在相近时间出现连接失败、超时或拒绝连接;
- Kubernetes API、公共 registry、共享入口、跨节点隧道或 backend-core 等公共依赖出现故障;
- 用户明确要求只恢复公共运维,不要求继续处理具体业务。
- 共性输入
- 节点、lane、route、namespace、service、endpoint 和网络参数必须来自 owning YAML
- 运行面对象、阈值和重试预算必须来自对应领域受控 CLI;
- 不把本次节点名、Provider id、地址、端口、issue 或日期写入通用流程。
- 最短证据链
- 先确认公共服务进程或 systemd unit 是否 active
- 再确认公共服务自己的 readiness、API 或受控 status 是否可读;
- 最后确认一条共享网络路径及至少两条独立消费者通道;
- 三层证据已能定位共享故障时,停止逐个探测业务和 Provider。
- 分类与恢复
- 多个独立消费者同时失败时,优先分类为共享控制面、共享入口、registry 或跨节点网络故障;
- Kubernetes API 明确拒绝连接时,先恢复 API authority,再解释依赖它的业务读失败;
- k3s 明确报告 `server/cred/passwd` 新于 datastore 时,将其视为可重建派生凭据漂移:
- 只通过 owning k3s 受控恢复入口把该文件移动到受保护备份;
- 重启 k3s 并等待 readiness
- 禁止删除 datastore、重置集群或把派生文件反向当作配置真相。
- WireGuard unit active 不能单独证明数据通道健康:
- 同时检查最近握手和 owning YAML 声明的最小连通探针;
- 只有握手过期且探针失败时,才通过受控入口重启对应接口;
- 网络恢复后不得顺带重启或重配具体 Provider。
- 公共 registry `connection refused` 与运行镜像 `ImagePullBackOff` 同时出现时,先恢复 registry;
- runner、claim、Provider 未启动属于下游症状;
- 不先归因于 Provider 执行耗时或业务调度。
- 变更边界
- 只做能恢复共享面的最小、可逆动作;
- 不使用全量 apply 代替已存在的窄域恢复入口;
- 临时运行面 patch 必须记录备份或回退方式,且不能成为第二 authority;
- 需要修改 owning YAML、公共 CLI 或 renderer 时,转入 P3 的独立 worktree、PR 和声明式交付;
- 用户未授权具体业务或 Provider 时,不修改它们的配置、进程、数据或交付链。
- 验收与停止条件
- 公共服务 active 且 readiness 成功;
- 共享网络探针成功;
- 至少两条原先同时失败的独立受控通道成功,或 owning CLI 提供等价聚合证据;
- 满足上述条件后,公共运维任务立即结束;
- 业务仍有问题时只记录为独立业务故障,不继续扩大当前公共运维范围。
- 项目适配器
- 本 skill 只规定阶段目标、边界和证据合同。
- 分支、workspace、PR、rollout、git mirror、artifact、issue close 命令属于目标项目适配器。
- 命令细节以目标仓库当前 `AGENTS.md``docs/reference/*.md` 和 CLI help/source 为准。
- 发现 skill 示例与当前 CLI 不一致时,先修正引用或工具,不绕到原生命令。
- UniDesk `trans` / `tran` 命令遵循当前 operation 合同:
- `script``shell` operation 已移除;
- 跨 host / k3s POSIX shell 示例必须显式使用 `sh``bash`
- 检索含 Markdown 反引号的命令片段时使用单引号或 `rg -F -e`
- 禁止让本地 shell command substitution 误触旧命令。
- 固定主 repo 保护
- 执行任何会产生源码、文档、配置、issue closeout、部署脚本或验收产物的 unidesk-daddev 工作前,必须先从目标 fixed repo 的最新 remote/base 创建独立 `.worktree/<task>`,后续编辑、验证、提交、推送和受控 CLI 都在该 worktree 内执行。
- fixed repo 只用于 `git fetch``git status``git worktree add` 和读取规则;禁止把 fixed repo 当 scratch 区直接编辑,也不要把其中既有未提交修改纳入当前任务。
- fixed repo 若已有并行未提交修改,默认保持不动;用独立 worktree 隔离当前任务,除非用户明确要求合并、清理或提交这些修改。
- 只有 P1 只读探测、运行面热补或目标项目明确声明可直接改 fixed repo 的轻量例外,才允许不创建新 `.worktree`;例外必须先说明理由并避免触碰并行修改。
- 纯文档编辑可以按 `$git-spec` 的稳定分支快路径由主代理直接 commit/push,不要求独立 `.worktree` 或 PR;本地分支分叉、存在并行状态或涉及运行配置时不适用。
- Skill 自身更新边界
- 本 skill 是流程规范,不是普通任务产物;除非用户明确要求更新 `unidesk-daddev` / `SKILL.md`,不得在业务任务、文档收敛、issue closeout 或临时纠偏中自动修改本 skill。
- 发现本 skill 与当前用户要求或项目规则冲突时,先按用户要求和项目规则完成任务;需要改 skill 的事项提 issue 或请示用户,不把 skill 更新夹带进默认交付。
- 交付画像
- 需要运行面发布
- `pr-rollout`:独立 worktree → 分支 → PR → merge → CI/CD / rollout → runtime validation。
- `artifact-deploy`:提交后由 CI 产出 commit-pinned artifactCD 只消费 artifact,不从脏 worktree 构建。
- 轻量或治理交付
- `pr-lightweight`:无服务 CLI、helper、docs、config、CaseRun、trace 和治理类变更的标准画像;独立 worktree → 分支 → PR → 合并,可按项目规则自合并,合并后跳过 CI/CD/rollout。
- `config-docs-only`:无运行面 rollout 的文档/配置治理,是 `pr-lightweight` 的子类;仍需 Git/PR 证据和必要的渲染、语法或引用验证。
- 恢复后补账
- `runtime-recovery-followup`:紧急运行面恢复后,必须回补 source、runbook 或 remediation issue,不能保留隐藏 runtime truth。
- 无服务 / CI-CD SKIP
- 适用范围
- 不涉及 cloud-api、web、gateway、GitOps、k3s runtime 或其他常驻服务的改动,默认走 `pr-lightweight`:独立 worktree、分支、PR,可自合并,可跳过 CI/CD/rollout。
- 典型范围:markdown/reference/runbook/comments、CLI 工具、helper 脚本、CaseRun、harness、trace 语义化、case registry 产物整理、短连接调试 runner、无运行面影响的配置/治理。
- 交付边界
- 无服务任务必须直接运行和验证目标工具链;PR 合并后不走 CI/CD、rollout 或服务发布大回环。
- `pr-lightweight` PR 合并后即视为交付完成;关闭 issue 时写明 `rollout=not-applicable` 或等价说明。
- CaseRun 单步
- CaseRun 卡在基础设施、hwpod-node、workspace prepare、编译、下载、串口或 artifact 收集时,先拆成同一目标运行面的单步命令验证。
- 只有单步通过且需要验证完整编排、trace 和 registry 产物时,才启动一次完整 CaseRun。
- 完整 CaseRun 仍遵循 cli-spec:异步启动、短轮询、可见 trace;不得把 evidence 自动评价、门禁或自动判断重新加回流程。
- 路径与边界
- 架构收敛
- 分布式修复优先收敛到单一权威路径。
- 先识别 source of truth,再删除或降级会制造分叉的派生缓存、旧入口、兼容路径和 fallback。
- 不用多路径、fallback、feature flag、legacy mode 或额外 guard 掩盖根因。
- 已有多路径造成状态污染、可见性歧义或反复修复无效时,把读写路径统一到权威状态;其他状态只作为可重建派生证据,或直接移除。
- CLI/Web 同路径
- 定位上下文
- CLI 只能作为 Web 的非视觉等价入口,不能变成绕过 Web 的第二条业务路径。
- 先识别 Web 原入口的 `origin/lane/account/workspace/session/conversation/trace` 和实际 route / API family / dispatcher。
- 等价调用
- 正式 CLI 必须调用同一 Web origin、同一后端 dispatcher、同一账号状态和同一 session / trace 语义。
- CLI 输出必须包含 `baseUrl``route``method/path`、session/trace/job id、runtime endpoint 来源。
- 长任务用 submit-and-pollCLI 先提交,后续短查询 result / trace / inspect,不为 Web E2E 长挂单个远程命令。
- 不一致处理
- CLI 和 Web 结果不一致时,先分类为 `path-mismatch``state-mismatch``auth-mismatch``runtime-mismatch``visibility-gap`,把实际上下文写入 issue 证据,再补 CLI 同路径入口或可见性。
- 内部 direct manager、手写 dispatcher、临时 runner job、裸 API、fixture、本地 DOM 结果只能作为 canary / 定位证据,不能替代 Web 同路径验收。
- 证据与验证
- Issue 评论
- 正文先行
- Issue 评论不是机器日志归档。
- P1 进展、P2 闭环、P3 rollout、P4 closeout 和 blocker 评论,都先用自然语言说明用户现象、根因、修改、验证状态和剩余边界。
- 审计证据
- 正文之后再列命令、trace、job id、PR、PipelineRun、artifact、SHA 等证据。
- 推荐结构:2-5 段短正文说明"发生了什么 / 怎么修 / 怎么验收 / 现在状态",再用 bullets 列关键命令、trace、job、commit、rollout 耗时和产物信息。
- 阻塞说明
## 扩展参考
低频细节见 [references/details.md](references/details.md)。紧凑流程不足以支撑任务时读取该文件。