Skip to content

Blazor Toolkit open source component configuration skill file included. - #1088

Open
Indhumathy-Loganathan wants to merge 9 commits into
dotnet:mainfrom
Indhumathy-Loganathan:main
Open

Indhumathy-Loganathan wants to merge 9 commits into
dotnet:mainfrom
Indhumathy-Loganathan:main

Conversation

@Indhumathy-Loganathan

@Indhumathy-Loganathan Indhumathy-Loganathan commented Aug 28, 2026 •

Copy link
Copy Markdown

Summary

Adds the syncfusion-blazor-toolkit-install skill to the existing dotnet-blazor plugin so AI agents can correctly install and configure the open-source Syncfusion Blazor Toolkit (Syncfusion.Blazor.Toolkit). It covers package identity, AddSyncfusionBlazorToolkit() registration, component namespaces, Fluent and High Contrast theme CSS, interactive render modes, and split Blazor Web App setup, with progressive-disclosure references.

No separate plugin is introduced. An earlier revision added a standalone dotnet-blazor-toolkit plugin with component skills; that was removed in favour of this install-only skill.

Scope is install/configure only. It excludes commercial packages, license keys, Hybrid/MAUI, and per-component API guidance.

Key Changes

  • Added plugins/dotnet-blazor/skills/syncfusion-blazor-toolkit-install/SKILL.md with core rules, a host/topology decision table, and minimal setup steps (package, Program.cs, imports, CSS, render modes).
  • Added references under references/:
    • package-identity.md - Toolkit vs commercial Syncfusion.Blazor* packages; no license key for the Toolkit.
    • theme-and-host-files.md - stylesheet path and the correct host file per app type (Components/App.razor, _Host.cshtml, wwwroot/index.html).
    • render-modes.md - when interactive render modes are required, and when they must not be added.
    • split-webapp-registration.md - Server/Client registration for split Web Apps, including prerendering.
    • troubleshooting.md - common failure symptoms, fixes, and a general checklist.
  • Added tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml (Vally schema): 16 tagged stimuli, each with a type: prompt rubric grader; most also have deterministic graders. Includes two dormancy cases (expect_activation: false) for project creation and MAUI Blazor Hybrid.
  • Updated the dotnet-blazor descriptions in the marketplace files and README.md to mention Syncfusion Blazor Toolkit installation.
  • Updated .github/CODEOWNERS for the skill and test paths.
  • Scope is install/configure only. It excludes commercial packages, license keys, Hybrid/MAUI, and per-component API guidance.

Validation

  • python eng/eval-quality/check_eval_quality.py --base-ref origin/main reports no errors.
  • Frontmatter includes name (matches the directory), description, and license: MIT.
  • Markdown links from SKILL.md to the reference files resolve.
  • Guidance reviewed against current Blazor templates for host files, render modes, and split-app registration.

Notes

  • Evals do not run automatically on fork PRs ("Fork PR evaluation requires a trusted branch"); a maintainer run is needed to get eval results.

@AbhitejJohn

Copy link
Copy Markdown
Collaborator

@Indhumathy-Loganathan : Thank you for your contribution. Would you mind adding evals for the skills you've proposed based on the guidance here: https://github.com/dotnet/skills/blob/main/CONTRIBUTING.md#testing-and-validation? Without evals it's hard for us to assess the usefulness of skills.

@Indhumathy-Loganathan

Copy link
Copy Markdown
Author

@Indhumathy-Loganathan please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@dotnet-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@dotnet-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@dotnet-policy-service agree company="Microsoft"

Contributor License Agreement

@dotnet-policy-service agree company="Syncfusion"

@Indhumathy-Loganathan

Copy link
Copy Markdown
Author

@Indhumathy-Loganathan : Thank you for your contribution. Would you mind adding evals for the skills you've proposed based on the guidance here: https://github.com/dotnet/skills/blob/main/CONTRIBUTING.md#testing-and-validation? Without evals it's hard for us to assess the usefulness of skills.

@AbhitejJohn , We have included the evals as suggested. Please check.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

There are eval/doc issues that are internally inconsistent or overly broad (causing false failures or misleading guidance) and should be corrected before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR introduces the initial Syncfusion Blazor Toolkit skill pack (skills + reference docs) and adds Vally eval coverage to validate the new skills’ expected outputs and guidance.

Changes:

  • Added new Syncfusion Blazor Toolkit skills (Popups router + Dialog, Notifications/Spinner, Inputs, Calendars, Buttons) with supporting reference documentation.
  • Added a new Charts reference documentation set to guide correct Toolkit usage patterns (enums, events, axes, styling, accessibility).
  • Added Vally eval specs under tests/dotnet-blazor-toolkit/ to validate correct component selection and key anti-pattern avoidance.
File summaries
File Description
tests/dotnet-blazor-toolkit/syncfusion-blazor-toolkit-popups/eval.yaml New eval coverage for dialog-vs-tooltip component choice.
tests/dotnet-blazor-toolkit/syncfusion-blazor-toolkit-notifications/eval.yaml New eval coverage for SfSpinner binding, accessibility label, and async render timing.
tests/dotnet-blazor-toolkit/syncfusion-blazor-toolkit-inputs/eval.yaml New eval coverage for Toolkit input components (binding + validation patterns).
tests/dotnet-blazor-toolkit/syncfusion-blazor-toolkit-charts/eval.yaml New eval coverage for Toolkit charts setup, enums, theming, and package naming.
tests/dotnet-blazor-toolkit/syncfusion-blazor-toolkit-calendars/eval.yaml New eval coverage for calendar/date/time pickers (TValue, UTC, binding patterns).
tests/dotnet-blazor-toolkit/syncfusion-blazor-toolkit-buttons/eval.yaml New eval coverage for Toolkit button patterns (async handlers, accessibility, anti-patterns).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-popups/SKILL.md Popups router skill defining decision matrix and routing to sub-skills.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-popups/router/dialog-vs-tooltip-decision-matrix.md Supporting decision-matrix reference for dialog vs tooltip usage.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-popups/dialog/SKILL.md Dialog sub-skill guidance, patterns, and anti-pattern workflows.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-popups/dialog/references/dialog-properties.md Dialog API reference (properties/events/methods).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-notifications/SKILL.md Spinner-focused notifications/loading skill guidance.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-notifications/references/spinner-template.md Spinner templating + customization reference.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-notifications/references/spinner-overlay.md Overlay composition patterns for spinners (page/region/modal).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-notifications/references/accessibility-best-practices.md Accessibility guidance for spinner usage.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-inputs/SKILL.md Inputs skill guidance (binding, validation, SSR constraints).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-inputs/references/getting-started-inputs.md Inputs “getting started” reference and examples.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/interactive-features.md Charts interactivity reference (tooltip/crosshair/zoom/selection).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/events.md Charts event wiring reference (<ChartEvents> surface).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/data-handling.md Charts data-source guidance (lists, managers, live updates).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/chart-types-specialized.md Specialized chart types reference (stacked/scatter/bubble/etc.).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/axes-and-scales.md Axes/value types, ranges, striplines, and multi-axis patterns.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/appearance-styling.md Charts styling/themes/palettes guidance.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/advanced-features.md Advanced chart patterns (panes, trendlines, editing, RTL).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/accessibility-internationalization.md Charts accessibility + i18n/RTL reference.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/SKILL.md Calendars skill guidance (TValue selection, UTC, min/max).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/references/getting-started.md Calendars getting-started reference.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/references/features.md Calendars features overview reference.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/references/events-binding.md Calendars events/binding/validation reference.
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md Calendars critical gotchas reference (key pitfalls).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-buttons/SKILL.md Buttons skill guidance (async click patterns, anti-patterns).
plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md Buttons getting-started reference.
Review details

Suppressed comments (2)

plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md:38

  • The example marks TValue="TimeOnly?" as a binding error, which contradicts the rest of this PR (including the SfTimePicker eval rubric). Update the snippet so agents don’t learn the wrong API surface.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-calendars/references/critical-gotchas.md:191
  • The "When in doubt" guidance still says to avoid TimeOnly?, which conflicts with the rest of this PR’s calendar guidance. Align this summary with the corrected SfTimePicker support statement.
  • Files reviewed: 42/62 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Copilot AI review requested due to automatic review settings September 2, 2026 08:04
@Indhumathy-Loganathan

Indhumathy-Loganathan commented Sep 2, 2026 •

Copy link
Copy Markdown
Author

Corrections included.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The added skill documentation contains a few concrete correctness issues (contradictory guidance and inaccurate enum compilation wording) that could mislead agents and/or cause eval failures.

Review details

Suppressed comments (3)

Previously missed (3) — in code that hasn't changed since the last review.

plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/accessibility-internationalization.md:89

  • This note says using a non-existent Theme.* enum value "compiles to silence". Since Theme is an enum, invalid members won’t compile; updating the wording will avoid spreading incorrect guidance.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/appearance-styling.md:131
  • This note says using a non-existent Theme.* enum value "compiles to silence". Since Theme is an enum, invalid members won’t compile; updating the wording will avoid spreading incorrect guidance.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-notifications/SKILL.md:40
  • The guidance for Label + <Template> is internally inconsistent: this section says "Never both", but references/spinner-template.md later shows using Label together with a <Template> that is aria-hidden. Consider rewording to forbid only duplicate visible text, while still allowing Label for screen readers alongside an aria-hidden visual template.
  • Files reviewed: 42/62 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 2, 2026 11:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Several newly added reference docs contain broken links and copy/paste-invalid snippets/formatting issues that should be corrected before merging.

Review details

Suppressed comments (8)

Previously missed (8) — in code that hasn't changed since the last review.

plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-buttons/references/getting-started.md:162

  • This Razor snippet has nested double-quotes inside an attribute value, which makes it invalid syntax if copied. Escape the inner string literals (or move the label to a variable).
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/accessibility-internationalization.md:20
  • The _includes/sample-data.md link is broken (file doesn’t exist), and there’s an orphaned blockquote code fence (`> ```), which will break Markdown rendering for the rest of the file.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/advanced-features.md:15
  • This references _includes/sample-data.md, but there is no references/_includes/sample-data.md in the charts skill, so the link is broken.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/axes-and-scales.md:13
  • This references _includes/sample-data.md, but there is no references/_includes/sample-data.md in the charts skill, so the link is broken.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/data-handling.md:12
  • This references _includes/sample-data.md, but there is no references/_includes/sample-data.md in the charts skill, so the link is broken.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/events.md:1
  • The first line appears to include a stray BOM/zero-width character before # Events, which can show up as an odd glyph in some renderers and diffs. Prefer a plain # Events header line.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/events.md:17
  • This references _includes/sample-data.md, but there is no references/_includes/sample-data.md in the charts skill, so the link is broken.
    plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-charts/references/interactive-features.md:13
  • This references _includes/sample-data.md, but there is no references/_includes/sample-data.md in the charts skill, so the link is broken.
  • Files reviewed: 42/62 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The PR introduces a few concrete documentation/eval issues (self-contradictory guidance and a grader regex likely to fail correct responses) that should be corrected before merging.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 42/62 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-inputs/SKILL.md Outdated
Copilot AI review requested due to automatic review settings September 2, 2026 11:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

A new plugin appears to be introduced without the required plugins/dotnet-blazor-toolkit/plugin.json manifest, and there are correctness issues in added documentation snippets that should be fixed before merge.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-notifications/SKILL.md:54

  • Typo: "Don't inset" should be "Don't insert".
  • Files reviewed: 43/63 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread plugins/dotnet-blazor-toolkit/skills/syncfusion-blazor-toolkit-buttons/SKILL.md Outdated
Copilot AI review requested due to automatic review settings September 2, 2026 14:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

A few documentation/tooling-alignment issues were found (skill-validator warning avoidance and inconsistent/likely incorrect namespace and CSS filename guidance) that should be corrected before approval.

Review details
  • Files reviewed: 46/67 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml
Comment thread .github/plugin/marketplace.json
Copilot AI lite review requested due to automatic review settings October 7, 2026 06:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Marketplace/plugin metadata is inconsistent, and evaluation guards contain false-positive checks that can reject correct responses.

Review effort: Lite
Findings: 9 Medium severity · 3 Low severity

Open (12)
Resolved since last review (3)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Plugin manifest descriptions are not synchronized with marketplace metadata

.github/​plugin/​marketplace.json:75

The marketplace description is updated here, but plugins/dotnet-blazor/plugin.json and its .claude-plugin/.codex-plugin manifests remain unchanged. Existing plugins keep these descriptions synchronized (for example, plugins/dotnet-maui/plugin.json:4 matches .github/plugin/marketplace.json:45), so direct manifest consumers will not advertise the new Toolkit skill. Update all three manifest descriptions as well.

Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Copilot AI lite review requested due to automatic review settings October 7, 2026 07:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🔵 Needs a closer look

Split-app guidance and evaluation checks need correction, and plugin manifest descriptions remain inconsistent.

Review effort: Lite
Findings: 3 Low severity

Open (3)
Resolved since last review (9)
Previously missed (2)

In code that hasn't changed since last review

Medium severity Make package-installation matcher negation-aware

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:123

This negative matcher rejects a valid diagnosis that explicitly reassures the user, for example “you do not need to install a different package; add the missing stylesheet.” Because the rubric asks the agent to distinguish CSS trouble from a package problem, that wording is likely and should not fail the deterministic contract. Remove this response-wide substring check or make it detect an affirmative replacement/install action.

Medium severity Add dormancy cases for Blazor and Hybrid boundaries

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:352

The only dormancy case covers component API questions, but the skill explicitly excludes Blazor project creation and Hybrid/MAUI in its frontmatter. Without separate uncued expect_activation: false cases for those real routing boundaries, a regression that hijacks either request can still pass the eval; add guards that check recognition, restraint, and redirection for each boundary.

Copilot AI lite review requested due to automatic review settings October 7, 2026 07:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Correct the WebAssembly guidance and strengthen and de-risk the evaluation graders.

Review effort: Lite
Findings: 1 Medium severity · 2 Low severity

Open (3)
Resolved since last review (1)
Previously missed (3)

In code that hasn't changed since last review

Medium severity Avoid revealing target package and terminology in prompts

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:16

These preference prompts directly name the target package and, in several cases, exact target vocabulary such as AddSyncfusionBlazorToolkit and the final _content/... path. That makes activation and path recall easier for the skilled arm instead of measuring an incremental outcome; the eval guidance requires natural requests that do not name the skill's vocabulary. Rewrite the prompts to describe the developer's problem without prescribing the target terminology, retaining a supplied wrong value only where it is the subject of diagnosis.

Medium severity Make license-key matcher polarity-aware

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:39

This response-wide matcher still rejects the correct prohibition “do not add/register a license key,” because it matches the add a license key substring without checking polarity. Remove this negative matcher or replace it with a check for an affirmative recommendation; otherwise the required no-license guidance can fail the eval.

This issue also appears on line 221 of the same file.

Medium severity Remove polarity-insensitive Fluent theme no-match pattern

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:309

This no-match pattern rejects a valid explanation such as “this is not a Fluent theme-only problem” even though that is exactly the required diagnosis for _content JavaScript 404s. It scans response wording rather than an affirmative bad recommendation; remove it and rely on the positive asset/package and rubric checks.

This issue also appears in the following locations of the same file:

  • line 345
  • line 364

Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml
Copilot AI lite review requested due to automatic review settings October 7, 2026 08:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Moderate issues remain in WebAssembly registration guidance and evaluation correctness.

Review effort: Lite
Findings: 1 Medium severity · 1 Low severity

Open (2)
Resolved since last review (2)
Previously missed (4)

In code that hasn't changed since last review

Medium severity WebAssembly topology incorrectly registers Interactive Server services

plugins/​dotnet-blazor/​skills/​syncfusion-blazor-toolkit-install/​SKILL.md:74

This combined registration block adds Interactive Server services even for the -int WebAssembly topology. The repository's template guidance shows WebAssembly-only apps use only AddInteractiveWebAssemblyComponents() (plugins/dotnet-blazor/skills/create-blazor-project/SKILL.md:189-200), so this contradicts the preceding rule not to add unused render modes and can introduce an unnecessary server circuit. Keep this block for Auto/split apps and provide a separate WebAssembly-only block.

Medium severity WebAssembly guidance incorrectly requires a Server endpoint

plugins/​dotnet-blazor/​skills/​syncfusion-blazor-toolkit-install/​references/​split-webapp-registration.md:7

dotnet new blazor -int WebAssembly does not generate both interactive endpoints: this repository's template guidance shows only AddInteractiveWebAssemblyComponents() and AddInteractiveWebAssemblyRenderMode() for that mode. Telling users to keep the Server endpoint here can make them add an unavailable or unnecessary server-interactivity configuration; reserve both endpoints for Auto or a deliberately combined topology.

Medium severity Negative matcher rejects valid negated license guidance

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:38

This response-wide negative matcher rejects a correct answer such as “Do not register a license key,” because it does not account for negation. That conflicts with the rubric and the skill’s required guidance that Toolkit does not need a license key; remove this brittle matcher or make it detect an affirmative request to register one.

This issue also appears on line 93 of the same file.

Low severity Capability prompts reveal expected product and API vocabulary

tests/​dotnet-blazor/​syncfusion-blazor-toolkit-install/​eval.yaml:16

These capability prompts repeatedly name the exact product and, in several cases, the exact API/path vocabulary that the skill is supposed to supply. That makes the baseline arm a recall test and inflates activation/overfitting rather than measuring an improvement over a natural request. Rewrite the prompts around the developer's goal, topology, or symptom (without giving the package ID, extension method, or expected host path), while keeping enough context to distinguish the scenario.

Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated

@PureWeen PureWeen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This review was written by GitHub Copilot with help from a human (Shane).

Thanks for the updates, and for moving this into dotnet-blazor. I checked the new head against the current Blazor templates and the Toolkit 1.0.2 sources and package. Most of what I raised earlier is fixed. What's left is mostly copy/paste issues in the Program.cs examples and a few eval regexes that can score opposite answers incorrectly. Inline comments below.

check_eval_quality.py passes. The evaluation-status check still reports "Fork PR evaluation requires a trusted branch", so there's no skilled-vs-baseline result yet. A maintainer needs to run it from a trusted branch, so that isn't something to fix on your side.


var app = builder.Build();

app.MapRazorComponents<App>()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This combined sample is right for Auto, but not for dotnet new blazor -int WebAssembly. That template only adds the WebAssembly services and render mode, and it keeps .AddAdditionalAssemblies(typeof(<App>.Client._Imports).Assembly) so Client routes are available to server-side endpoint routing (Syncfusion's own v1.0.2 split sample keeps it too). Copied over a WebAssembly app, this turns on Interactive Server it never configured and drops that call, so direct requests to Client pages can stop resolving.

Could this show only the AddSyncfusionBlazorToolkit() line and say to keep the template's endpoint chain, or split Auto and WebAssembly into separate samples that keep the generated chain?


Default prerendering renders Interactive WebAssembly and Interactive Auto components on the server first. If the server does not have Toolkit services, that first render fails even when `.Client` is registered correctly. Disable prerendering only when the user explicitly asks; otherwise register Toolkit on both hosts.

`dotnet new blazor -int Auto` and `dotnet new blazor -int WebAssembly` already add interactive server and WebAssembly endpoints on the server. Keep those endpoints. A server-only Interactive Server app should not gain WebAssembly endpoints just to host Toolkit.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

-int WebAssembly doesn't add Interactive Server services or endpoints, only Auto adds both. Could this distinguish the two, and keep the generated .AddAdditionalAssemblies(...) call on the WebAssembly and Auto server chains in the samples below?


| Scenario | Package | Program.cs | Host file for CSS | Interactivity |
| --- | --- | --- | --- | --- |
| Blazor Server (legacy `_Host.cshtml`) | `Syncfusion.Blazor.Toolkit` | `using Syncfusion.Blazor.Toolkit;` then `builder.Services.AddSyncfusionBlazorToolkit()` | `_Host.cshtml` | Already interactive (no `@rendermode`) |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Toolkit 1.0.2 only ships assets for net8.0, net9.0 and net10.0. A legacy _Host.cshtml project may still target .NET 6 or 7, where package restore fails. Could the flow check the project's TargetFramework first and give upgrade guidance if it's older than .NET 8? The server-install-success stimulus in the eval could also say which framework it targets, so it doesn't reward installing unconditionally.

@using Syncfusion.Blazor.Toolkit

@* Optional: add component-specific namespaces only when using those components *@
@* @using Syncfusion.Blazor.Toolkit.Buttons *@

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The examples use <SfButton>, which lives in Syncfusion.Blazor.Toolkit.Buttons, not the root namespace. With this import commented out, those examples won't resolve in a fresh app. Could the Buttons import be included with the button examples (render-modes.md, troubleshooting.md), or made explicit where the component is first used?

```csharp
using Syncfusion.Blazor.Toolkit;

var builder = WebApplication.CreateBuilder(args);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This diagnosis covers both the Server and Client Program.cs (line 52), but the fix shown is server-only. .Client/Program.cs uses WebAssemblyHostBuilder.CreateDefault(args), so this version won't compile there. Could this be labelled as the server example with a client variant, or show only the shared builder.Services.AddSyncfusionBlazorToolkit() line?

<link rel="stylesheet" href="app.css" />
</head>
<body>
<Routes />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

These host examples are full documents, so someone replacing App.razor with this loses <HeadOutlet /> (page titles and head content) and any render mode that was on <Routes />, which can turn a globally interactive app into static SSR. Could this show just the <link> line to add inside the existing <head>?


- `fluent.min.css` — default Fluent stylesheet. Use this unless the user asks for something else.
- `highcontrast.min.css` — high-contrast stylesheet shipped with the Toolkit package.
- Individual component stylesheets: `button.min.css`, `calendar.min.css`, `chart.min.css`, `checkbox.min.css`, `dialog.min.css`, `dropdown.min.css`, `input.min.css`, `spinner.min.css`, `textbox.min.css`, `tooltip.min.css`, and others.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The v1.0.2 package doesn't contain dropdown.min.css (the source has no dropdown.scss either). Could this be removed, or the list limited to stylesheets confirmed in the package?

pattern: (?i)_content/Syncfusion\.Blazor\.Toolkit/styles/fluent\.min\.css
- type: output-not-matches
config:
pattern: (?i)(dotnet add package|PackageReference Include=\"?)\s*Syncfusion\.Blazor(?!\.Toolkit)\b

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

These response-wide negative patterns still reject correct warnings (the repo's anti-patterns eval around line 285 describes this failure mode). For example, "Do not run dotnet add package Syncfusion.Blazor" matches line 35, "Do not add a license key" matches line 38, and "don't register only on the server" matches line 95. Line 308 has the same problem with "this is not a Fluent theme only problem". Could these detect an affirmative instruction, or be dropped in favor of the positive checks plus the prompt grader?

pattern: (?i)(wwwroot/)?index\.html
- type: output-matches
config:
pattern: (?i)RootComponents\.Add<App>\("#app"\)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This matcher also accepts "Never call RootComponents.Add<App>("#app")", so the opposite advice passes the deterministic check. Could it be made directional, or left to the prompt grader?

graders:
- type: output-not-matches
config:
pattern: (?i)(Components/App\.razor|_Host\.cshtml|@rendermode|RootComponents\.Add<App>\("#app"\)|AddInteractive(Server|WebAssembly)|AddSyncfusionBlazorToolkit)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for adding a deterministic check here, but this one has the same negation problem, and it may also fail the right answer for a Hybrid app. A correct reply could say "this isn't a Web App, so skip Components/App.razor and _Host.cshtml" (matches), or tell the user to call AddSyncfusionBlazorToolkit() in MauiProgram.cs, since the components still need the service (matches). Either would fail the grader while the rubric below says they're fine. Could this be dropped in favor of the prompt grader, or limited to wording that only a Web App-style answer would use?

Copilot AI lite review requested due to automatic review settings October 7, 2026 13:50

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Critical and moderate issues remain in render-mode guidance, framework compatibility diagnostics, evaluation prompts, CSS guidance, and plugin metadata.

Review effort: Lite
Findings: 2 High severity · 4 Medium severity · 1 Low severity

Open (7)
Resolved since last review (1)

Comment thread plugins/dotnet-blazor/skills/syncfusion-blazor-toolkit-install/SKILL.md Outdated
Comment thread tests/dotnet-blazor/syncfusion-blazor-toolkit-install/eval.yaml Outdated
Comment thread plugins/dotnet-blazor/skills/syncfusion-blazor-toolkit-install/SKILL.md Outdated
Copilot AI lite review requested due to automatic review settings October 7, 2026 14:34

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Comment on lines +139 to +141
- type: output-matches
config:
pattern: (?i)Interactive(Server|WebAssembly|Auto)
Comment on lines +223 to +231
- type: output-matches
config:
pattern: (?i)Client[\s\S]{0,40}Program\.cs
- type: output-matches
config:
pattern: (?i)AddSyncfusionBlazorToolkit
- type: output-not-matches
config:
pattern: '(?im)(?:^|(?<=[.:;!?])\s+)(?!(?:(?![.:;!?](?:\s|$))[^\n])*?(?:\b(?:not|never|wrong|mistake|incorrect|false)\b|\w+n[''’]t\b|\bcannot\b))(?:(?![.:;!?](?:\s|$))[^\n])*?only (?:the )?server needs'
Comment on lines +250 to +252
- type: output-matches
config:
pattern: (?i)AddSyncfusionBlazorToolkit
Comment on lines +313 to +315
- type: output-matches
config:
pattern: (?i)(AddSyncfusionBlazorToolkit|rebuild|clean)
Comment on lines +379 to +384
- type: output-matches
config:
pattern: (?i)TargetFramework
- type: output-matches
config:
pattern: (?i)net8\.0
Comment on lines +441 to +444
graders:
- type: output-matches
config:
pattern: _content/Syncfusion\.Blazor\.Toolkit/styles/numerictextbox\.min\.css

@PureWeen PureWeen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This review was written by GitHub Copilot with help from a human (Shane).

Thanks for the big rework. I went back through the new head and most of my earlier comments are fixed: the endpoint recipes now preserve each template's generated calls (including AddAdditionalAssemblies where it applies), the -int WebAssembly description is correct, the net8+ prerequisite is there, SfButton has its .Buttons using, the host-file examples are additive, dropdown.min.css is gone, and the negated phrases I listed now pass the graders. The eval-quality check passes with no errors.

Still open from before: the RootComponents.Add matcher at eval.yaml:65 (see that thread). The inline comments below are new: one placement rule that is too broad for -ai WebAssembly/Auto apps, one remaining copy/paste snippet, a stylesheet claim that doesn't match the package, the net7 failure symptom, and a few graders that can pass a wrong answer.

The evaluation-status check still fails with "Fork PR evaluation requires a trusted branch", so there's no skilled-vs-baseline result yet. That needs a maintainer to run it from a branch in dotnet/skills, so it isn't something you need to fix.

| Web App `-int Server` (**per-page**) | Yes | n/a (no `.Client` project) | `Components/App.razor` | Pages with `@rendermode InteractiveServer`; pages without it are static SSR |
| Web App `-int Server -ai` (**global**) | Yes | n/a | `Components/App.razor` | Anywhere; inherited from `Routes`. Do not add a different mode |
| Web App `-int WebAssembly` (**per-page**) | Yes | Yes; **no** `RootComponents.Add` | `Components/App.razor` | Pages with `@rendermode InteractiveWebAssembly`, which **must** be in `.Client` (a server-project page prerenders, then fails in the browser) |
| Web App `-int WebAssembly -ai` (**global**) | Yes | Yes | `Components/App.razor` | Anywhere; inherited from `Routes` |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The "Anywhere" in the global WebAssembly and Auto rows (this one and line 57, and render-modes.md:32) isn't right for the generated template. With dotnet new blazor -int WebAssembly -ai (I generated one to check), Routes and every page live in the .Client project, and the server project only has Error.razor. A page added under the server's Components/Pages still prerenders, but the browser can't find the component in the client assembly. Could these rows say that Toolkit components for WebAssembly and Auto need to live in the .Client project, and keep "Anywhere" for Server -ai, legacy Server and standalone WebAssembly?

**Fix**:
1. Ensure service registration is early in `Program.cs`:
```csharp
var builder = WebApplication.CreateBuilder(args);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This snippet still has the same full-Program.cs shape as the earlier example. It starts a WebApplication.CreateBuilder and always calls AddInteractiveServerComponents(), then stops at builder.Build(). Pasted into a WebAssembly or Auto server Program.cs it drops the template's other calls and, for WebAssembly, adds Server interactivity the template doesn't have. Pasted into .Client/Program.cs it replaces WebAssemblyHostBuilder. The "Services not configured" fix earlier in this file already has the right shape: just the using and builder.Services.AddSyncfusionBlazorToolkit();. Could this one do the same?

<link href="_content/Syncfusion.Blazor.Toolkit/styles/fluent.min.css" rel="stylesheet" />
```

Pick the host file from the Quick Decision Table. Use `highcontrast.min.css` only when the user asks for high contrast. `SfNumericTextBox` additionally needs `numerictextbox.min.css`, because its selectors are not in the Fluent or High Contrast bundle. See [Theme and host files](./references/theme-and-host-files.md).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I checked the 1.0.2 package contents. numerictextbox.min.css has no .e-numerictextbox selector, and I couldn't find any of its rules missing from fluent.min.css, so the Fluent bundle does style SfNumericTextBox and the extra link is redundant, not required. The same claim is in theme-and-host-files.md:41 and in the numeric-textbox-unstyled stimulus (eval.yaml:444-447), where the rubric rewards the extra link. I'd drop it from all three. If you want a stylesheet-diagnosis case there, a genuinely missing or wrong stylesheet path would fit better.


## Core Rules

1. **Verify the target framework first.** `Syncfusion.Blazor.Toolkit` 1.0.2 targets `net8.0`, `net9.0`, and `net10.0`. Always check the project's `<TargetFramework>` before installation. On `net6.0`, `net7.0`, or older frameworks, the package may restore successfully, but Toolkit assemblies are not available to the application, so the build later fails with errors such as `CS0246: The type or namespace name 'Syncfusion' could not be found`. Do not proceed with Toolkit installation on unsupported frameworks. Recommend upgrading the application to .NET 8 or later first (for example with the `dotnet-upgrade` plugin), then continue with the installation steps. If the `<TargetFramework>` is unknown, read it before doing anything else. Never edit the TFM just to make the package install.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Good to have the framework check. The symptom isn't quite what happens though. The package only ships net8.0, net9.0 and net10.0 assets, so on a net6/net7 project a normal PackageReference restore fails with NU1202 (package not compatible), rather than restoring and then failing later with CS0246. The same story is repeated in the Common Mistakes table (line 154), troubleshooting.md:123, and the rubric at eval.yaml:365-367, which also says not to claim restore fails. Could those all say "restore fails with NU1202 on unsupported frameworks, upgrade the app first"?

1. ✓ `<TargetFramework>` in the `.csproj` is `net8.0`, `net9.0`, or `net10.0`. If it is older, recommend upgrading first.
2. ✓ Package name is `Syncfusion.Blazor.Toolkit` (not a commercial `Syncfusion.Blazor.*` package)
3. ✓ `using Syncfusion.Blazor.Toolkit;` and `AddSyncfusionBlazorToolkit()` are in `Program.cs` (in both Server and Client projects of a split Web App)
4. ✓ `@using Syncfusion.Blazor.Toolkit` is in `_Imports.razor` (in both projects of a split Web App). Per-component namespaces (e.g. `@using Syncfusion.Blazor.Toolkit.Buttons` for `SfButton`) are added to the `_Imports.razor` of every project that renders the component.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This checklist item requires @using Syncfusion.Blazor.Toolkit in _Imports.razor, but SKILL.md rule 4 and line 141 of this file say the root using is optional (only needed for the enums). Could this item just require the component-family namespaces, like .Buttons for SfButton?

journey: fix-stylesheet-name
prompt: |
I linked this stylesheet in Components/App.razor:
<link href="_content/Syncfusion.Blazor.Toolkit/themes/bootstrap5.css" rel="stylesheet" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The prompt links _content/Syncfusion.Blazor.Toolkit/themes/bootstrap5.css and says DevTools shows no 404. That path isn't in the package (stylesheets are under styles/ and there's no bootstrap5 file), so the request would 404 and the scenario contradicts itself. Could the prompt say DevTools shows a 404 for that file?

pattern: (?i)SyncfusionLicenseProvider\.RegisterLicense
- type: output-matches
config:
pattern: (?i)\b(no|not|n['’]t|without|free)\b[^\n]{0,40}\blicense key

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The "no license key" check also matches "does not work without a license key", which is the opposite of the right answer, so it passes this deterministic matcher. Since the prompt grader already covers the conclusion, this might be better as a directional pattern (for example "does not need/require a license key") or dropped.

pattern: '(?im)(?:^|(?<=[.:;!?])\s+)(?!(?:(?![.:;!?](?:\s|$))[^\n])*?(?:\b(?:not|never|avoid|without|instead of|rather than|no need|unlike|cannot)\b|\w+n[''’]t\b))(?:(?![.:;!?](?:\s|$))[^\n])*?\b(?:open|edit|add|put|place|update|modify|link)\b(?:(?![.:;!?](?:\s|$))[^\n]){0,60}(?:Components/App\.razor|_Host\.cshtml)'
- type: output-not-matches
config:
pattern: '(?im)^\s*(?:builder\.RootComponents\.Add<App>\(|\.?AddInteractive(?:Server|WebAssembly)(?:Components|RenderMode)\()'

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This endpoint guard only matches lines that start with AddInteractive.... An answer that incorrectly adds builder.Services.AddRazorComponents().AddInteractiveServerComponents(); for the Hybrid app isn't caught by it (I ran the pattern), while a correct answer that shows a standalone .AddInteractiveServerComponents() line as the thing to remove is rejected. Allowing a builder.Services... prefix, with the same clause-level negation handling you used on the line above, would close the gap.

This branch was previously deployed

1 inactive (outdated) deployment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants