Skip to content

Commit e948a07

Browse files
committed
fix: move zod to peerDependencies so plugin shares OpenCode's zod instance
## High level changes - `packages/opencode-plugin/package.json`: Moved `zod` from `dependencies` to `peerDependencies` (version `>=4.1.8`), marked as non-optional - `pnpm-lock.yaml`: Updated to reflect the dependency change - `.vibe/development-plan-fix-opencode-plugin-parameter-descriptions.md`: Added EPCC plan documenting root cause analysis and fix strategy ## Motivation Parameter descriptions defined via `.describe()` on Zod schemas in our plugin tools were silently stripped from the JSON Schema sent to the LLM. This caused the AI to not understand parameter meanings — most critically, which workflow names are valid for `start_development`, leading to incorrect workflow selection. Root cause: our plugin loaded its own Zod 4.3.6 instance while OpenCode used Zod 4.1.8. In Zod v4, `.describe()` stores descriptions in a module-level `globalRegistry` singleton. Since two separate instances were loaded, the plugin registered descriptions in its own registry, but OpenCode's `z.toJSONSchema()` read from its own (empty) registry — resulting in all descriptions being absent. ## Details - `tsup.config.ts` already had `external: ['zod']`, meaning zod was architecturally intended to be provided by the host — but `package.json` still listed it as a `dependency`, causing pnpm to install a separate copy in the plugin's `node_modules` - Moving zod to `peerDependencies` ensures consumers (OpenCode) provide their own zod instance, so both sides share a single `globalRegistry` - All 5 tool handlers that use `.describe()` benefit: `start_development`, `proceed_to_phase`, `conduct_review`, `reset_development`, `setup_project_docs` - No source code changes required — the `.describe()` calls in tool handlers remain identical
1 parent 300c18b commit e948a07

5 files changed

Lines changed: 138 additions & 5 deletions

File tree

.beads/issues.jsonl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,20 @@
348348
{"id":"responsible-vibe-33.1.3","title":"Update documentation links and references","status":"open","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-04-22T06:19:17.167665+02:00","created_by":"Oliver Jägle","updated_at":"2026-04-22T06:19:17.167665+02:00","dependencies":[{"issue_id":"responsible-vibe-33.1.3","depends_on_id":"responsible-vibe-33.1","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
349349
{"id":"responsible-vibe-33.2","title":"Implement","description":"Write clean, focused code for the minor enhancement, test your changes, and prepare for commit. **STEP 1: Review Design and Requirements** - If exists: Follow your design from - Otherwise: Elaborate design options and present them to the user - If exists: Ensure the relevant requirements from are met - Otherwise: Ensure existing requirements are met based on your task context **STEP 2: Implement Changes** - Write clean, focused code for the minor enhancement - Test your changes to ensure they work correctly and don't break existing functionality **STEP 3: Prepare for Finalization** - Update task progress as needed - Prepare documentation and commit when ready","status":"open","priority":3,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-04-22T06:18:43.200189+02:00","created_by":"Oliver Jägle","updated_at":"2026-04-22T06:18:43.200189+02:00","dependencies":[{"issue_id":"responsible-vibe-33.2","depends_on_id":"responsible-vibe-33","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"responsible-vibe-33.2","depends_on_id":"responsible-vibe-33.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]}
350350
{"id":"responsible-vibe-33.3","title":"Finalize","description":"Ensure code quality and documentation accuracy through systematic cleanup and review. **STEP 1: Code Cleanup** Systematically clean up development artifacts: - **Remove Debug Output**: Search for and remove all temporary debug output statements used during development. Look for language-specific debug output methods (console logging, print statements, debug output functions). Remove any debugging statements that were added for development purposes. - **Review TODO/FIXME Comments**: - Address each TODO/FIXME comment by either implementing the solution or documenting why it's deferred - Remove completed TODOs - Convert remaining TODOs to proper issue tracking if needed - **Remove Debugging Code Blocks**: - Remove temporary debugging code, test code blocks, and commented-out code - Clean up any experimental code that's no longer needed - Ensure proper error handling replaces temporary debug logging **STEP 2: Documentation Review** Review and update documentation to reflect final implementation: - **Update Long-Term Memory Documents**: Based on what was actually implemented: - If exists: Update if requirements changed during development - If exists: Update if design details were refined or changed - **Compare Against Implementation**: Review documentation against actual implemented functionality - **Update Changed Sections**: Only modify documentation sections that have functional changes - **Remove Development Progress**: Remove references to development iterations, progress notes, and temporary decisions - **Focus on Final State**: Ensure documentation describes the final implemented state, not the development process - **Ask User to Review Document Updates** **STEP 3: Final Validation** - Run existing tests to ensure cleanup didn't break functionality - Verify documentation accuracy with a final review - Ensure minor enhancement is ready for delivery - Update task progress and mark completed work as you finalize the minor enhancement","status":"open","priority":3,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-04-22T06:18:43.386927+02:00","created_by":"Oliver Jägle","updated_at":"2026-04-22T06:18:43.386927+02:00","dependencies":[{"issue_id":"responsible-vibe-33.3","depends_on_id":"responsible-vibe-33","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"responsible-vibe-33.3","depends_on_id":"responsible-vibe-33.2","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]}
351+
{"id":"responsible-vibe-34","title":"workflows: epcc (development-plan-fix-opencode-plugin-parameter-descriptions.md)","description":"Responsible vibe engineering session using epcc workflow for workflows","status":"open","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:29:23.994469+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:29:23.994469+02:00"}
352+
{"id":"responsible-vibe-34.1","title":"Explore","description":"Figure out the INTENT of the users instructions. Research the codebase to understand existing patterns and gather context about the problem space. - If uncertain about conventions or rules, ask the user about them - Read relevant files and documentation - If exists: Understand and document requirements there - Otherwise: Document requirements in your task management system Focus on understanding without writing code yet. Document your findings and create tasks as needed.","status":"open","priority":3,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:29:24.384883+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:29:24.384883+02:00","dependencies":[{"issue_id":"responsible-vibe-34.1","depends_on_id":"responsible-vibe-34","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
353+
{"id":"responsible-vibe-34.1.1","title":"Reproduce the bug: verify parameter descriptions are missing when passed to OpenCode","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:34:28.125241+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:34:43.596967+02:00","closed_at":"2026-05-07T17:34:43.596967+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.1.1","depends_on_id":"responsible-vibe-34.1","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
354+
{"id":"responsible-vibe-34.1.2","title":"Find root cause: why descriptions are not passed through","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:34:28.351866+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:36:49.556268+02:00","closed_at":"2026-05-07T17:36:49.556268+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.1.2","depends_on_id":"responsible-vibe-34.1","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
355+
{"id":"responsible-vibe-34.1.3","title":"Document findings and key decisions in plan file","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:34:28.581855+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:38:33.481193+02:00","closed_at":"2026-05-07T17:38:33.481193+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.1.3","depends_on_id":"responsible-vibe-34.1","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
356+
{"id":"responsible-vibe-34.2","title":"Plan","description":"Create a detailed implementation strategy based on your exploration: - If exists: Base your strategy on requirements from it - Otherwise: Use existing task context Break down the work into specific, actionable tasks. Consider edge cases, dependencies, and potential challenges. - If architectural changes needed and exists: Document in - Otherwise: Create tasks to track architectural decisions - If exists: Adhere to the design in it - Otherwise: Elaborate design options and present them to the user Document the planning work thoroughly and create implementation tasks as part of the code phase as needed.","status":"open","priority":3,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:29:24.614607+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:29:24.614607+02:00","dependencies":[{"issue_id":"responsible-vibe-34.2","depends_on_id":"responsible-vibe-34","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"responsible-vibe-34.2","depends_on_id":"responsible-vibe-34.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]}
357+
{"id":"responsible-vibe-34.2.1","title":"Design: registry bridge in tool-helper.ts","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:46:42.041381+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:48:47.248577+02:00","closed_at":"2026-05-07T17:48:47.248577+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.2.1","depends_on_id":"responsible-vibe-34.2","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
358+
{"id":"responsible-vibe-34.2.2","title":"Verify: check all tool files use .describe() correctly","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:46:42.28365+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:46:54.663435+02:00","closed_at":"2026-05-07T17:46:54.663435+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.2.2","depends_on_id":"responsible-vibe-34.2","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
359+
{"id":"responsible-vibe-34.2.3","title":"Document implementation plan in plan file","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:46:42.50771+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:49:02.584+02:00","closed_at":"2026-05-07T17:49:02.584+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.2.3","depends_on_id":"responsible-vibe-34.2","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
360+
{"id":"responsible-vibe-34.3","title":"Code","description":"Follow your plan to build the solution: - If exists: Follow the design from it - Otherwise: Elaborate design options and present them to the user - If exists: Build according to the architecture from it - Otherwise: Elaborate architectural options and present them to the user - If exists: Ensure requirements from it are met - Otherwise: Ensure existing requirements are met based on your task context Write clean, well-structured code with proper error handling. Prevent regression by building, linting, and executing existing tests. Stay flexible and adapt the plan as you learn more during implementation. Update task progress and create new tasks as needed.","status":"open","priority":3,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:29:24.846625+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:29:24.846625+02:00","dependencies":[{"issue_id":"responsible-vibe-34.3","depends_on_id":"responsible-vibe-34","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"responsible-vibe-34.3","depends_on_id":"responsible-vibe-34.2","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]}
361+
{"id":"responsible-vibe-34.3.1","title":"Move zod to peerDependencies in package.json","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:50:35.761459+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:50:59.358892+02:00","closed_at":"2026-05-07T17:50:59.358892+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.3.1","depends_on_id":"responsible-vibe-34.3","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
362+
{"id":"responsible-vibe-34.3.2","title":"Run pnpm install to update lock file","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:50:35.968498+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:51:12.461356+02:00","closed_at":"2026-05-07T17:51:12.461356+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.3.2","depends_on_id":"responsible-vibe-34.3","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
363+
{"id":"responsible-vibe-34.3.3","title":"Build and verify no TypeScript errors","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:50:36.175905+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:51:19.586457+02:00","closed_at":"2026-05-07T17:51:19.586457+02:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-34.3.3","depends_on_id":"responsible-vibe-34.3","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
364+
{"id":"responsible-vibe-34.4","title":"Commit","description":"Ensure code quality and documentation accuracy through systematic cleanup and review. **STEP 1: Code Cleanup** Systematically clean up development artifacts: 1. **Remove Debug Output**: Search for and remove all temporary debug output statements used during development. Look for language-specific debug output methods (console logging, print statements, debug output functions). Remove any debugging statements that were added for development purposes. 2. **Review TODO/FIXME Comments**: - Address each TODO/FIXME comment by either implementing the solution or documenting why it's deferred - Remove completed TODOs - Convert remaining TODOs to proper issue tracking if needed 3. **Remove Debugging Code Blocks**: - Remove temporary debugging code, test code blocks, and commented-out code - Clean up any experimental code that's no longer needed - Ensure proper error handling replaces temporary debug logging **STEP 2: Documentation Review** Review and update documentation to reflect final implementation: 1. **Update Long-Term Memory Documents**: Based on what was actually implemented: - If exists: Update it if requirements changed during development - If exists: Update it if architectural impacts were identified - If exists: Update it if design details were refined or changed - Otherwise: Document any changes in the plan file 2. **Compare Against Implementation**: Review documentation against actual implemented functionality 3. **Update Changed Sections**: Only modify documentation sections that have functional changes 4. **Remove Development Progress**: Remove references to development iterations, progress notes, and temporary decisions 5. **Focus on Final State**: Ensure documentation describes the final implemented state, not the development process 6. **Ask User to Review Document Updates** **STEP 3: Final Validation** - Run existing tests to ensure cleanup didn't break functionality - Verify documentation accuracy with a final review - Ensure code is ready for production/delivery Update task progress and mark completed work as you finalize the feature.","status":"open","priority":3,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-05-07T17:29:25.065441+02:00","created_by":"Oliver Jägle","updated_at":"2026-05-07T17:29:25.065441+02:00","dependencies":[{"issue_id":"responsible-vibe-34.4","depends_on_id":"responsible-vibe-34","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"responsible-vibe-34.4","depends_on_id":"responsible-vibe-34.3","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]}
351365
{"id":"responsible-vibe-4","title":"Responsible-Vibe Development: responsible-vibe","description":"Development session using minor workflow for responsible-vibe","status":"open","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-01-20T08:45:26.033247+01:00","created_by":"Oliver Jägle","updated_at":"2026-01-20T08:45:26.033247+01:00"}
352366
{"id":"responsible-vibe-4.1","title":"Explore","description":"minor workflow explore phase tasks","status":"open","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-01-20T08:45:26.241377+01:00","created_by":"Oliver Jägle","updated_at":"2026-01-20T08:45:26.241377+01:00","dependencies":[{"issue_id":"responsible-vibe-4.1","depends_on_id":"responsible-vibe-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}
353367
{"id":"responsible-vibe-4.1.1","title":"Analyze current verbose task management sections in plan file templates","status":"closed","priority":2,"issue_type":"task","owner":"github@beimir.net","created_at":"2026-01-20T08:46:16.960883+01:00","created_by":"Oliver Jägle","updated_at":"2026-01-20T08:46:58.154323+01:00","closed_at":"2026-01-20T08:46:58.154323+01:00","close_reason":"Closed","dependencies":[{"issue_id":"responsible-vibe-4.1.1","depends_on_id":"responsible-vibe-4.1","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]}

.beads/last-touched

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
responsible-vibe-33.1.3
1+
responsible-vibe-34.3.3

0 commit comments

Comments
 (0)