You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release v2.0.48 to lock planning durability contracts
This release records the planning-session hardening now verified in the working tree: post-save artifact rendering failures surface as structured partial success, and strict planning payload validation is proven through actual OpenCode tool execution paths.
Constraint: Preserve persistence-first planning semantics without widening Flow's public command/tool surface or dependency boundary.
Rejected: Broaden the release into new workflow surfaces or dependency updates | the verified change is a scoped planning contract and release note update.
Rejected: Treat schema-only coverage as sufficient | execution-path tests now guard the adapter wrapper boundary that OpenCode actually calls.
Confidence: high
Scope-risk: moderate
Directive: Keep future planning schema strictness scoped to documented adapter-facing boundaries and keep artifact rendering failures distinguishable from unsaved state failures.
Tested: bun test tests/config/tool-schemas.test.ts; bun run typecheck; bunx biome check tests/config/tool-schemas.test.ts; bun run check; bun run smoke:release; bun run check:fresh-surfaces && bun run check:pack-invariants.
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.48 before push.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+23Lines changed: 23 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,29 @@
2
2
3
3
## [Unreleased]
4
4
5
+
## [2.0.48] - 2026-05-14
6
+
7
+
Lock planning validation and post-save artifact recovery
8
+
9
+
Flow 2.0.48 closes the release-review gaps around planning-session durability and OpenCode planning payload validation. `flow_plan_start` now preserves the saved source-of-truth session when artifact rendering fails after persistence, returning a structured `partial_success` response with artifact-sync failure metadata instead of throwing after the mutation was already durable.
10
+
11
+
Planning payload strictness is now enforced at the adapter-facing runtime parse boundaries for `flow_plan_apply` and `flow_plan_context_record`. The outer `flow_plan_apply` payload, nested `plan`, nested optional `planning`, and `flow_plan_context_record` planning context reject unknown keys, while simple status/history tools remain intentionally tolerant. New execution-path tests call the actual OpenCode tool `execute()` wrappers to prove validation failures short-circuit through structured JSON errors, not only direct schema `safeParse()` checks.
12
+
13
+
The release deliberately does not add slash commands, runtime tools, prompt modes, state paths, package exports, installer behavior, dependencies, persisted schema migrations, or live OpenCode UI automation. It preserves the existing `@opencode-ai/plugin` and `zod` compatibility boundary.
14
+
15
+
Constraint: Preserve persistence-first planning semantics while making stale artifact rendering an explicit repair signal after saved state
16
+
Constraint: Tighten only the adapter-facing planning payload boundaries; simple read/status tool payloads remain tolerant by contract
17
+
Constraint: Keep `@opencode-ai/plugin` at `1.14.48` and `zod` at `4.1.8`; this release changes no dependency compatibility boundary
18
+
Rejected: Treat post-save artifact rendering failure as a total `flow_plan_start` failure | callers need to know the session was saved and only derived artifacts need repair
19
+
Rejected: Make every tool schema strict | the strictness contract is scoped to planning payload boundaries and preserves tolerant simple tool behavior
20
+
Rejected: Add a new workspace result-kind hierarchy in this release | the current structured `partial_success` response covers callers without widening the runtime action API
21
+
Confidence: high
22
+
Scope-risk: moderate
23
+
Reversibility: clean
24
+
Directive: Keep planning payload strictness scoped to documented adapter-facing boundaries, and keep post-persistence artifact failures distinguishable from unsaved mutation failures
25
+
Tested: `bun test tests/config/tool-schemas.test.ts` (18 pass, 0 fail, 515 expect() calls); `bun run typecheck`; `bunx biome check tests/config/tool-schemas.test.ts`; `bun run check` (release gate passed: dependency contract OK with project/plugin/root `zod=4.1.8`, architecture seams OK, fresh surfaces OK, pack invariants OK for version `2.0.48`, bundle sanity OK, full suite 663 pass/0 fail, lint passed, bench smoke and bench gate passed); `bun run smoke:release` (passed for package `2.0.48`, wrote release-smoke evidence under `prompt-exports/release-smoke/`, real OpenCode CLI not invoked); RepoPrompt Oracle architect review of the execution-path strictness follow-up returned APPROVE
26
+
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag `v2.0.48` before push
27
+
5
28
## [2.0.47] - 2026-05-14
6
29
7
30
Make release smoke safe for reusable evidence directories
A change is strictness-preserving only if **all** clauses hold:
16
16
17
17
1.**Required fields and unions do not widen at the bridge.**
18
-
-`flow_plan_apply` remains `{ plan: PlanArgsSchema.strict(), planning?: PlanningContextArgsSchema.strict() }` at the adapter boundary.
18
+
- Adapter-facing planning payloads reject unknown keys at these object boundaries: outer `flow_plan_apply`, `flow_plan_apply.plan` (`PlanArgsSchema.strict()`), optional `flow_plan_apply.planning` (`PlanningContextArgsSchema.strict()`), and outer `flow_plan_context_record`.
19
+
- This planning strictness is scoped; it is not a global all-tools policy, and intentionally tolerant simple tool schemas remain covered by their own tests.
19
20
- Worker completion continues to be parsed by `WorkerResultArgsSchema`, exported from `src/runtime/schema.ts` and owned internally by `src/runtime/schema-worker-result.ts`, before transition calls.
20
21
21
22
2.**Runtime parse/validation path is never bypassed.**
Lock planning validation and post-save artifact recovery
4
+
5
+
Flow 2.0.48 closes the release-review gaps around planning-session durability and OpenCode planning payload validation. `flow_plan_start` now preserves the saved source-of-truth session when artifact rendering fails after persistence, returning a structured `partial_success` response with artifact-sync failure metadata instead of throwing after the mutation was already durable.
6
+
7
+
Planning payload strictness is now enforced at the adapter-facing runtime parse boundaries for `flow_plan_apply` and `flow_plan_context_record`. The outer `flow_plan_apply` payload, nested `plan`, nested optional `planning`, and `flow_plan_context_record` planning context reject unknown keys, while simple status/history tools remain intentionally tolerant. New execution-path tests call the actual OpenCode tool `execute()` wrappers to prove validation failures short-circuit through structured JSON errors, not only direct schema `safeParse()` checks.
8
+
9
+
The release deliberately does not add slash commands, runtime tools, prompt modes, state paths, package exports, installer behavior, dependencies, persisted schema migrations, or live OpenCode UI automation. It preserves the existing `@opencode-ai/plugin` and `zod` compatibility boundary.
10
+
11
+
Constraint: Preserve persistence-first planning semantics while making stale artifact rendering an explicit repair signal after saved state
12
+
Constraint: Tighten only the adapter-facing planning payload boundaries; simple read/status tool payloads remain tolerant by contract
13
+
Constraint: Keep `@opencode-ai/plugin` at `1.14.48` and `zod` at `4.1.8`; this release changes no dependency compatibility boundary
14
+
Rejected: Treat post-save artifact rendering failure as a total `flow_plan_start` failure | callers need to know the session was saved and only derived artifacts need repair
15
+
Rejected: Make every tool schema strict | the strictness contract is scoped to planning payload boundaries and preserves tolerant simple tool behavior
16
+
Rejected: Add a new workspace result-kind hierarchy in this release | the current structured `partial_success` response covers callers without widening the runtime action API
17
+
Confidence: high
18
+
Scope-risk: moderate
19
+
Reversibility: clean
20
+
Directive: Keep planning payload strictness scoped to documented adapter-facing boundaries, and keep post-persistence artifact failures distinguishable from unsaved mutation failures
21
+
Tested: `bun test tests/config/tool-schemas.test.ts` (18 pass, 0 fail, 515 expect() calls); `bun run typecheck`; `bunx biome check tests/config/tool-schemas.test.ts`; `bun run check` (release gate passed: dependency contract OK with project/plugin/root `zod=4.1.8`, architecture seams OK, fresh surfaces OK, pack invariants OK for version `2.0.48`, bundle sanity OK, full suite 663 pass/0 fail, lint passed, bench smoke and bench gate passed); `bun run smoke:release` (passed for package `2.0.48`, wrote release-smoke evidence under `prompt-exports/release-smoke/`, real OpenCode CLI not invoked); RepoPrompt Oracle architect review of the execution-path strictness follow-up returned APPROVE
22
+
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag `v2.0.48` before push
0 commit comments