Skip to content

Roadmap

Last updated: 2026-10-31

This page tracks the order the open backlog gets worked in. It replaces the old docs/planning/ROADMAP_2026_2027.md, which described a GUI-dashboard-first, PydanticAI-agent-first strategy that was superseded on 2026-05-17 when the project pivoted to SolidWorks-as-Code and deleted along with the rest of docs/planning/. That plan's dated, quarter-by-quarter phases (Phase 1A, Phase 2C, etc.) no longer describe where this project is headed, so this page doesn't reuse them — issues are ranked by priority and by what blocks what, not by calendar quarter.

For per-tool SolidWorks COM API coverage (what's implemented vs. missing at the interface/method level), see SolidWorks API Coverage.

How work is ordered

Open issues are ranked in four tiers, then by order within each tier:

  • P0 — first impression: what a new user sees and installs.
  • P1 — trust and quality: claims backed by evidence, bugs, agent ergonomics.
  • P2 — capability gaps: new or deeper tools.
  • P3 — research and long horizon.

Sizes are rough: S about a day, M 2–4 days, L 1–2 weeks, XL several weeks. Each issue becomes an OpenSpec change under openspec/changes/ before it is built; finished changes are archived under openspec/changes/archive/, and their specs merge into openspec/specs/, which describes what the server does today.

Done recently: the 12-issue close-tool-surface-gaps-and-housekeeping batch (#79 moved out), the unwired adapter tools (#106), one error boundary and honest coverage (PR #118), the drawing-package tools (#117), repo clean-up (PR #177), and the release pipeline (PR #178, which superseded #75).

P0 — first impression

Order Issue What Size Note
1 #171 Repo clean-up: description, topics, community files, tidy root S Mostly done in PR #177; social-preview image and good first issue labels left
2 #172 Publish to PyPI, GitHub Releases and the MCP Registry M Pipeline merged in PR #178; first release is 1.5.0, after #173
3 #173 verify_model: check a part or assembly against expected values, plus measured change on extrude, revolve and cut M In progress (change verify-model-against-expectations): built, live tests next. The demo's final step
4 #147 Bracket-assembly demo: one prompt to an assembly, read back and verified, ending in a drawing package with BOM M–L The README's demo GIF; the gaps it finds become issues
5 — README rewrite: demo first, three-line install, only claims the status matrix backs, specific "not yet supported" list M Issue to be filed; after #172 and #147

P1 — trust and quality

Order Issue What Size Note
6 #79 Per-tool status: verified live / pilot / simulated M Prerequisite for any public tool-count claim
7 #179 --selftest command and a compatibility-report issue template M Feeds #79 with real results from other SolidWorks versions
8 #174 Consolidate duplicate and overlapping tools S–M Honest count, smaller tool list
9 #175 Agent skill and server guidance for using the tools well M Builds on #82 and the COM pitfall catalogue
10 #82 Audit tool docstrings and error messages for LLM usefulness L Runtime-error half done in PR #118; feeds #175 and #176
11 #156 Tool catalog pages drift from the generator S Add a check
12 #155 Misleading com_member_not_found hint S Hidden-SolidWorks half fixed in #189; hint in change member-not-found-hint-and-stale-script
13 #101 save_body_as_part leaves a linked assembly open S Bug

P2 — capability gaps

Order Issue What Size Note
15 #176 Optional tool-discovery mode to cut schema context M Measure the tool-list size first
16 #83 Real startup banner and better logging S First-run impression
17 #157 Decide on mypy in CI S Stale validate_coverage.py removed (change member-not-found-hint-and-stale-script)
18 #115 reset_circuit_breaker tool S Follow-up from PR #118
19 #97 execute_macro hangs on a modal macro M Issue text predates the COM threading change; refresh it
20 #158 Drawing-tool follow-ups from the live sign-off M
21 #102 Live COM for add_dimension / auto_dimension_view M Check overlap with insert_model_dimensions (#146) first; may close
22 #105 sketch_convert_entities tool M
23 #77 sketch_from_face_loop + thin_extrude M Foundation for #76
24 #57 Sheet metal features L

P3 — research and long horizon

Order Issue What Size Note
25 #95 lookup_api_enum enum value lookup S Needs the swconst enums indexed
27 #96 Generate a runnable binary .swp from VBA source L
28 #80 Prompt-to-SolidWorks tutorials L Rescope: SimulationXpress has no COM API (see #76 notes)
— #196 Parked ideas: tool-surface expansion (#23), SolidWorks-as-Code rewind, pickup and tutorial (#29–#31), agent context and testing (#13, #22), CAD-intent routing and text-to-CAD (#42, #43), live render panel (#44), Simulation wrapper and topology loop (#76, #78) — Closed 2026-10-31 to keep the issue list for active work; each is reopened when picked up

Backlog: gated, in dependency order

These issues are parked on the roadmap issue #196; the order still applies when they are picked up.

Each arrow means "must land first." Citations are to the dependent issue's own text, not inferred.

#29 ─┐
     ├─→ #31 (SoC tutorial/docs) ─→ #80 (prompt-to-SW tutorials)
#30 ─┘
     "Builds on #31" — #80's own body

#42 (routing layer) ─→ #43 (text-to-cad integration)
                    └─→ #44 (CADAM live-render UI)
     #43: "connective-tissue piece for #43 ... and #44" — #42's own body
     #44: "visualization layer for the mesh-concept/general chat path
           in #42's router" — #44's own body

#22 (context/glossary injection engine) ─→ #13 (end-to-end agent test)
     #13 tests "prompt construction, context assembly, RAG retrieval,
     planning output, MCP tool awareness" together — the deliverable
     of #22 — per #13's own body. (#12 described the same
     context-assembly problem from a different angle; closed 2026-08-27
     in favor of #22 as the confirmed direction — see note below.)

#76 (cheapo topology-optimization loop) has two real dependencies, both stated in its own issue body, plus one unresolved contradiction with #78 — see Open scoping questions below before treating it as sequenced.

Open scoping questions before scheduling

These aren't mine to resolve — each needs a maintainer decision that would change scope, approach, or order if answered differently.

#23 — awaiting a response, and the fork is much bigger than the issue says

#23 is a community contributor's (@pedropaulovc) proposal for ~31 new tools across 8 phases (assembly mates, reference geometry, parametric variants, BOM, measurement), with a plan doc linked in their fork. The issue asks the maintainer three direct questions (does the plan look reasonable, what PR cadence, thoughts on the plan's own "open questions" section) that haven't been answered yet.

2026-08-27 investigation (git fetch from github.com/pedropaulovc/SolidworksMCP-python, all 8 branches inspected): the fork has diverged far past what #23's text describes. pedro/personal alone has 434 commits vs. this repo's 367 at their shared ancestor, with its own independent PR numbering (their PR #92-94 range, unrelated to this repo's issue numbers) covering things #23 never mentions: DXF/DWG import, motion-study video export, a 3DEXPERIENCE-connector start/stop/recover path, SolidWorks crash/hung-window health probes, and — directly relevant to this repo's current batch — a rename_feature adapter method (commit bde0ff1, their PR #73) already implementing what this repo's #59 task 2 is about to build from scratch (see that task's prior-art note). Their fork's own README claims 156 tools, well past this repo's 122 at the time (152 as of 2026-10-30).

This changes the recommended next step: a re-audit of #23 as originally scoped (the same pattern used for #6/#58/#59) would miss most of what's actually available.

2026-08-30 review findings (real diff, not commit-message skimming — _generated/sldworks_2026.py, a 102,444-line auto-generated COM typelib wrapper, was inflating the raw diff stats; excluding it, pedro/personal's real diff is ~38k lines across 80 files):

Finding Action taken
rename_feature (commit bde0ff1) already implements #59's task 2 Done — implemented fresh on the same IFeature.Name setter approach, wired through every adapter layer with mock + live tests, verified against real SW; shipped with #60/#61 in the Wave 2 PR
create_reference_plane negative-offset bug (commit 3c091fd) — InsertRefPlane's Distance constraint clamps a negative value to 0 instead of erroring, silently collapsing the plane onto its base Fixed directly — filed as #84, ported the sign-resolution fix (credited to @pedropaulovc) into features.py, added direct unit coverage, dev-test-verified
Motion Study support (motion.py, assembly.py extensions, ~1200 lines, live-demo-verified) — matches this repo's own "Motion Study ❌ Missing" finding from the #79 audit Confirmed we have zero existing Motion Study code to conflict with. Substantial enough (tested adapter + tools + mock parity + a working live demo) that it's a real candidate for its own future OpenSpec change, not a quick port
DXF/DWG import, 3DEXPERIENCE-connector start/stop/recover, SolidWorks crash/hung-window health probes, swdimxpert auxiliary-typelib plumbing, add_fillet propagate option, a SetEntitiesToMate COM-typing fix Catalogued, not yet reviewed for convention-fit or mergeability

Recommended next step: the two small, self-contained, already-verified items (rename_feature, the offset fix) are actioned or ready to action without needing a whole new OpenSpec change. The larger items (Motion Study especially) still warrant their own scoped OpenSpec change before touching Pedro's cadence/scope questions on #23 itself.

#12 vs. #22 — resolved 2026-08-27

#12 ("simple context layer so UI RAG actually drives agent context") and #22 ("context and glossary injection engine — TAG-style domain context") both described a layer between retrieval and prompt construction that decides what the model actually sees — #12 framed around the UI/RAG path, #22 framed around a structured glossary/domain-knowledge injection pattern. Maintainer decision: #12 isn't the direction the project is headed — closed, with #22 confirmed as the actual scope for this work (now ranked in P3 above). #13 tests #22's deliverable specifically.

#76 vs. #78 — confirmed, not a contradiction: Option B needs re-scoping

Update 2026-08-27, confirmed against SolidWorks's own API docs: SimulationXpress genuinely has no COM API of its own — this is settled, not in dispute between #76 and #78. What #78 found (and SolidWorks's docs confirm) is the actual automatable path: "To automate tasks that mimic SimulationXpress functionality (such as setting up fixtures, applying loads, meshing, and running a static analysis on a single part), you must use the SldWorks and CosmosWorks interfaces within a VBA Macro, C#, or C++ environment." CosmosWorks is the paid Simulation add-in's COM interface (matches #78's own finding: CWAddincallback → CWModelDoc → CWStudyManager → CWStudy → CWMesh/CWLoads/CWFixt...) — it can reproduce SimulationXpress-equivalent results, but only through the paid add-in, not through free SimulationXpress itself.

Net effect on #76 Option B ("native SW only... SimulationXpress COM automation... no paid add-in required"): the automation half is achievable via CosmosWorks, but the no paid add-in half isn't — those two goals can't both hold. #76 needs Option B re-scoped as "paid Simulation add-in via CosmosWorks" (drops the free-tier promise) before it's schedulable, or the issue commits to Option A (FreeCAD + CalculiX, genuinely free, external to SolidWorks) as the only free-tier path.

76 also has an explicit, undisputed dependency: *"Phase 2 and 3 require

global variable read/write via MCP"* — tracked in #23, not yet built (see above). #77 (sketch_from_face_loop/thin_extrude) isn't a stated dependency of #76, but both describe "topology-robust" cutting/sketching against face geometry — worth building #77 first as a foundation even though nothing requires it.

Keeping this page current

The four tiers above account for every open issue as of 2026-10-30. When an issue is filed, give it a tier, an order and a size here rather than leaving it off this page; an untracked issue is exactly the drift this page exists to prevent.