vscuse-scenario-authoring
A workflow for authoring test plans through visual interaction and vscuse CLI.
Install
mkdir -p .claude/skills/vscuse-scenario-authoring && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17906" && unzip -o skill.zip -d .claude/skills/vscuse-scenario-authoring && rm skill.zipInstalls to .claude/skills/vscuse-scenario-authoring
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use when: reading a docs scenario, PRD, mockup, or user flow and using vscuse-ui/noVNC as the primary authoring surface to record, generate, replace, or update vscuse test plans; decide existing coverage vs new case; validate product behavior against docs, then finish with vscuse CLI validation.Key capabilities
- →Record test steps based on docs, PRDs, scenarios, or mockups
- →Generate new vscuse test plans
- →Update existing vscuse test coverage
- →Validate product behavior against documentation
How it works
The skill uses vscuse-ui and noVNC to execute a scenario in a live desktop, allowing the user to record interactions and generate or update vscuse test plans.
Inputs & outputs
When to use vscuse-scenario-authoring
- →Author new test scenarios
- →Map product behavior to documentation
- →Record test steps for vscuse
About this skill
vscuse Scenario Authoring
Goal
Use docs, PRDs, scenarios, or mockups as the source of truth for vscuse coverage. Use vscuse-ui and noVNC as the primary authoring surface: execute the scenario in a real vscuse desktop, decide whether product behavior matches the docs, and then update existing test coverage or generate a new plan. Use vscuse execute afterward as the final CI-parity validation.
This workflow is for authoring or refreshing vscuse coverage. For diagnosing an already-failing case, use vscuse-case-diagnosis.
Required Inputs
- Docs/mockup/scenario path or quoted scenario text.
- The feature area or expected user workflow.
- Whether the expected UI already exists in product code. vscuse-ui cannot execute future UI that has not been implemented.
- Feature flags from the docs scenario, especially any
## Feature flagssection or acceptance criteria that depends onfeatureFlag(...). - The intended validation case boundary: start state, one primary behavior, and success state.
Core Rules
- Docs/mockups define expected behavior, but
vscuse-uidoes not automatically understand or execute docs. The agent or human must perform the scenario in the live noVNC desktop. - Prefer
vscuse-uifor creating or repairing case steps. It is the fastest way to inspect live UI state, record changed interactions, refresh screenshots, and edit steps. Treat the CLI as the final verifier, not the primary authoring surface. - Use the integrated browser at
http://localhost:6080/vnc.htmlas the live evidence surface. - Treat
vscuse-uigenerated plans as drafts until cleaned, parsed, and rerun withvscuse execute. - Archive every local
vscuse executeusing the repository-root artifact command inlocal-vscuse-validation: a unique gitignored.local/test-reports/<timestamp>-<plan-name>/directory containingrun.logandtest_report.html. - If product behavior does not match the docs, classify it as a product gap or bug before changing coverage.
- When a draft scenario explicitly replaces shipped behavior, treat the draft doc as the source of truth for the covered case. Existing vscuse steps that encode the old behavior are test plan drift, even if they used to pass.
- A product journey, product scenario, and validation case are different units. Follow the definitions in
docs/01-product/scenarios/README.md; do not turn a complete journey into one long plan by default. - Apply the independent-execution rules below to newly authored or materially refreshed cases. Existing plans remain valid until they are migrated; do not perform metadata-only rewrites across the current plan library.
- A new or materially refreshed validation case must be independently executable and retryable: it creates or loads its own declared start state, owns setup/assertions/cleanup, and does not consume another case's workspace or ephemeral cloud resources.
- Split cases at deterministic, reconstructable state boundaries, not mechanically at every command. A remote-preview case may still provision and deploy when those steps share inseparable ephemeral resources.
- Do not generate the Cartesian product of lifecycle × language × authentication × feature flags. Add a case only when a dimension changes user-visible UI, generated output, runtime behavior, or a meaningful failure domain.
- Do not commit empty
r_*.jsonrecordings or exploratory generated plans. - Do not hardcode app names, paths, tenant data, API keys, or secrets captured during recording.
- Scenario feature flags must enter the target plan as
plan_metadata.tagsentries such asfeature_flag:TEAMSFX_MCP_FOR_DA_DT=true. Do not leave them only in a local shell command or narrative notes. - Feature-flag tags document the requirement but do not inject the container environment. Confirm the runner/config passes each flag before classifying behavior, and count a flag as covered only when the case reaches and asserts its gated branch.
- Prefer keyboard-driven steps over pointer-driven steps when authoring or cleaning recordings. Quick picks, command palette commands, focused default buttons, and simple selections should usually become
key_press/type_textsteps instead of coordinateclicksteps. - When converting quick-pick clicks to
key_press enter, preserve or create the wait condition that proves the intended row is loaded and highlighted. A keyboard action without a prompt-specific precondition can run before the list appears and type subsequent input into the wrong quick pick. - When recording captures equivalent labels for the same action, such as Teams
AddversusOpen, author the case around the shared user intent: assertion accepts either label, the action is semantic/OCR-backed when keyboard is unavailable, and the next assertion verifies the converged outcome. - When a prompt is conditional, record the observed UI first, then convert it into an optional guarded step: prompt-specific preconditions, short
precondition_wait_timeout:X, noforce_run:true, andcontinue_on_erroronly if the runner is known to honor it.
Procedure
1. Extract the Scenario From Docs
Read the docs/mockup and write down the testable contract:
- Source path and scenario title.
- Start state and required prerequisites.
- User actions in order.
- Expected visible UI at each important state.
- Expected generated files, env files, debug target, command labels, or Teams/browser behavior.
- Required feature flags and expected values.
- Negative/error states if they are part of the scenario.
If the docs are ambiguous, ask for the intended scenario rather than inventing hidden product behavior.
2. Map Existing Coverage
Search existing vscuse assets under packages/tests/vscuse/vscode-test-cases for:
- Plan names and descriptions.
- Shared group names.
- Command labels and visible UI strings.
- Template names, generated file names, debug configuration names, and provider names.
Decision rules:
- Same workflow with changed UI/assertions/waits: update the existing plan or group.
- Shared flow changed: update the shared group, then rerun one focused consumer plan.
- New workflow, provider, debug target, or major branch: create a new plan.
- Existing workflow but different feature-flag preconditions: update the plan metadata with
feature_flag:*tags, and split into a separate plan when flag-on and flag-off behavior both need coverage. - Future UI not implemented: report product gap; do not create a passing case that hides the gap.
2a. Define Independently Executable Cases
Map one approved product scenario to one or more validation cases. For a newly authored or materially refreshed case, record this authoring contract in existing plan_metadata.tags where a tag convention already exists and in the final authoring report for the remaining dimensions. Do not invent unsupported plan JSON fields. The contract includes:
- stable scenario ID and a unique validation ID;
- lifecycle phase and execution target;
- start state, one primary behavior, and success state;
- authentication or other behavior variant;
- exact feature-flag values;
- account/resource profile and whether Azure or M365 login is required;
- automation level:
contract,managed-integration, orfull-e2e; - prerequisite owner: Toolkit, test fixture, tenant administrator, or external service;
- setup, assertions, cleanup, and execution gate.
Use these automation levels consistently:
contractvalidates prompts and generated outputs without requiring the external system to run end-to-end.managed-integrationstarts from infrastructure or identity state owned and health-checked by the test environment.full-e2ecrosses the real supported external boundaries and is usually scheduled when it is expensive or fragile.
Account requirements belong to the execution target. For example, local debug of a DA in Copilot requires an M365 account; do not infer account_profile:none from the word "local." An Entra SSO create case may stop at the generated admin handoff, while a separate scheduled integration uses a managed tenant fixture.
Source-of-Truth Override: DA Create With MCP Server
For SCN-DA-CREATE-WITH-MCP-SERVER, resolve the requested contract from Scenario ID, Status, and Proposal key; do not infer lifecycle from a directory name. The current dynamic-tool-discovery contract is docs/01-product/scenarios/da/create-da-with-mcp-server.md. With TEAMSFX_MCP_FOR_DA_DT=true, the create-flow case must not continue the legacy fetch-tools/static operation selection path:
- Do not click
Fetch action from MCP,Fetch from MCP, orSelect Operation(s) Copilot can interact withas part of the create scenario. - Validate the generated dynamic project shape instead: no
appPackage/mcp-tools-1.json;appPackage/ai-plugin.jsonhas an MCP server runtime for the entered URL, emptyfunctions, nomcp_tool_description, andrun_for_functions: ["*"];appPackage/declarativeAgent.jsonreferencesaction_1;.vscode/mcp.jsonpoints at the MCP server URL. - For
Noneauth,m365agents.ymlmust not injectoauth/registerordcr/register. - Setting the DCR flag is not DCR coverage. Only a case that selects
oauth-dynamicand assertsdcr/registercovers the DCR-on branch; use a separate DT-on/DCR-off case only when validating that the dynamic-registration option is absent. - Treat Entra SSO create as contract coverage through the generated client-ID/admin handoff. Run the real SSO path only from a managed tenant fixture on an appropriate scheduled gate.
- Keep create, local debug, and remote debug independently executable. Do not split provision/deploy/launch further when they must share resources created in the same remote-debug case.
- Run the edited plan end-to-end in
vscuse-ui/noVNC first. Use CLI only after the UI flow has demonstrated that the saved case reaches the expected generated-projec
Content truncated.
When not to use it
- →For diagnosing an already-failing case
- →When the expected UI has not been implemented in product code
- →When committing empty r_*.json recordings or exploratory generated plans
Limitations
- →vscuse-ui cannot execute future UI that has not been implemented
- →The agent or human must perform the scenario in the live noVNC desktop
- →Do not hardcode app names, paths, tenant data, API keys, or secrets captured during recording
How it compares
This workflow prioritizes visual interaction and recording in a live desktop environment for authoring, rather than relying solely on CLI commands.
Compared to similar skills
vscuse-scenario-authoring side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| vscuse-scenario-authoring (this skill) | 0 | 19d | No flags | Intermediate |
| tui-validate | 4 | 4mo | Review | Intermediate |
| verify-bulk-action-bar | 0 | 2mo | Review | Intermediate |
| campusway-frontend-quality | 0 | 3mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by OfficeDev
View all by OfficeDev →You might also like
tui-validate
mikeyobrien
Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation. Supports both visual (PNG/SVG) and text-based validation modes.
verify-bulk-action-bar
junnv93
BulkActionBar 패턴 SSOT 검증 — count chip aria-live, role=toolbar, Esc clear, indeterminate Radix, focus management, IME guard. 일괄 작업 UI 변경 시 트리거. canonical = components/common/BulkActionBar.tsx (도메인 무관 generic), components/approvals/BulkActionBar.tsx는 approvals 특화 wrapper.
campusway-frontend-quality
md-muntasir-shihab
CampusWay frontend quality workflow for Vite React and Tailwind with optional Next.js surface. Use when: improve UI, refactor components, fix layout, optimize bundle, enforce design consistency, prepare frontend PR.
Tester
SaadhJawwadh
A comprehensive testing skill that covers UI/UX consistency, codebase QA, security auditing, and verification of settings and backups.
preview-data-generator
rshankras
Generate sample data and a multi-variant #Preview matrix for SwiftUI views — empty/loading/error/loaded states, light/dark, Dynamic Type, locales/RTL, and devices. Use when the user says "add previews", "sample data for previews", "preview my view in different states", "preview data", "prototype thi
web-design-guidelines
vercel
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".