Files
Agent-System-Dev/AGENTS.md
T
weichen 5194da2119 Make the stacked-branch exception explicit in AGENTS.md
Why: worktree feature branches occasionally spawned child branches
(e.g. backend feature/cross-session-reading-1-gcb7f79d) outside the
task-start gate; collaboration.md conditionally allows stacked branches
but the Dev entry never said so, leaving stacking as an automation
blind spot with ad-hoc sha-embedded names.

Evidence: collaboration.md common-baseline section states the stacking
exception verbatim; historical numbered branches are all already merged
into main (origin/main..branch empty); precheck READY at R0=7d45719869.

Impact: AGENTS.md only. Default stays single-level branches from
origin/main with sibling branches for batch subtasks; stacking requires
recording the parent task/PR in the card, child naming without embedded
SHAs, parent-before-child merge order, and a sync back onto latest main
with PR base retargeted before merge (branch protection enforces this).

Refs: task card feature-branch-hierarchy-clause
2026-09-30 16:35:09 +00:00

4.4 KiB
Raw Blame History

Agent 工作说明(Agent-System-Dev)

本仓开发遵循 Development-Guidelines(见 deps/development-guidelines,gitlink 固定版本): 核心规则与术语见其 core/,按任务触发阅读 standards/ 专题;日常交付走 workflows/delivery.md。

任务启动门禁(强制)

  • 任务启动或恢复后,第一次写操作前运行 make precheck 并附完整输出;verdict 为 SHARED_WORKSPACE_BUSY / SYNC_REQUIRED 时不得编辑。
  • 按其必读清单完成阅读,然后 make task-start NAME=feature/<slug> 建立独立 worktree + feature 分支(自动记录 R0 与任务卡);任务中途不重复运行 precheck。
  • 分支层级:任务分支一律从权威 origin/main 切(task-start 已强制);同批互不依赖的 子任务用同一 R0 的兄弟分支。确有顺序依赖需从父 feature 分支切子分支时(collaboration.md 允许的堆叠例外):任务卡显式记录父任务与父 PR;子分支命名 <type>/<父slug>-<子题>, 不嵌 SHA;合入顺序固定父→子;父合入后子分支须 make task-sync 并入最新 main 并把 PR base 改回 main,方可声明可合入(分支保护要求 head 含 origin/main,未同步必被拦)。
  • 验收、请求审核、合入前各运行一次 make task-sync;完成声明附 precheck、task-sync、 测试三段输出。
  • 合入后在 worktree 内运行 make task-finish 回收 worktree 与分支(脚本会把 当前目录当 worktree 回收——在主检出运行会误删主检出,已加防护);放弃未合入 工作用 make task-finish ABANDON="--abandon <原因>" 并记录原因。
  • 任务卡闭合(防欠账):分支合入 main 后,其任务卡须回填"已完成"+主记录 PR 链接并 归档至 .task/archive/。自动路径:make task-finish 收尾触发、主检出 pull 触发 post-merge 钩子(实测 ff-only pull 也触发);钩子内 close 只扫主检出本地 .task/,远端刚合入的卡片 要等 pull 完成才能被看到,扫不到时由手动 make task-close 兜底。手动闭合在主检出运行→建 feature/card-close-* 分支+PR,任务分支内加 FOLD=--fold 随当前 PR 合入。 precheck 的 [cards] 行报告欠账,验收前应清零;闭合 PR 由所有者合入。

提交与 PR

  • 主题行:英文祈使句一行(≤100 列,不以句点结尾);body 写 Why: / Evidence: / Impact: / Refs: 四段;任务卡与 PR 描述为同一份文档。
  • 跨仓 gitlink 变更须经组合验证(make test)后在 Dev 仓推进;受保护分支经 PR 合入。
  • 高后果操作双钥匙:改写历史、解除/变更分支保护、删除归档引用、发布版本——Agent 只准备 方案与命令,由用户确认并亲手执行;Agent 不得自行实施(baseline 硬边界 1 的授权范围要求)。
  • 模块边界、公开契约与隔离档位见 policy/modules/(如有)与 PROJECT.md。
  • 验证命令见 PROJECT.md「验证」节;完成声明须附实际命令输出证据。
  • 首次克隆本仓后运行 make setup 启用本地 pre-commit 钩子。

Gitea 与 Git 访问事实(2026-09-30 实测)

历史任务卡与旧脚本里的 git-panel.u1680832.nyat.app:30319 已失效(TLS 握手失败), 见到一律按过期处理,不要再试。当前权威通道:

  • Web / API(HTTPS):https://git-home.u1680832.nyat.app:30319(Gitea 1.27.3, API 前缀 /api/v1;偶发 broken pipe / 超时,重试即可)。
  • Git over SSH:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/<Repo>.git (.gitmodules 与各仓 origin 均为此格式)。
  • API token:~/.secrets/gitea,两行键值 URL_PREFIX=… 与 ACCESS_TOKEN=<40 位 hex>;取值 grep ACCESS_TOKEN ~/.secrets/gitea | cut -d= -f2-, 用作 Authorization: token <值> 请求头。token 值不入仓、不回显、不写进产出物 (baseline 硬边界 2:只记录来源、字段与可用状态)。
  • SSH key:~/.ssh/home_gitea(ED25519,公钥指纹 SHA256:GYXaOXIMeloQ1fKSfdJ/ndgPQzs/Ix7Hk62ekfkfQ20,Gitea 侧密钥名 GMKtec); ~/.ssh/config 已有 git-ssh.u1680832.nyat.app 主机条目,克隆/推送直接可用。
  • 任务卡闭合 PR(make task-close / task-finish 自动闭合)经 API 建 PR 时以 GITEA_TOKEN 环境变量传入同上的 token。