-
Notifications
You must be signed in to change notification settings - Fork 17
UXDOPS-2843: Add /ux-design workflow for UX design and implementation handoff #102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 1 commit
6a72e10
2d45986
1c80eb8
6dbfd3c
e55a522
84974fa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -122,6 +122,49 @@ ensure_repo_linked() { | |
| echo " Linked $INSTALL_DIR -> $REPO_DIR" | ||
| } | ||
|
|
||
| UXD_REPO="https://github.com/rh-uxd/ai-helpers.git" | ||
| UXD_DIR="${HOME}/.uxd-ai-skills" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift Keep project-scope links independent of the installer user’s home. When As per coding guidelines, “Relative paths only: For symlink compatibility across install scopes.” Also applies to: 158-163 🤖 Prompt for AI AgentsSource: Coding guidelines |
||
| UXD_MARKETPLACE="rh-uxd/ai-helpers" | ||
|
|
||
| # UXD AI Skills — plugins used by workflows. | ||
| # uxd-workshop: research/* | ||
| UXD_PLUGINS=(uxd-workshop) | ||
|
|
||
| ensure_uxd_repo() { | ||
| if [[ -d "$UXD_DIR" ]]; then | ||
| echo " UXD AI Skills repo already cloned at $UXD_DIR" | ||
| return | ||
| fi | ||
| echo " Cloning UXD AI Skills repo..." | ||
| git clone --depth 1 "$UXD_REPO" "$UXD_DIR" 2>/dev/null || { | ||
| echo " Warning: could not clone UXD AI Skills repo; skipping" >&2 | ||
|
Comment on lines
+146
to
+148
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '--- install.sh relevant sections ---'
sed -n '1,190p' install.sh
printf '%s\n' '--- install.sh later call sites ---'
sed -n '220,365p' install.sh
printf '%s\n' '--- repository guidance ---'
for f in AGENTS.md CLAUDE.md README.md; do
if [ -f "$f" ]; then
printf '\n--- %s ---\n' "$f"
sed -n '1,220p' "$f"
fi
done
printf '%s\n' '--- UXD references ---'
rg -n -C 3 'UXD|uxd|git clone|marketplace|plugin' . --glob '!install.sh' --glob '!dist/**' --glob '!build/**' | head -240Repository: flightctl/ai-workflows Length of output: 37733 🏁 Script executed: #!/bin/bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import re
text = Path("install.sh").read_text()
checks = {
"mutable UXD clone": r'git\s+clone\s+--depth\s+1\s+"\$UXD_REPO"\s+"\$UXD_DIR"',
"UXD repo URL": r'UXD_REPO="([^"]+)"',
"UXD fallback links": r'install_uxd_skills\s+"\$SKILLS_DIR"',
"Claude marketplace branch": r'if\s+command\s+-v\s+claude.*?else\s*\n\s*install_uxd_skills',
"UXD plugin source path": r'plugin_skills="\$\{UXD_DIR\}/plugins/\$\{plugin\}/skills"',
}
for name, pattern in checks.items():
match = re.search(pattern, text, re.S)
print(f"{name}: {'present' if match else 'absent'}")
if name == "UXD repo URL" and match:
print(f" {match.group(1)}")
print("\ninstall_uxd_skills call contexts:")
for match in re.finditer(r'(?m)^\s*install_uxd_skills\s+"\$SKILLS_DIR"', text):
line = text.count("\n", 0, match.start()) + 1
context = text[max(0, match.start()-180):match.start()+120].replace("\n", " ")
print(f" line {line}: {context}")
print("\nclone guard:")
guard = re.search(
r'ensure_uxd_repo\(\).*?\n(.*?)\n\}\n\ninstall_uxd_skills',
text,
re.S,
)
print(" existing UXD_DIR returns without fetch:",
bool(guard and re.search(r'\[\[ -d "\$UXD_DIR" \]\].*?return', guard.group(1), re.S)))
PY
printf '%s\n' '--- UXD-related installer lines ---'
nl -ba install.sh | sed -n '125,180p;235,355p'Repository: flightctl/ai-workflows Length of output: 1459 Pin the UXD fallback checkout before linking its skills.
🤖 Prompt for AI Agents |
||
| return 1 | ||
| } | ||
| } | ||
|
|
||
| install_uxd_skills() { | ||
| local skills_dir="$1" | ||
| ensure_uxd_repo || return | ||
|
|
||
| for plugin in "${UXD_PLUGINS[@]}"; do | ||
| local plugin_skills | ||
| if [[ "$plugin" == pf-* ]]; then | ||
| plugin_skills="${UXD_DIR}/plugins/patternfly/${plugin}/skills" | ||
| else | ||
| plugin_skills="${UXD_DIR}/plugins/${plugin}/skills" | ||
| fi | ||
| [[ -d "$plugin_skills" ]] || continue | ||
|
|
||
| for skill_dir in "${plugin_skills}"/*/; do | ||
| [[ -d "$skill_dir" ]] || continue | ||
| local skill_name | ||
| skill_name="$(basename "$skill_dir")" | ||
| ln -sfn "$skill_dir" "${skills_dir}/${skill_name}" | ||
| echo " Linked ${skills_dir}/${skill_name} -> ${skill_dir} (uxd)" | ||
| done | ||
| done | ||
| } | ||
|
|
||
| install_shared() { | ||
| local target_dir="$1" | ||
| if [[ ! -d "${INSTALL_DIR}/_shared" ]]; then | ||
|
|
@@ -194,6 +237,7 @@ install_cursor() { | |
| echo " Linked ${SKILLS_DIR}/${wf} -> ${INSTALL_DIR}/${wf} ($SCOPE)" | ||
| done | ||
| generate_cursor_commands "$CMDS_DIR" | ||
| install_uxd_skills "$SKILLS_DIR" | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Scope UXD install to workflows that need it. Right now |
||
| } | ||
|
|
||
| install_claude() { | ||
|
|
@@ -268,6 +312,22 @@ install_claude() { | |
| echo " Removed stale commands symlink ${CMDS_DIR}/${wf} ($SCOPE)" | ||
| fi | ||
| done | ||
|
|
||
| # Install UXD AI Skills — marketplace (preferred) with symlink fallback. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Simplify to one install path. The uxd-workshop skills are plain markdown files — the generic |
||
| if command -v claude &>/dev/null; then | ||
| if ! claude plugins marketplace list 2>/dev/null | grep -q "uxd-ai-helpers"; then | ||
| echo " Adding UXD AI Skills marketplace..." | ||
| claude plugins marketplace add "$UXD_MARKETPLACE" 2>/dev/null || true | ||
| fi | ||
| for plugin in "${UXD_PLUGINS[@]}"; do | ||
| if ! claude plugins list 2>/dev/null | grep -q "$plugin"; then | ||
| echo " Installing ${plugin} plugin (UXD AI Skills)..." | ||
| claude plugins install "${plugin}@uxd-ai-helpers" 2>/dev/null || true | ||
|
jpuzz0 marked this conversation as resolved.
Outdated
|
||
| fi | ||
| done | ||
| else | ||
| install_uxd_skills "$SKILLS_DIR" | ||
| fi | ||
|
jpuzz0 marked this conversation as resolved.
Outdated
|
||
| } | ||
|
|
||
| install_gemini() { | ||
|
|
@@ -283,6 +343,7 @@ install_gemini() { | |
| ln -sfn "${INSTALL_DIR}/${wf}" "${SKILLS_DIR}/${wf}" | ||
| echo " Linked ${SKILLS_DIR}/${wf} -> ${INSTALL_DIR}/${wf} ($SCOPE)" | ||
| done | ||
| install_uxd_skills "$SKILLS_DIR" | ||
| } | ||
|
|
||
| # --- main --- | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,121 @@ | ||
| # Research Workflow | ||
|
|
||
| A UX research workflow that takes a feature request through discovery, user research, prototyping, and heuristic evaluation to produce a validated design handoff artifact for implementation. | ||
|
|
||
| ## Phase Flow | ||
|
|
||
| ```mermaid | ||
| graph TD | ||
| ingest([ingest]) --> investigate | ||
| investigate --> prototype | ||
| prototype --> evaluate | ||
| evaluate -->|iterate| prototype | ||
| evaluate -->|ready| handoff | ||
| ``` | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| | Tool | Required | Purpose | | ||
| |------|----------|---------| | ||
| | Jira access (MCP or CLI) | For `/ingest` | Fetch issue details for problem framing | | ||
| | UXD marketplace plugins | For `/prototype`, `/evaluate` | Prototyping and heuristic evaluation | | ||
|
jpuzz0 marked this conversation as resolved.
Outdated
jpuzz0 marked this conversation as resolved.
Outdated
|
||
|
|
||
| ## Phases | ||
|
|
||
| | Phase | Command | Purpose | Artifact(s) | | ||
| |-------|---------|---------|-------------| | ||
| | Ingest | `/ingest` | Frame the problem, identify user groups, survey landscape | `01-discovery.md` | | ||
| | Investigate | `/investigate` | Conduct user research, synthesize findings | `02-research.md` | | ||
| | Prototype | `/prototype` | Generate design prototypes from research | `03-prototype/` | | ||
| | Evaluate | `/evaluate` | Heuristic evaluation and usability assessment | `04-evaluation.md` | | ||
| | Handoff | `/handoff` | Produce implementation-ready design spec | `05-handoff.md` | | ||
|
|
||
| ## Typical Flow | ||
|
|
||
| ```text | ||
| /ingest EDM-1234 | ||
| → frames the problem, identifies user groups | ||
| → surveys competitive landscape | ||
| → writes .artifacts/research/EDM-1234/01-discovery.md | ||
|
|
||
| /investigate | ||
| → conducts user research (interviews, surveys, analytics) | ||
| → synthesizes findings into themed insights | ||
| → writes 02-research.md | ||
|
|
||
| /prototype | ||
| → generates design prototypes informed by research | ||
| → uses uxd-prototype-create skill when available | ||
| → writes 03-prototype/ (files + prototype-notes.md) | ||
|
|
||
| /evaluate | ||
| → runs heuristic evaluation against prototype | ||
| → uses uxd-research-heuristic-eval skill when available | ||
| → writes 04-evaluation.md | ||
| → loops back to /prototype if critical issues found | ||
|
|
||
| /handoff | ||
| → synthesizes all artifacts into implementation spec | ||
| → maps UI elements to design system components | ||
| → writes 05-handoff.md | ||
| ``` | ||
|
|
||
| ## Artifacts | ||
|
|
||
| All artifacts are stored in `.artifacts/research/{issue-key}/`. | ||
|
|
||
| ```text | ||
| .artifacts/research/EDM-1234/ | ||
| 01-discovery.md (problem framing, user groups, landscape) | ||
| 02-research.md (research findings, insights, recommendations) | ||
| 03-prototype/ (prototype files, design rationale) | ||
| prototype-notes.md (design decisions, user stories covered) | ||
| 04-evaluation.md (heuristic eval report, readiness assessment) | ||
| 05-handoff.md (implementation spec, component mapping, AC) | ||
| ``` | ||
|
|
||
| ## UXD Marketplace Skills | ||
|
|
||
| This workflow uses skills from the [UXD AI Skills marketplace](https://github.com/rh-uxd/ai-helpers). All skills degrade gracefully — the workflow functions without them. | ||
|
|
||
| | Skill | Plugin | Used by | | ||
| |-------|--------|---------| | ||
| | `uxd-research-heuristic-eval` | `uxd-workshop` | `/evaluate` | | ||
| | `uxd-evaluate-design-heuristics` | `uxd-workshop` | `/evaluate` | | ||
| | `uxd-prototype-evaluate` | `uxd-workshop` | `/evaluate` | | ||
| | `uxd-prototype-create` | `uxd-workshop` | `/prototype` | | ||
| | `uxd-figma-read` | `uxd-workshop` | `/prototype` | | ||
|
|
||
| ## Directory Structure | ||
|
|
||
| ```text | ||
| research/ | ||
| ├── SKILL.md # Workflow entry point | ||
| ├── guidelines.md # Behavioral rules and guardrails | ||
| ├── README.md # This file | ||
| ├── skills/ | ||
| │ ├── controller.md # Phase dispatcher and transitions | ||
| │ ├── ingest.md # Frame problem, identify user groups | ||
| │ ├── investigate.md # Conduct user research | ||
| │ ├── prototype.md # Generate design prototypes | ||
| │ ├── evaluate.md # Heuristic evaluation | ||
| │ └── handoff.md # Design-to-implementation spec | ||
| └── commands/ | ||
| ├── ingest.md # /ingest command | ||
| ├── investigate.md # /investigate command | ||
| ├── prototype.md # /prototype command | ||
| ├── evaluate.md # /evaluate command | ||
| └── handoff.md # /handoff command | ||
| ``` | ||
|
|
||
| ## Getting Started | ||
|
|
||
| ```bash | ||
| # Install the workflow | ||
| ./install.sh claude --workflows research | ||
|
|
||
| # Or install all workflows | ||
| ./install.sh all | ||
| ``` | ||
|
|
||
| Then in your project, run the `research` workflow's `ingest` command for your Jira issue or feature description. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| --- | ||
| name: research | ||
| version: 0.1.0 | ||
| description: >- | ||
| UX research workflow that takes a feature request through discovery, | ||
| user research, prototyping, and heuristic evaluation to produce a | ||
| validated design handoff artifact for implementation. | ||
| Use when conducting UX research, creating prototypes for evaluation, | ||
| running heuristic evaluations, or preparing design handoffs. | ||
| Activated by commands: /ingest, /investigate, /prototype, /evaluate, /handoff. | ||
|
jpuzz0 marked this conversation as resolved.
Outdated
|
||
| --- | ||
| # Research Workflow Orchestrator | ||
|
|
||
| ## Quick Start | ||
|
|
||
| 1. If the user invoked a specific command (e.g., `/prototype`, `/evaluate`), | ||
| read `skills/{command}.md` and follow it. | ||
| 2. Otherwise, read `skills/controller.md` to load the workflow controller: | ||
| - If the user provided a Jira issue key or URL, execute the `/ingest` phase | ||
| - Otherwise, execute the first phase the user requests | ||
|
|
||
| If a step fails or produces unexpected output, stop and report the error to | ||
| the user. Do not advance to the next phase. Offer to retry the failed step or | ||
| escalate. | ||
|
|
||
| For principles, hard limits, and escalation rules, see `guidelines.md`. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| --- | ||
| name: research:evaluate | ||
| description: "Run heuristic evaluation and usability assessment against prototypes" | ||
| --- | ||
| # /evaluate | ||
|
|
||
| Read `../skills/controller.md` and follow it. | ||
|
|
||
| Dispatch the **evaluate** phase. Context: | ||
|
|
||
| $ARGUMENTS |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| --- | ||
| name: research:handoff | ||
| description: "Synthesize all research into an implementation-ready handoff spec" | ||
| --- | ||
| # /handoff | ||
|
|
||
| Read `../skills/controller.md` and follow it. | ||
|
|
||
| Dispatch the **handoff** phase. Context: | ||
|
|
||
| $ARGUMENTS |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| --- | ||
| name: research:ingest | ||
| description: "Frame the problem, identify user groups, and survey the competitive landscape" | ||
| --- | ||
| # /ingest | ||
|
|
||
| Read `../skills/controller.md` and follow it. | ||
|
|
||
| Dispatch the **ingest** phase. Context: | ||
|
|
||
| $ARGUMENTS |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| --- | ||
| name: research:investigate | ||
| description: "Conduct user research, gather data, and synthesize findings into insights" | ||
| --- | ||
| # /investigate | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Phase name alignment: This phase fills the same structural role as Renaming |
||
|
|
||
| Read `../skills/controller.md` and follow it. | ||
|
|
||
| Dispatch the **investigate** phase. Context: | ||
|
|
||
| $ARGUMENTS | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| --- | ||
| name: research:prototype | ||
| description: "Generate design prototypes informed by research findings" | ||
| --- | ||
| # /prototype | ||
|
|
||
| Read `../skills/controller.md` and follow it. | ||
|
|
||
| Dispatch the **prototype** phase. Context: | ||
|
|
||
| $ARGUMENTS |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| # Research Workflow Guidelines | ||
|
|
||
| ## Principles | ||
|
|
||
| - The researcher drives the process. The AI assists with synthesis, generation, | ||
| and evaluation — it does not make research decisions autonomously. | ||
| - Every design decision must trace to research findings. Do not invent user | ||
| needs or fabricate evidence. | ||
| - **Evidence over assumption.** When research data is unavailable, say so | ||
| explicitly. "We don't have data on this" is valuable. | ||
| - Preserve the researcher's terminology and domain language. Do not rewrite | ||
| their findings into generic UX jargon. | ||
| - Prototypes are conversation starters, not final designs. A rough prototype | ||
| the researcher can react to is more valuable than a polished one they can't. | ||
| - Heuristic evaluation supplements — never replaces — real user testing. | ||
| AI-driven evaluation catches systematic issues; only humans catch context- | ||
| dependent usability problems. | ||
|
jpuzz0 marked this conversation as resolved.
Outdated
|
||
|
|
||
| ## Hard Limits | ||
|
|
||
| - No auto-advancing between phases. Always wait for the researcher. | ||
| - No fabricated research findings. Every insight must trace to data the | ||
| researcher provided or desk research the AI performed with citations. | ||
| - No storing PII in artifacts. User interview data should be anonymized | ||
| before inclusion. | ||
| - No publishing prototypes or artifacts without explicit researcher approval. | ||
| - No skipping the human gate between phases. Present findings, get confirmation. | ||
|
|
||
| ## Safety | ||
|
|
||
| - Show your work before finalizing. After each phase, present artifacts for | ||
| review — do not assume they're ready. | ||
| - Flag assumptions explicitly. If research data doesn't cover something and | ||
| you filled it in, mark it as an assumption. | ||
| - Indicate confidence levels on recommendations. Distinguish between findings | ||
| backed by multiple data sources and single-source observations. | ||
|
|
||
| ## Quality | ||
|
|
||
| - Artifacts should be structured for both human reading and machine | ||
| consumption. Use consistent markdown with frontmatter. | ||
|
jpuzz0 marked this conversation as resolved.
Outdated
|
||
| - Handoff artifacts must be detailed enough for a developer to implement | ||
| without additional design consultation. | ||
| - Heuristic evaluation findings must include severity ratings and specific | ||
| remediation guidance. | ||
|
|
||
| ## Escalation | ||
|
|
||
| Stop and request human guidance when: | ||
|
|
||
| - Research reveals contradictory user needs with no clear resolution | ||
| - The scope appears too broad for a single research cycle (suggest splitting) | ||
| - Prototype feedback is ambiguous or contradictory | ||
| - Heuristic evaluation reveals critical accessibility violations that may | ||
| require architectural changes | ||
| - The researcher's domain expertise is needed to interpret data | ||
|
|
||
| ## Working With the Project | ||
|
|
||
| This workflow gets deployed into different projects. Respect the target project: | ||
|
|
||
| - Read and follow the project's own `AGENTS.md` or `CLAUDE.md` files | ||
| - Adopt the project's conventions for document formatting if they exist | ||
| - Use the project's design system and component library for prototyping | ||
Uh oh!
There was an error while loading. Please reload this page.