From 4c232dac727c9f74b86d7b588f06d65bae60cf45 Mon Sep 17 00:00:00 2001 From: Lex Date: Wed, 2 Sep 2026 07:49:40 +0800 Subject: [PATCH 1/4] docs(release): correct v1.0.37 notes scope The stable series notes described an earlier draft of the train: they covered only #469 (graphRev) and claimed it was the sole feature surface, while the shipped range also carries #435 (project-level /dag inspector discovery) and #433 (warn-only shell silence guard), the #488 harness refresh, and the #475/#474/#472 stability fixes. The test summary cited CI @ 29e876ac2c instead of the released 818f47db1. Closes #493 --- .github/releases/v1.0.37.md | 30 ++++++++++++++++++------------ .specgit.yaml | 7 +++---- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/.github/releases/v1.0.37.md b/.github/releases/v1.0.37.md index 3a3d13448..fd82ab33f 100644 --- a/.github/releases/v1.0.37.md +++ b/.github/releases/v1.0.37.md @@ -1,43 +1,49 @@ ## opencode {VERSION} -{Prerelease/Stable} release from `{branch}` branch. DAG replan topology refresh: equal-count replans now surface a `graphRev` revision that makes the TUI re-fetch superseded node graphs exactly once instead of rendering stale topology. +{Prerelease/Stable} release from `{branch}` branch. Three user-facing features land in this train: DAG replan topology refresh (`graphRev`), project-level `/dag` inspector discovery, and a warn-only shell silence guard, alongside the SpecGit harness refresh and a wave of SDK/core stability fixes. --- ### 🎯 Features - **DAG replan topology refresh, #469**: an equal-count replan (node count and status distribution unchanged) previously never triggered a TUI node re-fetch, so the inspector and an expanded sidebar kept rendering superseded topology until the next unrelated state change. The existing `workflow.graph_rev` counter is now exposed end to end as `graphRev` (core summary, schema contract, HttpAPI response, regenerated SDK types) and folded into the inspector and sidebar refresh signatures, so a revision-only change triggers exactly one authoritative node re-fetch while no-op summaries stay refetch-free and no polling is added. +- **Project-level discovery fallback for the /dag inspector, #435**: the workflow list depended entirely on the route's sessionID chain, so any missing link produced a zero-request silent empty state. On mount the inspector now discovers via the project-level `GET /dag`, groups rows by owning session for the session-scoped summary endpoint, and the routed sessionID demotes to a live-data preference instead of a hard gate, so running workflows stay listed without session context. +- **Warn-only shell silence guard, #433**: long-running shell commands now surface a single inactivity warning per silent stretch instead of silently looking hung. The new `OPENCODE_EXPERIMENTAL_BASH_SILENCE_WARN_MS` runtime flag (default 5 minutes) sets the threshold, the `expectedSilent` shell parameter opts out per invocation, command output resets the silence window, and the race/kill path is untouched, so abort and timeout semantics are unchanged. --- ### ⚙️ CI / Engineering - `spec_git/policy.yaml` required checks realigned, 29e876ac2c: SpecGit acceptance for dev deliveries now requires the `Typecheck` and `Unit Tests (linux)` checks instead of the `unit-tests`/`e2e-tests` ids, matching the dev gates where E2E does not block. -- JS SDK regenerated: the generated `DagWorkflowSummary` types carry the new `graphRev` field, and the CI `Check generated SDK` freshness gate passes. +- SpecGit harness refreshed for the 1.10.1 CLI, #488: policy, managed blocks, and hooks regenerated byte-identically; the opencode command surface updated; the repository-specialized `specgit-accept.yml` deviations preserved. +- JS SDK: the generated `DagWorkflowSummary` types carry the new `graphRev` field, and the generated spec and codegen output got per-run ownership to stop concurrent generation races, #475. +- Core hardening: dirty worktree removal is classified via porcelain state, #474; the httpapi exerciser teardown is bounded and force-exits, #472; `.git/HEAD` watcher events are normalized on macOS in tests. +- Docs: legacy Claude and OpenSpec repository artifacts removed, #477. --- ### 🧪 Test Summary - New `packages/tui/test/feature-plugins/dag-panel.test.tsx` regression suite: equal-count replan bumps `graphRev` alone and refetches exactly once; a no-op summary replacement with the same `graphRev` and counts does not refetch. -- Companion coverage: inspector refetch-once (`dag-inspector.test.tsx`), equal-count replan summary emission (`dag-summary-publisher-behavior.test.ts`), core summary store revision (`dag-store-summaries.test.ts`), and the HttpAPI contract exercise asserting `summary.graphRev`. +- Shell silence guard delivery: `shell.test.ts` 28 pass (warning, exemption, output reset, abort/timeout non-regression) and `runtime-flags.test.ts` 42 pass on the delivery branch. ``` -typecheck: root 29/29 tasks green -test:dag-core: pass -test:httpapi:ci: 230 pass / 0 fail -focused suites: inspector 29 pass, sidebar/sync 7 pass -CI @ 29e876ac2c: Typecheck / Unit Tests (linux) / E2E linux+windows / CodeQL all pass -lint: 4836 warnings (ratchet 4850) +CI @ 818f47db1 (PR #492, full gates) +typecheck: pass +unit tests (linux): pass +e2e tests: linux pass / windows pass +specgit acceptance: accepted (exit 0) +codeql: pass +focused suites: shell 28 pass, runtime-flags 42 pass, dag-panel refetch-once pass ``` --- ### 🔍 Verification -- DAG development workflow `dag_fe5fa90eeff6BrTFcV9rWDOSyK`: final review ACCEPT after R1 fixes, and `specgit finish --json` exited 0 with the PR #469 checklist complete. -- All 8 GitHub checks on PR #469 green at 29e876ac2c, including E2E on linux (2m38s) and windows (7m19s). -- Scope honesty: the only feature surface in this range is the DAG summary and TUI refresh signature; no upstream sync content, no dependency changes, and no standalone architecture or refactor entries. +- Prerelease acceptance on `graphagent-v1.0.37-dev.3` (release run 33568595659): the fail-closed `Package Reference Templates` validation against config repo HEAD passed, the shipped `dag-templates.tar.gz` SHA256SUMS verified, and the corrected `release-route.yaml` (`worker_type: general`) preflighted valid with every worker resolved. +- The config-repo repair (#22/#23 in opencode-dag-config, `worker_type` `verify` to `general`) shipped in dev.3 after the dev.2 full acceptance returned REVISE with that `worker.unknown` start failure as the sole P1. +- Scope honesty: the feature surfaces in this range are the three items above; everything else is fixes, tests, docs, and engineering. --- diff --git a/.specgit.yaml b/.specgit.yaml index abd02f7f6..cb123f925 100644 --- a/.specgit.yaml +++ b/.specgit.yaml @@ -1,8 +1,7 @@ version: 1 -delivery: shell-silence-guard +delivery: correct-v1-0 context: kind: branch - branch: feat/433-shell-silence-guard + branch: docs/493-correct-v1-0 issues: - - 433 -pr: 491 + - 493 From 5a1f98a22f2c2f3636fdef2cc14604ecfcc9dfe9 Mon Sep 17 00:00:00 2001 From: Lex Date: Wed, 2 Sep 2026 07:49:41 +0800 Subject: [PATCH 2/4] docs: fix specgit accept version drift in AGENTS.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CI 配置 section claimed specgit-accept.yml installs pinned specgit@1.0.1; the workflow actually installs globally via npm install -g specgit@^0.5.0 (workspace-local installs die on the bun catalog: protocol). Closes #494 --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index 1287a9e4a..561824a59 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,7 +33,7 @@ feat/**, fix/** ──PR(Typecheck + Unit Tests 门禁)──▶ dev ──push **CI 配置**: - `ci-typecheck.yml`:push 到 `main`/`dev` + PR → `main`/`dev` 时触发;除 lint + typecheck 外还跑 `test:dag-core` DAG 核心行为/覆盖率门禁(10min 超时) - `ci-test.yml`:push 到 `main`/`dev` + PR → `main`/`dev` 时触发全量测试(`cancel-in-progress: false` 保证跑完);Linux unit-tests job 额外校验生成物新鲜度(`packages/client` 与 `packages/sdk/js` 的 `check:generated`)并跑 HttpAPI 契约门禁(`test:httpapi:ci`) -- `specgit-accept.yml`:仅 PR → `main` 时触发;安装 pinned `specgit@1.0.1`,等 `spec_git/policy.yaml` `required_checks` 全部到终态后运行 `specgit finish --json` 产出 SpecGit Acceptance 裁决 +- `specgit-accept.yml`:仅 PR → `main` 时触发;全局安装 `specgit@^0.5.0`(`npm install -g`;workspace 内安装会因 bun `catalog:` 协议失败),等 `spec_git/policy.yaml` `required_checks` 全部到终态后运行 `specgit finish --json` 产出 SpecGit Acceptance 裁决 - `release-fork.yml`:手动 `workflow_dispatch` 是唯一真实构建路径(push 到 `main`/`dev` 仅注册不构建);从 `dev` 发布自动产出 `X.Y.Z-dev.N` prerelease,从 `main` 发布 `X.Y.Z` 并标 Latest ## Standard Delivery Workflow (标准交付流程) From 46d2449ddbaf86a536fbe3279c1eb19c0af3dbc5 Mon Sep 17 00:00:00 2001 From: Lex Date: Wed, 2 Sep 2026 07:50:31 +0800 Subject: [PATCH 3/4] chore: bind pull request 495 to delivery correct-v1-0 --- .specgit.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.specgit.yaml b/.specgit.yaml index cb123f925..bffc28295 100644 --- a/.specgit.yaml +++ b/.specgit.yaml @@ -5,3 +5,5 @@ context: branch: docs/493-correct-v1-0 issues: - 493 + - 494 +pr: 495 From 8d4aff0ec936c8b1d15e3da587aa58094f084ae3 Mon Sep 17 00:00:00 2001 From: Lex Date: Wed, 2 Sep 2026 08:30:46 +0800 Subject: [PATCH 4/4] chore: bind pull request 497 to delivery sync-main-to --- .specgit.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.specgit.yaml b/.specgit.yaml index bffc28295..190e8f8d6 100644 --- a/.specgit.yaml +++ b/.specgit.yaml @@ -1,9 +1,8 @@ version: 1 -delivery: correct-v1-0 +delivery: sync-main-to context: kind: branch - branch: docs/493-correct-v1-0 + branch: chore/496-sync-main-to issues: - - 493 - - 494 -pr: 495 + - 496 +pr: 497