Skip to content

Commit 84ec1cc

Browse files
committed
Refactor Rust/WASM port tickets with dependency links and update history
- Added dependency links to multiple tickets in their descriptions to clarify relationships and execution order. - Updated history records for various tickets to reflect recent changes and revisions. - Enhanced acceptance criteria and planning specifications across tickets to ensure clarity and alignment with the Rust/WASM architecture goals. - Adjusted ticket states and dependencies to maintain accurate tracking of progress and requirements.
1 parent ae634d5 commit 84ec1cc

16 files changed

Lines changed: 107 additions & 40 deletions

File tree

.ticket/tickets/011563c2-59e7-48f1-a61f-d8fdc80d2f6e/description.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ Candidate logic to port first:
99
- tree-model derivation used by the sidebar view
1010
- ticket URL / command intent derivation that does not require direct VS Code APIs
1111

12+
## Dependency links
13+
14+
- Tracker: [6d07d610 Rust/WASM port track](../6d07d610-75c1-448a-afd5-6ae15098ca21/ticket.toml)
15+
- Depends on: [14047b99 Prove dual-host WASM activation](../14047b99-41d6-4899-bec6-4a919bffcc2d/ticket.toml)
16+
- Unblocks: [bfafde19 Replace Node-bound behaviors with host capability adapters](../bfafde19-ddf7-47ef-966e-a1135be4efd6/ticket.toml)
17+
1218
Acceptance criteria:
1319
- [ ] The Rust core crate contains no direct VS Code API bindings and no Node-specific assumptions.
1420
- [ ] The JS/TS host passes API payloads into the core and receives serializable tree/view-model output.
@@ -20,4 +26,4 @@ Acceptance criteria:
2026
The Rust/WASM architecture is frozen in spec `ticket-vscode/rust-wasm-port` (a592900c, state `reviewed`). The "Module Portability Matrix" pins exactly which modules move into this core:
2127
- Portable → core: `api.ts` request/response shapes + URL building; `ticketProvider.ts` filter/group/root-detection/tree-derivation; ticket URL / command intent derivation.
2228
- Stays in the host shell (do NOT pull into the core): TreeItem subclasses (`ticketTreeItems.ts`), command registration, and any `vscode`/Node access.
23-
- "Host Capability Contract" rule 1 + 5: the core receives a `HostCapabilities` object and derives feature-gate decisions from capability presence; missing capability ⇒ "feature unavailable".
29+
- "Host Capability Contract" rule 1 + 5: the core receives a `HostCapabilities` object and derives feature-gate decisions from capability presence; missing capability ⇒ "feature unavailable".
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{"rev":1,"ts":"2026-05-18T10:56:16.596152100+00:00","fields":{"component":"ticket-vscode","priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Extract portable Rust core for ticket/domain logic","type":"tracker-improvement"}}
22
{"rev":2,"ts":"2026-06-14T19:11:27.416108500+00:00","fields":{"component":"ticket-vscode","depends_on":["14047b99-41d6-4899-bec6-4a919bffcc2d"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Extract portable Rust core for ticket/domain logic","type":"tracker-improvement"}}
33
{"rev":3,"ts":"2026-06-14T19:39:22.692881+00:00","fields":{"component":"ticket-vscode","depends_on":["14047b99-41d6-4899-bec6-4a919bffcc2d"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Extract portable Rust core for ticket/domain logic","type":"tracker-improvement"}}
4+
{"rev":4,"ts":"2026-06-14T20:35:52.156973700+00:00","fields":{"component":"ticket-vscode","depends_on":["14047b99-41d6-4899-bec6-4a919bffcc2d"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Extract portable Rust core for ticket/domain logic","type":"tracker-improvement"}}

.ticket/tickets/14047b99-41d6-4899-bec6-4a919bffcc2d/description.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
Build a narrow architecture spike that proves a Rust/WASM module can be loaded by both VS Code extension hosts used by this port.
44

5+
## Dependency links
6+
7+
- Tracker: [6d07d610 Rust/WASM port track](../6d07d610-75c1-448a-afd5-6ae15098ca21/ticket.toml)
8+
- Depends on: [93f7e422 Freeze Rust/WASM architecture spec and feature matrix](../93f7e422-1e41-4145-b8ba-0dcf7fc730ac/ticket.toml)
9+
- Unblocks: [011563c2 Extract portable Rust core for ticket/domain logic](../011563c2-59e7-48f1-a61f-d8fdc80d2f6e/ticket.toml)
10+
511
Acceptance criteria:
612
- [x] A minimal Rust crate compiles to `wasm32-unknown-unknown` and exports a smoke-tested function callable from the extension host.
713
- [x] The desktop `main` entry and the web `browser` entry both activate successfully while loading the same WASM module or the same generated bindings.

.ticket/tickets/14047b99-41d6-4899-bec6-4a919bffcc2d/history.ndjson

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
{"rev":3,"ts":"2026-06-14T19:39:22.880643300+00:00","fields":{"component":"ticket-vscode","depends_on":["93f7e422-1e41-4145-b8ba-0dcf7fc730ac"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Prove dual-host WASM activation","type":"tracker-improvement"}}
44
{"rev":4,"ts":"2026-06-14T20:20:01.724878700+00:00","fields":{"component":"ticket-vscode","depends_on":["93f7e422-1e41-4145-b8ba-0dcf7fc730ac"],"priority":"high","risk_level":"high","state":"in-implementation","title":"[ticket-vscode] Prove dual-host WASM activation","type":"tracker-improvement"}}
55
{"rev":5,"ts":"2026-06-14T20:24:39.614651200+00:00","fields":{"component":"ticket-vscode","depends_on":["93f7e422-1e41-4145-b8ba-0dcf7fc730ac"],"priority":"high","risk_level":"high","state":"in-review","title":"[ticket-vscode] Prove dual-host WASM activation","type":"tracker-improvement"}}
6+
{"rev":6,"ts":"2026-06-14T20:35:52.072837900+00:00","fields":{"component":"ticket-vscode","depends_on":["93f7e422-1e41-4145-b8ba-0dcf7fc730ac"],"priority":"high","risk_level":"high","state":"in-review","title":"[ticket-vscode] Prove dual-host WASM activation","type":"tracker-improvement"}}

.ticket/tickets/362448d4-ccf1-4b9d-90f3-d4577da83a65/description.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ Scope:
77
- bundle the `browser` entry into a single WebWorker-compatible file including the WASM asset + JS glue.
88
- desktop-only modules (`browserBridge.ts`, `browserBridgeCdp.ts`, server-spawn helpers) must be excluded from the web bundle.
99

10+
## Dependency links
11+
12+
- Tracker: [6d07d610 Rust/WASM port track](../6d07d610-75c1-448a-afd5-6ae15098ca21/ticket.toml)
13+
- Depends on: [bfafde19 Replace Node-bound behaviors with host capability adapters](../bfafde19-ddf7-47ef-966e-a1135be4efd6/ticket.toml)
14+
- Unblocks: [6de424b0 Validate Rust/WASM parity across desktop, web, and remote hosts](../6de424b0-68ec-43c7-9d70-eb8d17305ab3/ticket.toml)
15+
1016
Acceptance criteria:
1117
- [ ] `package.json` ships both `main` and `browser` entries and the web bundle is a single WebWorker-compatible file.
1218
- [ ] The WASM asset and generated glue are included for both desktop and web packaging paths.
@@ -19,4 +25,4 @@ The Rust/WASM architecture is frozen in spec `ticket-vscode/rust-wasm-port` (a59
1925
- "Target Architecture → Runtime model": ship both `main` (desktop/remote) and `browser` (web worker) entries calling the same core through one adapter boundary.
2026
- "Module Portability Matrix": desktop-only/deferred modules (`browserBridge.ts`, `browserBridgeCdp.ts`, server-spawn/binary-discovery in `extensionSupport.ts`) must be excluded from the web bundle.
2127
- "Validation Strategy → Extension packaging": typecheck/bundle both entries, activation smoke test, and `@vscode/test-web` browser-hosted test.
22-
- Loader/bundling constraints recorded by the dual-host activation spike (14047b99) feed this ticket.
28+
- Loader/bundling constraints recorded by the dual-host activation spike (14047b99) feed this ticket.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
{"rev":1,"ts":"2026-05-18T10:56:18.373264800+00:00","fields":{"component":"ticket-vscode","priority":"high","risk_level":"medium","state":"ready","title":"[ticket-vscode] Add dual-host packaging, bundling, and extension test harnesses","type":"tracker-improvement"}}
22
{"rev":2,"ts":"2026-06-11T12:41:32.148478900+00:00","fields":{"component":"ticket-vscode","priority":"high","risk_level":"medium","state":"in-implementation","title":"[ticket-vscode] Add dual-host packaging, bundling, and extension test harnesses","type":"tracker-improvement"}}
33
{"rev":3,"ts":"2026-06-14T19:39:22.436222200+00:00","fields":{"component":"ticket-vscode","priority":"high","risk_level":"medium","state":"in-implementation","title":"[ticket-vscode] Add dual-host packaging, bundling, and extension test harnesses","type":"tracker-improvement"}}
4+
{"rev":4,"ts":"2026-06-14T20:35:59.354816500+00:00","fields":{"component":"ticket-vscode","priority":"high","risk_level":"medium","state":"in-implementation","title":"[ticket-vscode] Add dual-host packaging, bundling, and extension test harnesses","type":"tracker-improvement"}}
5+
{"rev":5,"ts":"2026-06-14T20:36:32.693329700+00:00","fields":{"component":"ticket-vscode","depends_on":["bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"medium","state":"in-implementation","title":"[ticket-vscode] Add dual-host packaging, bundling, and extension test harnesses","type":"tracker-improvement"}}

.ticket/tickets/362448d4-ccf1-4b9d-90f3-d4577da83a65/ticket.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ created_at = "2026-05-18T10:56:18.316270900+00:00"
33
title = "[ticket-vscode] Add dual-host packaging, bundling, and extension test harnesses"
44
state = "in-implementation"
55
component = "ticket-vscode"
6+
depends_on = ["bfafde19-ddf7-47ef-966e-a1135be4efd6"]
67
priority = "high"
78
risk_level = "medium"
89
type = "tracker-improvement"
Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,40 @@
1-
# [ticket-vscode] Rust/WASM port track
2-
3-
Port `memory-viewers/memory-api/tools/ticket-vscode` from a TypeScript-heavy implementation to a Rust/WASM-backed VS Code extension architecture.
4-
5-
The target is a dual-host extension, not a JS-free extension. VS Code still requires JS entrypoints for activation and API access. The migration should therefore:
6-
7-
- keep a thin JS/TS host shell for VS Code integration
8-
- move deterministic domain and tree-model logic into a Rust/WASM core
9-
- redesign or explicitly scope desktop-only features that depend on Node/Electron behavior
10-
- validate the result in desktop, web, and remote-oriented scenarios
11-
12-
Planning spec:
13-
- `ticket-vscode/rust-wasm-port` (`a592900c-f513-4ec2-8dd2-53dbd04aac7b`)
14-
15-
Research summary:
16-
- The current extension mixes portable logic (`src/api.ts`, parts of `src/ticketProvider.ts`) with Node-bound behavior (`src/extensionSupport.ts`, `src/browserBridge.ts`, parts of `src/extensionCommands.ts`).
17-
- VS Code web extensions require a `browser` entry, a WebWorker-compatible runtime, and a single-file bundle.
18-
- Browser/web hosts cannot use `child_process`, raw `fs/path/process` access, or local CDP/browser automation.
19-
- Remote-safe behavior should prefer `vscode.env.openExternal`, `vscode.env.asExternalUri`, and `vscode.env.clipboard`.
20-
21-
This parent ticket is done when all child tickets are done, the spec reflects the final architecture and validation evidence, and the port plan has been executed with explicit host capability rules.
1+
# [ticket-vscode] Rust/WASM port track
2+
3+
Port `memory-viewers/memory-api/tools/ticket-vscode` from a TypeScript-heavy implementation to a Rust/WASM-backed VS Code extension architecture.
4+
5+
The target is a dual-host extension, not a JS-free extension. VS Code still requires JS entrypoints for activation and API access. The migration should therefore:
6+
7+
- keep a thin JS/TS host shell for VS Code integration
8+
- move deterministic domain and tree-model logic into a Rust/WASM core
9+
- redesign or explicitly scope desktop-only features that depend on Node/Electron behavior
10+
- validate the result in desktop, web, and remote-oriented scenarios
11+
12+
Planning spec:
13+
- `ticket-vscode/rust-wasm-port` (`a592900c-f513-4ec2-8dd2-53dbd04aac7b`)
14+
15+
Research summary:
16+
- The current extension mixes portable logic (`src/api.ts`, parts of `src/ticketProvider.ts`) with Node-bound behavior (`src/extensionSupport.ts`, `src/browserBridge.ts`, parts of `src/extensionCommands.ts`).
17+
- VS Code web extensions require a `browser` entry, a WebWorker-compatible runtime, and a single-file bundle.
18+
- Browser/web hosts cannot use `child_process`, raw `fs/path/process` access, or local CDP/browser automation.
19+
- Remote-safe behavior should prefer `vscode.env.openExternal`, `vscode.env.asExternalUri`, and `vscode.env.clipboard`.
20+
21+
## Execution order
22+
23+
The port track executes in this order, and the tracker depends on every child ticket below:
24+
25+
1. [93f7e422 Freeze Rust/WASM architecture spec and feature matrix](../93f7e422-1e41-4145-b8ba-0dcf7fc730ac/ticket.toml)
26+
2. [14047b99 Prove dual-host WASM activation](../14047b99-41d6-4899-bec6-4a919bffcc2d/ticket.toml)
27+
3. [011563c2 Extract portable Rust core for ticket/domain logic](../011563c2-59e7-48f1-a61f-d8fdc80d2f6e/ticket.toml)
28+
4. [bfafde19 Replace Node-bound behaviors with host capability adapters](../bfafde19-ddf7-47ef-966e-a1135be4efd6/ticket.toml)
29+
5. [362448d4 Add dual-host packaging, bundling, and extension test harnesses](../362448d4-ccf1-4b9d-90f3-d4577da83a65/ticket.toml)
30+
6. [6de424b0 Validate Rust/WASM parity across desktop, web, and remote hosts](../6de424b0-68ec-43c7-9d70-eb8d17305ab3/ticket.toml)
31+
32+
The sequential dependency chain is:
33+
34+
- [14047b99 Prove dual-host WASM activation](../14047b99-41d6-4899-bec6-4a919bffcc2d/ticket.toml) depends on [93f7e422 Freeze Rust/WASM architecture spec and feature matrix](../93f7e422-1e41-4145-b8ba-0dcf7fc730ac/ticket.toml)
35+
- [011563c2 Extract portable Rust core for ticket/domain logic](../011563c2-59e7-48f1-a61f-d8fdc80d2f6e/ticket.toml) depends on [14047b99 Prove dual-host WASM activation](../14047b99-41d6-4899-bec6-4a919bffcc2d/ticket.toml)
36+
- [bfafde19 Replace Node-bound behaviors with host capability adapters](../bfafde19-ddf7-47ef-966e-a1135be4efd6/ticket.toml) depends on [011563c2 Extract portable Rust core for ticket/domain logic](../011563c2-59e7-48f1-a61f-d8fdc80d2f6e/ticket.toml)
37+
- [362448d4 Add dual-host packaging, bundling, and extension test harnesses](../362448d4-ccf1-4b9d-90f3-d4577da83a65/ticket.toml) depends on [bfafde19 Replace Node-bound behaviors with host capability adapters](../bfafde19-ddf7-47ef-966e-a1135be4efd6/ticket.toml)
38+
- [6de424b0 Validate Rust/WASM parity across desktop, web, and remote hosts](../6de424b0-68ec-43c7-9d70-eb8d17305ab3/ticket.toml) depends on [362448d4 Add dual-host packaging, bundling, and extension test harnesses](../362448d4-ccf1-4b9d-90f3-d4577da83a65/ticket.toml)
39+
40+
This parent ticket is done when all child tickets are done, the spec reflects the final architecture and validation evidence, and the port plan has been executed with explicit host capability rules.

.ticket/tickets/6d07d610-75c1-448a-afd5-6ae15098ca21/history.ndjson

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77
{"rev":7,"ts":"2026-06-14T19:11:26.962111100+00:00","fields":{"component":"ticket-vscode","depends_on":["011563c2-59e7-48f1-a61f-d8fdc80d2f6e","14047b99-41d6-4899-bec6-4a919bffcc2d","362448d4-ccf2-4b9d-90f3-d4577da83a65","6de424b0-68ec-43c7-9d70-eb8d17305ab3","93f7e422-1e41-4145-b8ba-0dcf7fc730ac","bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Rust/WASM port track","type":"tracker-improvement"}}
88
{"rev":8,"ts":"2026-06-14T19:12:45.944519900+00:00","fields":{"component":"ticket-vscode","depends_on":["011563c2-59e7-48f1-a61f-d8fdc80d2f6e","14047b99-41d6-4899-bec6-4a919bffcc2d","362448d4-ccf1-4b9d-90f3-d4577da83a65","362448d4-ccf2-4b9d-90f3-d4577da83a65","6de424b0-68ec-43c7-9d70-eb8d17305ab3","93f7e422-1e41-4145-b8ba-0dcf7fc730ac","bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Rust/WASM port track","type":"tracker-improvement"}}
99
{"rev":9,"ts":"2026-06-14T19:39:30.732632+00:00","fields":{"component":"ticket-vscode","depends_on":["011563c2-59e7-48f1-a61f-d8fdc80d2f6e","14047b99-41d6-4899-bec6-4a919bffcc2d","362448d4-ccf1-4b9d-90f3-d4577da83a65","6de424b0-68ec-43c7-9d70-eb8d17305ab3","93f7e422-1e41-4145-b8ba-0dcf7fc730ac","bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Rust/WASM port track","type":"tracker-improvement"}}
10+
{"rev":10,"ts":"2026-06-14T20:35:37.330491+00:00","fields":{"component":"ticket-vscode","depends_on":["011563c2-59e7-48f1-a61f-d8fdc80d2f6e","14047b99-41d6-4899-bec6-4a919bffcc2d","362448d4-ccf1-4b9d-90f3-d4577da83a65","6de424b0-68ec-43c7-9d70-eb8d17305ab3","93f7e422-1e41-4145-b8ba-0dcf7fc730ac","bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Rust/WASM port track","type":"tracker-improvement"}}
11+
{"rev":11,"ts":"2026-06-14T20:36:32.628613800+00:00","fields":{"component":"ticket-vscode","depends_on":["011563c2-59e7-48f1-a61f-d8fdc80d2f6e","14047b99-41d6-4899-bec6-4a919bffcc2d","6de424b0-68ec-43c7-9d70-eb8d17305ab3","93f7e422-1e41-4145-b8ba-0dcf7fc730ac","bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Rust/WASM port track","type":"tracker-improvement"}}
12+
{"rev":12,"ts":"2026-06-14T20:36:35.758370900+00:00","fields":{"component":"ticket-vscode","depends_on":["011563c2-59e7-48f1-a61f-d8fdc80d2f6e","14047b99-41d6-4899-bec6-4a919bffcc2d","362448d4-ccf1-4b9d-90f3-d4577da83a65","6de424b0-68ec-43c7-9d70-eb8d17305ab3","93f7e422-1e41-4145-b8ba-0dcf7fc730ac","bfafde19-ddf7-47ef-966e-a1135be4efd6"],"priority":"high","risk_level":"high","state":"ready","title":"[ticket-vscode] Rust/WASM port track","type":"tracker-improvement"}}

.ticket/tickets/6de424b0-68ec-43c7-9d70-eb8d17305ab3/description.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ Core workflows to validate:
99
- copy the selected ticket ID to the clipboard
1010
- file-browsing and desktop-only helpers, where still supported
1111

12+
## Dependency links
13+
14+
- Tracker: [6d07d610 Rust/WASM port track](../6d07d610-75c1-448a-afd5-6ae15098ca21/ticket.toml)
15+
- Depends on: [362448d4 Add dual-host packaging, bundling, and extension test harnesses](../362448d4-ccf1-4b9d-90f3-d4577da83a65/ticket.toml)
16+
- Final validation ticket in the execution chain.
17+
1218
Acceptance criteria:
1319
- [ ] Validation results are recorded for desktop/local, browser/web, and at least one remote-oriented host scenario or documented equivalent.
1420
- [ ] External Chromium-family manual validation is captured for the browser-facing path, including the window or display resolution used.
@@ -20,4 +26,4 @@ Acceptance criteria:
2026
The Rust/WASM architecture is frozen in spec `ticket-vscode/rust-wasm-port` (a592900c, state `reviewed`). Validate against it directly:
2127
- "Per-Host Behavior Differences" is the expected-behavior oracle per host: server startup, viewer navigation (`asExternalUri`), file browsing (`workspace.fs` best-effort on virtual), and browser-bridge (desktop-only).
2228
- "Host Capability Contract" rule 5: confirm commands whose capability is absent (`startServer`, `bridge*`) are hidden/disabled rather than failing — covers the "desktop-only features hidden or explained" acceptance criterion.
23-
- "Validation Strategy": run `cargo test` + `cargo check --target wasm32-unknown-unknown` for the core, and the desktop + `@vscode/test-web` extension harnesses; manual browser validation must use an external Chromium-family browser with the window/display resolution recorded.
29+
- "Validation Strategy": run `cargo test` + `cargo check --target wasm32-unknown-unknown` for the core, and the desktop + `@vscode/test-web` extension harnesses; manual browser validation must use an external Chromium-family browser with the window/display resolution recorded.

0 commit comments

Comments
 (0)