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
44 changes: 44 additions & 0 deletions .github/releases/v1.0.29.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
## opencode {VERSION}

{Prerelease/Stable} release from `{branch}` branch. Session todo reminders, per-series release notes, truthful MEMORY state, and DAG output-duplication fixes.

---

### 🎯 Features

- **Stale todo reminders (PR #394)**: sessions with uncompleted todos now inject a one-shot synthetic reminder on every model step, including steps without tool calls, so stale items stay visible to the model until they are completed or cancelled; sub-agent sessions track their own todos, and a freshness guard skips the reminder right after a successful todowrite call.
- **Per-series release notes (PR #394)**: each release series renders its GitHub Release body from `.github/releases/vX.Y.Z.md` with fail-closed validation before `gh release create`; a missing or invalid series file stops the release instead of shipping placeholder notes.
- **/dag-auto as pure workflow routing (PR #393)**: `/dag-auto` no longer embeds orchestration logic of its own and only routes to workflows; `/dag-init`, `/dag-flow`, and `/dag-template-update` are retired.

---

### 🐛 Bug Fixes

- **DAG prompt and structured-output duplication, #386-388 (PR #390)**: schema-node prompts and the `submit_result` tool description now state a single authority contract (summary only in the payload, no restating in the body, end the turn after a successful submit); block compilation drops instructions that merely duplicate the objective; crash recovery reuses the live output-file-reference capture so durable receipts match between live and recovered runs.
- **MEMORY silent-failure cluster, #395-397 (PR #398)**: the response schema is now rendered into the system prompt for schema-blind providers whose `response_format` downgrade made every topic commit fail validation; `/memory` replies report the true state instead of a hardcoded "Memory remains off"; `statusReason` surfaces the model gate so an enabled config whose model no longer resolves reads as unavailable instead of "on" and inert.
- **CI acceptance workflow rollback (PR #400)**: the specgit-accept pnpm rewrite that broke `Setup pnpm` on the first main-target PR was rolled back to the verified node22 + `npm i -g specgit@^0.5.0` install, keeping the main-only trigger.

---

### 🧪 Test Summary

```
CI gates on the dev-to-main promotion (PR #399):
Typecheck: pass
Unit Tests (linux): pass
E2E Tests (linux): pass
E2E Tests (windows): pass
SpecGit Acceptance: pass
```

---

### 🔍 Verification

- Provider wire behavior behind the MEMORY fixes is pinned by `test/memory/model-wire.test.ts`; the todo-reminder run-loop guarantees are pinned by `test/session/todo-reminders.test.ts` (empty-list skip, settled-list skip, freshness guard, failed-write guard).
- MEMORY was verified end-to-end against the live provider: a checkpoint run over an initialized git project committed a real memory topic; topic id, Memory home path, and timings are recorded in the release-remediation workflow evidence.
- Every delivery in this batch (PRs #390, #393, #394, #398, #400) shipped through the specgit harness with an accepted verdict, and all promotion gates are green on PR #399.

---

**Full changelog:** [`{previous_tag}`...`{current_tag}`](https://github.com/LeXwDeX/OpenCode-GraphAgent/compare/{previous_tag}...{current_tag})
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,9 @@ tsconfig.tsbuildinfo
.opencode/skills
.qoder
.opencode/workflow-reports/

# opencode local workflow state
.opencode/.dag-specs/
.opencode/dag-init.json
.opencode/workflow-drafts/
.opencode/workflow-reports/
11 changes: 5 additions & 6 deletions .specgit.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
version: 1
delivery: memory-topic-creation
delivery: release-train-remediation
context:
kind: branch
branch: fix/395-memory-topic-creation
branch: fix/401-release-train-remediation
issues:
- 395
- 396
- 397
pr: 398
- 401
- 402
pr: 403
23 changes: 23 additions & 0 deletions workflows/release-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Release Train(发布列车)

一条从 issue 清理到正式发版的批次交付循环。全程 SpecGit 化:issue → delivery PR → CI 门禁 → 合并 → 发版。所有条目先处理完,再统一处理 PR 问题——batch 住操作,不逐个排队。

## Trigger

人工发起:用户说"发版 / 跑一趟发布列车",且满足发车条件——dev 上无开放 delivery PR。

## Steps

1. **验车**:确认 dev 分支 CI 全绿(push 触发的 Typecheck + 全量测试),open issue 与已合入 dev 的交付一一对应。注意:issue 只在 dev→main PR body 含 closing keywords(`Closes #N`)时才自动关闭——开升级 PR 时必须带上本班次的全部 closing 行。
2. **复盘**:对目标子系统做完整性复盘(每次发车指定一个;本轮为 MEMORY ON:`/init` 盖章 `project.time_initialized` → `/memory on` → `memory_search` 可用的启用链路,外加写入路径验证)。发现按 specgit 粒度开 issue——一个独立可验证的 WHY 一个 issue。
3. **Checkpoint(唯一的阻塞确认)**:呈现复盘报告——发现清单、新建 issues、修复计划、本班车范围——一次确认。确认后连续执行到发版,不再打断。
4. **修复班车**:`specgit issue <n> <n> ...` 把全部新 issue 绑进一个 delivery(多 issue 一 PR),从 dev 切出 `fix/**` 分支,TDD 修复,PR → dev。PR 上 CI/TDD 失败 → 原 delivery 内追加 commit 修复;已合入 dev 后才暴露的回退 → 开新 fix issue 进下一班车。
5. **升级**:修复 PR 合并、dev push 全量绿后,立即开 dev → main PR(protect-main 全量门禁:Typecheck + Unit Tests + E2E 双平台),body 带本班次全部 closing keywords。全程监控,失败即修。
6. **发版**:main 合并后、触发 `release-fork` 前,先写 series 文件——按 `.github/RELEASE_NOTES_TEMPLATE.md` 渲染并提交 `.github/releases/vX.Y.Z.md`。版本号是 `release-version.ts` 的机械推导(`graphagent-v*` 标签上的 patch+1,不读 commit 类型),系列文件必须以推导出的版本命名;渲染 fail-closed,失败即阻断发版。随后 `release-fork` 触发正式版。
7. **Brief**:一趟车一份收尾汇报——本班次 issue 清单、PR、CI 结论、版本号与 release 链接、遗留(进下一班车的条目)。

## Rules

- SpecGit 铁律优先:`specgit finish` 非 0 不请求合并;不削弱 policy;只认 `--json`。
- 发布已由步骤 3 的确认授权,正式版不再二次询问。
- 回退(合并后 CI 挂)永不静默:开 issue、进下一班车、在 Brief 中显式列出。
Loading