Skip to content

Commit 3b64a8f

Browse files
author
Laurent Guitton
committed
docs(website): add v2.13 blog teaser and renumber roadmap
Surface the v2.13 AI inline suggestions post on the landing page and in the nav, and shift the forge-completeness roadmap to v2.14 so the remaining GitLab/Bitbucket stubs land in a single jalon. 🪄 Commit via GitWand
1 parent f6c3009 commit 3b64a8f

4 files changed

Lines changed: 49 additions & 18 deletions

File tree

ROADMAP.md

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -790,7 +790,36 @@ Deux extensions du workflow de review déjà en place.
790790

791791
---
792792

793-
### v2.14.0 — Voice Input (expérimental)
793+
### v2.14.0 — Forge completeness
794+
795+
_Suite de v2.10 : combler les stubs `ForgeNotImplementedError` sur GitLab et Bitbucket, et ouvrir les trois méthodes d'intelligence forge-agnostiques._
796+
797+
**GitLab — stubs restants**
798+
799+
- `updateComment` / `deleteComment` : ajout d'un paramètre `prNumber` optionnel dans l'interface `ForgeProvider` (MR IID requis par l'API GitLab Notes) ; mise à jour de `GitLabProvider` et `GitHubProvider` (rétrocompatible)
800+
- Ancrage diff-line via Discussions API GitLab : remplace les notes générales par des `POST /projects/:id/merge_requests/:iid/discussions` avec `position` (base_sha, start_sha, head_sha, old_line / new_line) — parité avec le behaviour GitHub
801+
- `getCIChecks` via `gl pipeline list --json` : listing des jobs pipeline, mapping vers `CICheck` commun (status, url, name)
802+
803+
**Bitbucket — stubs restants**
804+
805+
- `getCIChecks` via REST v2 `/commit/{commit}/statuses` : wiring du endpoint déjà connu, mapping vers `CICheck`
806+
- `convertDraftToReady` : workaround via renommage du titre (`Draft: …` → titre propre) — Bitbucket n'a pas de notion native de draft, mais la convention titre est largement utilisée
807+
- `updateComment` / `deleteComment` : `DELETE /2.0/repositories/{workspace}/{repo}/pullrequests/{id}/comments/{comment_id}` + `PUT` update — mêmes guards que GitLab sur `prNumber`
808+
809+
**Intelligence forge-agnostique**
810+
811+
- `getConflictPreview` + `getHotspots` : audit des types `PrConflictPreview` et `PrHotspot` — les deux méthodes sont implémentées sur données git locales (Rust, pas d'API forge) ; vérifier si les types peuvent être populés identiquement sur GitLab/Bitbucket ou s'il faut des variants ; supprimer le guard `forge.name === "github"` si l'audit confirme la compatibilité
812+
- `getFileHistory` (GitLab) : équivalent de la query GraphQL GitHub `pullRequest { reviews { files } }` via l'API REST GitLab MR notes — chips "ce fichier a été reviewé N fois" dans la diff view
813+
- `getFileHistory` (Bitbucket) : via REST v2 `/pullrequests/{id}/comments?q=…` avec filtrage par path
814+
815+
**Multi-compte provider**
816+
817+
- Passer le contexte `Account` actif dans les méthodes `ForgeProvider` (paramètre optionnel de contexte) — permet de switcher entre `alice` et `bob@corp.com` sur GitHub sans quitter l'app
818+
- `useAccounts` et `Account` sont déjà en place (v2.10) ; v2.14 connecte le compte à la résolution de credentials dans le provider
819+
820+
---
821+
822+
### v2.15.0 — Voice Input (expérimental)
794823

795824
Inspiré de Gitux, mais intégré au pipeline IA GitWand existant plutôt qu'en silo.
796825

@@ -804,7 +833,7 @@ Inspiré de Gitux, mais intégré au pipeline IA GitWand existant plutôt qu'en
804833

805834
---
806835

807-
### v2.15.0 — Scratch worktree + Conflict Predictor étendu
836+
### v2.16.0 — Scratch worktree + Conflict Predictor étendu
808837

809838
_Inspiré GitSquid. Extension naturelle du moteur GitWand et du Worktree first-class (v2.7)._
810839

@@ -823,7 +852,7 @@ _Inspiré GitSquid. Extension naturelle du moteur GitWand et du Worktree first-c
823852

824853
---
825854

826-
### v2.16.0 — Monorepo Scope
855+
### v2.17.0 — Monorepo Scope
827856

828857
_Inspiré GitSquid. Rend GitWand ergonomique sur les gros monorepos (pnpm, Cargo, Nx…)._
829858

@@ -834,7 +863,7 @@ _Inspiré GitSquid. Rend GitWand ergonomique sur les gros monorepos (pnpm, Cargo
834863

835864
---
836865

837-
### v2.17.0 — Safety Bundle : secrets scanner pré-commit
866+
### v2.18.0 — Safety Bundle : secrets scanner pré-commit
838867

839868
_Inspiré GitSquid. Feature "safety" sans aucune dépendance réseau — tout en local._
840869

@@ -851,7 +880,7 @@ _Inspiré GitSquid. Feature "safety" sans aucune dépendance réseau — tout en
851880

852881
---
853882

854-
### v2.18.0 — Stacked Branches (natif)
883+
### v2.19.0 — Stacked Branches (natif)
855884

856885
_Feature différenciante : workflow stacked PRs sans CLI externe (Graphite, ghstack…). Scope important — jalon dédié._
857886

@@ -872,7 +901,7 @@ Le paradigme : au lieu d'un gros PR, on empile des branches courtes (`feat/step-
872901

873902
- Détection automatique quand la base d'une stack a bougé (push sur `main`, merge d'une branche intermédiaire)
874903
- Bouton "Restack" en un clic : rebase l'ensemble de la stack en cascade (`git rebase --onto` layer par layer)
875-
- Preview du restack avec liste des conflits potentiels avant exécution (réutilise le Conflict Predictor de v2.15)
904+
- Preview du restack avec liste des conflits potentiels avant exécution (réutilise le Conflict Predictor de v2.16)
876905

877906
**PRs**
878907

website/.vitepress/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ export default defineConfig({
146146
text: 'Blog',
147147
items: [
148148
{ text: 'All articles', link: '/blog/' },
149+
{ text: 'AI code review in your PR diff (v2.13)', link: '/blog/v2-13-ai-inline-suggestions' },
150+
{ text: 'GitHub, GitLab & Bitbucket support (v2.10)', link: '/blog/v2-10-forge-integrations' },
149151
{ text: "Launchpad: cross-repo dashboard (v2.9)", link: '/blog/v2-9-launchpad' },
150152
{ text: 'Why we made LLM resolution opt-in (v2.5)', link: '/blog/v2-5-llm-fallback' },
151153
{ text: 'Hooks, workspaces & agent sessions (v2.7–v2.8)', link: '/blog/agent-sessions-automations-v2-8' },

website/.vitepress/theme/HomeLanding.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,10 +1528,10 @@ function cellClass(v: CompareValue | undefined): string {
15281528
<div class="blog-teaser-header">
15291529
<span class="blog-teaser-label">From the blog</span>
15301530
</div>
1531-
<a href="/blog/agent-sessions-automations-v2-8" class="blog-teaser-card">
1532-
<div class="blog-teaser-meta">May 2, 2026 · 18 min read</div>
1533-
<h3 class="blog-teaser-title">Hooks, workspaces, agent sessions, and automations: what went into GitWand v2.7 and v2.8</h3>
1534-
<p class="blog-teaser-excerpt">Git hooks manager, multi-repo workspaces, worktree quick-create, cross-platform AI agent detection with lsof and /proc/cwd, a daemonless scheduler, and conflict resolution memory.</p>
1531+
<a href="/blog/v2-13-ai-inline-suggestions" class="blog-teaser-card">
1532+
<div class="blog-teaser-meta">May 18, 2026 · 14 min read</div>
1533+
<h3 class="blog-teaser-title">AI code review in your PR diff: how GitWand v2.13 works</h3>
1534+
<p class="blog-teaser-excerpt">Per-hunk AI critique with a four-tier verdict (ok / nit / suggestion / risk), an inline suggestion editor that stages GitHub suggestion blocks without leaving the diff, and named AI prompt presets for commit messages.</p>
15351535
<span class="blog-teaser-cta">Read article →</span>
15361536
</a>
15371537
</div>

website/blog/v2-10-forge-integrations.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ Every string in the PR panel that names the PR concept uses `prLabel` — no har
167167

168168
**What works on GitLab in v2.10:** MR list, MR detail, diff, pipeline status (CI), create MR, merge MR, checkout MR, draft→ready conversion, MR notes (general comments), approvals, reviewer candidates.
169169

170-
**Stubs deferred to v2.11:** `updateComment` and `deleteComment` — both require the MR IID alongside the note ID, and the `ForgeProvider` interface's comment methods only take a `commentId`. The interface will gain an optional `prNumber` parameter in v2.11. Diff-line anchoring via GitLab's Discussions API (as opposed to general notes) is also v2.11.
170+
**Stubs deferred to v2.14:** `updateComment` and `deleteComment` — both require the MR IID alongside the note ID, and the `ForgeProvider` interface's comment methods only take a `commentId`. The interface will gain an optional `prNumber` parameter in v2.14. Diff-line anchoring via GitLab's Discussions API (as opposed to general notes) is also v2.14.
171171

172172
---
173173

@@ -183,7 +183,7 @@ Bitbucket's API quirks that required adaptation:
183183

184184
- **PR state casing.** Bitbucket uses `"OPEN"`, `"MERGED"`, `"DECLINED"` (uppercase). The provider upcases the `state` argument at its boundary.
185185
- **No native draft.** Bitbucket has no `isDraft` concept. The `convertDraftToReady` method in `BitbucketProvider` is a stub in v2.10 — Bitbucket workarounds (title prefix `"Draft:"`) are not yet implemented.
186-
- **CI Checks.** Bitbucket Pipelines are accessible via a separate REST endpoint (`/2.0/repositories/{workspace}/{repo_slug}/commit/{commit}/statuses`). That endpoint is wired in v2.11; `getCIChecks` throws `ForgeNotImplementedError` in v2.10.
186+
- **CI Checks.** Bitbucket Pipelines are accessible via a separate REST endpoint (`/2.0/repositories/{workspace}/{repo_slug}/commit/{commit}/statuses`). That endpoint is wired in v2.14; `getCIChecks` throws `ForgeNotImplementedError` in v2.10.
187187
- **Approvals only, no "request changes".** Bitbucket's review model has approve / unapprove, but no "request changes" equivalent. `submitReview` with `event: "REQUEST_CHANGES"` silently downgrades to `event: "COMMENT"` on Bitbucket — the review is posted but no blocking flag is set on the PR.
188188

189189
**What works on Bitbucket in v2.10:** PR list, PR detail, diff, create PR, merge PR, checkout PR, PR comments (general + inline via Bitbucket inline anchors), approvals, reviewer candidates (repo members with write access).
@@ -217,7 +217,7 @@ function activeAccount(forge: ForgeName): Account | null {
217217
}
218218
```
219219

220-
In v2.10, multi-account awareness is informational: the active account badge shows "Connected as alice" in the PR panel header, but all API calls still go through a single per-forge provider instance. Per-account provider instantiation — so you can switch between `alice` and `bob@corp.com` on GitHub without leaving the app — is deferred to v2.11, where the `ForgeProvider` methods will receive an optional `Account` context.
220+
In v2.10, multi-account awareness is informational: the active account badge shows "Connected as alice" in the PR panel header, but all API calls still go through a single per-forge provider instance. Per-account provider instantiation — so you can switch between `alice` and `bob@corp.com` on GitHub without leaving the app — is deferred to v2.14, where the `ForgeProvider` methods will receive an optional `Account` context.
221221

222222
The **Settings → Accounts** tab renders each forge section with its list of accounts, an "Add account" form, and an active-account radio selector. GitHub accounts are displayed with a note that auth is managed by `gh auth login` (GitWand reads the active `gh` account but doesn't store a token); GitLab accounts similarly defer to `glab auth login`; Bitbucket accounts go through the App Password form.
223223

@@ -227,11 +227,11 @@ The **Settings → Accounts** tab renders each forge section with its list of ac
227227

228228
Three methods on the `ForgeProvider` interface throw `ForgeNotImplementedError` on GitLab and Bitbucket:
229229

230-
**`getConflictPreview`** uses `git merge-tree` to simulate a merge and return which files conflict and which hunks can be auto-resolved before the merge is executed. This requires local git analysis, not a forge API call — it works by running `git merge-tree MERGE_BASE HEAD PR_HEAD` and parsing the output. There's no reason it can't work on GitLab or Bitbucket (the local git history is available regardless of the forge). It's listed as a stub because the `PrConflictPreview` data structure was designed around the GitHub PR model, and the implementation that feeds it needs review before being declared forge-agnostic. v2.11.
230+
**`getConflictPreview`** uses `git merge-tree` to simulate a merge and return which files conflict and which hunks can be auto-resolved before the merge is executed. This requires local git analysis, not a forge API call — it works by running `git merge-tree MERGE_BASE HEAD PR_HEAD` and parsing the output. There's no reason it can't work on GitLab or Bitbucket (the local git history is available regardless of the forge). It's listed as a stub because the `PrConflictPreview` data structure was designed around the GitHub PR model, and the implementation that feeds it needs review before being declared forge-agnostic. v2.14.
231231

232-
**`getHotspots`** identifies files in a PR that have been frequently modified together in recent commit history — a heuristic for "this change might require looking at file B if you're editing file A". It's implemented via a commit graph walk in Rust, not a forge API call. Same situation as conflict preview: forge-agnostic in principle, blocked by implementation review. v2.11.
232+
**`getHotspots`** identifies files in a PR that have been frequently modified together in recent commit history — a heuristic for "this change might require looking at file B if you're editing file A". It's implemented via a commit graph walk in Rust, not a forge API call. Same situation as conflict preview: forge-agnostic in principle, blocked by implementation review. v2.14.
233233

234-
**`getFileHistory`** fetches recent review comments for a set of file paths across the PR's history — used to show "this file has been reviewed three times in the last two weeks" context chips in the diff view. This one does require a forge API call (GitHub's GraphQL `pullRequest { reviews { files } }` query), and the equivalent query path for GitLab and Bitbucket needs separate work. v2.11 for GitLab; v2.12 for Bitbucket.
234+
**`getFileHistory`** fetches recent review comments for a set of file paths across the PR's history — used to show "this file has been reviewed three times in the last two weeks" context chips in the diff view. This one does require a forge API call (GitHub's GraphQL `pullRequest { reviews { files } }` query), and the equivalent query path for GitLab and Bitbucket needs separate work. v2.14 for GitLab; v2.14 for Bitbucket.
235235

236236
The `PrDetailView.vue` component gates all three widgets behind `forge.name === "github"` checks, so GitLab and Bitbucket users see the diff, comments, and CI status without the intelligence features — a clean partial experience rather than a broken full one.
237237

@@ -256,13 +256,13 @@ SSH URLs (`git@gitlab.com:user/repo.git`) and HTTPS URLs (`https://gitlab.com/us
256256

257257
## What's next
258258

259-
The v2.11 scope is:
259+
The v2.14 scope is:
260260

261261
**GitLab stubs:** `updateComment` / `deleteComment` (need the `prNumber` in the interface), diff-line comment anchoring via Discussions API, CI Checks (`gl pipeline list`).
262262

263263
**Bitbucket stubs:** `getCIChecks` (Bitbucket Pipelines REST endpoint), `convertDraftToReady` (via title prefix), `updateComment` / `deleteComment` (same interface gap as GitLab).
264264

265-
**Multi-account provider instantiation:** Pass the active `Account` context into `ForgeProvider` methods so a user with two GitHub accounts can toggle which one is used for API calls without leaving the app. The `useAccounts` composable and `Account` interface are already in place; v2.11 connects the account to the provider's credential resolution.
265+
**Multi-account provider instantiation:** Pass the active `Account` context into `ForgeProvider` methods so a user with two GitHub accounts can toggle which one is used for API calls without leaving the app. The `useAccounts` composable and `Account` interface are already in place; v2.14 connects the account to the provider's credential resolution.
266266

267267
**`getConflictPreview` + `getHotspots` forge-agnostic audit:** Both are implemented on local git data; the audit is about whether the `PrConflictPreview` and `PrHotspot` types need a GitLab/Bitbucket variant or can be populated identically.
268268

0 commit comments

Comments
 (0)