Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d55a9d1
chore: record delivery binding for accept-builtin-spec
LeXwDeX Sep 2, 2026
224a0b7
chore: record delivery binding for accept-builtin-spec
LeXwDeX Sep 2, 2026
8b52b71
chore(specgit): refresh harness to 1.10.1 and reapply local specializ…
LeXwDeX Sep 2, 2026
e557920
fix(dag): accept builtin:// spec_path returned by list
LeXwDeX Sep 2, 2026
e8da239
fix(dag): list native primary agents in workflow worker_type catalog
LeXwDeX Sep 2, 2026
284b8fd
docs(dag): align workflow guides with schema and auto-resume behavior
LeXwDeX Sep 2, 2026
8a639fa
fix(ci): trigger typecheck and test gates on ready_for_review
LeXwDeX Sep 2, 2026
3745d16
docs(dag): complete three parameter descriptions with enforced semantics
LeXwDeX Sep 2, 2026
9774124
docs(dag): state the full diff-review wiring contract and its mode split
LeXwDeX Sep 2, 2026
dd312e8
docs(dag): close review findings on timeout and review descriptions
LeXwDeX Sep 2, 2026
35e78fc
docs(agents): sync specgit harness specializations with the 1.10.1 re…
LeXwDeX Sep 2, 2026
54a2df1
Merge pull request #509 from LeXwDeX/fix/506-accept-builtin-spec
LeXwDeX Sep 2, 2026
d58037d
chore: record delivery binding for hook-command-grandchildren
LeXwDeX Sep 2, 2026
bf76ff2
chore: record delivery binding for hook-command-grandchildren
LeXwDeX Sep 2, 2026
19fcd38
fix(hook): kill the process group on timeout so pipe-holding grandchi…
LeXwDeX Sep 2, 2026
cbca6c3
fix(share): unsubscribe the five instance event listeners on dispose
LeXwDeX Sep 2, 2026
92cc97e
fix(tui): clean up route and prompt event subscriptions on unmount
LeXwDeX Sep 2, 2026
dd70af1
fix(process): await exit with SIGKILL escalation in stop and MCP clie…
LeXwDeX Sep 2, 2026
a93625d
fix(memory): bound generations retention and rotate heap snapshots
LeXwDeX Sep 2, 2026
6812626
test: clear the four new oxlint warnings from the leak-fix test files
LeXwDeX Sep 2, 2026
2a0497c
fix(heap): prune snapshots by embedded timestamp, not by pid-led name
LeXwDeX Sep 2, 2026
09bad5f
fix(index): replace the unconditional exit with a bounded drain window
LeXwDeX Sep 2, 2026
929ebe4
test(memory): replace the aliased star import with a named chmod import
LeXwDeX Sep 2, 2026
7c44188
Revert "fix(index): replace the unconditional exit with a bounded dra…
LeXwDeX Sep 2, 2026
271175a
test(process): install the SIGTERM trap before signaling readiness
LeXwDeX Sep 2, 2026
ed46f08
Merge pull request #505 from LeXwDeX/fix/500-hook-command-grandchildren
LeXwDeX Sep 2, 2026
39791ad
chore: record delivery binding for release-notes-v1-0-38
LeXwDeX Sep 2, 2026
4bc7830
chore: record delivery binding for release-notes-v1-0-38
LeXwDeX Sep 2, 2026
7f778b2
docs(release): add v1.0.38 notes
LeXwDeX Sep 2, 2026
9a9b29e
Merge pull request #511 from LeXwDeX/docs/510-release-notes-v1-0-38
LeXwDeX Sep 2, 2026
808a3a7
chore: record delivery binding for leftover-hardening
LeXwDeX Sep 2, 2026
7638c16
chore: record delivery binding for leftover-hardening
LeXwDeX Sep 2, 2026
e2c7f92
test(memory): relax the stall wall-clock bound to tolerate CI load
LeXwDeX Sep 2, 2026
b806a7a
fix(console): bump mysql2 to 3.22.0
LeXwDeX Sep 2, 2026
aa10b58
test(tui): pin route event cleanup against the real components
LeXwDeX Sep 2, 2026
cc9bb4c
refactor(process): converge the platform group-kill primitive
LeXwDeX Sep 2, 2026
070ac28
Merge remote-tracking branch 'origin/dev' into test/512-leftover-hard…
LeXwDeX Sep 2, 2026
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
49 changes: 49 additions & 0 deletions .github/releases/v1.0.38.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
## opencode {VERSION}

{Prerelease/Stable} release from `{branch}` branch. Two quality deliveries land in this train: a five-front resource-leak fix wave (hook process groups, share listeners, TUI subscriptions, process-stop escalation, memory retention) and a DAG workflow-tool consistency pass (builtin:// spec_path round-trip, worker_type catalog, parameter descriptions verified against implementation), both hardened by a two-axis review round.

---

### 🐛 Bug Fixes

- **Hook command grandchildren can no longer hang triggers, #500**: a timed-out hook shell command left pipe-holding grandchildren alive because only the direct child was killed; the timeout path now kills the whole process group (negative-pid SIGKILL, consistent with the detached spawn), with regression tests asserting group death under 15s.
- **Share instance event listeners unsubscribe on dispose, #501**: five EventBus subscriptions accumulated across share lifecycles; dispose now collects and runs every returned unsubscribe before closing the scope.
- **TUI route and prompt event subscriptions clean up on unmount, #502**: Session and Prompt routes registered bus listeners without onCleanup, leaking one listener set per navigation; both routes now wrap subscriptions in onCleanup with a regression suite pinning the subscription seam.
- **Process stop awaits exit with SIGKILL escalation, #503**: Process.stop and the MCP client shutdown sent a single SIGTERM and never waited; both now run SIGTERM, a 3s grace, SIGKILL, and a bounded exit await, and the SDK copy mirrors the escalation. The index.ts exit-path clause was attempted as a bounded drain window and reverted on CI evidence: real session paths keep ref'd handles alive, so every CLI exit degraded to the 5s fallback and three subprocess lifecycle tests failed; the empirical record and a follow-up proposal (eliminate the residual handles first) are posted to the issue.
- **Memory generations and heap snapshots are bounded, #504**: every memory commit copied the full topic set into a generations directory that was never removed (now keeps the latest 3 plus an orphan-staging sweep, best-effort so cleanup never fails a commit), and RSS-storm heap snapshots (hundreds of MB each) now rotate to the latest 2. Review caught a pid-led lexicographic sort that could delete the newest snapshot across runs; pruning now orders by the embedded timestamp with a cross-pid regression test.
- **The workflow tool accepts the spec_path its own list action returns, #506**: list returned builtin:// refs that start/extend/read/validate rejected as unknown saved workflows; resolveSpecPath now round-trips the builtin:// scheme through the template registry with the same not-found diagnostics as bare names.
- **worker_type catalog lists the native primary agents, #507**: build and plan were missing from the workflow tool's dynamic worker_type enum (the task tool surface is unchanged), so graphs could not name them.

---

### ⚙️ CI / Engineering

- CI typecheck and test gates now also trigger on ready_for_review (#315 anchor): SpecGit deliveries open as draft, and converting to ready previously never started the required checks, permanently blocking specgit finish.
- SpecGit harness refreshed for the 1.10.1 CLI with every local specialization preserved, and the AGENTS.md replay list corrected (pinned version, 45/40-minute timeout split, node 22, hand-parsed policy.yaml) so the next re-init replays reality instead of a stale 0.5.0 setup.
- DAG parameter descriptions verified line-by-line against implementation, #508: timeout_ms (admission-to-completion budget, expired queued nodes fail without spawning, capped parent-adjudicated extensions), the review field (the full diff-review wiring contract and its standard-warns / deep-errors mode split), plus the workflow guide tables; stale tool-parameter snapshots regenerated.

---

### 🧪 Test Summary

```
unit tests (linux): 4447 tests, 4423 pass, 0 fail (364 files)
e2e app tests: 21 passed on linux, 21 passed on windows
httpapi exerciser: 230 pass x coverage/auth/effect, 0 fail, 0 skip
typecheck: 29/29 packages green
delivery-specific: workflow tool/schema/parameters/review 194 pass; process/heap/memory 76 pass
lint: oxlint 4840 warnings, 0 errors (ratchet budget 4850)
```

---

### 🔍 Verification

- Two-axis four-way code review (Standards and Spec, per delivery branch) over the full train diff; every P1 finding was independently re-verified against implementation code before fixing (heap prune ordering, stale parameter snapshot, the missing #503 clause).
- specgit finish exited 0 (accepted) for both deliveries against real git, PR, and CI evidence.
- The bounded-exit-window attempt for #503 was reverted on linux CI evidence and the empirical record posted to the issue; the revert kept the documented hanging-subprocess backstop intact.
- Known residue tracked outside this train: one dependabot high-severity alert on the default branch (security/dependabot/110).

---

**Full changelog:** [`{previous_tag}`...`{current_tag}`](https://github.com/LeXwDeX/OpenCode-GraphAgent/compare/{previous_tag}...{current_tag})
5 changes: 5 additions & 0 deletions .github/workflows/ci-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ on:
- main
- dev
pull_request:
# ready_for_review matters: the SpecGit Acceptance verdict requires
# required-check runs that started at/after the draft→ready transition
# (#315 anchor). Without this type a ready transition finds only stale
# pre-ready runs and the gate times out waiting for fresh ones.
types: [opened, synchronize, reopened, ready_for_review]
branches:
- main
- dev
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/ci-typecheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ on:
- main
- dev
pull_request:
# ready_for_review matters: the SpecGit Acceptance verdict requires
# required-check runs that started at/after the draft→ready transition
# (#315 anchor). Without this type a ready transition finds only stale
# pre-ready runs and the gate times out waiting for fresh ones.
types: [opened, synchronize, reopened, ready_for_review]
branches:
- main
- dev
Expand Down
Loading
Loading