Skip to content

docs(kilo): add v2 execution plan - #14704

Merged
fpliger merged 4 commits into
kilo-v2from
v2-execution-plan
Oct 2, 2026
Merged

fpliger merged 4 commits into
kilo-v2from
v2-execution-plan

Conversation

@fpliger

@fpliger fpliger commented Oct 1, 2026 •

Copy link
Copy Markdown

Issue

Part of #13750

Exception to "Fixes": #13750 is the migration epic and must stay open. This PR adds the execution plan that the epic's remaining work follows; it does not complete the epic.

Context

kilo-v2 has fallen behind on both sides:

  • Upstream: kilo-v2 is based on upstream 59b29de4 (2026-09-03) and has never had upstream v2 merged into it. Upstream has moved on by at least 1,013 commits, including the npm scope rename from @opencode-ai/* to @opencode/* (#47852). Upstream now publishes v2 on npm as @opencode/cli (latest 2.0.20).
  • Kilo main: the v1 source assessment stops at main f7115470 (2026-08-12). Since then, 2,645 commits have landed on main without assessment.
  • Tracking: the 9 subissues of Phased Plan - Port Kilo onto OpenCode V2 #13750 and their 62 children are open and unassigned. The progress plan still says "Implementation paused".

This PR adds migration-tracking/plans/kilo-opencode-v2-execution-plan.md, a single execution plan for finishing the port. It is based on #13750's target-shaped port architecture. Three drafted plans were compared and combined into it, and it was re-checked against the repository, GitHub and npm on 2026-09-29/30.

Implementation

The plan is organized around the decisions reviewers need to agree on, then the execution order:

  • Decisions needing sign-off before execution:
    • staged cutover per surface: G1 CLI/TUI, then G2 VS Code, then G3 JetBrains;
    • a separate customer v2 data store, with v1 files never touched while any v1 surface ships, and a re-runnable opt-in import;
    • an explicit post-cutover list: voice, image/Claw, team and incremental sharing, legacy TUI extras;
    • the v1 soft freeze treated as an external, best-effort dependency owned by the team working on v1. This is not an attempt to really freeze any v1 code/features but rather over communicate and coordinate significant changes that may impact the v2 migration goal
  • Upstream intake by merge: merge upstream v2 release tags into kilo-v2, starting with one consolidation merge that includes the scope-rename codemod. kilo-v2 is never recreated again.
  • v1 assessment cutoff: the plan defines a main commit up to which v1 behavior has been assessed. A recurring delta sweep moves it forward, which replaces "parity with main".
  • Issues as execution units: GitHub issues are the units of execution.
    • The issue register places all 71 existing issues (9 subissues plus 62 children), each with a gate, post-cutover status, or discovery.
    • It defines 17 new issues (N1–N17), created in a prerequisite Phase 0, with blockers, gates and "Touches" fields for parallel agents.
  • Document roles:
    • this plan holds decisions, order and the register;
    • kilo-opencode-v2-plan-progress.md remains the live status per capability;
    • kilo-opencode-v2-working-log.md becomes the milestone history.
  • Phase 0 step P0 lifts the 2026-09-08 implementation pause in both of those documents before any implementation agent starts.

Areas that deserve the closest review:

Screenshots / Video

N/A (documentation only)

before after
N/A N/A

How to Test

Manual/local verification

  • Agent-executed: checked the plan's current-state facts against live sources:
    • upstream dev/v2 tips via git ls-remote https://github.com/anomalyco/opencode.git;
    • the divergence (3,956 ahead / 1,326 behind) via gh api repos/anomalyco/opencode/compare/dev...v2;
    • the @opencode/cli dist-tags and publish dates from the npm registry;
    • the absence of a GitHub Release for v2 via gh release list;
    • the scope-rename commit a5312e16 via git log.
  • Agent-executed: checked the kilo-v2 facts:
    • the base 59b29de4 is the sole parent of the first Kilo commit 047ffd045f;
    • 14 non-merge Kilo commits sit on top of it;
    • 2,645 non-merge main commits since f7115470, via git rev-list.
  • Agent-executed: listed all child issues of Complete original Kilo VS Code client parity #14016–Assess and integrate Anaconda Desktop and related clients with v2 #14024 via gh api repos/Kilo-Org/kilocode/issues/<n>/sub_issues and confirmed that each of the 62 appears in the plan's issue register.
  • Agent-executed: git status --short shows the plan file is the only change.
  • Manual local review

Reviewer test steps

  1. Open migration-tracking/plans/kilo-opencode-v2-execution-plan.md and read the Decisions section. Confirm you agree with Decisions 3, 4 and 5, or raise objections on Phased Plan - Port Kilo onto OpenCode V2 #13750.
  2. Spot-check the current state:
    • git ls-remote https://github.com/anomalyco/opencode.git refs/heads/dev refs/heads/v2
    • gh api repos/anomalyco/opencode/compare/dev...v2 --jq '{ahead: .ahead_by, behind: .behind_by}'
  3. Spot-check register coverage: for any subissue, e.g. gh api repos/Kilo-Org/kilocode/issues/14017/sub_issues --jq '.[].number', confirm every number appears in the Issue register table.
  4. Confirm the diff adds exactly one file under migration-tracking/plans/, updates the README and changes nothing else.
  5. Quickly read the rest of the plan and look for clear issues or points that are not clear or doesn't make sense

Blocked checks and substitute verification

  • The Markdown table-padding check (script/check-md-table-padding.ts) exists only on main, not on kilo-v2, so it could not be run. Substitute: the tables were written in the compact form that v2-fork-conventions.md requires. Per those conventions, prettier --write was deliberately not run, because it would re-pad the tables.
  • Package typecheck and tests are not applicable: no source, config or generated files changed.

Checklist

  • Issue linked above, or exception explained
  • Tests/verification described
  • Screenshots/video included for visual changes, or marked N/A
  • Changeset considered for user-facing changes (not user-facing; this repository does not use Changesets)
  • I personally reviewed the diff and can explain the changes, including any AI-assisted work.

Comment thread migration-tracking/plans/kilo-opencode-v2-execution-plan.md Outdated
@kilo-code-bot

kilo-code-bot Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Incremental review of commit b0c53ebb (2 files, 8 insertions, 7 deletions). All three findings from the previous review are resolved on the changed lines: Decision 5 is restored to the pre-execution sign-off list (line 4), N6b is added as the JetBrains prerequisite in Decision 3 (line 55), and N9's Touches now records the server handshake surface (line 423). The README wording now matches the execution plan's document roles. No new issues in the changed lines.

Files Reviewed (2 files)
  • migration-tracking/README.md
  • migration-tracking/plans/kilo-opencode-v2-execution-plan.md
Previous Review Summaries (3 snapshots, latest commit e9113b2)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit e9113b2)

Status: 3 Issues Found | Recommendation: Address before merge

Incremental review of commit e9113b2e: three documentation-consistency findings on changed lines in the execution plan.

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 3
Issue Details (click to expand)

SUGGESTION

File Line Issue
migration-tracking/plans/kilo-opencode-v2-execution-plan.md 4 Pre-execution sign-off list again omits Decision 5, contradicting the PR description and reviewer test steps (regression of the earlier fix)
migration-tracking/plans/kilo-opencode-v2-execution-plan.md 55 Decision 3 states N1 is the only prerequisite for both tracks, but the dependency order gates G3 on N1 and N6b
migration-tracking/plans/kilo-opencode-v2-execution-plan.md 59 N9 is listed as touching the server, but its Touches field only lists packages/kilo-vscode
Files Reviewed (1 file)
  • migration-tracking/plans/kilo-opencode-v2-execution-plan.md - 3 suggestions

Fix these issues in Kilo Cloud

Previous review (commit 7991d2e)

Status: No Issues Found | Recommendation: Merge

Incremental review of commit 7991d2e8 (changed line 4 only): the prior suggestion is resolved — the pre-execution sign-off list now includes Decision 5.

Files Reviewed (1 file)
  • migration-tracking/plans/kilo-opencode-v2-execution-plan.md

Previous review (commit f33ae94)

Status: 1 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
migration-tracking/plans/kilo-opencode-v2-execution-plan.md 4 Pre-execution sign-off list omits Decision 5 (post-cutover list), while the PR description states Decisions 3, 4 and 5 need sign-off
Files Reviewed (1 file)
  • migration-tracking/plans/kilo-opencode-v2-execution-plan.md - 1 suggestion

Fix these issues in Kilo Cloud


Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The dependency graph, issue-unit model, and gate acceptance coverage contain unresolved inconsistencies.

Review effort: Balanced
Findings: 7 Medium severity · 1 Low severity

Open (8)
What changed in this PR

Adds a unified execution plan for completing the Kilo v1-to-v2 migration.

Changes:

  • Defines staged G1–G3 cutover decisions and validation.
  • Plans upstream synchronization and v1 delta assessment.
  • Maps existing and proposed issues into execution phases.
File Description
migration-tracking/​plans/​kilo-opencode-v2-execution-plan.md Adds the migration execution plan, issue register, dependencies, gates, metrics, and risks.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +84 to +86
- **Every issue body has these fields.** N7 adds any that are missing; the existing Outcome / Scope / Current position / Acceptance / Tracking sections stay.
- Gate: G1, G2, G3, post-cutover, or discovery.
- Blocked by: real GitHub issue links, not prose or draft numbers.
- Kilo-package imports of upstream internals.

The baseline is the post-N1 measurement, recorded in a new dated `marker-audit/` footprint file. Increases fail unless they state the missing seam. Then run #14381 (marker-disposition sweep) against the new base.
3. **N3 — Sync automation.** A Kilo-owned workflow that dry-run-merges each new upstream `v2.*` tag into `kilo-v2` and reports conflicts by owner, plus a real `e2e` lane for `kilo-v2`. Do not edit upstream's `test.yml`.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New upstream tags will need to be managed individually, as they come, when created upstream. New issues can be created later, when they happen, and managed by the workflow

3. **N3 — Sync automation.** A Kilo-owned workflow that dry-run-merges each new upstream `v2.*` tag into `kilo-v2` and reports conflicts by owner, plus a real `e2e` lane for `kilo-v2`. Do not edit upstream's `test.yml`.
4. Start signing/notarization (#14411) now, because of its external lead time.

### Phase C — Re-baseline (read-only; starts now, parallel with B)
16. Any #14427/#14428 or #14431/#14432 that discovery attaches to G1.
16a. **N12 — TUI picker, dialogs and status/footer**, covering progress-plan rows that have no issue:
- model picker inline preview and section/search interaction;
- provider-specific guidance and failure details in the provider/integration dialogs;
Comment on lines +269 to +271
all ──> N11 (G2) ──> + N4 run ──> #14414 (G2)

G3: #14420 ──> #14421 ──> #14422, #14423 (needs #14416) ──> #14424 ──> N11 (G3) ──> #14414 (G3) ──> N10
| N3 | TBD | Upstream-tag dry-run workflow and `e2e` lane | B | N1 | New `.github/workflows/kilo-*` files |
| N4 | TBD | Recurring `main` delta sweep from the cutoff | C, each gate | — | `marker-audit/` |
| N5 | TBD | v1 reference fixtures for #14371–#14374 | C | — | Test fixtures only |
| N6 | TBD | Package decisions: import `kilo-docs`/`kilo-jetbrains`, assess `kilo-web-ui` | C | N1 (for the imports) | `packages/kilo-docs`, `packages/kilo-jetbrains` |
- Rewrite the import and canary rows for the customer v2 store, re-runnable import, and per-surface canary.
- Add rows for N1 (scope rename), N4, N8 and N9.
- Record the v1 assessment cutoff and the adopted upstream tag.
- Tag every scenario in `test-plans/kilo-opencode-v2-test-plan*.md` with G1, G2, G3 or post-cutover, so that N11 can select scenarios by gate.
Comment thread migration-tracking/plans/kilo-opencode-v2-execution-plan.md Outdated
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
- One consolidation merge (N1) goes to the **latest upstream v2 release tag at execution start** (v2.0.20 as of 09-29).
- After that, merge every upstream v2 release tag, at least weekly.
- Pins are always release tags.
3. **Staged cutover:** G1 CLI/TUI → G2 VS Code (sidebar, tabs, Agent Manager, settings) → G3 JetBrains. Each surface has its own go/no-go. The IDEs keep bundling or pinning a v1 binary until their gate passes.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vs code doesn't pin a specific version in contrast to JetBrains or other surfaces.

| `packages/opencode` on v2 | Kept as a temporary legacy host | Not reconstructed | Same as #13750 |
| Control of `main` | Ratchets and an ownership manifest (never built) | None | External best-effort soft freeze, plus a v2-owned recurring delta sweep |
| Upstream v2 intake | Merge regularly | Pinned SHA (in practice, recreated on new tips) | Merge every release tag into `kilo-v2` |
| Cutover | Single | Single (phase 6) | Staged: G1 → G2 → G3 |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we would need a regular release of kilo v2 I guess

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. The tick here is finding the right time when v2 is working "enough" to release and start from there

- v1 files are never moved or rewritten while any v1 surface ships.
- Import is opt-in, copies then migrates the copy, and is **re-runnable/idempotent**. Between G1 and G3, history is split between the v2 CLI and the v1 IDEs.
- Paths are consolidated only after G3.
5. **Post-cutover (non-gating):** voice/STT; image generation and Claw; team sharing and incremental share sync; legacy TUI theme/binding extras. **Individual snapshot share/unshare/fork-from-share and the public viewer for v2 messages are G1 gates**, because they are v1 CLI features. Team upload stays refused until team sharing ships.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

KiloClaw can be left out, we already removed it from the client code. Image generation is still experimental. Most likely it makes sense to have a look which features are gates behind experimental flags first?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah. I left this all in post-cutover as a group of things that "don't belong in the scope of this first v2 work". Intention is to then pick these, one by one, and decide to toss or keep (and port).

# Kilo v1 → v2 migration plan

Finalized 2026-09-30. Base: opus-55. Merged in: upstream-resync rigor, capability handshake and validation rules from deepseek; VS Code blockers, sharing/remote steps, standing rules and metrics from kimi-k3. Status: not started. First actions:
- Team sign-off on Decisions 3 and 4.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Decision 5 was dropped from the sign-off list

This reverts the earlier fix: the list now omits Decision 5 (the post-cutover scope cuts), even though the PR description and the reviewer test steps still require sign-off on Decisions 3, 4 and 5. If narrowing the set is intentional, reconcile the PR description and reviewer test steps; otherwise restore Decision 5.

Suggested change
- Team sign-off on Decisions 3 and 4.
- Team sign-off on Decisions 3, 4 and 5.

Reply with @kilocode-bot fix it to have Kilo Code address this issue.

- VS Code ships from `main` and bundles the CLI built from the same commit. It does not pin a CLI version.
- JetBrains pins a CLI version.

**G2 and G3 are independent client-surface tracks.** Their work is mainly Kilo-specific client code (`packages/kilo-vscode`, `kilo-ide-ui`, `kilo-ui`, `kilo-jetbrains`) that consumes the v2 core through public contracts. They do not block G1, and G1 does not wait for them. Each track can start once its prerequisites land (N1 for both; #14383 for VS Code) and can run in parallel with G1 under its own owner.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: JetBrains prerequisite conflicts with the dependency order

This sentence says each track starts once its prerequisites land, "(N1 for both; #14383 for VS Code)", but the dependency order gates G3 on N1 and N6b. Since N6b imports kilo-jetbrains for G3, list N6b for JetBrains here as well (or remove it from the G3 gate) so the two statements agree.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.


Some client-track items touch core, server or protocol, and must be coordinated with core work:
- #14380, the message-deletion runtime operation;
- N9, the server side of the capability handshake;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: N9's Touches field omits the server surface named here

This line lists N9 as a client-track item that touches the server ("the server side of the capability handshake"), but N9's Touches value in the new-issues table is only packages/kilo-vscode. The Touches field exists so parallel agents avoid editing the same files, so the server/core path N9 edits should be recorded there too.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Add the execution plan to the migration-tracking README and describe
each plan document's role under it: the execution plan holds decisions
and sequencing, the progress plan holds live status per row, and the
working log holds coordinator-written milestones.

Resolve the three review suggestions on the execution plan:
- include Decision 5 in the pre-execution sign-off list
- list N6b as a JetBrains track prerequisite in Decision 3
- add the server side of the handshake to N9's Touches field
@fpliger
fpliger merged commit 7822633 into kilo-v2 Oct 2, 2026
8 of 9 checks passed
@fpliger
fpliger deleted the v2-execution-plan branch October 2, 2026 15:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants