Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
418 commits
Select commit Hold shift + click to select a range
5344df3
chore: rename npm scripts to colon convention + add root proxy scripts
joshsmithxrm Mar 14, 2026
c8f7bdd
chore: rename skills for clarity + slim CLAUDE.md
joshsmithxrm Mar 14, 2026
201e21d
feat(extension): add webview standalone dev mode for Playwright verif…
joshsmithxrm Mar 14, 2026
4703c45
feat: add /verify skill for AI self-verification with MCP tools
joshsmithxrm Mar 14, 2026
594ccfe
docs: update /debug extension mode with current npm scripts and F5 co…
joshsmithxrm Mar 14, 2026
b4de00e
docs: update /implement with /verify at phase gates
joshsmithxrm Mar 14, 2026
04a3c66
chore: configure MCP servers for AI verification
joshsmithxrm Mar 14, 2026
1904110
spec: Data Explorer selection and copy UX design
joshsmithxrm Mar 14, 2026
6d2a983
spec: address review findings for selection/copy design
joshsmithxrm Mar 14, 2026
0b1009f
plan: Data Explorer selection and copy implementation
joshsmithxrm Mar 14, 2026
5c9c1ae
feat(extension): SSMS-style selection and smart copy in Data Explorer
joshsmithxrm Mar 14, 2026
11da8b0
feat(extension): extract and test selection utility functions
joshsmithxrm Mar 14, 2026
272cdd9
fix(extension): fix Data Explorer layout — status bar pushed off view…
joshsmithxrm Mar 14, 2026
fde61f8
fix(extension): set default SQL value in webview dev mode
joshsmithxrm Mar 14, 2026
2d5fc95
spec: Data Explorer Monaco Editor with SQL/FetchXML IntelliSense
joshsmithxrm Mar 14, 2026
b2e724d
spec: address review findings for Monaco editor design
joshsmithxrm Mar 14, 2026
c8928ec
plan: Data Explorer Monaco Editor implementation
joshsmithxrm Mar 14, 2026
a2b7102
build(extension): add Monaco Editor bundle infrastructure
joshsmithxrm Mar 14, 2026
5941c12
feat(extension): add Monaco utility functions with tests
joshsmithxrm Mar 14, 2026
149d1a2
feat(extension): replace textarea with Monaco Editor + language auto-…
joshsmithxrm Mar 14, 2026
2ef9021
feat(extension): wire Monaco IntelliSense to daemon query/complete
joshsmithxrm Mar 14, 2026
54e877c
spec: component name resolution, type fix, and daemon logging
joshsmithxrm Mar 14, 2026
07a0b00
spec: fix review findings — blockers and warnings
joshsmithxrm Mar 14, 2026
80c4a51
spec: address second review notes — DTO gap and cache key specificity
joshsmithxrm Mar 14, 2026
de7b322
plan: solution component name resolution implementation
joshsmithxrm Mar 15, 2026
449a42f
feat: add MetadataId to EntitySummary for solution component matching
joshsmithxrm Mar 15, 2026
8bded37
feat: enable Information-level logging in daemon serve mode
joshsmithxrm Mar 15, 2026
695021b
fix: replace bare catch in componenttype resolution with structured l…
joshsmithxrm Mar 15, 2026
f579fa0
feat: add ComponentNameResolver with entity-type and table-query reso…
joshsmithxrm Mar 15, 2026
d43ff59
test: add timing, batch splitting, partial failure, and table query t…
joshsmithxrm Mar 15, 2026
666223c
feat: add name fields to SolutionComponentInfo and register Component…
joshsmithxrm Mar 15, 2026
897916f
fix(extension): fix Monaco editor sizing — use absolute positioning
joshsmithxrm Mar 15, 2026
4c473f0
feat: wire ComponentNameResolver into SolutionService.GetComponentsAsync
joshsmithxrm Mar 15, 2026
16e9dc2
feat: add name fields to SolutionComponentInfoDto and TypeScript inte…
joshsmithxrm Mar 15, 2026
9210941
feat: forward component name and detail fields from daemon to webview
joshsmithxrm Mar 15, 2026
9888854
feat: display component names with logicalName > schemaName > display…
joshsmithxrm Mar 15, 2026
ade4401
fix(extension): fix Monaco white box and completion range
joshsmithxrm Mar 15, 2026
3bed5ff
feat: add click-to-expand detail cards with copy and keyboard support
joshsmithxrm Mar 15, 2026
1c85d78
chore: add XML doc comments to ComponentNameResolver to suppress CS1591
joshsmithxrm Mar 15, 2026
75dcbf6
fix(extension): load Monaco CSS stylesheet in webview
joshsmithxrm Mar 15, 2026
69f1e76
fix: improve detail card styling, add option set and service endpoint…
joshsmithxrm Mar 15, 2026
395e905
fix(extension): move Tools panel above Profiles in sidebar
joshsmithxrm Mar 15, 2026
8a88c33
fix(extension): blur Monaco on table cell click so Ctrl+C copies from…
joshsmithxrm Mar 15, 2026
6de5a30
debug(extension): add diagnostic logging to copy/selection code path
joshsmithxrm Mar 15, 2026
854578f
fix: add missing using System for Guid in EntitySummary
joshsmithxrm Mar 15, 2026
1e55bd3
fix(extension): use capture phase for Ctrl+C to intercept before Monaco
joshsmithxrm Mar 15, 2026
ca989a3
fix(extension): let Monaco handle Ctrl+C when editor has focus
joshsmithxrm Mar 15, 2026
978fb3b
fix(extension): bridge Monaco clipboard through postMessage
joshsmithxrm Mar 15, 2026
0438fe8
plan: extension stabilization — security, bundling, cancellation, DML…
joshsmithxrm Mar 15, 2026
7749f5a
fix: replace innerHTML restoration with textContent in SolutionsPanel…
joshsmithxrm Mar 15, 2026
6230cd8
fix: use escapeAttr for href attribute values in notebook virtual scr…
joshsmithxrm Mar 15, 2026
7a66dd3
perf: selective Monaco language bundling — SQL and XML only
joshsmithxrm Mar 15, 2026
e85bd23
feat: add "Open in Maker" button to Solutions panel
joshsmithxrm Mar 15, 2026
954284c
feat: add query cancellation support to Data Explorer
joshsmithxrm Mar 15, 2026
d9897f7
feat: add daemon heartbeat, state machine, and reconnect events
joshsmithxrm Mar 15, 2026
9a6a5c5
feat: add DML safety checking to query/sql RPC endpoint
joshsmithxrm Mar 15, 2026
9afa4de
chore(extension): remove debug logging, fix shortcut references
joshsmithxrm Mar 15, 2026
4cfc2b6
feat: add DML safety guard UX to Data Explorer
joshsmithxrm Mar 15, 2026
e5737e3
feat: add daemon status bar indicator with restart command
joshsmithxrm Mar 15, 2026
a51ead6
feat: add panel reconnection awareness with stale-data banner
joshsmithxrm Mar 15, 2026
c0c36e0
fix: address code review findings — DML TDS bypass, record ID lookup,…
joshsmithxrm Mar 15, 2026
a56cd19
feat(extension): add clickable links in query result grids
joshsmithxrm Mar 15, 2026
15e9f9c
fix(extension): address code review findings for clickable links
joshsmithxrm Mar 15, 2026
56d7d1c
fix: add componenttype 80 (Model-Driven App) to fallback dictionary a…
joshsmithxrm Mar 15, 2026
f0842c1
spec: VS Code webview CDP tool for AI visual verification
joshsmithxrm Mar 15, 2026
3ddfcd5
fix(extension): repair broken test mocks and stale assertions
joshsmithxrm Mar 15, 2026
0d3f8a2
fix(extension): add logging for unresolved component types and improv…
joshsmithxrm Mar 15, 2026
8502d3d
plan: webview CDP tool implementation — 15 tasks across 6 chunks
joshsmithxrm Mar 15, 2026
7b8dd5a
chore: add ws dependency, gitignore, and vitest config for webview-cd…
joshsmithxrm Mar 15, 2026
465968a
test: add failing unit tests for webview-cdp pure functions
joshsmithxrm Mar 15, 2026
954be57
feat(tools): webview-cdp skill file — teaches AI agents the tool work…
joshsmithxrm Mar 15, 2026
1c53c9d
feat(tools): webview-cdp core — arg parsing, CDP connection, connect …
joshsmithxrm Mar 15, 2026
ae467db
feat(tools): implement all webview-cdp commands — launch, close, scre…
joshsmithxrm Mar 15, 2026
ecc69cc
fix(tools): webview-cdp launch — discover actual CDP port and use Cod…
joshsmithxrm Mar 15, 2026
0403e6b
feat(tools): webview-cdp attach command — connect to user's running V…
joshsmithxrm Mar 15, 2026
9d190b8
fix(tools): webview-cdp PowerShell escaping — use EncodedCommand
joshsmithxrm Mar 15, 2026
613e471
feat(tools): webview-cdp --page flag — interact with VS Code's native UI
joshsmithxrm Mar 15, 2026
ae6de4c
docs(tools): document CDP limitations in webview-cdp skill
joshsmithxrm Mar 15, 2026
d80edde
fix(extension): add error handling and null guards for Monaco editor …
joshsmithxrm Mar 15, 2026
e1f2126
fix(extension): use CSS.escape() and remove cssEscape from getElement…
joshsmithxrm Mar 15, 2026
d904c0e
fix(extension): route SolutionsPanel copy through postMessage and add…
joshsmithxrm Mar 15, 2026
4f57d9a
fix(extension): pass environmentUrl to daemon in notebook cell execution
joshsmithxrm Mar 15, 2026
dcc8578
fix(extension): escape entityType in context menu label to prevent HT…
joshsmithxrm Mar 15, 2026
138da66
perf(extension): eliminate double API call for managed solution count
joshsmithxrm Mar 15, 2026
96ae9ce
fix(extension): add null guard to updateLanguage() for Monaco editor
joshsmithxrm Mar 15, 2026
dffe704
spec: webview-cdp v2 — Playwright Electron with daemon model
joshsmithxrm Mar 15, 2026
9fc89d1
fix(extension): extract webview IIFE to external script to fix blank …
joshsmithxrm Mar 15, 2026
394ec50
plan: webview-cdp v2 Playwright rewrite — HTTP daemon architecture
joshsmithxrm Mar 15, 2026
6225229
chore: consolidate plans into docs/plans/
joshsmithxrm Mar 15, 2026
e9add79
chore: remove ws dependency — Playwright handles WebSocket communication
joshsmithxrm Mar 15, 2026
86b6116
test: update webview-cdp tests for v2 argument parsing
joshsmithxrm Mar 15, 2026
8402cb4
refactor(extension): extract SolutionsPanel IIFE to external script
joshsmithxrm Mar 15, 2026
fbc0332
feat(tools): webview-cdp v2 — Playwright Electron with HTTP daemon
joshsmithxrm Mar 15, 2026
159da9a
feat(tools): webview-cdp v2 skill file — command palette, logs, daemo…
joshsmithxrm Mar 15, 2026
ef90276
feat(skills): add webview-panels skill for external script pattern
joshsmithxrm Mar 15, 2026
e7da5e7
chore(extension): remove stale dev-mode query panel HTML
joshsmithxrm Mar 15, 2026
1a5fdca
fix(tools): webview-cdp screenshot on frames + type fallback for Monaco
joshsmithxrm Mar 15, 2026
ee73470
fix(tools): security hardening + gitignore for .vscode-test
joshsmithxrm Mar 15, 2026
53b69b1
chore: remove dead validatePort function and tests
joshsmithxrm Mar 15, 2026
952e511
fix(daemon): respect user's TOP N clause instead of overwriting with …
joshsmithxrm Mar 15, 2026
fb1c3b9
fix(notebooks): fix virtual scroll rendering missing rows on initial …
joshsmithxrm Mar 15, 2026
8162f99
chore(extension): remove dead plugin interfaces and unnecessary exports
joshsmithxrm Mar 15, 2026
f59da71
docs(extension): add infrastructure hardening implementation plan
joshsmithxrm Mar 15, 2026
e9ffe7f
feat(extension): add webview tsconfig, directory structure, assertNev…
joshsmithxrm Mar 15, 2026
242ef94
feat(extension): define typed message protocols for Query and Solutio…
joshsmithxrm Mar 15, 2026
c901550
feat(extension): add generic type params and AbortSignal to WebviewPa…
joshsmithxrm Mar 15, 2026
fbefee0
feat(extension): add shared webview utilities — dom-utils, vscode-api…
joshsmithxrm Mar 15, 2026
68db8e5
fix(tools): fix webview-cdp daemon crash from server.listen race cond…
joshsmithxrm Mar 15, 2026
986bcdc
feat(notebooks): add cell selection with click-to-copy and visual hig…
joshsmithxrm Mar 15, 2026
c5cc921
refactor(extension): use category field for command palette prefixes
joshsmithxrm Mar 15, 2026
17a2928
feat(notebooks): add FetchXML to SQL conversion for language toggle
joshsmithxrm Mar 15, 2026
19adf99
feat(extension): convert Query Panel webview to TypeScript with typed…
joshsmithxrm Mar 15, 2026
1a0dc6b
improve(extension): enhance query history with date grouping and note…
joshsmithxrm Mar 15, 2026
9642445
feat(extension): convert Solutions Panel webview to TypeScript with t…
joshsmithxrm Mar 15, 2026
2a5a4db
docs(tools): webview-cdp skill — Monaco, tree views, Windows temp dir
joshsmithxrm Mar 15, 2026
aa35e2f
refactor(extension): remove getEnvironmentPickerCss — styles moved to…
joshsmithxrm Mar 15, 2026
adb0e45
feat(extension): comprehensive ESLint config — type safety, async, co…
joshsmithxrm Mar 15, 2026
214e0e9
fix(extension): resolve ESLint violations — type safety, floating pro…
joshsmithxrm Mar 15, 2026
27e8ce3
feat(extension): add Stylelint for CSS files and knip for dead code d…
joshsmithxrm Mar 15, 2026
fb8a102
docs(extension): update webview-panels skill for TypeScript, typed me…
joshsmithxrm Mar 15, 2026
22e3aed
fix(tools): webview-cdp frame resolution — use page.frames() instead …
joshsmithxrm Mar 15, 2026
d14e80e
fix(extension): persist profile tree expansion state across sessions
joshsmithxrm Mar 15, 2026
8341f7e
fix(extension): export with FetchXML, solution UX improvements
joshsmithxrm Mar 15, 2026
9851e15
fix: symlink skills into .claude/skills/ for Claude Code discovery
joshsmithxrm Mar 15, 2026
34d00a8
refactor(extension): remove managed solutions toggle, show all by def…
joshsmithxrm Mar 15, 2026
a6530b1
chore: remove .agents/ — skills live in .claude/skills/ only
joshsmithxrm Mar 15, 2026
4b64eae
fix(extension): context menu entity label, filter-to-value, panel titles
joshsmithxrm Mar 15, 2026
3ce74eb
chore: remove vscode-as-mcp-server MCP config
joshsmithxrm Mar 15, 2026
9d55df9
feat(daemon): add queryMode field to QueryResultResponse
joshsmithxrm Mar 15, 2026
5026f4d
fix(tools): screenshot always uses page.screenshot()
joshsmithxrm Mar 15, 2026
f5d9327
feat(extension): redesign Data Explorer toolbar with dropdown menus
joshsmithxrm Mar 15, 2026
2416295
docs(tools): update skill — screenshot always captures full window
joshsmithxrm Mar 15, 2026
5e6dc2f
fix(tools): webview-cdp frame resolver — target inner fake.html frames
joshsmithxrm Mar 15, 2026
dec51f7
docs(tools): skill — always use --ext power-platform for PPDS webviews
joshsmithxrm Mar 15, 2026
9936860
docs(tools): use full extension ID in --ext to avoid conflicts
joshsmithxrm Mar 15, 2026
17dddfb
fix(extension): export format wiring, read-only EXPLAIN docs, test co…
joshsmithxrm Mar 15, 2026
3b890c6
feat(extension): parse daemon stderr log levels instead of flattening…
joshsmithxrm Mar 15, 2026
c1addd4
feat(daemon): add Debug-level timing for DML check and SQL transpile
joshsmithxrm Mar 15, 2026
d019d5f
feat(extension): display query execution mode in results summary
joshsmithxrm Mar 15, 2026
841da0e
docs(plans): add logging transparency implementation plan
joshsmithxrm Mar 15, 2026
7e4869e
fix(tools): filter logs --channel by filename, not file content
joshsmithxrm Mar 15, 2026
1d2f3ef
feat(tools): add --build flag to launch for fresh compiles
joshsmithxrm Mar 15, 2026
501d6c2
feat(tools): add notebook run/run-all commands
joshsmithxrm Mar 15, 2026
f30e893
docs(tools): update webview-cdp skill for text, notebook, --build com…
joshsmithxrm Mar 15, 2026
864c0e1
fix(tools): wrap execSync build failure with clean error message
joshsmithxrm Mar 15, 2026
b244e17
docs(plans): add webview-cdp feedback fixes plan
joshsmithxrm Mar 15, 2026
08ef38f
fix(tools): tighten channel filter + build both extension and daemon
joshsmithxrm Mar 15, 2026
091bbd0
fix(tools): correct channel log path and build only CLI project
joshsmithxrm Mar 15, 2026
584598d
docs(tools): add tiered verification to webview-cdp skill
joshsmithxrm Mar 15, 2026
bcfe99e
docs(plans): add extension UX polish implementation plan
joshsmithxrm Mar 15, 2026
b91abf6
feat(solutions): resolve custom component types via entity ObjectType…
joshsmithxrm Mar 15, 2026
bf977fb
fix(extension): gate debug commands behind development mode
joshsmithxrm Mar 15, 2026
0e16404
fix(extension): use title case for Explain Query menu item
joshsmithxrm Mar 15, 2026
ca1b694
fix(extension): improve editor/results visual contrast in Data Explorer
joshsmithxrm Mar 15, 2026
c7b3951
fix(export): skip misleading headers prompt for JSON export
joshsmithxrm Mar 15, 2026
4888b12
feat(extension): add Open Documentation command
joshsmithxrm Mar 15, 2026
34d3463
refactor(extension): consolidate Maker URL construction via shared he…
joshsmithxrm Mar 15, 2026
34f1804
feat(extension): wire up SQL/FetchXML conversion in Data Explorer toggle
joshsmithxrm Mar 15, 2026
61f1659
fix(extension): move filter bar above results table for discoverability
joshsmithxrm Mar 15, 2026
9316317
refactor(extension): extract shared FilterBar utility for webview panels
joshsmithxrm Mar 15, 2026
08da495
fix(extension): use dedicated fetchXml field for SQL→FetchXML conversion
joshsmithxrm Mar 15, 2026
d2ceb61
fix(extension): replace CSS resize with JS-based draggable splitter
joshsmithxrm Mar 15, 2026
38a8579
feat(solutions): add component name resolution for Role/Form/SiteMap/…
joshsmithxrm Mar 15, 2026
4bf4aea
refactor: move extension/ to src/extension/
joshsmithxrm Mar 15, 2026
4fff1cf
docs: add workflow mapping and gotchas to CLAUDE.md
joshsmithxrm Mar 15, 2026
b3e0f57
fix(tools): add src/extension/ to /implement spec-to-code mapping
joshsmithxrm Mar 15, 2026
b0db83e
fix(tools): rewrite /verify extension mode to use webview-cdp
joshsmithxrm Mar 15, 2026
e2bfb0a
fix(tools): add typecheck:all gate to /gates
joshsmithxrm Mar 15, 2026
45aff83
docs(skills): add daemon/RPC patterns to webview-panels
joshsmithxrm Mar 15, 2026
9df7219
docs(skills): add error recovery and CSS workflow to webview-cdp
joshsmithxrm Mar 15, 2026
c43b3b0
feat(skills): add retrospective skill for structured session review
joshsmithxrm Mar 15, 2026
7b7be47
fix(skills): add prescriptive dispatch and prompt template to retrosp…
joshsmithxrm Mar 15, 2026
9154b75
fix(skills): add concrete transcript search to retrospective
joshsmithxrm Mar 15, 2026
a1d03ce
fix(tools): address P0 retro findings — stale paths, dead code, confl…
joshsmithxrm Mar 15, 2026
e765c0f
fix(tools): address P1 retro findings — missing gates, stale skill docs
joshsmithxrm Mar 15, 2026
27f94b6
spec: setup command overhaul — prerequisites, deps, two modes
joshsmithxrm Mar 15, 2026
f26d524
plan: setup command overhaul implementation
joshsmithxrm Mar 15, 2026
2d9aec2
fix: update stale extension/ paths to src/extension/ after folder move
joshsmithxrm Mar 15, 2026
bd7e359
feat(tools): rewrite /setup with prerequisites, deps, builds, --updat…
joshsmithxrm Mar 15, 2026
c1ae7d3
fix(extension): correct daemon debug path after folder move
joshsmithxrm Mar 15, 2026
484738b
fix: update stale extension/ path references in comments and docs
joshsmithxrm Mar 15, 2026
4ce40c0
feat(ext): add shared webview error handler
joshsmithxrm Mar 15, 2026
1e90006
refactor(ext): move selection utils to shared module, eliminate dupli…
joshsmithxrm Mar 15, 2026
5b5aaa4
feat(ext): extract handleAuthError to shared utility with tests
joshsmithxrm Mar 15, 2026
57e0e36
feat(ext): add centralized config accessor
joshsmithxrm Mar 15, 2026
6a236f8
refactor(ext): consolidate WebviewPanelBase — initPanel, abstract han…
joshsmithxrm Mar 15, 2026
bfcd944
refactor(ext): QueryPanel uses initPanel, handleMessage, handleAuthEr…
joshsmithxrm Mar 15, 2026
9a7267f
refactor(ext): SolutionsPanel uses initPanel, handleMessage, handleAu…
joshsmithxrm Mar 15, 2026
7d18592
refactor(ext): data-driven esbuild config — adding panels is now conf…
joshsmithxrm Mar 15, 2026
22b0693
refactor(ext): dynamic panel registry in debugCommands — no manual ad…
joshsmithxrm Mar 15, 2026
8630398
refactor(ext): extract registerPanelCommands from activate()
joshsmithxrm Mar 15, 2026
dbed381
refactor(ext): consolidate moveProfile sort logic into ProfileTreeDat…
joshsmithxrm Mar 15, 2026
fbcc5cd
perf(ext): cache envList in ProfileTreeDataProvider (30s TTL)
joshsmithxrm Mar 15, 2026
81d8e26
fix(ext): remove debug logging artifacts from Chunk 3 implementation
joshsmithxrm Mar 15, 2026
9c5bf08
fix(ext): fix import ordering lint errors in SolutionsPanel and error…
joshsmithxrm Mar 15, 2026
171ae64
spec: panel design guidance for webview-panels skill (#307)
joshsmithxrm Mar 15, 2026
8208966
fix: address spec review findings for panel design guidance
joshsmithxrm Mar 15, 2026
f950d20
plan: panel design guidance implementation (#307)
joshsmithxrm Mar 15, 2026
89029b6
feat(ext): add environment type accent borders to panel toolbar
joshsmithxrm Mar 15, 2026
00b628c
feat(ext): return environment type from showEnvironmentPicker
joshsmithxrm Mar 15, 2026
1fafcf7
feat(ext): wire environment type through to toolbar data attribute
joshsmithxrm Mar 15, 2026
a87fcbe
feat(skill): add design guidance section to webview-panels skill (#307)
joshsmithxrm Mar 15, 2026
e0018cb
fix(ext): resolve typecheck errors — remove unused globalState param …
joshsmithxrm Mar 15, 2026
79c8866
chore: add pre-commit hook to gate on typecheck for extension changes
joshsmithxrm Mar 15, 2026
61bbb9d
chore: auto-configure pre-commit hook via npm prepare script
joshsmithxrm Mar 15, 2026
8b38dd5
feat(skills): add /panel-design skill for multi-surface panel develop…
joshsmithxrm Mar 15, 2026
e5a0a79
fix(skills): add skill-update rule to /panel-design
joshsmithxrm Mar 15, 2026
beac96a
refactor: rename src/extension/ to src/PPDS.Extension/ for naming con…
joshsmithxrm Mar 15, 2026
cdf0c1b
fix(extension): address code review findings — critical bugs and CI h…
joshsmithxrm Mar 15, 2026
8c7b0ef
fix(extension): resolve all 14 lint errors across daemonClient, exten…
joshsmithxrm Mar 15, 2026
d5ca44c
fix(hooks): add lint error gate to pre-commit hook
joshsmithxrm Mar 15, 2026
fc5f706
spec: add query-parity spec for daemon/hint/color alignment
joshsmithxrm Mar 16, 2026
3b78ab8
spec: address review findings in query-parity spec
joshsmithxrm Mar 16, 2026
c32683e
spec: expand query-parity scope and fix remaining review issues
joshsmithxrm Mar 16, 2026
ff2925c
spec: fix final review findings (round 3)
joshsmithxrm Mar 16, 2026
0667f59
spec: clarify query/export dual path (SQL vs FetchXML input)
joshsmithxrm Mar 16, 2026
990d0b2
docs: add query parity implementation plan
joshsmithxrm Mar 16, 2026
613c67f
docs: rewrite query parity plan addressing all review findings
joshsmithxrm Mar 16, 2026
81e3b08
docs: add missing test stubs for AC-03, AC-07, AC-11
joshsmithxrm Mar 16, 2026
33c5229
fix(daemon): register ISqlQueryService in daemon service provider
joshsmithxrm Mar 16, 2026
23fd060
refactor(daemon): delegate query RPC handlers to SqlQueryService
joshsmithxrm Mar 16, 2026
d2688ee
fix(query): clean up DML error dispatch in RpcMethodHandler
joshsmithxrm Mar 16, 2026
ff02103
spec: correct InjectTopAttribute dead code entry — retained for query…
joshsmithxrm Mar 16, 2026
31e6b77
feat(query): wire QueryHintParser into execution pipeline (Phase 2, T…
joshsmithxrm Mar 16, 2026
fd75ec0
feat(query): add QueryDataSource type and DataSources/AppliedHints on…
joshsmithxrm Mar 16, 2026
6433368
feat(extension): add envColor to updateEnvironment message types
joshsmithxrm Mar 16, 2026
ad6bc0a
feat(extension): fetch and send envColor from QueryPanel and Solution…
joshsmithxrm Mar 16, 2026
9e0ed91
feat(extension): apply environment color as 4px left border on panel …
joshsmithxrm Mar 16, 2026
263dbad
feat(query): collect data sources and applied hints from execution pl…
joshsmithxrm Mar 16, 2026
aaa77cd
test(query-hints): add acceptance tests for hint integration in Prepa…
joshsmithxrm Mar 16, 2026
3551fbf
feat(query): add dataSources/appliedHints to RPC response and render …
joshsmithxrm Mar 16, 2026
e33649d
fix(daemon): gracefully handle duplicate environment labels in Profil…
joshsmithxrm Mar 16, 2026
c9c999e
fix(ext): guard webview message handlers against VS Code internal mes…
joshsmithxrm Mar 16, 2026
18bfe87
fix(query): preserve SQL's explicit TOP when extension sends default …
joshsmithxrm Mar 16, 2026
49b94e1
feat(skills): add /qa blind verifier and enforce visual verification …
joshsmithxrm Mar 16, 2026
41450a2
fix(query): correct queryMode reporting, hide dead TDS option, guard …
joshsmithxrm Mar 16, 2026
0c94a74
fix(ext): shadow-copy daemon binaries in debug mode to prevent file l…
joshsmithxrm Mar 16, 2026
8f4e3ac
refactor: consolidate naming conventions across project
joshsmithxrm Mar 16, 2026
5827236
chore: fix spec housekeeping, test warnings, and stale skill references
joshsmithxrm Mar 16, 2026
5364bd5
docs(spec): add Phase 5 TDS Endpoint Wiring to query-parity spec and …
joshsmithxrm Mar 16, 2026
a2549cb
feat(query): wire TDS endpoint — foundation types, service logic, and…
joshsmithxrm Mar 16, 2026
01c8657
feat(query): map queryMode from ExecutionMode, re-enable TDS toggle, …
joshsmithxrm Mar 16, 2026
88114a3
test(query): add TDS execution mode and queryMode mapping tests
joshsmithxrm Mar 16, 2026
a64c7a1
fix(tui): add DML confirmation dialog in SQL Query screen
joshsmithxrm Mar 16, 2026
54a47ff
refactor(query): extract TdsQueryExecutorFactory, add missing TDS pre…
joshsmithxrm Mar 16, 2026
974bab9
fix: sync extension lockfile and optimize status line script
joshsmithxrm Mar 16, 2026
f4f7ba6
docs(specs): add panel-parity specification
joshsmithxrm Mar 16, 2026
acbf85d
fix: address code review findings before merge
joshsmithxrm Mar 16, 2026
1720881
fix: address remaining code review findings
joshsmithxrm Mar 16, 2026
767f44e
fix(auth): use URI-format service name for Windows Credential Manager
joshsmithxrm Mar 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Review Fix Converge
# Converge

Orchestration loop that converges to PR-ready code. Runs gates, then impartial review, then fix, then repeat until clean. Tracks issue counts per cycle to prove convergence — if counts aren't decreasing, something is wrong.

Expand Down Expand Up @@ -28,13 +28,13 @@ Cycle | Gate | Review Critical | Review Important | Regressions | Verdict
### Step 2: Run Cycle

**A. Quality Gates**
Invoke `/automated-quality-gates` (use the skill).
Invoke `/gates` (use the skill).
- If gates FAIL: fix the failures first (dispatch fix agent), re-run gates
- Gates must PASS before proceeding to review
- Record: did fixes introduce any new gate failures? (= regression)

**B. Impartial Code Review**
Invoke `/impartial-code-review` (use the skill).
Invoke `/review` (use the skill).
- Record: count of CRITICAL and IMPORTANT findings

**C. Evaluate Convergence**
Expand Down
51 changes: 44 additions & 7 deletions .claude/commands/debug.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Give Claude an interactive feedback loop for CLI, TUI, Extension, and MCP develo
`/debug` - Auto-detect component and run appropriate feedback loop
`/debug cli` - Test CLI commands
`/debug tui` - Run TUI and inspect state
`/debug extension` - Build, install, and test VS Code extension locally
`/debug mcp` - Test MCP tools

## Process
Expand All @@ -16,6 +17,7 @@ Give Claude an interactive feedback loop for CLI, TUI, Extension, and MCP develo
Based on recent changes or explicit argument:
- `src/PPDS.Cli/Commands/` → CLI mode
- `src/PPDS.Cli/Tui/` → TUI mode
- `src/PPDS.Extension/` → Extension mode
- `src/PPDS.Mcp/` → MCP mode
- No clear match → Ask user

Expand Down Expand Up @@ -45,25 +47,60 @@ Run TUI tests and optionally launch interactive:
dotnet test tests/PPDS.Cli.Tests/PPDS.Cli.Tests.csproj --filter "Category=TuiUnit" --no-build

# Run TUI visual snapshots (if Node.js available)
npm test --prefix tests/tui-e2e
npm test --prefix tests/PPDS.Tui.E2eTests
```

If visual issues, update snapshots:
```bash
npm test --prefix tests/tui-e2e -- --update-snapshots
npm test --prefix tests/PPDS.Tui.E2eTests -- --update-snapshots
```

### 4. MCP Mode
### 4. Extension Mode

Test MCP tools via MCP client:
**Build & install for manual testing:**

```bash
# Build MCP server
dotnet build src/PPDS.Mcp/PPDS.Mcp.csproj
cd <root>/src/PPDS.Extension && npm run lint && npm run compile && npm run test && npm run local
```

Then reload VS Code (Ctrl+Shift+P -> Reload Window) and test manually.

**Useful npm scripts** (run from repo root with `ext:` prefix, or from src/PPDS.Extension/ directly):

| Request | Command |
|---------|---------|
| Build + install | `npm run ext:local` |
| Just install existing build | `npm run ext:local:install` |
| Revert to marketplace version | `npm run ext:local:revert` |
| Uninstall local | `npm run ext:local:uninstall` |
| Run unit tests only | `npm run ext:test` |
| Run E2E tests | `npm run ext:test:e2e` |
| Watch mode (hot reload) | `npm run ext:watch` |
| Full release test | `npm run ext:release:test` |

**F5 Launch Configurations** (from VS Code debug panel):

| Configuration | When to use |
|---------------|-------------|
| Run Extension | Default — full build, then launch debug host |
| Run Extension (Watch Mode) | Iterating — hot reloads on file changes |
| Run Extension (No Build) | Quick — skip build, use existing compiled code |
| Run Extension (Open Folder) | Testing with a specific project folder |
| Run Extension Tests | Run VS Code extension integration tests |

# Test tools (use MCP client if available)
**For AI self-verification:** Use `/verify extension` to exercise commands,
inspect state, and verify webview rendering via MCP tools.

### 5. MCP Mode

Test MCP tools via MCP Inspector:

```bash
npx @modelcontextprotocol/inspector --cli --server "ppds-mcp-server"
```

Or use `/verify mcp` for structured verification.

## Iterative Fix Loop

When issues found:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Automated Quality Gates
# Gates

Mechanical pass/fail checks. No judgment, no opinions — compiler, linter, and tests either pass or they don't. Run this before code reviews, after fix batches, and before PRs.

Expand Down Expand Up @@ -32,6 +32,14 @@ dotnet build PPDS.sln -v q
Pass: 0 errors, 0 warnings treated as errors
Fail: any error — report exact error messages with file:line

**File-locking recovery:** If `dotnet build PPDS.sln` fails with "used by another process" errors (common when the daemon is running from debug output), retry by building only the changed projects individually:
```bash
dotnet build src/PPDS.Cli/PPDS.Cli.csproj -v q
dotnet build src/PPDS.Query/PPDS.Query.csproj -v q
# etc. — only the projects with changed files
```
This is expected when webview-cdp has VS Code open. The daemon runs from shadow-copied binaries but the solution build may still contend with other processes.

**Gate 2: .NET Tests** (if C# files changed)

```bash
Expand All @@ -44,25 +52,54 @@ Fail: report failing test names and assertion messages
**Gate 3: TypeScript Build** (if TS/JS files changed)

```bash
npm run compile --prefix extension
npm run compile --prefix src/PPDS.Extension
```

Pass: 0 errors
Fail: report exact error messages with file:line

**Gate 3.5: TypeScript Type Check** (if TS/JS files changed)

```bash
npm run typecheck:all --prefix src/PPDS.Extension
```

Pass: 0 errors across both host and webview tsconfigs
Fail: report exact error messages with file:line

Note: `compile` (Gate 3) only runs esbuild which does NOT type-check. This gate runs `tsc --noEmit` against both `tsconfig.json` (host) and `tsconfig.webview.json` (browser) to catch type errors.

**Gate 4: TypeScript Lint** (if TS/JS files changed)

```bash
npm run lint --prefix extension
npm run lint --prefix src/PPDS.Extension
```

Pass: 0 errors
Fail: report lint violations

**Gate 4.5: CSS Lint** (if CSS files changed)

```bash
npm run lint:css --prefix src/PPDS.Extension
```

Pass: 0 errors
Fail: report CSS lint violations with file:line

**Gate 4.6: Dead Code Analysis** (if TS/JS files changed)

```bash
npm run dead-code --prefix src/PPDS.Extension
```

Pass: 0 unused exports
Fail: report unused exports/files

**Gate 5: TypeScript Tests** (if TS/JS files changed)

```bash
npm test --prefix extension
npm test --prefix src/PPDS.Extension
```

Pass: 0 failures
Expand All @@ -73,7 +110,7 @@ Fail: report failing test names and messages
Read `specs/README.md` to map changed files to specs. For each relevant spec with ACs:
- Extract test method names from the AC table
- For .NET tests: `dotnet test --filter "FullyQualifiedName~{method}" -v q --no-build`
- For TypeScript tests: `npx vitest run -t "{method}" --prefix extension`
- For TypeScript tests: `npx vitest run -t "{method}" --prefix src/PPDS.Extension`
- Report which ACs pass and which fail

### Step 3: Report
Expand All @@ -97,6 +134,17 @@ Read `specs/README.md` to map changed files to specs. For each relevant spec wit
### Verdict: FAIL — 2 issues must be resolved before proceeding
```

## Post-Gate Reminder

Gates are necessary but NOT sufficient. After gates pass:

- **If changed files include webview TS/CSS/HTML** (`src/PPDS.Extension/src/panels/`): You MUST also run `/verify extension` and/or `/qa extension` for visual verification. Gates prove code compiles and tests pass — they do NOT prove it renders correctly or works as the user would experience.
- **If changed files include CLI commands** (`src/PPDS.Cli/Commands/`, not `Serve/`): Run the command and verify the output.
- **If changed files include MCP tools** (`src/PPDS.Mcp/`): Call the tool and verify the response.
- **If changed files include TUI** (`src/PPDS.Cli/Tui/`): Run `npm run tui:test` for snapshot verification.

**Do not commit UI/CLI/MCP changes with only gates passing.** That is how bugs ship undetected.

## Rules

1. **Mechanical only** — no subjective judgments, no code review, no style opinions
Expand Down
14 changes: 13 additions & 1 deletion .claude/commands/implement.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ Before dispatching any agents, load the specification context that will be injec
- `src/PPDS.Mcp/` → `specs/mcp.md`
- `src/PPDS.Migration/` → `specs/migration.md`
- `src/PPDS.Auth/` → `specs/authentication.md`
- `src/PPDS.Extension/src/panels/` → `specs/per-panel-environment-scoping.md` (if panels) or relevant spec
- `src/PPDS.Extension/` → check `specs/README.md` for extension-related specs
- Always include `specs/architecture.md`
- Read each relevant spec and extract the `## Acceptance Criteria` section

Expand Down Expand Up @@ -101,7 +103,17 @@ For EACH phase in the plan, repeat this cycle:
- If specs with ACs are relevant to this phase, check: do the AC test methods pass?
Run: `dotnet test --filter "FullyQualifiedName~{TestMethodFromAC}" -v q --no-build`
for each AC referenced by this phase's tasks
- Re-run verification after fixes. Do NOT proceed until gate passes.
- If the phase touches extension code (`src/PPDS.Extension/` directory):
Invoke `/verify extension` to check daemon status, tree views, and panel state.
Then invoke `/qa extension` to dispatch a blind verifier agent that tests the UI without seeing source code.
- If the phase touches TUI code (`src/PPDS.Cli/Tui/`):
Invoke `/verify tui` to check TUI rendering.
- If the phase touches MCP code (`src/PPDS.Mcp/`):
Invoke `/verify mcp` to check tool responses.
Then invoke `/qa mcp` to dispatch a blind verifier for tool responses.
- If the phase touches CLI commands (`src/PPDS.Cli/Commands/`, not `Serve/`):
Invoke `/qa cli` to verify command output matches expectations.
- Re-run verification after fixes. Do NOT proceed until gate passes AND /qa passes.

**D. Review**
- Use `superpowers:requesting-code-review` agent to review the phase's work against the plan
Expand Down
44 changes: 0 additions & 44 deletions .claude/commands/install-cli.md

This file was deleted.

112 changes: 112 additions & 0 deletions .claude/commands/panel-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Panel Design

Design a new panel or feature across all four PPDS surfaces: Daemon RPC, VS Code extension, TUI, and MCP.

## Input

$ARGUMENTS = feature domain name (e.g., `import-jobs`, `plugin-traces`, `web-resources`)

## Process

### Step 1: Load Foundation

Read before doing anything:
- `specs/CONSTITUTION.md` — A1, A2 govern multi-surface design (services are single code path, UI is thin wrapper)
- `specs/architecture.md` — cross-cutting patterns
- Domain-relevant specs via `specs/README.md`

### Step 2: Inventory Existing Infrastructure

For the target domain, check what exists at each layer:

| Layer | Location |
|-------|----------|
| Domain services | `src/PPDS.Dataverse/Services/` (Dataverse data access) |
| Application services | `src/PPDS.Cli/Services/` (orchestration, cross-cutting) |
| Entity classes | `src/PPDS.Dataverse/Generated/Entities/` |
| CLI commands | `src/PPDS.Cli/Commands/{Domain}/` |
| Daemon RPC methods | `src/PPDS.Cli/Commands/Serve/Handlers/RpcMethodHandler.cs` |
| MCP tools | `src/PPDS.Mcp/Tools/` |
| TUI screens/dialogs | `src/PPDS.Cli/Tui/Screens/`, `src/PPDS.Cli/Tui/Dialogs/` |
| VS Code panels | Extension `src/panels/` |

Classify each as: **Ready**, **Partial** (needs extension), or **Missing** (must create).

**Prerequisites before UI design:**
- If the service is Missing, design it first — A1/A2 mandate services as the single code path.
- If required entity classes don't exist in `Generated/Entities/`, entity generation is a prerequisite (Constitution I2 — never hand-edit generated entities).
- If the domain requires Power Platform APIs outside the Dataverse SDK (e.g., Connections API via `service.powerapps.com`), identify those endpoints and any auth scope differences (`IPowerPlatformTokenProvider`).

### Step 3: Design RPC Endpoints and Data Contract

For each user-facing operation, define an RPC method:

- Method name: `{domain}/{operation}` (e.g., `importJobs/list`, `importJobs/get`, `pluginTraces/timeline`)
- Request/Response DTOs with typed fields — these DTOs are the shared contract consumed by VS Code and MCP
- Error codes as domain-specific `PpdsException` ErrorCodes (D4)
- Thread `CancellationToken` through the entire async chain (R2)
- Accept `IProgressReporter` for operations expected to take >1 second (A3)

**RPC handler pattern:** Methods are decorated with `[JsonRpcMethod("domain/operation")]` in `RpcMethodHandler.cs`. Handlers use `IDaemonConnectionPoolManager` for Dataverse access. Read existing methods for the pattern — no business logic in the handler, just parameter mapping → service call → DTO mapping.

### Step 4: Design VS Code Panel

Reference the `@webview-panels` skill (`.claude/skills/webview-panels/SKILL.md`) for implementation patterns (panel anatomy, message protocol, CSS patterns, environment theming).

Define:
- Panel viewType and display name
- Message protocol (host ↔ webview discriminated union types)
- Data display format (table, tree, detail pane, split layout)
- User actions (toolbar buttons, context menus, keyboard shortcuts)
- Environment scoping behavior (per-panel environment selection)

### Step 5: Design TUI Screen

Reference existing screens in `src/PPDS.Cli/Tui/Screens/` for patterns.

Define:
- Screen class name and menu/tab integration
- Layout (single table, split pane, tabbed)
- Hotkey bindings via `HotkeyRegistry`
- Dialog inventory (detail views, filters, confirmations)
- Streaming vs batch data loading strategy

TUI screens call Application Services directly (no RPC indirection).

### Step 6: Design MCP Tools

Define tools for what AI agents need from this domain:

- Tool name: `ppds_{domain}_{operation}`
- Input schema with parameter descriptions
- Output format structured for AI reasoning

Not every panel action needs an MCP tool. Focus on read/query operations. Skip UI-only actions (open in browser, keyboard shortcuts, export to clipboard).

### Step 7: Define Acceptance Criteria

For each surface, define "complete." Use legacy panel behavior as the floor:

- **Data parity:** Same fields/columns displayed as legacy
- **Action parity:** Same operations available (refresh, filter, export, open in Maker, etc.)
- **UX parity:** Same drill-down navigation, solution filtering, detail views
- **Enhancements:** Improvements enabled by new architecture (better data from existing services, environment theming, per-panel environment scoping)

Number all criteria: AC-01, AC-02, etc. (Constitution I3).

### Step 8: Map to Work Items

- Map design to existing GitHub issues
- Flag stale issues that need updating
- Identify gaps requiring new issues
- Recommend worktree/branch strategy based on complexity and dependencies

## Rules

1. **Services first, UI second** — if the Application Service doesn't exist, design that before any UI surface.
2. **Reference existing panels** — the first panel designed establishes patterns. Subsequent panels follow them.
3. **Legacy as floor, not ceiling** — match what existed, improve where the new architecture enables it.
4. **Don't port code** — understand what the legacy did, then design the proper abstraction. No inheriting legacy patterns.
5. **One panel at a time** — complete design for one panel across all surfaces before starting the next.
6. **Cross-reference surface parity** — VS Code panel and TUI screen must expose equivalent functionality (same data, same filters, same actions). MCP tools must cover the same read/query operations for AI agent access.
7. **Update skills after pattern-setting work** — when the first panel in a batch establishes new patterns (e.g., virtual scrolling, complex state management), update referenced skills (`@webview-panels`, TUI equivalents) with the proven patterns before implementing subsequent panels. Include this as an explicit step in the implementation plan.
Loading
Loading