Open saved whymark reviews or compare staged, unstaged, all-working, branch and commit changes inside VS Code. The bundled custom editor reuses the review UI without a server. Source edits are hash-checked, undoable editor changes and never change the index. New comparisons retain explanation stubs, and imported verification is not silently trusted. The VSIX is installable locally; platform and test limitations are recorded in the delivery evidence.
0
Explained
0 of 2582 added lines
0%
claimed verified
sourced
28
inferred
0
stubs
0
high risk
1
todos
0
questions
0
npm test
exit 0 in 5.1s
pass
npm run typecheck
exit 0 in 1.1s
pass
npm run lint
exit 0 in 3.0s
pass
npm run package:vscode
exit 0 in 1.4s
pass
WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode
Keep setup and delivery boundaries beside the implementation so users can install a local artifact and distinguish measured behavior from untested environments.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
367+See [extension usage and safety boundaries](extensions/vscode/README.md). The VSIX
368+is local and self-contained; it has not been published to the Marketplace.
eslint.config.mjs
+1−0read-only10%
intentunspecifiedconfidence unknown
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run package:vscode
exit 0 in 1.4s
@@ -1,7 +1,7 @@
11{
22"name": "whymark",
33"version": "0.3.0",
4−"description": "whymark \u2014 a file format and reviewer for reading AI-written code changes with the reasoning, sources, and verification attached to each line.",
4+"description": "whymark — a file format and reviewer for reading AI-written code changes with the reasoning, sources, and verification attached to each line.",
55"author": "Samuel Spink",
66"license": "MIT",
77"bin": {
@@ -37,7 +37,7 @@
3737"scripts": {
3838"dev": "next dev --port 43917",
3939"build": "next build",
40−"build:cli": "esbuild src/cli/whymark.ts --bundle --platform=node --format=esm --outfile=dist/whymark.mjs --external:yaml --legal-comments=none --banner:js='/* generated by npm run build:cli \u2014 do not edit */'",
40+"build:cli": "esbuild src/cli/whymark.ts --bundle --platform=node --format=esm --outfile=dist/whymark.mjs --external:yaml --legal-comments=none --banner:js='/* generated by npm run build:cli — do not edit */'",
51+"package:vscode": "npm run build:vscode && cd extensions/vscode && vsce package --no-dependencies --allow-missing-repository --out ../../.artifacts/whymark-vscode.vsix",
52+"test:vscode": "npm run build:vscode && node extensions/vscode/scripts/test.mjs",
53+"test:vscode:ui": "npm run build:vscode && node tests/e2e/vscode.mjs"
5054 },
5155"dependencies": {
5256"yaml": "^2.8.1"
@@ -60,7 +64,10 @@
6064"@types/node": "^22",
6165"@types/react": "^19",
6266"@types/react-dom": "^19",
67+"@types/vscode": "^1.96.0",
6368"@vercel/analytics": "^2.0.1",
69+"@vscode/test-electron": "^3.1.0",
70+"@vscode/vsce": "^4.0.0",
6471"class-variance-authority": "^0.7.1",
6572"clsx": "^2.1.1",
6673"cn": "^0.3.0",
@@ -70,6 +77,7 @@
7077"lucide-react": "^0.545.0",
7178"next": "16.3.5",
7279"playwright": "^1.63.0",
80+"postcss": "^8.5.28",
7381"react": "19.2.8",
7482"react-dom": "19.2.8",
7583"shadcn": "^4.21.0",
src/app/r/[slug]/actions.ts
+1−9read-only10%
intentunspecifiedconfidence unknown
The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
2820 * These actions write to the working tree of whoever is running the dev server,
src/app/r/[slug]/page.tsx
+2−2read-only10%
intentunspecifiedconfidence unknown
The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run test:ui
exit 0 in 46.0s
@@ -5,7 +5,7 @@import { validateDocumentInRepo } from "@/lib/whymark/validate-tree";
The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
175− message: `Working tree updated: ${undone}. This review now describes code you changed — regenerate it with \`whymark new --worktree\` before sharing.`,
179+ message: `${mutationTarget} updated: ${undone}. This review now describes code you changed — regenerate it with \`whymark new --worktree\` before sharing.`,
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run package:vscode
exit 0 in 1.4s
@@ -0,0 +1,2 @@
1+/dist/
2+*.vsix
extensions/vscode/.vscodeignore
+4−0read-only10%
intentunspecifiedconfidence unknown
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run package:vscode
exit 0 in 1.4s
@@ -0,0 +1,4 @@
1+src/**
2+scripts/**
3+*.tsbuildinfo
4+**/*.map
extensions/vscode/LICENSE
+52−0read-only10%
intentunspecifiedconfidence unknown
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run package:vscode
exit 0 in 1.4s
@@ -0,0 +1,52 @@
1+MIT License
2+
3+Copyright (c) 2026 Samuel Spink
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
22+
23+---
24+
25+AI-Led Development Acknowledgement
26+
27+This software was written primarily by AI coding agents, directed by a human.
28+That is stated plainly here because it is the kind of thing this project exists
29+to make visible, and because you should weigh it when deciding to depend on the
30+code.
31+
32+Every change is read by at least one human before it is merged. That single
33+review is the whole of the process, and it is the only assurance offered. No
34+claim is made that the code has been audited, formally verified, penetration
35+tested, or reviewed by a subject-matter expert in any domain it touches.
36+
37+Two limits are worth naming, since this repository defines a format for
38+recording exactly these things:
39+
40+ * An annotation marked `inference` records what an agent believed while
41+ writing the code, not an established fact. It may be wrong.
42+
43+ * A passing verification claim records that a command succeeded at the moment
44+ a review was written. It is evidence about that moment and nothing more.
45+ Use `whymark verify` to re-establish it.
46+
47+This acknowledgement grants no rights and imposes no conditions beyond the MIT
48+License above; it neither adds to nor narrows that license. It restates the
49+disclaimer for emphasis: the software is provided "as is", without warranty of
50+any kind, and no author, copyright holder, contributor, or reviewer accepts any
51+liability for any claim, damages, or other liability arising from the software,
52+its use, or reliance on any statement recorded in a review within it.
extensions/vscode/README.md
+48−0read-only10%
intentunspecifiedconfidence unknown
Keep setup and delivery boundaries beside the implementation so users can install a local artifact and distinguish measured behavior from untested environments.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run typecheck
exit 0 in 1.1s
@@ -0,0 +1,48 @@
1+# Whymark for VS Code
2+
3+Read AI-written changes with the reasons, sources and verification beside the code — directly in VS Code, without starting a web server.
15+Or use **Extensions: Install from VSIX…** and select the generated file. No Marketplace publication or GitHub access is needed to install the VSIX. Requires VS Code 1.96+ on a desktop or remote filesystem workspace.
16+
17+## Review changes
18+
19+Open a `.whymark` file to use the interactive editor, or run a command from the Command Palette / Source Control menu:
20+
21+| Command | Comparison |
22+| --- | --- |
23+| Whymark: Review Staged Changes | HEAD → Git index |
24+| Whymark: Review Unstaged Changes | Git index → saved working files |
25+| Whymark: Review All Working Changes | HEAD → saved working files |
26+| Whymark: Review Branch Changes | merge base of selected ref and HEAD → HEAD (committed branch changes) |
27+| Whymark: Review Commit | selected commit against its parent |
28+
29+New Git comparisons contain explanation stubs. They do not pretend to provide AI reasoning or verified accuracy. Empty comparisons are valid. Untracked files are included for unstaged/all-working comparisons by default; disable `whymark.includeUntracked` in Settings. Unsaved editor changes are excluded from comparisons.
30+
31+Use **Refresh comparison** after saving code, staging changes, or switching branches. **Save review as…** writes a new `.whymark` file (existing reviews are not overwritten). **Open review source** opens the raw format alongside the viewer so you can edit explanations normally; saved and unsaved review edits refresh the preview. For multi-root workspaces, choose a repository when prompted.
32+
33+## Interactive review
34+
35+- Unified/split diffs, syntax highlighting, multiple comments per line, compact disclosures and filters.
36+- Settings for synchronized horizontal scrolling and annotation layout.
37+- Keyboard navigation: `j` / `k` for comments, `u` for split/unified, `x` for rejection, `?` for help.
38+- Open a reviewed file in an adjacent editor using the file selector.
39+- Reject lines/parts or edit a hunk. **Apply changes updates source editor buffers and supports Undo; save those files to persist edits.** The Git index is never changed. Files must still match the review hash; dirty buffers, unsafe paths and stale reviews are refused.
40+- Existing execution evidence is displayed as imported and quality evidence as unchecked. The extension does not execute verification commands or scanners embedded in reviews.
41+
42+Restricted workspaces can display reviews. Git comparisons and source edits require workspace trust. Source paths are contained in the selected repository, including symlinks. Webview assets are bundled, external links permit HTTP(S) only, and no review data is uploaded.
43+
44+## Development
45+
46+`npm run build:vscode`, `npm run test:vscode`, and `npm run package:vscode` run from the repository root. The host and webview share the existing parser, diff/editor logic and React components. The Next.js application uses a separate server-action adapter.
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Ship a self-contained extension with bundled host, worker and webview assets. Keep generated output and development sources out of the VSIX, declare build dependencies explicitly, and validate the same artifact users will install.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Check real user boundaries rather than bundle compilation alone: actual VSIX discovery and webview startup, Git scope separation, undo, exact save bytes, overwrite refusal, stale/dirty source protection, message validation and bundled browser controls.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode
Keep filesystem authority in the extension host: resolve repository paths, reject stale or dirty sources, gate mutations on workspace trust and use WorkspaceEdit so native undo works. Explicit refresh and comparison scope keep HEAD, index and working files distinct.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode
21+functionrequireTrust() { if (!vscode.workspace.isTrusted) thrownewError("Trust this workspace before comparing Git changes or editing source files."); }
107+if (!Buffer.from(text).equals(disk) ||!isActionable(file, blobHash(text))) thrownewError("File no longer matches this review. Refresh or regenerate it first.");
109+if (document.isDirty || document.getText() !== text) thrownewError("Save or revert the source file's unsaved changes before editing from Whymark.");
113+const dels =newSet(file.hunks.flatMap(h => h.lines.filter(l => l.type ==="del").map(l => l.oldLine)));
114+if (request.decisions.discardAdded.some(n =>!adds.has(n)) || request.decisions.restoreDeleted.some(n =>!dels.has(n))) thrownewError("Decisions must address changed lines in this review.");
115+ } else {
116+if (request.end - request.start >100000) thrownewError("Edit range is too large.");
117+for (let line = request.start; line <= request.end; line++) if (!newLines.has(line)) thrownewError("Edit must stay inside a reviewed hunk.");
224+const folder =awaitchooseFolder(resource); if (!folder) return;
225+if (folder.uri.scheme !=="file") thrownewError("This extension requires a filesystem workspace.");
226+const ref = scope ==="branch"|| scope ==="commit"?await vscode.window.showInputBox({ prompt: scope ==="branch"?"Base branch or revision (merge base with HEAD)":"Commit to review", value: scope ==="branch"?"main":"HEAD", validateInput: value =>!value.trim() || value.startsWith("-") || /[\s\x00-\x1f]/.test(value) ?"Enter a Git ref without whitespace or leading hyphens.": undefined }) : undefined;
239+exportfunctiondeactivate() { for (const session of sessions) session.panel.dispose(); }
extensions/vscode/src/protocol.ts
+26−0read-only10%
intentunspecifiedconfidence unknown
Review data and webview messages do not grant file access. Bounded typed operations, canonical containment and Git blob identities prevent escaped paths or malformed/stale write requests from becoming edits.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Review data and webview messages do not grant file access. Bounded typed operations, canonical containment and Git blob identities prevent escaped paths or malformed/stale write requests from becoming edits.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm test
exit 0 in 5.1s
@@ -0,0 +1,17 @@
1+import { createHash } from"node:crypto";
2+import { realpath, stat } from"node:fs/promises";
15+if (!info.isFile() || info.size > MAX_REVIEW_BYTES) thrownewError("Only files up to 8 MB can be opened or edited.");
16+return target;
17+}
extensions/vscode/src/test-host.ts
+70−0read-only10%
testunspecifiedconfidence unknown
Check real user boundaries rather than bundle compilation alone: actual VSIX discovery and webview startup, Git scope separation, undo, exact save bytes, overwrite refusal, stale/dirty source protection, message validation and bundled browser controls.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode
67+ console.log("WHYMARK: real extension host checks passed (activation, webview ready, staged/unstaged, stale and dirty guards, undo, index safety, custom editor refresh)");
68+await vscode.workspace.saveAll();
69+for (const session of api.sessions) session.panel.dispose();
70+}
extensions/vscode/src/theme.css
+16−0read-only10%
intentunspecifiedconfidence unknown
Reuse the tested review controls with a narrow message bridge and VS Code theme variables. Keep imported evidence and unsaved editor changes explicit, and prevent restricted-mode keyboard actions from exposing mutation controls.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Reuse the tested review controls with a narrow message bridge and VS Code theme variables. Keep imported evidence and unsaved editor changes explicit, and prevent restricted-mode keyboard actions from exposing mutation controls.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
53+<divclassName="extension-notice">{state?.trusted ?"Edits affect the working-tree editor buffer and support Undo. Save the source file to write it to disk. Git index is unchanged.":"Read-only review. Trust the workspace to compare Git changes or edit source files."} Evidence from review files is shown as imported, not independently re-run.</div>
Git collection can block on a large tree; isolate it in a cancellable worker and reuse the existing scope semantics rather than inventing a second diff implementation.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ WHYMARK_VSIX=.artifacts/whymark-vscode.vsix npm run test:vscode
Keep setup and delivery boundaries beside the implementation so users can install a local artifact and distinguish measured behavior from untested environments.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run typecheck
exit 0 in 1.1s
@@ -0,0 +1,43 @@
1+# PLAN: Interactive Whymark in VS Code
2+
3+## Goal
4+Open `.whymark` files and live Git comparisons in VS Code using the existing review UI. Compare staged against HEAD, unstaged against the index, worktree against HEAD, branch merge-base against HEAD, or a commit against its parent. Preserve explanations as explicit stubs for new comparisons.
5+
6+## Out of scope
7+Marketplace publication, automatic command execution from annotations, staging/unstaging, cloud services, browser-only VS Code, and AI-generated claims.
8+
9+## Context the agent must read first
10+- `src/lib/whymark/git.ts`, `edit.ts`, `inline.ts`: comparison and mutation contracts.
12+- `src/lib/view-model.ts`: highlighting, annotation and evidence state.
13+- VS Code custom editor, webview and workspace trust documentation.
14+
15+## Stack decisions
16+Bundled TypeScript workspace extension and React webview. Custom text editor owns review documents; the extension host performs guarded operations. No Next.js server, CDN, or npm runtime installation. Git generation runs in a terminable worker. Source edits use VS Code WorkspaceEdit and remain undoable/unsaved.
25+| `src/app/r/[slug]/page.tsx`, `actions.ts` | modify | Web adapter wiring |
26+| `package.json`, lockfile, ESLint config | modify | API types and official packaging/testing tools |
27+| `tests/vscode.test.ts` | create | Protocol, containment and real Git comparison cases |
28+| `README.md` | modify | Local VSIX installation and scope |
29+
30+## Sequence
31+1. Inspect baseline and APIs; add platform adapter.
32+2. Implement editor host, comparisons, refresh/save/source navigation and guarded editing.
33+3. Bundle assets and package VSIX.
34+4. Exercise real extension host and browser interactions; run existing checks sequentially.
35+
36+## Tests & verification
37+Protocol rejection, traversal/symlink refusal, stale and dirty-buffer edit protection, literal content rendering, trusted/untrusted behavior, staged/unstaged separation, save/reopen, refresh, actual VSIX contents. Run npm test/typecheck/lint and existing browser suite. Test installed VS Code on macOS; distinguish unavailable platforms from verified ones.
38+
39+## Risks & rollout
40+Review paths and webview messages are untrusted. Gate edits and Git on workspace trust; resolve paths within the selected repository; compare newSha to both disk and editor content before WorkspaceEdit. Do not execute annotation commands. Restrict webview resources and scripts with CSP. Existing web behavior retains server actions through adapter. Installation is a local VSIX; no publication or commits.
41+
42+## Open questions
43+None blocking. Initial extension targets desktop/remote filesystem workspaces; compare refresh is explicit and review source changes refresh automatically.
specs/002-vscode-extension/verification.md
+63−0read-only10%
intentunspecifiedconfidence unknown
Keep setup and delivery boundaries beside the implementation so users can install a local artifact and distinguish measured behavior from untested environments.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run typecheck
exit 0 in 1.1s
@@ -0,0 +1,63 @@
1+# VS Code extension — delivery evidence
2+
3+Implemented against baseline `d5ba7ce`, initially clean working tree. Changes are
4+uncommitted; no push, Marketplace publication, or installation into the user's
5+normal VS Code profile was performed.
6+
7+## Acceptance disposition
8+
9+| ID | Requirement | Evidence | Status |
10+| --- | --- | --- | --- |
11+| VSC-01 | Interactive `.whymark` custom editor without a server | Real VS Code loads the bundled webview and sends its ready message; Chromium exercises the bundled controls under CSP | Verified |
12+| VSC-02 | Distinct staged, unstaged, worktree, branch and commit comparisons | Real Git fixture asserts HEAD/index/worktree separation; installed host exercises staged and unstaged commands; remaining scopes reuse existing Git collector coverage | Verified within listed coverage |
13+| VSC-03 | Hash-checked undoable source edits, index untouched | Installed host checks stale disk, stale review revision, invalid paths/lines, dirty buffers, native undo and unchanged disk/index | Verified |
14+| VSC-04 | Save/reopen and live raw-review changes | Installed host creates exact bytes, refuses an existing filename, reopens custom editor and observes refresh from raw TextDocument edits | Verified |
15+| VSC-05 | Safe webview and read-only mode | Literal HTML rendering, typed message rejection, symlink/traversal cases, restricted UI and keyboard checks; trust gates inspected in host | Verified for tested boundaries; real restricted-mode host not exercised |
16+| VSC-06 | Installable package and web compatibility | VSIX installed into isolated VS Code profile and exercised; existing 38 browser checks plus improvements suite pass | Verified |
29+ and no JavaScript errors. Its VS Code message bridge is simulated; the separate
30+ installed-host checks exercise actual WorkspaceEdit, custom editor and Git.
31+- `npm run test:ui`: 38 existing real-browser checks passed, zero console errors.
32+- `node tests/e2e/improvements.mjs`: all feature checks passed.
33+- `npm run build -- --webpack`: production web build passed.
34+- `git diff --check`: passed; browser suite restored `examples/retry.ts`.
35+
36+Final reruns and output identities are recorded in `reviews/vscode-extension.whymark`.
37+The `.artifacts/vscode/` directory contains the bundled-webview screenshot and source
38+fingerprint. Evidence represents separate source-driven and behavior-driven
39+self-review passes, not an independent-agent audit.
40+
41+## Corrections and limits
42+
43+The first baseline run under Node 24/npm 12 failed in the existing npm pack test;
44+rerunning under the project's declared Node 22 passed all 102 baseline tests.
45+The extension acceptance run caught macOS path aliases opening separate document
46+identities; canonical lookup now respects existing unsaved buffers and rejects
47+multiple aliases. The source review also closed the read-only keyboard decision
48+path, covered by the bundled-webview test. Initial test setup used an outdated
49+macOS executable filename and an unavailable cleanup command; both were corrected.
50+
51+Comparisons use saved filesystem content. Branch mode compares merge-base to HEAD;
52+it does not include uncommitted changes. Source edits change editor buffers and
53+must be saved by the user; they do not stage/unstage or modify the index. Imported
54+execution evidence is not independently re-run by this extension. Generated notes
55+remain explicit stubs. Review files are limited to 8 MB and 1,000 files; Git workers
56+are cancellable and limited to 30 seconds. Refreshing a generated comparison
57+regenerates its snapshot; edit a saved review's source to retain authored notes.
58+
59+Windows, Linux, remote hosts, VS Code 1.96 minimum-version runtime, real untrusted
60+workspace host, branch/commit input dialogs and Save As dialog interaction were
61+not exercised. API typing uses 1.96; installed-host testing uses 1.138. The save
62+operation behind the dialog is tested with real VS Code APIs. The desktop/remote
63+filesystem extension does not support browser-only virtual workspaces.
src/components/whymark/web-review-view.tsx
+8−0read-only10%
intentunspecifiedconfidence unknown
The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
claimed passedcommand
$ npm run test:ui
exit 0 in 46.0s
@@ -0,0 +1,8 @@
1+"use client";
2+import Link from"next/link";
3+import { ArrowLeft } from"lucide-react";
4+import { ReviewView, type ReviewViewProps } from"./review-view";
The shared review surface cannot import Next.js server actions into an editor webview. Inject the platform operations while retaining a web adapter, and distinguish editor-buffer mutation from filesystem writes in user feedback.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Check real user boundaries rather than bundle compilation alone: actual VSIX discovery and webview startup, Git scope separation, undo, exact save bytes, overwrite refusal, stale/dirty source protection, message validation and bundled browser controls.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Check real user boundaries rather than bundle compilation alone: actual VSIX discovery and webview startup, Git scope separation, undo, exact save bytes, overwrite refusal, stale/dirty source protection, message validation and bundled browser controls.
specs/002-vscode-extension/PLAN.md
Scoped extension requirements and verification boundaries
Keep setup and delivery boundaries beside the implementation so users can install a local artifact and distinguish measured behavior from untested environments.
$ npm run typecheck