Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .opencode/handoff-batch-b.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# 批次 B 交接文档(新会话入口)

> 本会话(批 A 全链路)已极长,批次 B 在新对话执行。引用本文件 + 下述证据路径即可开工。

## 起点状态(交接时)
- 基线:**dev**(`bee78d7ed` 起算,开工前 `git fetch && git switch dev && git pull`)
- 批次 A 全闭环:Q1-Q6 引擎语义 + 接受期绑定校验 + flaky 根治(豁免清单已清零)+ 技术债清零(PR #185-#189 全合入)
- lint 棘轮:4852(CI 口径;本地 = CI − 10 生成物差,本地基线 ≤4842)——**只紧不松**
- 台账:.scratch/batch-a/issues/01-11(01-09 完成,10/11 closed)

## 批次 B 四组票(Ask Matt 路由:agent-ready,证据已在案)

### 组 1:U-1 / U-2 + Transport mid-stream-stall(一个 spec 三张票)
三个 abort-path 集成测试,同源同批。先 /to-spec 收敛三票边界,再逐票 /implement。

### 组 2:F3 / F4 测试卫生债
小票直接做(无需 grill),每票新上下文 /implement。

### 组 3:O1 remote config last-known-good 缓存
小 feature;离线降级的 last-known-good 语义在批 A 前置调研中有上下文(config-offline-degrade 已合入 dev,先读现状再定增量)。

### 组 4:S7 recovery INVENTED 推断 ⚠️
唯一带 bug 气味的——**必须走 /diagnosing-bugs**:先 tight feedback loop(一条命令红灯复现)再修,禁止先理论后复现。修复以回归测试收口。

## 证据路径(不用重新调查,票据直接引用)
- .opencode/promotion-review-round1/*.md(U-1/U-2/F3/F4/O1/S7/P8 全部 finding + 根因记录)
- .opencode/promotion-review-round2.yaml 相关证据(若引用深审轮次)

## 工程纪律(仓库铁律 + 本项目惯例)
- 分支:从 **dev** 切 `feat/**` 或 `fix/**`(AGENTS.md 原文写 main,本项目当前惯例:批 B 基于 dev——dev 领先 main 且为集成层)
- PR → dev:Typecheck 门禁;push dev 自动触发全量测试(Typecheck + Unit + E2E×2)
- 测试从包目录跑(packages/opencode 等),禁根目录;typecheck 用 `bun typecheck` 不用裸 tsc
- 每票一个新上下文会话执行(/implement 内含 /tdd),票间清上下文
- HTTP API 路由若被触及:再生 SDK(./packages/sdk/js/script/build.ts)+ 更新 httpapi-exercise 场景

## 收束清单(批 B + 批 C 全部完成后)
1. dev 全量 CI 绿 → 一次性 dev→main 晋级 PR(四项门禁)→ 手动 release-fork
2. 分支一并清理(用户确认后手跑,dcg 拦 agent 删除):
```bash
git worktree prune # 先清 opencode/* 残留 worktree(git worktree list 查路径)
git branch -d feat/dag-timeout-escalation feat/event-batch-publish feat/goal-pause-resume \
feat/llm-request-timeout feat/session-runner-hotpath fix/config-offline-degrade \
fix/deep-review-fixes review/dev-promotion <批B/C分支>
```
3. 台账惯例:新票记 .scratch/batch-b/issues/,完成翻 closed 附 PR/commit 实证

## 批 C(观测后再动,勿提前)
- P8 spawnReady O(ready×nodes):当前规模无实感,挂 /improve-codebase-architecture 巡检候选,疼了再做
16 changes: 11 additions & 5 deletions .scratch/batch-a/issues/10-backlog-phantom-cancelled-state.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,15 @@

**Blocked by:** None(独立设计决策)

**Status:** backlog(需先设计裁决,非 ready-for-agent
**Status:** closed(方案 A 已实施 — PR #189,commit 67d1ca2b1

- [ ] 设计裁决 A/B(含消费方影响面清单)
- [ ] 按裁决实施 + 测试
- [ ] 转移表 v2 与 CONTEXT.md 状态机词汇同步
- [ ] typecheck + dag 套件绿
## 裁决与实施记录(batch-a-residuals DAG,终审 PASS)
- 裁决:方案 A(对齐实现)——消费方核验确认仅 TUI 存在 phantom dead branch 读节点级 cancelled,投影写 status=failed 故永不触发,无真实依赖
- T5 改写 to=failed(cancelled);状态空间删除节点级 cancelled 目标态(保留工作流级);CONTEXT.md 同步;projector 投影注释固化契约
- 新增 core 测试断言 NodeCancelled 重放 → status=failed + error_reason 承载取消语义
- 对抗审查:检察官/辩护人/证据矩阵三路 + 第四方 claim 核验,终审 PASS

- [x] 设计裁决 A/B(含消费方影响面清单)
- [x] 按裁决实施 + 测试
- [x] 转移表 v2 与 CONTEXT.md 状态机词汇同步
- [x] typecheck + dag 套件绿
15 changes: 10 additions & 5 deletions .scratch/batch-a/issues/11-backlog-spurious-t8-budget.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,14 @@

**Blocked by:** None(独立设计决策)

**Status:** backlog(需先裁决 A/B/C,非 ready-for-agent
**Status:** closed(方案 A 已实施 — PR #189,commit b35630486

- [ ] 裁决修复方向(A/B/C,含锁交互与预算语义影响面)
- [ ] 按裁决实施 + 测试(含陈旧读复现场景)
- [ ] 若 C:ADR + 转移表语义注记落地
- [ ] typecheck + dag 套件绿
## 裁决与实施记录(batch-a-residuals DAG,终审 PASS)
- 裁决:方案 A(锁内新鲜读)——watchdog 以 staleDeadlineMs 守卫判定:陈旧读触发的延长被新鲜读否决时不发布 NodeDeadlineExtended、不递增 timeoutExtensions
- 真红→绿:test/dag/dag-retime-stale-read.test.ts,case1(陈旧读抑制)vs case2(真实超时延长)对照
- 不变式保持:-2/0/1 三值契约、N1 监督不变式(running 节点总有 watcher)
- 对抗审查两项开放担忧裁决:U1(Effect.timeout 败者中断产生孤立节点)经 Effect v4 源码分析 REFUTED(TimeoutError=Cause.Fail,raceAllFirst 败者中断不经 hasInterrupts 匹配);N1(抑制守卫 >staleDeadlineMs 缺 >now)经三方一致论证为有界自愈(下一 tick 必发布,延迟 ≤1 escalateIntervalMs,预算不丢)

- [x] 裁决修复方向(A/B/C,含锁交互与预算语义影响面)
- [x] 按裁决实施 + 测试(含陈旧读复现场景)
- [x] typecheck + dag 套件绿
Loading