Skip to content

Releases: ddv1982/flow-opencode

v2.0.50

14 May 21:39

Choose a tag to compare

[2.0.50] - 2026-05-14

Clarify flow-auto handoff evidence

Flow 2.0.50 makes /flow-auto subagent coordination more explicit without overclaiming what runtime summaries can prove. Flow-auto prompts now require phase-boundary handoff reporting for planning, execution, and review with the exact modes task_subagent, inline_role, and not_supported, so agents expose whether work used an actual OpenCode Task/subagent, stayed inline, or could not use Task.

The release also fixes the reviewed runtime-summary ambiguity: derived task-progress rows are now labeled only as runtime_projection instead of hardcoding not_supported. This keeps status/history/rendered session summaries useful while avoiding a false claim that Task/subagent invocation was unavailable when the row is only a projection.

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.

Constraint: Distinguish actual coordinator handoff decisions from derived runtime progress projections
Constraint: Keep the flow-auto handoff vocabulary narrow and exact: task_subagent, inline_role, and not_supported
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Rejected: Treat runtime task-progress rows as proof of actual child sessions | those rows are derived presentation state, not OpenCode Task telemetry
Rejected: Continue rendering projected rows as not_supported | that falsely implies Task was unavailable, denied, or not permission-allowed
Rejected: Persist new handoff telemetry in this patch | neutral projection labeling fixes the reviewed correctness issue without widening persisted schema
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep actual handoff decisions in prompt/coordinator output separate from runtime-derived presentation rows unless real Task telemetry is intentionally persisted later
Tested: bun test tests/runtime-summary.test.ts tests/runtime-operator-history.test.ts tests/render-fixtures.test.ts tests/runtime/render-snapshot.test.ts tests/config/prompt-contracts.test.ts tests/mode-contracts.test.ts tests/prompt-mode-behavior-eval.test.ts tests/docs-semantic-parity.test.ts tests/docs-stale-reference-policy.test.ts tests/docs-tool-parity.test.ts && bun run typecheck (95 pass, 0 fail, 1 snapshot, 1960 expect() calls; tsc --noEmit passed); bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, architecture seams OK, fresh surfaces OK, release hygiene OK, pack invariants OK for version 2.0.50, bundle sanity OK, full suite 675 pass/0 fail, lint passed, bench smoke and bench gate passed); bun run smoke:release (passed for package 2.0.50, wrote release-smoke evidence under prompt-exports/release-smoke/, real OpenCode CLI not invoked); RepoPrompt review found one semantic blocker before release, and the implemented fix removed hardcoded runtime-projection not_supported evidence
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.50 before push

v2.0.49

14 May 18:20

Choose a tag to compare

[2.0.49] - 2026-05-14

Make final-review behavior accounting proportional

Flow 2.0.49 narrows final-review behavior-risk accounting so broad review scopes no longer require temporal ledgers from declared or unchanged context alone. Grounded review context still triggers concrete async, lifecycle, state, and test-evidence accounting when changed artifacts or reviewed relationships prove those risks are relevant.

The release also rejects duplicate behavior and validation risk classes after canonicalization, tightens prompt-capture scoring so validation coverage only counts when its command was recorded, and updates prompt guidance to follow deliveryPolicy.finalReviewPolicy without padding non-required behavior classes with not_applicable entries.

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.

Constraint: Keep final-review strictness proportional to grounded changed artifacts, review context, and validation evidence rather than declared scope breadth alone
Constraint: Preserve strict behavior accounting for grounded async/event ordering, lifecycle, state, and test-evidence risks
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Rejected: Pad every broad review with non-required not_applicable behavior classes | that encourages shallow ledger noise and obscures real required risks
Rejected: Let validationCoverage satisfy prompt behavior scoring without a recorded validation command | detached validation coverage is weaker than the runtime ledger contract
Rejected: Derive temporal behavior risks from declared review scope alone | broad review declarations are accounting targets, not proof that async/lifecycle/state behavior changed
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep final-review behavior ledgers grounded in changed artifacts, explicit relationships, and recorded validation evidence; do not reintroduce padded non-applicable ledgers for proportional reviews
Tested: bun test tests/runtime/final-review-contracts.test.ts tests/review-prompt-capture.test.ts (44 pass, 0 fail, 252 expect() calls); 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.49, bundle sanity OK, full suite 675 pass/0 fail, lint passed, bench smoke and bench gate passed); bun run smoke:release (passed for package 2.0.49, wrote release-smoke evidence under prompt-exports/release-smoke/, real OpenCode CLI not invoked); RepoPrompt code review found two fixable findings before release; follow-up Oracle review of the implemented fixes found no blockers
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.49 before push

v2.0.48

14 May 15:42

Choose a tag to compare

[2.0.48] - 2026-05-14

Lock planning validation and post-save artifact recovery

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.

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.

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.

Constraint: Preserve persistence-first planning semantics while making stale artifact rendering an explicit repair signal after saved state
Constraint: Tighten only the adapter-facing planning payload boundaries; simple read/status tool payloads remain tolerant by contract
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
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
Rejected: Make every tool schema strict | the strictness contract is scoped to planning payload boundaries and preserves tolerant simple tool behavior
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
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep planning payload strictness scoped to documented adapter-facing boundaries, and keep post-persistence artifact failures distinguishable from unsaved mutation failures
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
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.48 before push

v2.0.47

14 May 14:47

Choose a tag to compare

[2.0.47] - 2026-05-14

Make release smoke safe for reusable evidence directories

Flow 2.0.47 turns the release-smoke review fixes into a releaseable contract. The new smoke:release wrapper now treats --no-keep-assets as a disposable-output mode with a side-effect-free preflight: if any known release-smoke asset, evidence, or checklist file already exists, the command refuses before writing anything, preserving existing diagnostics instead of partially overwriting them.

The wrapper also separates disposable release assets from diagnostic evidence. Successful disposable runs remove only generated upload assets while retaining the JSON/Markdown smoke evidence and manual-live checklist paths that release and PR notes depend on. Child smoke failures now preserve the expected child evidence paths and read the child JSON when available, so the wrapper failure evidence remains useful instead of pointing at missing diagnostics.

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.

Constraint: Harden release-smoke artifact handling without changing the OpenCode plugin runtime surface or release asset format
Constraint: Keep automated smoke bounded to prepared local assets and temporary workspace state; live OpenCode UI validation remains a manual release step
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Rejected: Delete diagnostic evidence during disposable cleanup | emitted evidence paths must remain readable after the command exits
Rejected: Let --no-keep-assets overwrite stale evidence/checklist files before refusing | that makes the safety mode unsafe for reusable directories
Rejected: Broaden this patch into GitHub workflow or product-surface changes | the current change is a local release-smoke contract and documentation hardening patch
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep smoke:release evidence paths durable after each run, and keep manual live OpenCode validation reported separately from automated smoke claims
Tested: bun test tests/cross-area/opencode-smoke.test.ts (7 pass, 0 fail); bun test tests/docs-stale-reference-policy.test.ts tests/docs-semantic-parity.test.ts (5 pass, 0 fail); bun run smoke:release -- --skip-build --output-dir <tmp> --no-keep-assets (passed and retained only diagnostic evidence/checklist files); bun run smoke:release (passed for package 2.0.47, wrote release-smoke evidence under prompt-exports/release-smoke/, real OpenCode CLI not invoked); manual no-clobber repro for pre-existing release-smoke-evidence.json and manual-live-opencode-checklist.md (exit 1, original contents unchanged); bunx biome check scripts/cross-area/release-smoke.mjs tests/cross-area/opencode-smoke.test.ts package.json docs/release-process.md docs/architecture/maintainer-risk-checklist.md --files-ignore-unknown=true; RepoPrompt code review of the uncommitted release-smoke diff found no actionable blockers or important suggestions; bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, architecture seams OK, pack invariants OK for version 2.0.47, bundle sanity OK, full suite 659 pass/0 fail, lint passed, bench smoke and bench gate passed)
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.47 before push

v2.0.46

14 May 10:31

Choose a tag to compare

[2.0.46] - 2026-05-14

Prove release smoke against the artifacts users receive

Flow 2.0.46 closes the release-readiness evidence gap around OpenCode installation smoke testing. The release workflow now prepares the same uploadable assets it publishes (flow.js, flow-skills.tar.gz, install.sh, and uninstall.sh) before running smoke:opencode, then passes those exact local candidates into the smoke runner instead of relying on source-generated defaults.

The new smoke runner installs into a temporary HOME, imports the installed plugin, checks the public bundle surface, checks generated skills, exercises a minimal .flow/** runtime session in an isolated temporary worktree, runs uninstall, and emits JSON/Markdown evidence that clearly separates automated host-boundary smoke from manual live OpenCode UI validation. Local development keeps the default source-generated smoke path, while tests prove the release-shaped explicit-asset path records the expected asset provenance and workspace isolation.

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.

Constraint: Strengthen release evidence for uploadable OpenCode assets without publishing source-generated smoke results as if they proved the release archive
Constraint: Keep automated smoke bounded to local file assets and temporary workspace state; live OpenCode UI validation remains a manual release step
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Rejected: Treat default source-generated smoke evidence as release-asset validation | that could overclaim readiness for the files users actually install from GitHub releases
Rejected: Invoke a real OpenCode CLI/UI host from CI | the automated smoke should stay deterministic and sandboxed while documenting the remaining manual host validation
Rejected: Broaden this patch into product-surface changes | the current change is release evidence and documentation only
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep automated smoke evidence tied to the actual prepared release assets, and keep manual live OpenCode validation reported separately from CI smoke claims
Tested: bun test tests/cross-area/opencode-smoke.test.ts (1 pass, 0 fail); bun run smoke:opencode -- --skip-build --json <tmp>/default-evidence.json --summary <tmp>/default-evidence.md (passed with assetSource=generated-defaults and isolated worktree .flow/** evidence); bun test tests/cross-area/install-lifecycle.test.ts tests/smoke/dist-load.test.ts (3 pass, 0 fail); RepoPrompt Oracle review of the release-smoke diff found no concrete must-fix findings; bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, architecture seams OK, fresh surfaces OK, bundle sanity OK, full suite 653 pass/0 fail, lint passed, bench smoke and bench gate passed)
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.46 before push

v2.0.45

14 May 09:13

Choose a tag to compare

[2.0.45] - 2026-05-14

Harden review-schema and activation rollback contracts

Flow 2.0.45 closes the review-found safety gaps in the OpenCode adapter and live session activation paths. Hidden workspace mutations now fail closed when the adapter needs OpenCode edit approval but no ToolContext.ask bridge is available, preventing permissionless writes under hidden project roots while preserving direct runtime support for hidden home workspaces.

Final-review tool schemas now advertise the same structured reviewContextPack shape that runtime validation accepts. The adapter no longer blesses compact unknown[] context, relationship, or validation-evidence entries that would pass the public OpenCode raw schema and then fail during runtime parsing; parity tests now prove both sides accept structured evidence and reject compact drift, including nested final reviews in worker completion payloads.

Live session activation is rollback-safe across both save-driven promotion and direct activateSession() promotion. If a requested stored session cannot be promoted after the prior active session is parked, Flow restores the prior active session where possible. Rollback failures now raise SessionActivationRollbackError with structured promotionError, rollbackError, and rollbackPhase diagnostics instead of burying one side of the failure in prose.

The release deliberately does not add slash commands, runtime tools, prompt modes, state paths, package exports, installer behavior, dependencies, or persisted schema migrations. It preserves the existing @opencode-ai/plugin and zod compatibility boundary.

Constraint: Close reviewed adapter/runtime schema drift and activation rollback diagnostics without widening Flow's public command/tool surface or persisted session schema
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Constraint: Preserve hidden-home runtime usability while failing closed only at the OpenCode adapter mutation-permission boundary
Rejected: Normalize compact string-array review context into structured runtime evidence | compact entries lack required path/reason/relationship fields and would create ambiguous review evidence
Rejected: Add new recovery commands or state paths for activation rollback failures | the existing session layout can remain coherent with narrower rollback behavior and structured diagnostics
Rejected: Broaden the release into general runtime simplification | the current change is a focused review-fix patch with behavior-locked tests
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep OpenCode raw schemas execution-valid against runtime parsers, keep hidden-root mutation permission fail-closed, and preserve structured diagnostics for multi-error filesystem recovery paths
Tested: bun test tests/config/tool-schemas.test.ts tests/runtime-session-persistence.test.ts && bun run typecheck (37 pass, 0 fail); RepoPrompt Oracle review of the review-fix diff found no concrete must-fix regression or test inadequacy; bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, architecture seams OK, bundle sanity reported 7 agents, 9 commands, 18 tools, full suite 652 pass/0 fail, lint passed, bench smoke and bench gate passed)
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.45 before push

v2.0.44

14 May 08:27

Choose a tag to compare

[2.0.44] - 2026-05-14

Lock maintenance guardrails before release

Flow 2.0.44 turns the latest quality review into small, behavior-locked maintenance guardrails. flow_reset_feature ownership metadata now points at the actual review transition owner, and descriptor/core-action parity coverage verifies emitted events and invariant IDs so registry drift is caught before release.

The release also clarifies architecture governance without widening the hard seam checker: src/prompts/** and src/audit/** are documented as governed projection surfaces outside the core/workflow/runtime/adapters layer-edge checker, with tests proving the checker does not partially enforce those projection imports.

Runtime mutation finalization now distinguishes artifact-rendering failures after persistence from unsaved mutation failures. Successful and no-op mutations whose .flow source-of-truth state is already saved report partial success with artifact-sync failure metadata, while failed transitions that persist recovery state remain failures and include the same artifact-sync evidence. Session persistence policy is also explicit: version 1 sessions remain the only supported persisted schema, and future versions are rejected rather than silently downgraded.

The release deliberately does not add slash commands, runtime tools, prompt modes, state paths, package exports, installer behavior, dependencies, or schema migrations. It preserves the existing @opencode-ai/plugin and zod compatibility boundary.

Constraint: Reduce registry, seam-policy, mutation-finalization, and session-version maintenance risk without widening Flow's public command/tool surface or persisted schema contract
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Constraint: Preserve persistence-first session semantics while making stale artifact rendering an explicit partial-success/recovery signal
Rejected: Collapse all tool/schema/mode metadata into a new manifest in this release | a broad projection rewrite would be riskier than focused parity coverage for the reviewed drift
Rejected: Expand the hard architecture seam checker to prompts/audit immediately | those surfaces intentionally project cross-cutting contracts and need projection-specific governance before layer-edge denial
Rejected: Add session migration logic for hypothetical future versions | the current release only documents and tests the existing version-1-only policy
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep future registry/projection changes covered by parity tests, keep prompt/audit governance explicit, and treat artifact sync failures after saved state as projection repair work rather than lost mutation state
Tested: bun run typecheck; bun test tests/config/tool-schemas.test.ts tests/mode-contracts.test.ts tests/cross-area/architecture-seams.test.ts tests/runtime-mutation-finalization.test.ts tests/runtime-session-persistence.test.ts tests/cross-area/module-scope-schemas.test.ts (55 pass, 0 fail); bun run check:architecture-seams:enforce; RepoPrompt Oracle review of the uncommitted maintenance diff found no actionable findings; bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, architecture seams OK, pack invariants OK for version 2.0.44, bundle sanity reported 7 agents, 9 commands, 18 tools, full suite 644 pass/0 fail, lint passed, bench smoke and bench gate passed)
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.44 before push

v2.0.43

14 May 07:57

Choose a tag to compare

[2.0.43] - 2026-05-14

Return attachment ownership to native OpenCode

Flow 2.0.43 removes the Flow-owned OpenCode attachment materialization bridge after confirming native OpenCode image/file attachment handling is the correct owner for ordinary chat context. The plugin no longer registers chat or command attachment capture hooks, and flow_auto_prepare no longer reports attachment availability, attachmentGuidance, or materialization requirements.

The public Flow tool surface shrinks from nineteen tools to eighteen by removing flow_attachments_materialize. The deleted adapter attachment store, selection, policy, materialization tool, and behavior tests remove the in-memory byte-retention and workspace-file write path that had made Flow responsible for a host capability it should not duplicate.

The release keeps the change intentionally scoped: no slash commands, state paths, package exports, installer behavior, runtime workflow modes, persisted session schemas, package dependencies, or OpenCode SDK compatibility boundaries change. Native OpenCode remains responsible for attached images/files; Flow remains responsible for workflow JSON/state under .flow/** and derived docs.

Constraint: Remove Flow-owned attachment capture and materialization from normal public operation while preserving native OpenCode attachment behavior as host/model context
Constraint: Keep the release as a surface contraction, not a replacement attachment system; no new tools, commands, state paths, package exports, dependencies, or workflow modes are added
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Rejected: Keep flow_attachments_materialize as a hidden compatibility shim | retaining the obsolete workspace-mutating bridge would preserve the ownership confusion and public-surface maintenance cost
Rejected: Rebuild a smaller Flow attachment cache with byte caps | the product decision is to let native OpenCode own ordinary attachments rather than make Flow a second attachment subsystem
Rejected: Rewrite historical release/investigation notes that described the previous bridge | historical docs should remain evidence of prior decisions, while current docs and contracts now describe native ownership
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Do not reintroduce Flow-owned attachment capture/materialization unless a new explicit product requirement proves native OpenCode context is insufficient and includes a fresh threat model, byte-retention policy, workspace-write policy, and tests
Tested: bun test tests/config/plugin-surface.test.ts tests/config/tool-schemas.test.ts tests/config/prompt-contracts.test.ts tests/auto-prepare.test.ts tests/runtime-tools-metadata.test.ts tests/runtime-tool-routing.test.ts tests/smoke/dist-load.test.ts tests/mode-contracts.test.ts tests/docs-tool-parity.test.ts tests/descriptor-family-parity.test.ts tests/protocol-parity.test.ts (90 pass, 0 fail); bun test tests/config/plugin-surface.test.ts tests/auto-prepare.test.ts tests/config/tool-schemas.test.ts tests/docs-tool-parity.test.ts (34 pass, 0 fail); bun run typecheck; bun run lint; RepoPrompt Oracle review of the uncommitted attachment-downgrade diff found no issues; bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, architecture seams OK, pack invariants OK for version 2.0.43, bundle sanity reported 7 agents, 9 commands, 18 tools, full suite 635 pass/0 fail, lint passed, bench smoke and bench gate passed)
Not-tested: Live OpenCode UI runtime interaction with image attachments; live GitHub-hosted release workflow run for tag v2.0.43 before push

v2.0.42

14 May 07:17

Choose a tag to compare

[2.0.42] - 2026-05-14

Simplify maintainer risk guidance and completion-gate internals

Flow 2.0.42 continues the delete-first simplification line without widening the public surface. The maintainer risk checklist is now a compact non-canonical pointer to the canonical maintainer contract and contributor map instead of a second copy of boundary policy, reducing current-facing documentation drift risk.

The runtime cleanup stays intentionally small: execution-completion-validation.ts no longer carries a private reviewer-decision helper with duplicated final-path logic. The non-final reviewer-decision behavior is inlined where it is used, while completion gate ordering, failure messages, recovery metadata, final-review coverage checks, schemas, persistence behavior, package exports, dependencies, installer behavior, slash commands, runtime tools, state paths, and workflow modes remain unchanged.

Fresh simplification metrics after the pass: runtime files 124, runtime LOC 17,480, large runtime files 7, top-5 runtime-file LOC share 9.7%, and architecture seam violations 0. The largest runtime files are now schema-review-shared.ts (353 LOC), execution-completion-validation.ts (347), session-presenters.ts (341), final-review-coverage.ts (332), and session-actions.ts (326). Compared with v2.0.41, the release lowers the completion-validation hotspot by 10 LOC and keeps seam violations at zero.

Constraint: Preserve Flow's public tool names, command names, runtime response envelopes, .flow/** state paths, package exports, installer behavior, completion/reviewer gate semantics, and OpenCode SDK dependency contract while simplifying duplicated guidance and private helper logic
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Constraint: Keep final-feature reviewer approval, final-review coverage, failure messages, and recovery metadata behavior locked while deleting only private redundant logic
Rejected: Delete or weaken completion/reviewer/final-review gates for a larger LOC reduction | those checks are load-bearing runtime safety contracts
Rejected: Keep detailed boundary-hotspot guidance duplicated in the non-canonical checklist | duplicated current-facing authority increases drift risk relative to the canonical docs
Rejected: Broaden the cleanup into additional runtime hotspots before release | one hotspot per pass keeps the simplification diff reviewable and behavior-locked
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Continue simplification one hotspot at a time; keep detailed current-facing authority in docs/maintainer-contract.md and docs/contributor-map.md, and preserve completion-gate tests before editing reviewer/final-review validation paths
Tested: bun test tests/docs-stale-reference-policy.test.ts tests/docs-semantic-parity.test.ts (5 pass, 0 fail); bun run test:fast (16 pass, 0 fail); bun run gate:completion-lane (124 pass, 0 fail); bun run check:architecture-seams:enforce (0 blocked imports); bun run typecheck; bun run report:runtime-simplification-metrics (runtime.totalLoc=17480, seamViolationCount=0); bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, pack invariants OK for version 2.0.42, 662 pass, 0 fail, lint passed, bench smoke passed, bench gate passed)
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.42 before push

v2.0.41

14 May 06:55

Choose a tag to compare

[2.0.41] - 2026-05-14

Publish release-only continuity evidence

Flow 2.0.41 is a release-only patch that carries forward the v2.0.40 runtime contract under a fresh package version and tag. There were no implementation commits after v2.0.40; this release records that continuity explicitly so the GitHub release notes, package version, changelog, and release archive all describe the same artifact boundary.

The public surface remains frozen: no slash commands, runtime tools, prompt contracts, state paths, package exports, dependencies, installer behavior, OpenCode SDK contract, or workflow modes change. The existing @opencode-ai/plugin and zod versions remain aligned at the already-reviewed SDK compatibility point.

This release deliberately does not claim new runtime behavior or simplification metrics beyond the v2.0.40 baseline. Its purpose is to publish a clean release note in the lore format before any further runtime or adapter work resumes.

Constraint: Preserve the exact v2.0.40 runtime behavior, public command/tool surface, package exports, installer behavior, .flow/** state paths, and OpenCode SDK dependency contract while issuing a fresh release tag
Constraint: Keep @opencode-ai/plugin at 1.14.48 and zod at 4.1.8; this release changes no dependency compatibility boundary
Rejected: Add a runtime code change merely to justify the patch version | the requested release can be represented honestly as release metadata plus package version alignment
Rejected: Recompute simplification claims as if behavior changed | no implementation delta exists after v2.0.40, so v2.0.41 should point to continuity instead of new metrics
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Treat v2.0.41 as a release-only continuity marker; future behavior changes should start from v2.0.40/v2.0.41's frozen surface assumptions and carry their own focused verification evidence
Tested: git describe --tags --abbrev=0 returned v2.0.40; git log v2.0.40..HEAD returned no commits before the release metadata bump; bun run check (release gate passed: dependency contract OK with project/plugin/root zod=4.1.8, pack invariants OK for version 2.0.41, 662 pass, 0 fail, lint passed, bench smoke passed, bench gate passed)
Not-tested: Live OpenCode UI runtime interaction; live GitHub-hosted release workflow run for tag v2.0.41 before push