Skip to content

feat!: publish versioned plugin SDKs with compatibility checks - #4534

Merged
zeval merged 66 commits into
mainfrom
feature/plan-work-for-issue-46a
Oct 28, 2026
Merged

zeval merged 66 commits into
mainfrom
feature/plan-work-for-issue-46a

Conversation

@zeval

@zeval zeval commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Tip

PR walkthrough: Open the visual walkthrough

Plugin authors can compile and typecheck against published Go/npm SDKs without a sibling Kandev source checkout. This implements SDK extraction, installed-dependency compatibility checks, and verified Stable publication for #4358. The first public release and external repository migrations remain outstanding.

Implementation

  • Extract github.com/kdlbs/kandev/pluginsdk, including the canonical protocol, and migrate host imports. Update host builds, Docker/preview layouts, and CI selection for the separate module.
  • Publish runtime-free @kdlbs/plugin-sdk types. Go and npm share an independent SDK version starting at 0.1.0, release records, pinned packing tools, and a verified archive inventory.
  • Add kandev-sdk-check. It checks the actual selected Go module and installed npm/pnpm dependency evidence, Stable host minimum, highest consumed SDK floor, and supported API versions. It supports npm hoisting, checkout aliases, and pnpm managed-store links while rejecting local SDK substitutions. Workspace locks have a 32 MiB limit; manifests and release records retain a 1 MiB limit.
  • Add protected signing/retention and separate OIDC publication jobs. Signed source identity, exact archive/receipt verification, immutable retries, bootstrap recovery, and clean public consumers gate Stable completion and contributor notices.
  • Update public author/release guides, requirements/design, SDK READMEs, author inventory, and migration handoffs for both external templates. Backend-owned plugin-pack still requires a separately pinned tooling checkout or equivalent validated packaging.

Compatibility

Old Go imports must migrate; there is no forwarding package. Frontend source consumers must replace the former local @kandev/plugin-sdk name in dependencies, imports, and lockfiles. Already-built plugins retain the same wire protocol and handshake. A real legacy subprocess test verifies handshake and a Host state roundtrip, but does not certify every third-party plugin or frontend bundle. Adopting a newer SDK can raise a plugin's minimum supported host. SDK numbering remains independent of host and plugin versions.

Reliability and validation

Integrated main through 3f3aabc53f23cc8b08f0bf2b1b766b88fbeaf7f2 in
4e965e8393efbefea386f333bd042757ae2804e7. The preceding merge resolves
review-scroll and silent-output fixture conflicts. Review input cancels a
pending restoration before enabling marking, while retaining main's touch
contact support and mouse/pen restrictions. Shared unique gates retain the
silent-output and completion holds. The Go module keeps main's new ACP
replacement plus the standalone SDK requirement/local replacement.

  • Local verification passes 135 focused frontend tests, full typecheck, module tidy/verify, scoped lint and backend rich-output race checks. All 30 freshly rebuilt browser cases pass with retries disabled: 23 locale, three desktop and four phone cases. Documentation coverage passes 36 work orders and 118 linked documents.
  • Main advanced again to d17d84a8084b15ddf1df10ff465a51d27c780e64. The exact synthetic merge f45a92e02e7166c51a4eb2d1919ae37a82619642 is conflict-free and passes 107 focused image/rendering/review tests plus docs/spec validation (414 decisions / 1,802 specifications). It was tested in an owned temporary worktree and was not pushed.
  • SDK source, npm packaging, signing/publication scripts and protected release automation are unchanged by reconciliation. The Windows persistence compilation allowance remains twenty minutes; test deadlines, race flags and required gating remain intact. Recovered E2E retries remain informational; exhausted failures still block.
  • Fresh checks for this head are required in the check rollup. The preceding head's 95 green checks are historical. Normal commit hooks pass without bypass.
  • The operator owns the PR merge. No SDK publication, release dispatch, protected-setting change, external migration or notification was performed. NOTIFICATION_GUIDE.md remains uncommitted.

Implementation plan and receipts · Adversarial review record

Release prerequisites

No release was dispatched or SDK published by this task. Actual Stable preparation must resolve the initial host metadata. Authenticated npm checks confirm zval owns the kdlbs organization. Maintainers must record ownership confirmation in release and release-validation, configure trusted publishing with direct-publish and dist-tag permissions, and handle any first-package bootstrap using the exact retained archive. Public verification must pass before announcing availability. External template/plugin migrations and author notifications remain separate work.

Eleven external migration tasks remain queued, with briefs updated to the selected namespace. Petdex and Augpool are retired.

Related: #4358. This PR is ready for review. Do not close the issue from this delivery.

Checklist

  • If I do not have repository write access and this is a large architectural change, I discussed the direction in a linked issue before opening this PR.
  • This PR contains one logical change; unrelated work is split into separate PRs.
  • I have performed a self-review of my code.
  • I have manually tested my changes and they work as expected.
  • My changes have tests that cover the new functionality and edge cases.
  • If my change touches UI files (apps/web/), I have added or updated Playwright e2e tests in apps/web/e2e/ and verified them with make test-e2e.
  • I checked whether this affects public docs in docs/public/** and updated them or noted why no docs change is needed.

View guided diff

@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 487 files, which is 337 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: QUIET
  • Plan: Advanced
  • Run ID: 39599b75-3921-4823-b4c8-d69df4fc38dc
Commits

Reviewing files that changed from the base of the PR and between 3f3aabc and 4e965e8.

Files ignored due to path filters: 4
  • apps/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • pluginsdk/go.sum is excluded by !**/*.sum
  • pluginsdk/proto/kandev/plugin/v1/plugin.pb.go is excluded by !**/*.pb.go
  • pluginsdk/proto/kandev/plugin/v1/plugin_grpc.pb.go is excluded by !**/*.pb.go
Files selected for processing: 487
  • .agents/skills/create-kandev-plugin/SKILL.md
  • .agents/skills/pr-walkthrough/references/impact.md
  • .agents/skills/release/SKILL.md
  • .dockerignore
  • .github/scripts/announce-discord-release-workflow-contract_test.py
  • .github/scripts/backend-tests-workflow-contract_test.py
  • .github/scripts/go-cache-identity.mjs
  • .github/scripts/go-cache-identity.test.mjs
  • .github/scripts/plugin-sdk-ci-contract_test.py
  • .github/scripts/preview-env-workflow-contract_test.py
  • .github/scripts/release-workflow-contract_test.py
  • .github/workflows/backend-tests.yml
  • .github/workflows/e2e-tests.yml
  • .github/workflows/frontend-tests.yml
  • .github/workflows/preview-env.yml
  • .github/workflows/release.yml
  • .gitignore
  • AGENTS.md
  • apps/backend/.golangci.yml
  • apps/backend/AGENTS.md
  • apps/backend/Makefile
  • apps/backend/cmd/plugin-fixture/automation.go
  • apps/backend/cmd/plugin-fixture/executor_provider.go
  • apps/backend/cmd/plugin-fixture/executor_provider_test.go
  • apps/backend/cmd/plugin-fixture/fixture_package_test.go
  • apps/backend/cmd/plugin-fixture/main.go
  • apps/backend/cmd/plugin-fixture/main_test.go
  • apps/backend/cmd/plugin-fixture/managed_conversation_actions.go
  • apps/backend/cmd/plugin-fixture/plugin.go
  • apps/backend/cmd/preview/build.go
  • apps/backend/cmd/preview/sdk_layout_test.go
  • apps/backend/go.mod
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_callbacks.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_cleanup_recovery_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_cleanup_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_git_identity_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_launch_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_provider_validation_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_recovery.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_recovery_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_retained.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_status.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_status_test.go
  • apps/backend/internal/agent/runtime/lifecycle/executor_plugin_validation.go
  • apps/backend/internal/agent/runtime/lifecycle/manager_auth_test.go
  • apps/backend/internal/agent/runtime/lifecycle/manager_plugin_executor_reopen_test.go
  • apps/backend/internal/agent/runtime/lifecycle/recovery_launch_coalescing.go
  • apps/backend/internal/agent/runtime/lifecycle/recovery_launch_coalescing_test.go
  • apps/backend/internal/agent/runtime/lifecycle/startup_housekeeping_test.go
  • apps/backend/internal/automation/impossible_schedule_validation_test.go
  • apps/backend/internal/automation/managed_delivery.go
  • apps/backend/internal/automation/managed_destination_test.go
  • apps/backend/internal/automation/managed_schedule_service.go
  • apps/backend/internal/automation/plugin_webhook.go
  • apps/backend/internal/automation/plugin_webhook_regression_test.go
  • apps/backend/internal/automation/plugin_webhook_test.go
  • apps/backend/internal/automation/plugin_webhook_types.go
  • apps/backend/internal/automation/plugin_webhook_worker.go
  • apps/backend/internal/backendapp/adapters_agent_conversations.go
  • apps/backend/internal/backendapp/adapters_agent_conversations_test.go
  • apps/backend/internal/backendapp/adapters_plugin_execution.go
  • apps/backend/internal/backendapp/adapters_plugin_execution_test.go
  • apps/backend/internal/backendapp/adapters_plugin_managed_automation.go
  • apps/backend/internal/backendapp/adapters_plugin_messenger.go
  • apps/backend/internal/backendapp/adapters_plugin_messenger_test.go
  • apps/backend/internal/backendapp/adapters_plugin_writer_test.go
  • apps/backend/internal/backendapp/git_credentials.go
  • apps/backend/internal/backendapp/plugin_source_issue.go
  • apps/backend/internal/backendapp/plugins_test.go
  • apps/backend/internal/backendapp/plugins_workspace_admin.go
  • apps/backend/internal/backendapp/plugins_workspace_admin_test.go
  • apps/backend/internal/backendapp/repository_checkout_defaults_settings_test.go
  • apps/backend/internal/backendapp/services.go
  • apps/backend/internal/backendapp/services_github_broker_test.go
  • apps/backend/internal/backendapp/startup_housekeeping_test.go
  • apps/backend/internal/plugins/action_access_test.go
  • apps/backend/internal/plugins/action_handlers.go
  • apps/backend/internal/plugins/agent_conversations_uninstall_test.go
  • apps/backend/internal/plugins/agent_tools.go
  • apps/backend/internal/plugins/agent_tools_test.go
  • apps/backend/internal/plugins/approval_api_test.go
  • apps/backend/internal/plugins/auth_login_test.go
  • apps/backend/internal/plugins/automation.go
  • apps/backend/internal/plugins/delivery/deliverer.go
  • apps/backend/internal/plugins/delivery/deliverer_test.go
  • apps/backend/internal/plugins/delivery/ringbuffer.go
  • apps/backend/internal/plugins/delivery/ringbuffer_test.go
  • apps/backend/internal/plugins/exact_execution_contract.go
  • apps/backend/internal/plugins/exact_read_snapshots.go
  • apps/backend/internal/plugins/executor_conformance_test.go
  • apps/backend/internal/plugins/executor_lifecycle_guard_test.go
  • apps/backend/internal/plugins/executor_provider_host.go
  • apps/backend/internal/plugins/executor_provider_host_test.go
  • apps/backend/internal/plugins/executor_providers.go
  • apps/backend/internal/plugins/executor_providers_test.go
  • apps/backend/internal/plugins/handlers.go
  • apps/backend/internal/plugins/handlers_test.go
  • apps/backend/internal/plugins/handlers_webhook_lifecycle_test.go
  • apps/backend/internal/plugins/host.go
  • apps/backend/internal/plugins/host_agent_conversations.go
  • apps/backend/internal/plugins/host_agent_conversations_test.go
  • apps/backend/internal/plugins/host_completion_gates.go
  • apps/backend/internal/plugins/host_completion_gates_test.go
  • apps/backend/internal/plugins/host_data.go
  • apps/backend/internal/plugins/host_data_dependencies.go
  • apps/backend/internal/plugins/host_data_dependencies_logging_test.go
  • apps/backend/internal/plugins/host_data_dependencies_test.go
  • apps/backend/internal/plugins/host_data_mappers.go
  • apps/backend/internal/plugins/host_data_queries.go
  • apps/backend/internal/plugins/host_data_task_fields_test.go
  • apps/backend/internal/plugins/host_data_test.go
  • apps/backend/internal/plugins/host_data_transitions.go
  • apps/backend/internal/plugins/host_data_wire_test.go
  • apps/backend/internal/plugins/host_exact.go
  • apps/backend/internal/plugins/host_exact_evidence_test.go
  • apps/backend/internal/plugins/host_exact_execution.go
  • apps/backend/internal/plugins/host_exact_execution_test.go
  • apps/backend/internal/plugins/host_exact_interactions.go
  • apps/backend/internal/plugins/host_exact_interactions_test.go
  • apps/backend/internal/plugins/host_exact_queries.go
  • apps/backend/internal/plugins/host_exact_queries_test.go
  • apps/backend/internal/plugins/host_exact_task_claim_sqlite_test.go
  • apps/backend/internal/plugins/host_exact_task_directives.go
  • apps/backend/internal/plugins/host_exact_task_messages.go
  • apps/backend/internal/plugins/host_exact_task_messages_test.go
  • apps/backend/internal/plugins/host_exact_task_relations_test.go
  • apps/backend/internal/plugins/host_exact_tasks.go
  • apps/backend/internal/plugins/host_exact_tasks_test.go
  • apps/backend/internal/plugins/host_exact_test.go
  • apps/backend/internal/plugins/host_exact_workspace.go
  • apps/backend/internal/plugins/host_exact_workspace_test.go
  • apps/backend/internal/plugins/host_interactions.go
  • apps/backend/internal/plugins/host_interactions_test.go
  • apps/backend/internal/plugins/host_managed_automation_schedules.go
  • apps/backend/internal/plugins/host_managed_automation_schedules_test.go
  • apps/backend/internal/plugins/host_managed_conversation_admission_test.go
  • apps/backend/internal/plugins/host_managed_conversations.go
  • apps/backend/internal/plugins/host_managed_conversations_test.go
  • apps/backend/internal/plugins/host_managed_deletion_admission_test.go
  • apps/backend/internal/plugins/host_managed_inputs.go
  • apps/backend/internal/plugins/host_managed_inputs_test.go
  • apps/backend/internal/plugins/host_management_claims.go
  • apps/backend/internal/plugins/host_source_writeback.go
  • apps/backend/internal/plugins/host_source_writeback_test.go
  • apps/backend/internal/plugins/host_utility.go
  • apps/backend/internal/plugins/host_utility_test.go
  • apps/backend/internal/plugins/host_write.go
  • apps/backend/internal/plugins/host_write_dependencies_test.go
  • apps/backend/internal/plugins/host_write_launch_test.go
  • apps/backend/internal/plugins/host_write_test.go
  • apps/backend/internal/plugins/human_interaction_receipt_handlers.go
  • apps/backend/internal/plugins/human_interaction_receipts.go
  • apps/backend/internal/plugins/invoke.go
  • apps/backend/internal/plugins/managed_automation_delivery.go
  • apps/backend/internal/plugins/managed_automation_destinations_test.go
  • apps/backend/internal/plugins/managed_automation_schedules.go
  • apps/backend/internal/plugins/manifest/sdk_release_test.go
  • apps/backend/internal/plugins/mentions.go
  • apps/backend/internal/plugins/mentions_test.go
  • apps/backend/internal/plugins/repository_provider.go
  • apps/backend/internal/plugins/repository_provider_inspect.go
  • apps/backend/internal/plugins/repository_provider_inspect_test.go
  • apps/backend/internal/plugins/repository_provider_test.go
  • apps/backend/internal/plugins/runtime/manager.go
  • apps/backend/internal/plugins/runtime/manager_test.go
  • apps/backend/internal/plugins/runtime/process.go
  • apps/backend/internal/plugins/runtime/process_test.go
  • apps/backend/internal/plugins/runtime/sdk_binary_compatibility_test.go
  • apps/backend/internal/plugins/runtime/testdata/fixtureplugin/main.go
  • apps/backend/internal/plugins/service.go
  • apps/backend/internal/plugins/service_test.go
  • apps/backend/internal/plugins/transport.go
  • apps/backend/internal/plugins/types.go
  • apps/backend/internal/plugins/webapp_protocol.go
  • apps/backend/internal/plugins/webapp_protocol_data.go
  • apps/backend/internal/plugins/webapp_protocol_dependencies_test.go
  • apps/backend/internal/plugins/webapp_protocol_json.go
  • apps/backend/internal/task/handlers/task_http_archive_deadline_test.go
  • apps/backend/internal/task/handlers/task_http_handlers.go
  • apps/backend/internal/task/repository/sqlite/managed_conversation_admission_postgres_test.go
  • apps/backend/internal/task/repository/sqlite/managed_conversation_admission_test.go
  • apps/backend/internal/task/repository/sqlite/managed_deletion_admission_postgres_test.go
  • apps/backend/internal/task/repository/sqlite/managed_deletion_admission_test.go
  • apps/backend/internal/task/service/agent_conversations.go
  • apps/backend/internal/task/service/agent_conversations_concurrency_test.go
  • apps/backend/internal/task/service/agent_conversations_dispatch_test.go
  • apps/backend/internal/task/service/agent_conversations_pagination_test.go
  • apps/backend/internal/task/service/agent_conversations_real_repo_test.go
  • apps/backend/internal/task/service/agent_conversations_retention_test.go
  • apps/backend/internal/task/service/agent_conversations_test.go
  • apps/backend/internal/task/service/managed_conversation_admission_test.go
  • apps/backend/internal/task/service/managed_conversation_inputs.go
  • apps/backend/internal/task/service/managed_conversation_inputs_test.go
  • apps/backend/internal/task/service/managed_conversation_settings.go
  • apps/backend/internal/task/service/managed_conversations_test.go
  • apps/backend/internal/task/service/managed_deletion_admission_test.go
  • apps/packages/plugin-sdk/LICENSE
  • apps/packages/plugin-sdk/README.md
  • apps/packages/plugin-sdk/package.json
  • apps/packages/plugin-sdk/sdk-release.json
  • apps/packages/plugin-sdk/test/packed-consumer.node.mjs
  • apps/web/AGENTS.md
  • apps/web/app/settings/integrations/page.test.tsx
  • apps/web/components/azure-devops/azure-devops-board.tsx
  • apps/web/components/azure-devops/azure-devops-work-item-detail.test.tsx
  • apps/web/components/azure-devops/azure-devops-work-item-detail.tsx
  • apps/web/components/plugins/plugin-action.test.tsx
  • apps/web/components/plugins/plugin-action.tsx
  • apps/web/components/plugins/workspace-agent-chat-composer.tsx
  • apps/web/components/plugins/workspace-agent-chat-instance-picker.tsx
  • apps/web/components/plugins/workspace-agent-chat-interactions.tsx
  • apps/web/components/plugins/workspace-agent-chat-panels.tsx
  • apps/web/components/plugins/workspace-agent-chat.tsx
  • apps/web/components/plugins/workspace-task-surfaces.tsx
  • apps/web/components/review/use-review-diff-scroll-interaction.test.ts
  • apps/web/components/review/use-review-diff-scroll-interaction.ts
  • apps/web/components/task-create-dialog-task-created.ts
  • apps/web/components/task/chat/agent-goal-chip.test.tsx
  • apps/web/components/task/chat/agent-goal-chip.tsx
  • apps/web/components/task/chat/chat-submit-plugin-decoration.tsx
  • apps/web/components/task/chat/message-list-native.tsx
  • apps/web/components/task/chat/message-list-shared.tsx
  • apps/web/components/task/dockview-panel-content.diff.test.tsx
  • apps/web/components/task/dockview-panel-content.tsx
  • apps/web/components/task/dockview-shared.tsx
  • apps/web/components/task/historical-turn-diff-viewer.tsx
  • apps/web/components/task/task-changes-panel-historical.test.tsx
  • apps/web/components/task/task-changes-panel.tsx
  • apps/web/components/task/task-chat-panel.tsx
  • apps/web/e2e/helpers/mcp-status-clarity.ts
  • apps/web/e2e/helpers/mock-turn-gate.ts
  • apps/web/e2e/helpers/restart-reconciliation.ts
  • apps/web/e2e/helpers/session.test.ts
  • apps/web/e2e/helpers/silent-prompt-stall.ts
  • apps/web/e2e/helpers/workspace-context-retry.ts
  • apps/web/e2e/tests/canvas/mobile-canvas-marketplace.spec.ts
  • apps/web/e2e/tests/chat/agent-goal.spec.ts
  • apps/web/e2e/tests/chat/chat-task-mentions.spec.ts
  • apps/web/e2e/tests/chat/mobile-auto-scroll-toggle.spec.ts
  • apps/web/e2e/tests/chat/mobile-quick-chat-cancel-palette.spec.ts
  • apps/web/e2e/tests/chat/quick-chat-cross-device.spec.ts
  • apps/web/e2e/tests/chat/quick-chat-helpers.ts
  • apps/web/e2e/tests/coordinator/guided-setup.spec.ts
  • apps/web/e2e/tests/git/mobile-pr-checkout-drift.spec.ts
  • apps/web/e2e/tests/i18n/pseudo-coverage.spec.ts
  • apps/web/e2e/tests/integrations/jira-settings.spec.ts
  • apps/web/e2e/tests/integrations/mobile-azure-devops.spec.ts
  • apps/web/e2e/tests/kanban/mobile-kanban-topbar.spec.ts
  • apps/web/e2e/tests/kanban/preview-workflow-step-navigation.spec.ts
  • apps/web/e2e/tests/layout/mobile-navigation-tasks.spec.ts
  • apps/web/e2e/tests/layout/mobile-sidebar-read-recovery.spec.ts
  • apps/web/e2e/tests/layout/mobile-stats-read-recovery.spec.ts
  • apps/web/e2e/tests/layout/stats-read-recovery.spec.ts
  • apps/web/e2e/tests/office/task-content-editing.spec.ts
  • apps/web/e2e/tests/pr/pr-watcher-cleanup-policy.spec.ts
  • apps/web/e2e/tests/pr/pr-watcher-dockview-layout.spec.ts
  • apps/web/e2e/tests/review/review-viewed-toggling-flow.ts
  • apps/web/e2e/tests/session/dynamic-unclassified-fallback.spec.ts
  • apps/web/e2e/tests/session/mobile-agent-survival-restart.spec.ts
  • apps/web/e2e/tests/session/session-resume.spec.ts
  • apps/web/e2e/tests/settings/agent-profile-acp.spec.ts
  • apps/web/e2e/tests/settings/executor-profile-routing.spec.ts
  • apps/web/e2e/tests/settings/mobile-agent-profile-order.spec.ts
  • apps/web/e2e/tests/settings/mobile-agent-runtime-update.spec.ts
  • apps/web/e2e/tests/settings/repository-branch-policies.spec.ts
  • apps/web/e2e/tests/ssh/hostkey-rotation.spec.ts
  • apps/web/e2e/tests/ssh/persistence.spec.ts
  • apps/web/e2e/tests/task/create-task-branch-policy-helpers.ts
  • apps/web/e2e/tests/task/create-task-workflow-agent-overrides.spec.ts
  • apps/web/e2e/tests/task/create-task.spec.ts
  • apps/web/e2e/tests/task/file-editor-rename-continuity.spec.ts
  • apps/web/e2e/tests/task/file-tree-drag-drop.spec.ts
  • apps/web/e2e/tests/task/mobile-content-confirmations.spec.ts
  • apps/web/e2e/tests/task/mobile-create-task-workflow-agent-overrides.spec.ts
  • apps/web/e2e/tests/task/mobile-sidebar-filter-selected-first.spec.ts
  • apps/web/e2e/tests/task/mobile-threads-view.spec.ts
  • apps/web/e2e/tests/task/sidebar-diff-stats.spec.ts
  • apps/web/e2e/tests/task/sidebar-filter-selected-first-helpers.ts
  • apps/web/e2e/tests/task/workspace-file-transfer.spec.ts
  • apps/web/e2e/tests/workflow/workflow-agent-switch.spec.ts
  • apps/web/e2e/tests/workflow/workflow-automation.spec.ts
  • apps/web/hooks/domains/azure-devops/use-azure-devops-board.test.tsx
  • apps/web/hooks/domains/azure-devops/use-azure-devops-board.ts
  • apps/web/hooks/domains/azure-devops/use-azure-devops-mutation-owner.ts
  • apps/web/hooks/domains/azure-devops/use-azure-devops-work-item-detail.test.ts
  • apps/web/hooks/domains/azure-devops/use-azure-devops-work-item-detail.ts
  • apps/web/hooks/domains/session/session-state-reconciler.ts
  • apps/web/hooks/domains/session/use-turn-changes-pagination.test.tsx
  • apps/web/hooks/domains/session/use-turn-changes-subscription.test.tsx
  • apps/web/hooks/domains/session/use-turn-changes.ts
  • apps/web/hooks/use-managed-conversation-chat.test.tsx
  • apps/web/hooks/use-managed-conversation-chat.ts
  • apps/web/hooks/use-update-available-toast.test.ts
  • apps/web/lib/plugins/action-compatibility.test.tsx
  • apps/web/lib/plugins/host-api.ts
  • apps/web/lib/plugins/host-queries.ts
  • apps/web/lib/plugins/human-interaction-receipts.ts
  • apps/web/lib/plugins/managed-conversation.test.ts
  • apps/web/lib/plugins/managed-conversation.ts
  • apps/web/lib/plugins/plugin-context-api.ts
  • apps/web/lib/plugins/sdk-contract.test.ts
  • apps/web/lib/plugins/types.ts
  • apps/web/lib/session-state.ts
  • apps/web/lib/ssr/session-page-enrichment-membership.test.ts
  • apps/web/lib/ssr/session-page-state.ts
  • apps/web/lib/state/hydration/hydrator-session-freshness.test.ts
  • apps/web/lib/state/hydration/hydrator.ts
  • apps/web/lib/ws/handlers/agent-session-pure.test.ts
  • apps/web/lib/ws/handlers/agent-session.ts
  • apps/web/package.json
  • apps/web/tsconfig.json
  • config/architecture-lint/compatibility-ledger.json
  • config/architecture-lint/deprecation_ledger.json
  • docs/decisions/2026-10-09-published-plugin-sdk.md
  • docs/plans/agentctl-journal-shutdown-recovery/task-05-silent-restart-recovery.md
  • docs/plans/agentctl-journal-shutdown-recovery/task-06-pr-delivery.md
  • docs/plans/azure-devops-integration/plan.md
  • docs/plans/azure-devops-integration/task-27-work-item-detail-ui.md
  • docs/plans/background-work-liveness/plan.md
  • docs/plans/background-work-liveness/task-17-verify-hardened-background-liveness.md
  • docs/plans/canvas-marketplace/task-05-marketplace-ui.md
  • docs/plans/ci-performance/task-16-complete-ci-delivery.md
  • docs/plans/conversation-storage-replacement/task-02-plugin-reconciliation.md
  • docs/plans/conversation-storage-replacement/task-05-parity-and-docs.md
  • docs/plans/directory-covering-file-moves/task-01-normalize-move-roots.md
  • docs/plans/discord-release-announcements/task-02-deliver-announcements.md
  • docs/plans/filter-selected-options-first/task-01-prioritize-options.md
  • docs/plans/journey-data-efficiency/task-04-scope-visible-session-demand.md
  • docs/plans/localized-update-notifications/task-01-localize-release-notifications.md
  • docs/plans/mobile-task-plugin-menu/task-01-move-task-plugins.md
  • docs/plans/mobile-topbar-action-strip/plan.md
  • docs/plans/open-editor-rename-continuity/task-01-retarget-open-editors.md
  • docs/plans/plugin-coordinator-platform/task-01-exact-host-foundation.md
  • docs/plans/plugin-coordinator-platform/task-14-host-conversation-ui.md
  • docs/plans/plugin-coordinator-platform/task-18-independent-consumer.md
  • docs/plans/plugin-sdk-publishing/adversarial-review.md
  • docs/plans/plugin-sdk-publishing/author-notification-inventory.md
  • docs/plans/plugin-sdk-publishing/design-review.md
  • docs/plans/plugin-sdk-publishing/plan.md
  • docs/plans/plugin-sdk-publishing/proposal-walkthrough.md
  • docs/plans/plugin-sdk-publishing/task-01-go-module.md
  • docs/plans/plugin-sdk-publishing/task-02-frontend-package.md
  • docs/plans/plugin-sdk-publishing/task-03-compatibility-check.md
  • docs/plans/plugin-sdk-publishing/task-04-stable-publication.md
  • docs/plans/plugin-sdk-publishing/task-05-author-migration.md
  • docs/plans/plugin-sdk-publishing/template-migration.md
  • docs/plans/plugins/PLUGIN-API.md
  • docs/plans/profile-capability-discovery/task-02-profile-editor-discovery.md
  • docs/plans/prompt-history-plugin-host/plan.md
  • docs/plans/prompt-history-plugin-host/task-01-publish-browser-conversation-contract.md
  • docs/plans/prompt-history-plugin-host/task-05-prove-plugin-parity.md
  • docs/plans/quick-chat-selection/task-02-goal-visibility.md
  • docs/plans/remote-contribution-local-first/plan.md
  • docs/plans/remote-contribution-local-first/task-05-desktop-mobile-drift-e2e.md
  • docs/plans/review-viewed-toggling/plan.md
  • docs/plans/review-viewed-toggling/task-01-scroll-crossing.md
  • docs/plans/session-refresh-efficiency/task-04-progressive-task-navigation.md
  • docs/plans/silent-prompt-recovery/task-01-silent-turns.md
  • docs/plans/silent-restore-startup-timeout/task-01-restore-startup.md
  • docs/plans/stats-read-recovery/task-01-workspace-recovery.md
  • docs/plans/turn-changed-files/task-07-transcript-desktop.md
  • docs/plans/turn-changes-subscription-reconciliation/task-01-reconcile-subscription.md
  • docs/plans/unified-mobile-navigation/task-03-embedded-tasks.md
  • docs/public/coverage.json
  • docs/public/operations.md
  • docs/public/plugins-authoring.md
  • docs/public/release-process.md
  • docs/specs/agents/system-design/goal-visibility.md
  • docs/specs/integrations/requirements/azure-devops-integration.md
  • docs/specs/integrations/system-design/azure-devops-integration-02.md
  • docs/specs/integrations/system-design/bitbucket-plugin-02.md
  • docs/specs/platform/system-design/ci-completion-budget.md
  • docs/specs/platform/system-design/durable-agent-reattachment.md
  • docs/specs/platform/system-design/i18n.md
  • docs/specs/platform/system-design/journey-data-loading.md
  • docs/specs/plugins/README.md
  • docs/specs/plugins/requirements/authoring-experience.md
  • docs/specs/plugins/requirements/sdk-distribution.md
  • docs/specs/plugins/system-design/plugin-initiated-step-transitions.md
  • docs/specs/plugins/system-design/plugins-01.md
  • docs/specs/plugins/system-design/sdk-distribution.md
  • docs/specs/release/README.md
  • docs/specs/release/requirements/discord-announcements.md
  • docs/specs/release/system-design/discord-announcements.md
  • docs/specs/tasks/requirements/runtime-cleanup.md
  • docs/specs/tasks/requirements/turn-changed-files.md
  • docs/specs/tasks/system-design/archive-cascade-boundary-contracts.md
  • docs/specs/tasks/system-design/turn-changed-files-subscription.md
  • docs/specs/tasks/system-design/turn-changed-files.md
  • docs/specs/ui/requirements/review-viewed-toggling.md
  • docs/specs/ui/requirements/session-refresh-efficiency.md
  • docs/specs/ui/system-design/review-viewed-toggling.md
  • docs/specs/ui/system-design/session-refresh-efficiency.md
  • e2e.Dockerfile
  • pluginsdk/LICENSE
  • pluginsdk/Makefile
  • pluginsdk/README.md
  • pluginsdk/action_error.go
  • pluginsdk/action_error_test.go
  • pluginsdk/automation.go
  • pluginsdk/automation_test.go
  • pluginsdk/cmd/kandev-sdk-check/main.go
  • pluginsdk/cmd/kandev-sdk-check/main_test.go
  • pluginsdk/data_types.go
  • pluginsdk/data_types_test.go
  • pluginsdk/exact.go
  • pluginsdk/exact_execution.go
  • pluginsdk/exact_execution_grpc.go
  • pluginsdk/exact_execution_grpc_test.go
  • pluginsdk/exact_queries.go
  • pluginsdk/exact_queries_grpc.go
  • pluginsdk/exact_source_writeback.go
  • pluginsdk/exact_source_writeback_test.go
  • pluginsdk/exact_tasks.go
  • pluginsdk/exact_test.go
  • pluginsdk/exact_workspace_admin.go
  • pluginsdk/exact_workspace_admin_test.go
  • pluginsdk/executor_provider.go
  • pluginsdk/executor_provider_test.go
  • pluginsdk/go.mod
  • pluginsdk/host.go
  • pluginsdk/host_agent_conversations_server_test.go
  • pluginsdk/host_data_test.go
  • pluginsdk/host_test.go
  • pluginsdk/host_utility_wire_test.go
  • pluginsdk/interactions.go
  • pluginsdk/interactions_test.go
  • pluginsdk/internal/compatibility/check.go
  • pluginsdk/internal/compatibility/frontend_files_test.go
  • pluginsdk/internal/compatibility/npm_lock.go
  • pluginsdk/internal/compatibility/pnpm_lock.go
  • pluginsdk/internal/compatibility/project.go
  • pluginsdk/internal/compatibility/release.go
  • pluginsdk/internal/compatibility/release_test.go
  • pluginsdk/internal/compatibility/resolve.go
  • pluginsdk/internal/compatibility/resolve_test.go
  • pluginsdk/managed_automation_schedules.go
  • pluginsdk/managed_automation_schedules_test.go
  • pluginsdk/plugin.go
  • pluginsdk/plugin_test.go
  • pluginsdk/proto/buf.gen.yaml
  • pluginsdk/proto/buf.yaml
  • pluginsdk/proto/kandev/plugin/v1/plugin.proto
  • pluginsdk/protocol_test.go
  • pluginsdk/sdk-release.json
  • pluginsdk/serve.go
  • pluginsdk/serve_test.go
  • pluginsdk/transition_history.go
  • pluginsdk/transitions_test.go
  • pluginsdk/types.go
  • pluginsdk/types_test.go
  • scripts/pluginsdk/check-proto-generation.mjs
  • scripts/pluginsdk/check-proto-generation.test.mjs
  • scripts/pluginsdk/consumer-smoke.mjs
  • scripts/pluginsdk/consumer-smoke.test.mjs
  • scripts/pluginsdk/go-consumer.mjs
  • scripts/pluginsdk/npm-consumer.mjs
  • scripts/pluginsdk/npm-workspace.test.mjs
  • scripts/pluginsdk/pack-candidate.mjs
  • scripts/pluginsdk/pack-candidate.test.mjs
  • scripts/pluginsdk/pack-config.json
  • scripts/pluginsdk/public-trust.mjs
  • scripts/pluginsdk/public-trust.test.mjs
  • scripts/pluginsdk/sync-record.mjs
  • scripts/pluginsdk/sync-record.test.mjs
  • scripts/release/plugin-sdk-contract-inputs.json
  • scripts/release/plugin-sdk.mjs
  • scripts/release/plugin-sdk.test.mjs
  • scripts/release/publish-plugin-sdk.mjs
  • scripts/release/publish-plugin-sdk.sh
  • scripts/release/publish-plugin-sdk.test.mjs
  • scripts/release/sdk-artifact.mjs
  • scripts/release/sdk-artifact.test.mjs
  • scripts/release/sdk-assets.mjs
  • scripts/release/sdk-assets.test.mjs
  • scripts/release/sdk-candidate-store.mjs
  • scripts/release/sdk-candidate-store.test.mjs
  • scripts/release/sdk-publication-state.mjs
  • scripts/release/sdk-registry.mjs
  • scripts/release/sdk-registry.test.mjs
  • scripts/release/sdk-release-io.mjs
  • scripts/release/sdk-release-io.test.mjs
  • scripts/release/sdk-runtime.mjs
  • scripts/release/sdk-runtime.test.mjs
  • scripts/release/sdk-source.mjs
  • scripts/release/sdk-source.test.mjs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@claude

claude Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Claude finished @zeval's task in 4m 16s —— View job


Findings

Reviewed head commit 85489622 (docs-only, 13 files, 1700 additions). No production code, release scripts, or workflow files are changed — this is a planning package.

Suggestion (recommended, doesn't block)

  1. R4 checksum isolation not in canonical system design or WO01 — docs/specs/plugins/system-design/sdk-distribution.md:246, docs/plans/plugin-sdk-publishing/task-01-go-module.md:38

    • Issue: The "Clean consumers" section of the system design and WO01's "In scope" list don't specify the GONOSUMDB scoping, GOWORK=off, or disposable-cache isolation that design-review R4 requires for the local proxy test. Without GONOSUMDB, a local test can fail because the unpublished version can't be authenticated against the public checksum DB, or a broad workaround gets added and leaks into the public-release consumer check, weakening that evidence.
    • Fix: Add a "Trust settings" paragraph to the system design's "Clean consumers" section (see inline comment). Mirror it in WO01's "In scope" bullet for the local proxy.
  2. R5 explicit CI file names not in WO01 — docs/plans/plugin-sdk-publishing/task-01-go-module.md:86

    • Issue: "Applicable .github/workflows/* Go-test discovery" is the generic pattern R5 says is insufficient. backend-tests.yml and e2e-tests.yml currently select apps/backend/**; an SDK-only diff won't fire them after extraction. The extraction PR masks this because it also touches backend files.
    • Fix: Name the two workflow files explicitly and add a trigger-contract test proving that an SDK-only source change schedules both (see inline comment).
  3. R1/R2 recovery state table absent from system design — docs/specs/plugins/system-design/sdk-distribution.md:229

    • Issue: "Failure and recovery" handles recovery in prose but omits the explicit (tag present/absent) × (npm present/absent) state table from design-review Step 4. The prose also still places SDK tag signing in prepare (step 2, line 199), which is the exact gap R1 identifies — the fix is to move tag creation to a dedicated protected job after the host release exists.
    • Fix: Lift the state table and the R1 tag-job correction into the canonical system design before WO04 runs (see inline comment).
  4. R2 bootstrap state and R3 artifact receipt not in WO04 "In scope" — docs/plans/plugin-sdk-publishing/task-04-stable-publication.md:45

    • Issue: bootstrap_required appears only in acceptance feat: add bidirectional comment system and agent input request flow #3 ("no silent token fallback"), not as an enumerated deliverable with a defined return state. The artifact receipt (original SDK tag, source commit, exact packaging-tool version, tarball hash) is referenced in the plan overview but not specified as a concrete WO04 output.
    • Fix: Add both to WO04's "In scope" list with the data shape the receipt must contain (see inline comment).
  5. Amendment reconciliation sequencing should be explicit — docs/plans/plugin-sdk-publishing/design-review.md:244

    • Issue: Neither the PR description nor the design-review says what happens to this document after the amendments are merged into the canonical docs — whether it becomes status: superseded, is archived, or stays as-is. Without that, a future implementer can't tell which document is authoritative.
    • Fix: One line above the amendments table stating the expected disposition of this file after reconciliation (see inline comment).

Summary

Severity Count
Blocker 0
Suggestion 5

Verdict: Ready with suggestions

The structural choices (module layout, shared SDK versioning, SDK-wide host minimum, sequential release steps) are well-reasoned and internally consistent. The requirements, ADR, and plan are coherent. All five suggestions stem from the same root: the design-review's required amendments haven't been merged back into the canonical system design and work orders. Items 1–4 identify the specific places where that gap creates implementer ambiguity; item 5 asks for a one-line status note so the review document can be clearly retired once reconciliation is done.

None of the five block merging the planning package — it's explicitly a draft pending reconciliation — but items 1–4 should be resolved before any implementation work order is opened.


@github-actions github-actions Bot added the small Pull request changes 0-10 application files label Oct 16, 2026
Comment thread docs/plans/plugin-sdk-publishing/task-01-go-module.md
Comment thread docs/plans/plugin-sdk-publishing/task-01-go-module.md Outdated
Comment thread docs/specs/plugins/system-design/sdk-distribution.md Outdated
Comment thread docs/specs/plugins/system-design/sdk-distribution.md Outdated
Comment thread docs/plans/plugin-sdk-publishing/task-04-stable-publication.md
Comment thread docs/plans/plugin-sdk-publishing/design-review.md
@zeval zeval changed the title docs: plan public plugin SDK publishing (#4358) docs: define recoverable plugin SDK publishing (#4358) Oct 16, 2026
@zeval zeval changed the title docs: define recoverable plugin SDK publishing (#4358) refactor!: extract the Go plugin SDK into a standalone module Oct 19, 2026
…plan-work-for-issue-46a

# Conflicts:
#	.github/workflows/backend-tests.yml
#	.github/workflows/e2e-tests.yml
@github-actions github-actions Bot added big Pull request changes 51 or more application files and removed small Pull request changes 0-10 application files labels Oct 19, 2026
@zeval zeval changed the title refactor!: extract the Go plugin SDK into a standalone module feat!: add standalone plugin SDKs and compatibility checks Oct 19, 2026
@zeval zeval changed the title feat!: add standalone plugin SDKs and compatibility checks feat!: publish versioned plugin SDKs with compatibility checks Oct 19, 2026
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Cloudflare Pages docs preview

Open the docs preview

Built from docs commit 4e965e8.

Stable PR alias: https://docs-pr-4534.landing-87j.pages.dev/docs

@zeval
zeval had a problem deploying to opencode-review-trusted October 27, 2026 14:38 — with GitHub Actions Failure
@zeval
zeval had a problem deploying to opencode-review-trusted October 27, 2026 16:40 — with GitHub Actions Failure
@zeval
zeval force-pushed the feature/plan-work-for-issue-46a branch from d9c00f6 to 922dfd9 Compare October 27, 2026 18:02
@zeval
zeval temporarily deployed to opencode-review-trusted October 27, 2026 18:02 — with GitHub Actions Inactive
@zeval
zeval force-pushed the feature/plan-work-for-issue-46a branch from 922dfd9 to b5e5644 Compare October 27, 2026 19:43
@zeval
zeval temporarily deployed to opencode-review-trusted October 27, 2026 19:43 — with GitHub Actions Inactive
@zeval
zeval temporarily deployed to opencode-review-trusted October 27, 2026 21:52 — with GitHub Actions Inactive
@zeval
zeval force-pushed the feature/plan-work-for-issue-46a branch from 3ee4e17 to 4956948 Compare October 27, 2026 22:53
@zeval
zeval temporarily deployed to opencode-review-trusted October 27, 2026 22:53 — with GitHub Actions Inactive
@zeval
zeval temporarily deployed to opencode-review-trusted October 28, 2026 03:25 — with GitHub Actions Inactive
Preserve SDK cache inputs with the shared cache publication policy.
Retain the stronger locale checks and the archive response deadline fix.
@zeval
zeval temporarily deployed to opencode-review-trusted October 28, 2026 10:54 — with GitHub Actions Inactive
@zeval
zeval temporarily deployed to opencode-review-trusted October 28, 2026 12:06 — with GitHub Actions Inactive
zeval added 2 commits October 28, 2026 14:32
Preserve touch scroll admission and restoration input precedence.
Keep the shared silent-output gates and existing compatibility checks.
Retain the standalone plugin SDK requirement and local replacement.
Validate the merged prompt and rich-output changes on desktop and phone.
@zeval
zeval temporarily deployed to opencode-review-trusted October 28, 2026 14:52 — with GitHub Actions Inactive
@zeval
zeval merged commit 73d80d1 into main Oct 28, 2026
117 of 118 checks passed
@zeval
zeval deleted the feature/plan-work-for-issue-46a branch October 28, 2026 17:35

This branch was previously deployed

1 inactive deployment
opencode-review-trusted — 4e965e83 Deployed Oct 28, 2026 by zeval via pr-walkthrough-generate #9198
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

big Pull request changes 51 or more application files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant