Skip to content

feat(ext): UX audit fixes — 28 findings across all 8 panels#633

Merged
joshsmithxrm merged 11 commits intomainfrom
feature/ext-ux-audit
Mar 19, 2026
Merged

feat(ext): UX audit fixes — 28 findings across all 8 panels#633
joshsmithxrm merged 11 commits intomainfrom
feature/ext-ux-audit

Conversation

@joshsmithxrm
Copy link
Copy Markdown
Owner

Summary

Side-by-side comparison of legacy v0.3.4 vs new extension produced 55 findings.
After triage: 28 fixes, 22 keep-new-behavior, 5 deferred. Implemented across
10 phases (1 cross-cutting + 8 per-panel + 1 review fix).

Critical fix

  • Plugin Traces Trace Level button — was completely non-functional. Wired
    existing RPC methods (pluginTraces/traceLevel, setTraceLevel) to a proper
    dropdown menu showing Off/Exception/All with current level display

All 8 panels touched

  • Solutions: Include Managed toggle (shows all 190 vs 8), sort controls,
    Visible/API Managed fields, Maker Portal button, isVisible/isApiManaged C# support
  • Import Jobs: Search bar, Operation Context column (end-to-end C#→TS), record count
  • Plugin Traces: Trace Level fix, Maker Portal URL fix (Dynamics 365 classic),
    status text labels, search bar, record count
  • Web Resources: Restored Created By and Created On columns
  • Connection References: Expandable flow/connection detail, ISO timestamp formatting,
    search bar, status badges (Unknown/Unbound), Sync Settings button
  • Environment Variables: Modified On column, search bar, Sync Settings button
  • Metadata Browser: Custom Only filter toggle
  • Data Explorer: Clear button, Import button

Cross-cutting

  • Added Connection References + Environment Variables to sidebar Tools list
  • Standardized command titles ("Open Data Explorer", "Open Plugin Traces")
  • Removed text-transform: uppercase from 5 panel CSS files (Title Case headers)
  • Fixed CDP tool VSIX extraction on Windows (pwsh Expand-Archive)
  • Fixed command injection in CDP tool (path sanitization)

C# backend changes

  • SolutionService: Added IsVisible, IsApiManaged to queries and DTOs
  • ImportJobService: Added OperationContext to queries and DTOs
  • RpcMethodHandler: Updated DTOs for both

Test plan

  • .NET build: 0 errors, 0 warnings
  • .NET tests: 7,679 passed across net8/9/10
  • TypeScript typecheck: 0 errors (host + webview)
  • TypeScript lint: 0 errors
  • CSS lint: 0 errors
  • Extension tests: 334 passed
  • Dead code analysis: all findings pre-existing
  • Pre-commit hooks (typecheck + lint): passed on every commit
  • Code review: 0 critical, 2 important (both fixed)

🤖 Generated with Claude Code

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request delivers a comprehensive set of UX audit fixes across eight different panels within the extension, significantly improving usability, feature parity with the legacy version, and overall consistency. The changes range from critical functional repairs, like the Plugin Traces 'Trace Level' button, to numerous quality-of-life enhancements such as search bars, sorting options, and more informative data displays. Backend DTOs and services were updated to support these new UI features, ensuring a robust foundation for the improved user experience. Additionally, the internal QA process documentation was updated to reflect a more thorough, multi-agent verification strategy.

Highlights

  • Critical Plugin Traces Fix: Resolved a critical issue where the Plugin Traces 'Trace Level' button was non-functional, wiring it to existing RPC methods and providing a proper dropdown menu with current level display.
  • Solutions Panel Enhancements: Implemented an 'Include Managed' toggle to display all solutions, added client-side sort controls, included 'Visible' and 'API Managed' fields in solution details, and added a 'Maker Portal' button.
  • Import Jobs Panel Improvements: Added a search bar for filtering import jobs, introduced an 'Operation Context' column, and displayed a record count in the footer.
  • Plugin Traces Panel Updates: Corrected the Maker Portal URL to point to the Dynamics 365 classic view, added text labels to status indicators for accessibility, and integrated a search bar for filtering traces.
  • Connection References Panel Overhaul: Introduced expandable flow/connection details, fixed raw ISO timestamp formatting, added a 'Sync Deployment Settings' button, included a search bar, and improved status badge displays (Unknown/Unbound).
  • Environment Variables Panel Additions: Restored the 'Modified On' column, added a search bar for filtering variables, and included a 'Sync Deployment Settings' button.
  • Metadata Browser Filter: Added a 'Custom Only' filter toggle to hide system/internal attributes.
  • Data Explorer Functionality: Added 'Clear' and 'Import' buttons to the query panel for enhanced usability.
  • Cross-Cutting UX Improvements: Added Connection References and Environment Variables to the sidebar tools list, standardized command titles (e.g., 'Open Data Explorer'), removed text-transform: uppercase from panel CSS files for consistent title casing, and fixed VSIX extraction on Windows.
  • Backend DTO and Service Updates: Updated SolutionService to include IsVisible and IsApiManaged in queries and DTOs, and ImportJobService to include OperationContext in queries and DTOs, providing necessary data for frontend enhancements.
  • QA Process Documentation Update: Revised the internal QA documentation to detail a 'Three-Agent Blind Verification' process, outlining distinct roles for functional, consistency, and UX agents, and refining the verification steps and reporting format.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This is an impressive pull request that addresses a large number of UX findings across the extension. The changes are well-structured and follow the detailed plan provided. The refactoring of the QA process documentation is particularly noteworthy and establishes a much more robust verification strategy.

My review focuses on a few areas for improvement, primarily related to maintainability. I've identified several instances of inline styles in the panel templates. Moving these to dedicated CSS classes will improve consistency and make future styling changes easier.

The backend changes to support new UI fields are clean, and the fixes for the Maker Portal URL and VSIX extraction are solid improvements. Overall, this is a high-quality contribution that significantly enhances the user experience of the extension.

joshsmithxrm added a commit that referenced this pull request Mar 18, 2026
…implement

The prose reference to "code-reviewer agent" was ambiguous — sessions
interpreted it as superpowers:code-reviewer (a built-in agent type)
instead of the project's /review skill. This caused PR #633's session
to invoke the wrong tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
joshsmithxrm added a commit that referenced this pull request Mar 18, 2026
…implement

The prose reference to "code-reviewer agent" was ambiguous — sessions
interpreted it as superpowers:code-reviewer (a built-in agent type)
instead of the project's /review skill. This caused PR #633's session
to invoke the wrong tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
joshsmithxrm added a commit that referenced this pull request Mar 18, 2026
…tructions

All 9 workflow state write sites across 10 skill/command files now call
`python scripts/workflow-state.py` instead of describing JSON manipulation
in prose. The utility enforces the canonical path (.workflow/state.json),
handles type coercion (now→timestamp, true/false→bool, digits→int), and
supports dotted key paths (gates.passed, verify.ext, etc.).

This prevents the path mismatch bug from PR #633 where the AI wrote state
to .claude/workflow-state.json instead of .workflow/state.json, making all
hooks blind to workflow progress.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
joshsmithxrm added a commit that referenced this pull request Mar 19, 2026
* docs(specs): add spec governance specification

Establishes naming, lifecycle, and granularity rules for specs.
Constitution amendment (SL1-SL5), template updates, auto-generated
README, /spec reconcile mode, and restructuring guidelines for all
32 existing specs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs(plans): add spec governance implementation plan

6-phase plan: Constitution amendment, template update, skill migrations,
/spec reconcile mode, auto-generated README. Phases 1-2 parallel,
Phase 3 tasks parallel, sequential from Phase 4.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add Spec Laws (SL1-SL5) to Constitution, update CLAUDE.md

Phase 1: New Spec Laws section in Constitution covering naming (one
spec per domain concept), lifecycle (living docs, plans are ephemeral),
surface sections, frontmatter requirements, and deletion policy.
Removes specs/README.md as "Index" from CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update spec template — Surfaces, Changelog, Code guidance

Phase 2: Remove Version field, add Surfaces frontmatter, add
Changelog section replacing version numbers, add surface-specific
behavior subsections, strengthen Code: guidance requiring grep-friendly
path prefixes per Constitution SL4.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: migrate 6 skills from README index to frontmatter grep

Phase 3: /spec, /spec-audit, /gates, /review, /implement, and
ext-panels now discover governing specs by grepping **Code:**
frontmatter lines instead of reading specs/README.md. Removes
hardcoded code-path-to-spec mappings from /implement. Adds
instruction for /implement to update spec Code: frontmatter
when creating new code paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add reconcile mode to /spec skill

Phase 4: /spec now has three modes — forward (create), update, and
reconcile (align spec with code). Reconcile mode enumerates public
types/methods, compares against ACs, includes member-count
verification to prevent the LLM summarization problem.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: auto-generate specs/README.md from frontmatter

Phase 5: Add scripts/generate-spec-readme.py that scrapes H1, Status,
Surfaces, Code, and first Overview sentence from all specs. README is
now auto-generated with 33 specs listed (was 16 hand-maintained).
Includes AUTO-GENERATED comment to prevent hand-editing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: escape pipe chars in README generator, narrow spec-governance Code path

Review fix: escape | characters in all frontmatter fields before
inserting into markdown table rows. Also change spec-governance.md
Code: from overly-broad specs/ prefix to System-wide per SL4.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: restructure must-fix specs per governance triage table

Decompose panel-parity.md into 5 individual feature specs (import-jobs,
connection-references, environment-variables, metadata-browser, web-resources)
and merge Plugin Traces content into plugin-traces.md.

Merge TUI surface specs into domain specs per SL3:
- tui-plugin-traces.md → plugin-traces.md
- tui-migration.md → migration.md
- tui-plugin-registration.md → plugins.md
- tui-solutions.md → solutions.md (new)
- tui-environment-dashboard.md → environment-dashboard.md (new)

Consolidate enhancement/project specs per SL1/SL2:
- query-parity.md + query-engine-v2.md → query.md + docs/plans/
- vscode-data-explorer-*.md → data-explorer.md (new)
- solution-component-names.md → solutions.md
- vscode-persistence-and-solutions-polish.md → solutions.md + docs/plans/
- tui-foundation.md → docs/plans/ (project spec)

Rename per SL1: vscode-webview-cdp-tool.md → ext-verify-tool.md

Net: 14 specs removed, 8 created, 4 updated, 1 renamed.
Specs directory: 33 → 31 files (28 domain specs + 3 special).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add Surfaces frontmatter and Changelog to 9 should-update specs

Update authentication, connection-pooling, bulk-operations, cli, mcp,
tui, analyzers, dataverse-services, and update-check with Surfaces
frontmatter, Changelog sections, and Version line removal per spec
governance template compliance.

Regenerate specs/README.md to reflect all restructured specs (28 total).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(skill): replace stale 'code-reviewer agent' ref with /review in /implement

The prose reference to "code-reviewer agent" was ambiguous — sessions
interpreted it as superpowers:code-reviewer (a built-in agent type)
instead of the project's /review skill. This caused PR #633's session
to invoke the wrong tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: broken cross-references to deleted specs, add error handling to README generator

Fix cross-references in solutions.md, data-explorer.md, ext-verify-tool.md,
environment-dashboard.md, and tui-verify-tool.md that pointed to deleted/renamed
spec files. Add try/except to generate-spec-readme.py for unreadable files.

Found by impartial code review.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(workflow): add executable state write utility, replace prose instructions

All 9 workflow state write sites across 10 skill/command files now call
`python scripts/workflow-state.py` instead of describing JSON manipulation
in prose. The utility enforces the canonical path (.workflow/state.json),
handles type coercion (now→timestamp, true/false→bool, digits→int), and
supports dotted key paths (gates.passed, verify.ext, etc.).

This prevents the path mismatch bug from PR #633 where the AI wrote state
to .claude/workflow-state.json instead of .workflow/state.json, making all
hooks blind to workflow progress.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use full first line for purpose in README generator

Take entire first overview line instead of regex sentence splitting,
which could prematurely truncate on abbreviations like "e.g."

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
joshsmithxrm and others added 10 commits March 18, 2026 19:11
bsdtar interprets the C: drive prefix as a remote host, breaking
VSIX extraction in --vsix mode. Use PowerShell's Expand-Archive on
Windows; keep tar on other platforms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Side-by-side comparison of legacy v0.3.4 vs new extension produced
55 findings. After triage: 28 fixes, 22 keep-new-behavior, 5 deferred.
Organized into 10 phases (1 cross-cutting + 9 per-panel) for parallel
agent execution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add Connection References + Environment Variables to sidebar Tools (#56, #57)
- Standardize command titles: "Open Data Explorer", "Open Plugin Traces" (#51)
- Remove text-transform: uppercase from 5 panel CSS files for Title Case headers (#10)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Solutions (#1,#2,#3,#5): Include Managed toggle, sort controls,
Visible/API Managed fields, Maker Portal button, isVisible/isApiManaged
end-to-end C# support.

Import Jobs (#7,#8,#9): Search bar, Operation Context column
(end-to-end C#→TS), record count with filtered status.

Plugin Traces (#11,#12,#17,#18,#55): CRITICAL Trace Level dropdown
fix, Maker Portal URL fix (Dynamics 365 classic), status text labels,
record count, search bar.

Web Resources (#19): Restored Created By and Created On columns.

Connection References (#23,#24,#25,#28,#55): Expandable flow/connection
detail with chevron toggle, ISO timestamp formatting, search bar,
status badge improvements (Unknown/Unbound), Sync Settings button.

Environment Variables (#29,#31,#55): Modified On column restored,
search bar, Sync Settings button.

Metadata Browser (#37): Custom Only filter toggle for entities.

Data Explorer (#41,#42): Clear button, Import button (file dialog).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Connection References: fix colCount from wrong heuristic (8) to
  correct value (7) matching actual column count
- CDP tool: sanitize paths for PowerShell injection (escape single
  quotes); use execFileSync for tar on Unix to avoid shell interpretation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move search input and sort select inline styles to dedicated
.toolbar-search and .toolbar-select CSS classes across 4 panels
(Connection Refs, Env Variables, Import Jobs, Solutions).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The 6 non-query/solutions webview panels are esbuild entry points but
were missing from knip.json, causing false-positive unused-file reports.
Also un-export internal-only types from shared modules.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SolutionFilter shared component used uniqueName as option value
  instead of GUID id, causing "solutionId must be a valid GUID" error
  on Web Resources (and silently wrong on Conn Refs / Env Vars)
- Import Jobs and Web Resources rendered raw ISO timestamps; add
  formatDateTime helper matching Plugin Traces / Conn Refs pattern

Found by QA blind verification agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Solutions panel: escape rootComponentBehavior and boolean ternaries
  before innerHTML insertion (S1 compliance)
- Connection References: escape literal "Unbound" for consistent
  escaping discipline
- CDP tool: use execFileSync instead of execSync for PowerShell
  VSIX extraction (S2 compliance — no shell: true)
- Plugin Traces: strip trailing slash from environment URL before
  Maker Portal link construction

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wrap formatDate() calls in escapeHtml() for consistent escaping
discipline — formatDate can return raw ISO string on parse failure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds missing sidebar entries for Connection References and Environment
Variables panels between Import Jobs and Plugin Traces.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@joshsmithxrm joshsmithxrm merged commit 49c1337 into main Mar 19, 2026
14 checks passed
@joshsmithxrm joshsmithxrm deleted the feature/ext-ux-audit branch March 19, 2026 02:35
@github-project-automation github-project-automation bot moved this from Todo to Done in PPDS Roadmap Mar 19, 2026
@joshsmithxrm joshsmithxrm restored the feature/ext-ux-audit branch March 19, 2026 02:37
@joshsmithxrm joshsmithxrm deleted the feature/ext-ux-audit branch March 19, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant