create-yss-spec 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/template/.codex/skills/data-analytics/.app.json +84 -0
- package/template/.codex/skills/data-analytics/.codex-plugin/plugin.json +66 -0
- package/template/.codex/skills/data-analytics/.mcp.json +30 -0
- package/template/.codex/skills/data-analytics/AGENTS.md +20 -0
- package/template/.codex/skills/data-analytics/DEPENDENCIES.MD +27 -0
- package/template/.codex/skills/data-analytics/README.md +60 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html +16 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part001 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part002 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part003 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part004 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part005 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part006 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html +16 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part001 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part002 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part003 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part004 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part005 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part006 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part007 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-small.svg +5 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html +16 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part001 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part002 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part003 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part004 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience.png +0 -0
- package/template/.codex/skills/data-analytics/assets/datascience.svg +10 -0
- package/template/.codex/skills/data-analytics/mcp/server.cjs +2963 -0
- package/template/.codex/skills/data-analytics/package-lock.json +3048 -0
- package/template/.codex/skills/data-analytics/package.json +43 -0
- package/template/.codex/skills/data-analytics/scripts/normalize-widget-assets.mjs +75 -0
- package/template/.codex/skills/data-analytics/skills/analyze-data-quality/SKILL.md +160 -0
- package/template/.codex/skills/data-analytics/skills/analyze-data-quality/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/SKILL.md +148 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/bi-platform-dashboard.md +18 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/html-dashboard.md +24 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/mcp-artifact-dashboard.md +71 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/streamlit-dashboard.md +85 -0
- package/template/.codex/skills/data-analytics/skills/build-report/SKILL.md +207 -0
- package/template/.codex/skills/data-analytics/skills/build-report/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/assets/executive-report-shell.html +70 -0
- package/template/.codex/skills/data-analytics/skills/build-report/assets/technical-report-shell.html +66 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/SKILL.md +118 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/__init__.py +1 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/cli.py +57 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/constants.py +61 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/docx_writer.py +362 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/html_parser.py +829 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/model.py +30 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/plan.py +129 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/quality.py +374 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/rendering.py +613 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/table_utils.py +54 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/utils.py +16 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc_plan.py +9 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/SKILL.md +78 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/scripts/report_to_google_slides.py +2379 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/SKILL.md +88 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/specifications/executive-report.md +97 -0
- package/template/.codex/skills/data-analytics/skills/build-report/specifications/mcp-app-report.md +59 -0
- package/template/.codex/skills/data-analytics/skills/build-report/specifications/technical-report.md +75 -0
- package/template/.codex/skills/data-analytics/skills/design-kpis/SKILL.md +103 -0
- package/template/.codex/skills/data-analytics/skills/design-kpis/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/gather-business-context/SKILL.md +68 -0
- package/template/.codex/skills/data-analytics/skills/gather-business-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/index/SKILL.md +251 -0
- package/template/.codex/skills/data-analytics/skills/index/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/SKILL.md +131 -0
- package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/SKILL.md +141 -0
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/references/report-templates.md +32 -0
- package/template/.codex/skills/data-analytics/skills/market-sizing/SKILL.md +106 -0
- package/template/.codex/skills/data-analytics/skills/market-sizing/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/metric-diagnostics/SKILL.md +130 -0
- package/template/.codex/skills/data-analytics/skills/metric-diagnostics/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/product-business-analysis/SKILL.md +141 -0
- package/template/.codex/skills/data-analytics/skills/product-business-analysis/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/SKILL.md +178 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/agents/openai.yaml +9 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/assets/file-spreadsheet.png +0 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/charts.md +31 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/references/artifact_tool_api.md +466 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/style_guidelines.md +99 -0
- package/template/.codex/skills/data-analytics/skills/user-context/SKILL.md +195 -0
- package/template/.codex/skills/data-analytics/skills/user-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/automation-config.md +26 -0
- package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/source-category-config.json +51 -0
- package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/user-context-config.md +66 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/automation.md +69 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-examples.md +204 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-state-template.json +87 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding.md +497 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/connector-playbook.md +74 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/setup.md +65 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/skill-template.md +160 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/source-intake.md +75 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/weekly-polling-automation.md +96 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/source-category-runtime.md +263 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/data_analytics_preflight.py +1460 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/init_user_context_state.py +128 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/reset_user_context_state.py +101 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/validate_user_context_preflight.py +499 -0
- package/template/.codex/skills/data-analytics/skills/user-context/tests/test_state_helpers.py +978 -0
- package/template/.codex/skills/data-analytics/skills/validate-data/SKILL.md +190 -0
- package/template/.codex/skills/data-analytics/skills/validate-data/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/visualize-data/SKILL.md +157 -0
- package/template/.codex/skills/data-analytics/skills/visualize-data/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/visualize-data/references/seaborn-templates.md +774 -0
- package/template/.codex/skills/data-analytics/src/DESIGN.md +222 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/App.tsx +3666 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/analytics-layout.test.mjs +136 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartFrame.tsx +54 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartLegend.tsx +96 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartRenderer.tsx +1647 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartTooltip.tsx +245 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-app-helpers.tsx +462 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-capabilities.ts +107 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-compatibility.ts +164 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-contract.ts +192 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-theme.ts +203 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-tokens.css +619 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-transforms.ts +402 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/fonts/SystemSansVariableVF.woff2 +0 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/imageExport.ts +370 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/layout/AnalyticsLayoutCanvas.tsx +536 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/layout/RichMarkdown.tsx +681 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/layout/analyticsLayoutCore.ts +164 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/main.tsx +21 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/chart_contract.py +472 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/check_analytics_app_runtime_links.py +75 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/design_contract.py +142 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/package_utils.py +142 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/tests/test_package_utils.py +377 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/styles.css +3468 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.d.ts +44 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.jsx +639 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tables/data-table.css +327 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tokens.css +225 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/types.ts +204 -0
- package/template/.codex/skills/data-analytics/src/analytics-app-core.md +85 -0
- package/template/.codex/skills/data-analytics/src/codex-style-contract.md +30 -0
- package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.html +12 -0
- package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.jsx +1008 -0
- package/template/.codex/skills/data-analytics/src/datascience-chart-widget.css +2117 -0
- package/template/.codex/skills/data-analytics/src/datascience-chart-widget.html +122 -0
- package/template/.codex/skills/data-analytics/src/datascience-chart-widget.js +3588 -0
- package/template/.codex/skills/data-analytics/src/datascience-table-widget.css +483 -0
- package/template/.codex/skills/data-analytics/src/datascience-table-widget.html +32 -0
- package/template/.codex/skills/data-analytics/src/datascience-table-widget.js +333 -0
- package/template/.codex/skills/data-analytics/src/mcp-host.js +153 -0
- package/template/.codex/skills/data-analytics/src/recharts-config.js +315 -0
- package/template/.codex/skills/data-analytics/src/recharts-renderer.jsx +294 -0
- package/template/.codex/skills/data-analytics/src/sql-source-view.css +33 -0
- package/template/.codex/skills/data-analytics/src/sql-source-view.js +157 -0
- package/template/.codex/skills/data-analytics/src/styles/codex-theme.css +121 -0
- package/template/.codex/skills/data-analytics/src/table-renderer.jsx +28 -0
- package/template/.codex/skills/data-analytics/tests/chart-transforms.test.mjs +87 -0
- package/template/.codex/skills/data-analytics/tests/funnel-smoke.html +105 -0
- package/template/.codex/skills/data-analytics/tests/inline-widget-compare.html +233 -0
- package/template/.codex/skills/data-analytics/tests/mcp-server.test.mjs +1500 -0
- package/template/.codex/skills/data-analytics/tests/native-style-contract.test.mjs +219 -0
- package/template/.codex/skills/data-analytics/tests/recharts-config.test.mjs +144 -0
- package/template/.codex/skills/data-analytics/tests/recharts-renderer.test.mjs +11 -0
- package/template/.codex/skills/data-analytics/tests/rich-markdown.test.mjs +54 -0
- package/template/.codex/skills/data-analytics/tests/widget-render-harness.html +321 -0
- package/template/.codex/skills/data-analytics/tsconfig.json +19 -0
- package/template/.codex/skills/data-analytics/vite.config.ts +46 -0
- package/template/.codex/skills/product-design/.app.json +7 -0
- package/template/.codex/skills/product-design/.codex-plugin/plugin.json +50 -0
- package/template/.codex/skills/product-design/README.md +50 -0
- package/template/.codex/skills/product-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/product-design/assets/composerIcon.svg +9 -0
- package/template/.codex/skills/product-design/assets/logo.png +0 -0
- package/template/.codex/skills/product-design/package.json +11 -0
- package/template/.codex/skills/product-design/references/browser-order.md +9 -0
- package/template/.codex/skills/product-design/references/communication-protocol.md +45 -0
- package/template/.codex/skills/product-design/references/critical-overrides.md +58 -0
- package/template/.codex/skills/product-design/references/local-prototype-preflight.md +16 -0
- package/template/.codex/skills/product-design/scripts/bootstrap-prototype.mjs +147 -0
- package/template/.codex/skills/product-design/skills/audit/SKILL.md +159 -0
- package/template/.codex/skills/product-design/skills/audit/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/audit/references/design-audit-framework.md +73 -0
- package/template/.codex/skills/product-design/skills/design-qa/SKILL.md +133 -0
- package/template/.codex/skills/product-design/skills/design-qa/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/design-qa/references/qa-rubric.md +61 -0
- package/template/.codex/skills/product-design/skills/get-context/SKILL.md +81 -0
- package/template/.codex/skills/product-design/skills/get-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/ideate/SKILL.md +179 -0
- package/template/.codex/skills/product-design/skills/ideate/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +105 -0
- package/template/.codex/skills/product-design/skills/image-to-code/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/index/SKILL.md +126 -0
- package/template/.codex/skills/product-design/skills/index/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/prototype/SKILL.md +128 -0
- package/template/.codex/skills/product-design/skills/prototype/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/prototype/references/existing-codebase-edits.md +18 -0
- package/template/.codex/skills/product-design/skills/research/SKILL.md +92 -0
- package/template/.codex/skills/product-design/skills/research/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/share/SKILL.md +41 -0
- package/template/.codex/skills/product-design/skills/share/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/url-to-code/SKILL.md +124 -0
- package/template/.codex/skills/product-design/skills/url-to-code/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/user-context/SKILL.md +147 -0
- package/template/.codex/skills/product-design/skills/user-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/user-context/plugin-author-config/user-context-template.md +63 -0
- package/template/.codex/skills/product-design/skills/user-context/references/onboarding.md +66 -0
- package/template/.codex/skills/product-design/skills/user-context/scripts/init_user_context.py +86 -0
- package/template/.codex/skills/product-design/skills/user-context/scripts/user_context_preflight.py +204 -0
- package/template/.codex/skills/product-design/templates/prototype/AGENTS.md +7 -0
- package/template/.codex/skills/product-design/templates/prototype/index.html +12 -0
- package/template/.codex/skills/product-design/templates/prototype/package.json +18 -0
- package/template/.codex/skills/product-design/templates/prototype/src/App.jsx +5 -0
- package/template/.codex/skills/product-design/templates/prototype/src/main.jsx +10 -0
- package/template/.codex/skills/product-design/templates/prototype/src/styles.css +13 -0
- package/template/.codex/skills/product-design/templates/prototype/vite.config.mjs +14 -0
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +3 -3
- package/template/AGENTS.md +3 -3
- package/template/docs/adr/adr-product-design-prototype-entrypoint.md +54 -0
- package/template/docs/api/templates/openapi-draft-review-checklist.md +4 -2
- package/template/docs/design/README.md +8 -4
- package/template/docs/design/templates/interaction-spec-template.md +4 -1
- package/template/docs/design/templates/prototype-confirmation-template.md +57 -0
- package/template/docs/design/templates/prototype-review-checklist.md +6 -2
- package/template/docs/design/templates/state-matrix-template.md +1 -1
- package/template/docs/process/harness-executive-blueprint.md +2 -1
- package/template/docs/process/harness-process-tailoring.md +1 -1
- package/template/docs/process/harness-work-unit-map.md +1 -1
- package/template/docs/process/lifecycle-artifact-map.md +4 -3
- package/template/docs/process/product-prototype-workflow.md +82 -0
- package/template/docs/user-guide/product-lifecycle-workflow.md +2 -2
- package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +15 -10
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
cpSync,
|
|
4
|
+
existsSync,
|
|
5
|
+
mkdirSync,
|
|
6
|
+
readdirSync,
|
|
7
|
+
readFileSync,
|
|
8
|
+
statSync,
|
|
9
|
+
writeFileSync,
|
|
10
|
+
} from "node:fs";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
|
|
14
|
+
const scriptPath = fileURLToPath(import.meta.url);
|
|
15
|
+
const pluginRoot = path.resolve(path.dirname(scriptPath), "..");
|
|
16
|
+
const templateRoot = path.join(pluginRoot, "templates", "prototype");
|
|
17
|
+
|
|
18
|
+
function parseArgs(argv) {
|
|
19
|
+
const args = {};
|
|
20
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
21
|
+
const arg = argv[index];
|
|
22
|
+
if (!arg.startsWith("--")) continue;
|
|
23
|
+
const raw = arg.slice(2);
|
|
24
|
+
const [key, inlineValue] = raw.split("=", 2);
|
|
25
|
+
if (inlineValue !== undefined) {
|
|
26
|
+
args[key] = inlineValue;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const next = argv[index + 1];
|
|
30
|
+
if (next && !next.startsWith("--")) {
|
|
31
|
+
args[key] = next;
|
|
32
|
+
index += 1;
|
|
33
|
+
} else {
|
|
34
|
+
args[key] = true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return args;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function slugify(value) {
|
|
41
|
+
return (
|
|
42
|
+
String(value || "prototype")
|
|
43
|
+
.trim()
|
|
44
|
+
.toLowerCase()
|
|
45
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
46
|
+
.replace(/^-|-$/g, "") || "prototype"
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function readText(filePath) {
|
|
51
|
+
return existsSync(filePath) ? readFileSync(filePath, "utf8") : "";
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function writeText(filePath, value) {
|
|
55
|
+
mkdirSync(path.dirname(filePath), { recursive: true });
|
|
56
|
+
writeFileSync(filePath, value, "utf8");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function copyDir(source, target) {
|
|
60
|
+
cpSync(source, target, {
|
|
61
|
+
recursive: true,
|
|
62
|
+
force: true,
|
|
63
|
+
filter(current) {
|
|
64
|
+
const name = path.basename(current);
|
|
65
|
+
return !["node_modules", "dist", ".vite", ".turbo", ".DS_Store"].includes(name);
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function hasFiles(dir) {
|
|
71
|
+
return existsSync(dir) && readdirSync(dir).length > 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function ensureEmptyDest(dest) {
|
|
75
|
+
if (existsSync(dest) && statSync(dest).isFile()) {
|
|
76
|
+
throw new Error(`Destination exists and is not a directory: ${dest}`);
|
|
77
|
+
}
|
|
78
|
+
if (hasFiles(dest)) {
|
|
79
|
+
throw new Error(`Destination exists and is not empty: ${dest}`);
|
|
80
|
+
}
|
|
81
|
+
mkdirSync(dest, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function nearestPrototypeRoot(args) {
|
|
85
|
+
const root = args.root || args.dest || process.cwd();
|
|
86
|
+
return path.resolve(root);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function packageJsonPath(root) {
|
|
90
|
+
return path.join(root, "package.json");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function readPackage(root) {
|
|
94
|
+
const filePath = packageJsonPath(root);
|
|
95
|
+
if (!existsSync(filePath)) return null;
|
|
96
|
+
return JSON.parse(readText(filePath));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function writePackage(root, pkg) {
|
|
100
|
+
writeText(packageJsonPath(root), `${JSON.stringify(pkg, null, 2)}\n`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function setPackageName(root) {
|
|
104
|
+
const pkg = readPackage(root);
|
|
105
|
+
if (!pkg) return;
|
|
106
|
+
pkg.name = slugify(path.basename(root));
|
|
107
|
+
writePackage(root, pkg);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function setLocalNpmCache(root) {
|
|
111
|
+
writeText(path.join(root, ".npmrc"), [
|
|
112
|
+
`cache=${path.join(root, ".npm-cache")}`,
|
|
113
|
+
"fund=false",
|
|
114
|
+
"audit=false",
|
|
115
|
+
"",
|
|
116
|
+
].join("\n"));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function createNew(root) {
|
|
120
|
+
if (!existsSync(templateRoot)) {
|
|
121
|
+
throw new Error(`Bundled Product Design prototype template is missing: ${templateRoot}`);
|
|
122
|
+
}
|
|
123
|
+
ensureEmptyDest(root);
|
|
124
|
+
copyDir(templateRoot, root);
|
|
125
|
+
setPackageName(root);
|
|
126
|
+
setLocalNpmCache(root);
|
|
127
|
+
return { status: "created", root };
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function main() {
|
|
131
|
+
const args = parseArgs(process.argv.slice(2));
|
|
132
|
+
const root = nearestPrototypeRoot(args);
|
|
133
|
+
|
|
134
|
+
if (args.mode && args.mode !== "new") {
|
|
135
|
+
const mode = String(args.mode);
|
|
136
|
+
throw new Error(`Unknown mode: ${mode}`);
|
|
137
|
+
}
|
|
138
|
+
const result = createNew(root);
|
|
139
|
+
console.log(JSON.stringify(result, null, 2));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
try {
|
|
143
|
+
main();
|
|
144
|
+
} catch (error) {
|
|
145
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit
|
|
3
|
+
description: "Audit or critique a product flow, journey, workflow, funnel, onboarding path, checkout path, settings path, screen, or multi-step product experience by capturing screenshots first, placing them in Figma or a local folder, then reporting UX, design, and accessibility findings from that evidence. Use when the user asks to audit, critique, review, inspect, assess, or evaluate a product experience."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Audit
|
|
7
|
+
|
|
8
|
+
Use this skill when the user wants to audit or critique a product flow, journey, funnel, onboarding path, checkout path, settings path, screen, or other product experience.
|
|
9
|
+
|
|
10
|
+
The output is not a loose opinion. The output is:
|
|
11
|
+
|
|
12
|
+
- Screenshots of the flow
|
|
13
|
+
- Those screenshots placed in the chosen destination
|
|
14
|
+
- A numbered step list
|
|
15
|
+
- UX and design findings tied to steps or screenshots
|
|
16
|
+
- Accessibility risks tied to steps or screenshots
|
|
17
|
+
- Clear limits on what could not be checked from screenshots alone
|
|
18
|
+
|
|
19
|
+
## Critical Overrides
|
|
20
|
+
|
|
21
|
+
- Refer to the Plugin router [$index](../index/SKILL.md) before proceeding.
|
|
22
|
+
- Follow [$critical-overrides](../../references/critical-overrides.md).
|
|
23
|
+
|
|
24
|
+
## User Context
|
|
25
|
+
|
|
26
|
+
Before starting, load [$user-context](../user-context/SKILL.md) and run its preflight script when local shell access is available.
|
|
27
|
+
|
|
28
|
+
Use saved product URLs, Figma files, screenshots, reference images, codebase paths, Storybook, tokens, design systems, brand assets, component refs, browser preferences, and share targets as grounding material when relevant.
|
|
29
|
+
|
|
30
|
+
Do not inspect every saved reference. Inspect only what the current task needs.
|
|
31
|
+
|
|
32
|
+
## Route
|
|
33
|
+
|
|
34
|
+
Before auditing:
|
|
35
|
+
|
|
36
|
+
1. Identify the product or surface.
|
|
37
|
+
2. Identify the flow or task.
|
|
38
|
+
3. Identify the destination.
|
|
39
|
+
4. Choose the capture tool.
|
|
40
|
+
5. Capture the flow.
|
|
41
|
+
6. Save, inspect, place, and annotate each screenshot.
|
|
42
|
+
|
|
43
|
+
Destination rules:
|
|
44
|
+
|
|
45
|
+
- If the user names Figma, use Figma.
|
|
46
|
+
- If the user names a local folder, use that folder.
|
|
47
|
+
- If the destination is missing, ask one question: "Should I put this in Figma or a local folder?"
|
|
48
|
+
|
|
49
|
+
Capture rules:
|
|
50
|
+
|
|
51
|
+
- Use the Codex in-app Browser first.
|
|
52
|
+
- If Browser cannot access, control, or screenshot the target, use Chrome [Internal].
|
|
53
|
+
- If Browser and Chrome cannot complete the capture, ask before using Playwright as the fallback.
|
|
54
|
+
- If none of those can capture valid screenshots or control the flow, stop and report the blocker.
|
|
55
|
+
|
|
56
|
+
Browser capture order:
|
|
57
|
+
|
|
58
|
+
1. Load the Browser skill before browser work.
|
|
59
|
+
2. Connect to the browser and use the current tab when it already shows the target.
|
|
60
|
+
3. Do not reload or navigate away unless the audit needs a fresh start.
|
|
61
|
+
4. Observe the visible state before acting.
|
|
62
|
+
5. Before each click, type, or key press, use the latest DOM snapshot to target one clear control.
|
|
63
|
+
6. After each action, take the cheapest fresh check that proves what changed: DOM for structure, screenshot for visual state.
|
|
64
|
+
7. Save and inspect the accepted screenshot before using it as audit evidence.
|
|
65
|
+
|
|
66
|
+
Figma rules:
|
|
67
|
+
|
|
68
|
+
- If Figma is the destination, load the required Figma skills before creating or editing the file.
|
|
69
|
+
- Keep a local copy of every screenshot even when Figma succeeds.
|
|
70
|
+
- Do not upload a screenshot to Figma until the saved local file has been inspected and accepted.
|
|
71
|
+
- Figma is not done until the screenshots are visibly placed in the Figma output.
|
|
72
|
+
- After placing screenshots in Figma, render or inspect the board and confirm every flow step has the correct screenshot visible in the correct card.
|
|
73
|
+
- If an image is missing, misplaced, blank, or only uploaded as an unused asset, fix it before handoff.
|
|
74
|
+
- If Figma tools cannot create files or place images, save the audit locally and explain the missing Figma capability.
|
|
75
|
+
|
|
76
|
+
Evidence rules:
|
|
77
|
+
|
|
78
|
+
- Use only evidence captured in the current audit run.
|
|
79
|
+
- Do not use memory, prior chats, old traces, cached screenshots, or prior generated artifacts as audit evidence unless the user explicitly provides them.
|
|
80
|
+
- Do not audit until the product, flow, destination, and capture tool are known.
|
|
81
|
+
- Do not claim full accessibility compliance from screenshots alone.
|
|
82
|
+
|
|
83
|
+
## Capture And Audit The Flow
|
|
84
|
+
|
|
85
|
+
You are an expert design, UX, and accessibility auditor. For each step in the flow, capture what the user sees, observe how the screen behaves, inspect the screenshot, and write audit notes before moving on.
|
|
86
|
+
|
|
87
|
+
Follow [references/design-audit-framework.md](references/design-audit-framework.md) when deciding what to inspect and how to describe strengths, UX issues, accessibility risks, limits, and recommendations.
|
|
88
|
+
|
|
89
|
+
Screenshot source rule:
|
|
90
|
+
|
|
91
|
+
- Use the screenshot you actually saw.
|
|
92
|
+
- Save that exact screenshot to the local audit folder.
|
|
93
|
+
- Open or inspect the saved file before accepting it.
|
|
94
|
+
- If the saved file shows the wrong window, wrong state, blank page, crop, or loading screen, reject it and capture again.
|
|
95
|
+
- When Figma is the destination, upload that accepted local file.
|
|
96
|
+
- After upload, verify the Figma board shows the same step.
|
|
97
|
+
- Do not replace a Browser, Chrome, or Computer Use screenshot with an OS screenshot unless you first prove the saved file shows the same window and state.
|
|
98
|
+
|
|
99
|
+
For every step:
|
|
100
|
+
|
|
101
|
+
1. Move to the next step in the requested flow.
|
|
102
|
+
2. Wait until the screen is loaded and visually stable.
|
|
103
|
+
3. Check for loading spinners, blank areas, login walls, error pages, blocked states, cookie dialogs, and half-rendered content.
|
|
104
|
+
4. Capture the screenshot.
|
|
105
|
+
5. Inspect the screenshot before accepting it.
|
|
106
|
+
6. Reject the screenshot if it is blank, loading, cropped, blocked, or showing the wrong state.
|
|
107
|
+
7. Observe behavior that matters for the audit, such as navigation, focus, loading, validation, error handling, empty states, motion, and whether the next action is clear.
|
|
108
|
+
8. Write notes for that step.
|
|
109
|
+
9. In the notes, report strengths, UX issues, accessibility risks, and any limits that made the step difficult to audit.
|
|
110
|
+
10. Save accepted screenshots with numbered names, such as `01-start.png`, `02-form-filled.png`, and `03-confirmation.png`.
|
|
111
|
+
11. Inspect the saved screenshot file before upload or handoff.
|
|
112
|
+
12. Add each accepted screenshot to the chosen destination immediately.
|
|
113
|
+
13. Add the notes for that step to the chosen destination immediately.
|
|
114
|
+
|
|
115
|
+
If the destination is a local folder:
|
|
116
|
+
|
|
117
|
+
- Save screenshots in that folder.
|
|
118
|
+
- Save the notes in a file that can be shared at the end.
|
|
119
|
+
|
|
120
|
+
If the destination is Figma:
|
|
121
|
+
|
|
122
|
+
- Place screenshots in order, left to right on the same row, with 200px between each one. Go to a new row every 15 screenshots, and separate those rows by 600px.
|
|
123
|
+
- Underneath the screenshot, add text with the Step number and its name, and notes.
|
|
124
|
+
- Keep a local folder copy even when Figma succeeds.
|
|
125
|
+
- When you are done, wrap all of the assets you added in a Section and title the section.
|
|
126
|
+
|
|
127
|
+
Acceptance checks:
|
|
128
|
+
|
|
129
|
+
- Every important step in the requested flow has a valid screenshot or a named blocker.
|
|
130
|
+
- Screenshots are saved in order.
|
|
131
|
+
- Screenshots are placed in the chosen destination as they are captured.
|
|
132
|
+
- Notes are placed in the chosen destination as they are written.
|
|
133
|
+
- Every note points to the screenshot or step it describes.
|
|
134
|
+
- Notes explain strengths, UX issues, accessibility risks, and evidence limits when those apply.
|
|
135
|
+
- Accessibility risks say what can be seen from screenshots and what still needs testing.
|
|
136
|
+
- The final screenshot set and notes are enough to support the requested audit.
|
|
137
|
+
|
|
138
|
+
Blockers:
|
|
139
|
+
|
|
140
|
+
- The flow cannot be completed.
|
|
141
|
+
- A required step cannot be screenshotted.
|
|
142
|
+
- The source changes in a way that makes the flow unclear.
|
|
143
|
+
- Screenshots cannot be saved or placed in the destination.
|
|
144
|
+
- Notes cannot be written or placed in the destination.
|
|
145
|
+
- The requested claim would require evidence that screenshots cannot provide.
|
|
146
|
+
|
|
147
|
+
## Final Response
|
|
148
|
+
|
|
149
|
+
After the flow is captured and notes are written, list every step in the final response.
|
|
150
|
+
|
|
151
|
+
The final step list MUST include:
|
|
152
|
+
|
|
153
|
+
- step number
|
|
154
|
+
- short description of the step
|
|
155
|
+
- general health of that step
|
|
156
|
+
|
|
157
|
+
Also include where the full output was saved or placed.
|
|
158
|
+
|
|
159
|
+
Keep the language direct. Do not use broad design jargon when a plain phrase works.
|
package/template/.codex/skills/product-design/skills/audit/references/design-audit-framework.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Design Audit Framework
|
|
2
|
+
|
|
3
|
+
Use this structure for `audit`.
|
|
4
|
+
|
|
5
|
+
Use `audit` for systematic assessment across a broader experience, not for feedback on a single artifact.
|
|
6
|
+
|
|
7
|
+
## Audit modes
|
|
8
|
+
|
|
9
|
+
- `UX audit`
|
|
10
|
+
- `Accessibility audit`
|
|
11
|
+
- `Combined audit`
|
|
12
|
+
|
|
13
|
+
## UX audit lenses
|
|
14
|
+
|
|
15
|
+
- Task entry and discoverability
|
|
16
|
+
- Information architecture
|
|
17
|
+
- Interaction flow and friction
|
|
18
|
+
- Hierarchy and clarity
|
|
19
|
+
- Trust and reassurance
|
|
20
|
+
- Default states and empty states
|
|
21
|
+
- Copy and calls to action
|
|
22
|
+
- Consistency across the experience
|
|
23
|
+
|
|
24
|
+
## Accessibility audit lenses
|
|
25
|
+
|
|
26
|
+
- Perceivable content and contrast risks
|
|
27
|
+
- Semantic structure and reading order
|
|
28
|
+
- Keyboard access and focus behavior
|
|
29
|
+
- Target size and interaction affordances
|
|
30
|
+
- Labels, instructions, and error recovery
|
|
31
|
+
- Motion, timing, and state change communication
|
|
32
|
+
- Responsive reflow and zoom resilience
|
|
33
|
+
- Assistive-technology clarity and robustness
|
|
34
|
+
|
|
35
|
+
## UX audit output structure
|
|
36
|
+
|
|
37
|
+
1. `Audit scope`
|
|
38
|
+
2. `User goal`
|
|
39
|
+
3. `Strengths`
|
|
40
|
+
4. `Notable risks`
|
|
41
|
+
5. `Opportunity areas`
|
|
42
|
+
6. `Optional comparison context`
|
|
43
|
+
7. `Recommendations`
|
|
44
|
+
|
|
45
|
+
## Accessibility audit output structure
|
|
46
|
+
|
|
47
|
+
1. `Audit scope`
|
|
48
|
+
2. `Accessibility target`
|
|
49
|
+
3. `Confirmed strengths`
|
|
50
|
+
4. `Likely issues`
|
|
51
|
+
5. `WCAG-relevant considerations`
|
|
52
|
+
6. `Evidence limits and verification gaps`
|
|
53
|
+
7. `Recommendations`
|
|
54
|
+
|
|
55
|
+
## Combined audit output structure
|
|
56
|
+
|
|
57
|
+
1. `Audit scope`
|
|
58
|
+
2. `User goal and accessibility target`
|
|
59
|
+
3. `Strengths`
|
|
60
|
+
4. `UX risks`
|
|
61
|
+
5. `Accessibility risks`
|
|
62
|
+
6. `Opportunity areas`
|
|
63
|
+
7. `Evidence limits and verification gaps`
|
|
64
|
+
8. `Recommendations`
|
|
65
|
+
|
|
66
|
+
## Guardrails
|
|
67
|
+
|
|
68
|
+
- Focus on experience patterns, not business strategy.
|
|
69
|
+
- Keep comparator products optional; use them only when they sharpen the audit.
|
|
70
|
+
- Separate structural issues from polish issues.
|
|
71
|
+
- Tie recommendations back to the user goal, workflow, or accessibility outcome.
|
|
72
|
+
- Do not imply full WCAG compliance unless the user has provided the implementation details needed to support that claim.
|
|
73
|
+
- If the request is about a single screen, component, modal, or bounded interaction, keep the audit scoped to that surface.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-qa
|
|
3
|
+
description: "Internal prototype QA helper. Use only after a Product Design prototype, URL-to-code build, or image-to-code build has a source visual target and a rendered implementation to compare before handoff. Do not use for broad UX critique, design critique, product audits, or flow reviews; route those user-facing requests to audit."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Design QA
|
|
7
|
+
|
|
8
|
+
Use this internal helper to compare a prototype's source design against the rendered implementation before handoff.
|
|
9
|
+
|
|
10
|
+
Do not use this skill for broad UX critique, design critique, product audits, or flow reviews. Use [audit](../audit/SKILL.md) for those user-facing requests.
|
|
11
|
+
|
|
12
|
+
Use this skill before every Product Design build handoff.
|
|
13
|
+
|
|
14
|
+
A passing QA run requires both:
|
|
15
|
+
|
|
16
|
+
- a source visual target: Figma node, image, screenshot, mockup, or source capture
|
|
17
|
+
- a rendered implementation: local URL, deployed URL, app screen, component, or screenshot
|
|
18
|
+
|
|
19
|
+
If either artifact cannot be opened, captured, or compared, write `design-qa.md` with `final result: blocked` and name the blocker. Do not let the build skill hand off as done.
|
|
20
|
+
|
|
21
|
+
## Critical Overrides
|
|
22
|
+
|
|
23
|
+
Follow [critical-overrides](../../references/critical-overrides.md).
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
Compare the intended design to the implementation as a product-quality reviewer, not as a generic aesthetic critic. The output must be a prioritized fix list grounded in evidence from both artifacts.
|
|
28
|
+
|
|
29
|
+
Do not write the QA review from memory, code, or file paths alone. Open or capture both the source design and the implementation first, then compare what is actually visible.
|
|
30
|
+
|
|
31
|
+
Do not pretend separate image views are side-by-side comparison. Put the source image and the implementation screenshot together in the same comparison input, then judge the visible differences from that combined input.
|
|
32
|
+
|
|
33
|
+
1. Identify the comparison target.
|
|
34
|
+
- Determine the source design: Figma node, image, design board, screenshot, spec, or mockup.
|
|
35
|
+
- Determine the implementation: local URL, deployed URL, app screen, component, screenshot, or code-rendered view.
|
|
36
|
+
- Match the same viewport, state, theme, device density, route, content, auth state, and interaction state before judging.
|
|
37
|
+
- If artifacts do not represent the same state, call that out first and avoid false precision.
|
|
38
|
+
|
|
39
|
+
2. Capture evidence.
|
|
40
|
+
- For Figma, use design context and screenshot tools when available.
|
|
41
|
+
- For web/app implementations, open the target in a browser and capture screenshots at the intended viewport.
|
|
42
|
+
- Capture additional states when relevant: mobile/desktop, hover/focus/active, empty/loading/error, dark/light, and key responsive breakpoints.
|
|
43
|
+
- Save paths or URLs for screenshots when available so findings can cite evidence.
|
|
44
|
+
- Capturing screenshots is not enough. Put the source image and the implementation screenshot together in the same comparison input before judging.
|
|
45
|
+
|
|
46
|
+
3. Normalize before comparing.
|
|
47
|
+
- Align crop, viewport size, scale, and device frame. Do not compare a framed mockup to an unframed page without noting the mismatch.
|
|
48
|
+
- Prefer comparing content regions over full browser chrome or surrounding canvas.
|
|
49
|
+
|
|
50
|
+
4. Compare at the right level of detail.
|
|
51
|
+
- Use a full-view comparison to judge overall composition, hierarchy, layout, density, and responsive structure.
|
|
52
|
+
- Use focused region comparisons when important details are too small to judge in the full-view comparison.
|
|
53
|
+
- Choose focused regions from the actual source and implementation. Use them where fidelity depends on precise typography, alignment, imagery, assets, icons, logos, controls, forms, navigation, tables, dense UI, or visible interaction states.
|
|
54
|
+
- If no focused region is needed, say why in `design-qa.md`.
|
|
55
|
+
- Do not pass QA from a full-view comparison alone when important details are not clearly readable.
|
|
56
|
+
|
|
57
|
+
5. Review systematically.
|
|
58
|
+
- Read [qa-rubric](./references/qa-rubric.md) when the QA pass spans more than a quick visual check.
|
|
59
|
+
- Check information architecture, layout, spacing, typography/fonts, color, imagery/image quality, icons, copy, affordances, interaction states, responsiveness, accessibility, and polish.
|
|
60
|
+
- Always make a specific pass over the five required fidelity surfaces: fonts/typography, spacing/layout rhythm, colors/tokens, image quality, and copy/content. Do this even if the user did not name those areas explicitly.
|
|
61
|
+
- If the mock does not address some issue you're seeing (e.g. a null state), call that out as a separate finding as a shortcoming of the mock to be addressed.
|
|
62
|
+
- Your other goal is to decide whether the implementation "looks as good" as the mock. If there are stylistic problems, call them out. If the user's prompt is leaking into the implementation (vs letting the app stand on its own), call that out as well.
|
|
63
|
+
- Distinguish design drift from intentional product/code constraints. If a deviation may be intentional, phrase it as a question or assumption.
|
|
64
|
+
|
|
65
|
+
6. Produce a fix-oriented QA report.
|
|
66
|
+
- Lead with findings, ordered by severity and user impact.
|
|
67
|
+
- For each finding include: severity, location, what differs, evidence, why it matters, and the concrete fix.
|
|
68
|
+
- Include exact CSS/component/token suggestions when the implementation context is available.
|
|
69
|
+
- Separate objective mismatches from subjective polish recommendations.
|
|
70
|
+
- Do not say a design matches, is done, or is as good as it can get until the required fidelity surfaces have been checked and any remaining differences are explicitly classified as acceptable, expected, or still actionable.
|
|
71
|
+
- End with a concise implementation checklist.
|
|
72
|
+
|
|
73
|
+
## Required Fidelity Surfaces
|
|
74
|
+
|
|
75
|
+
Every QA report must explicitly evaluate these surfaces:
|
|
76
|
+
|
|
77
|
+
- Fonts and typography: family, fallback, weight, size, line height, letter spacing, antialiasing, hierarchy, wrapping, truncation, and whether display text and small UI text use appropriate optical weights. It is incredibly important to check fonts carefully for fidelity, including looking up similar typefaces or using image analysis to find the font differences.
|
|
78
|
+
- Spacing and layout rhythm: frame size, crop, alignment, margins, padding, grid tracks, section gaps, component spacing, radii, shadows/elevation, and vertical rhythm.
|
|
79
|
+
- Colors and visual tokens: sampled or inferred palette, gradients, opacity, contrast, semantic state colors, foreground/background balance, and whether CSS tokens map to the source design.
|
|
80
|
+
- Image quality and asset fidelity: subject correctness, crop, scale, sharpness, compression, transparency halos, masking, background treatment, raster-vs-vector appropriateness, and whether generated assets match the source art direction. Fail QA if logos, illustrations, decorative marks, product imagery, non-standard icons, or other visible image assets from the visual target were replaced with custom inline SVG, handcrafted SVG, HTML elements, div/span shapes, CSS drawings, gradients, emoji, text glyphs, placeholder shapes, or code-native approximations.
|
|
81
|
+
- Copy and content of app-specific text
|
|
82
|
+
|
|
83
|
+
## Severity
|
|
84
|
+
|
|
85
|
+
- `P0`: Blocks core use, severe accessibility failure, broken layout, or impossible task.
|
|
86
|
+
- `P1`: Major design mismatch or usability regression likely to be noticed by users.
|
|
87
|
+
- `P2`: Moderate visual drift, inconsistent state, responsive issue, or fixable polish gap.
|
|
88
|
+
- `P3`: Minor refinement that improves fidelity but does not block acceptance.
|
|
89
|
+
|
|
90
|
+
## Output Format
|
|
91
|
+
|
|
92
|
+
Use this structure unless the user asks otherwise:
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
**Findings**
|
|
96
|
+
- [P1] Short issue title
|
|
97
|
+
Location: screen/component/selector/file if known.
|
|
98
|
+
Evidence: design does X, implementation does Y.
|
|
99
|
+
Impact: why this matters.
|
|
100
|
+
Fix: concrete change.
|
|
101
|
+
|
|
102
|
+
**Open Questions**
|
|
103
|
+
- Any ambiguity about intentional deviations, unavailable states, or missing artifacts.
|
|
104
|
+
|
|
105
|
+
**Implementation Checklist**
|
|
106
|
+
- Ordered fixes that can be executed directly.
|
|
107
|
+
|
|
108
|
+
**Follow-up Polish**
|
|
109
|
+
- P3 refinements that can improve fidelity after handoff.
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
If there are no substantive mismatches, say that clearly and list any residual test gaps.
|
|
113
|
+
|
|
114
|
+
When this skill is used before handoff, save the latest QA report as project-root `design-qa.md`.
|
|
115
|
+
|
|
116
|
+
`design-qa.md` must include:
|
|
117
|
+
|
|
118
|
+
- source visual truth path
|
|
119
|
+
- implementation screenshot path
|
|
120
|
+
- viewport
|
|
121
|
+
- state
|
|
122
|
+
- full-view comparison evidence
|
|
123
|
+
- focused region comparison evidence, or why it was not needed
|
|
124
|
+
- findings
|
|
125
|
+
- patches made since the previous QA pass
|
|
126
|
+
- final result
|
|
127
|
+
|
|
128
|
+
`final result` must be exactly `passed` or `blocked`.
|
|
129
|
+
|
|
130
|
+
Use `passed` when there are no actionable P0/P1/P2 findings. P3 findings may remain as follow-up polish.
|
|
131
|
+
Use `blocked` when actionable P0/P1/P2 findings remain and name the blocker.
|
|
132
|
+
|
|
133
|
+
Return the file path with the QA report.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# QA Rubric
|
|
2
|
+
|
|
3
|
+
Use this rubric for comprehensive design-to-implementation QA.
|
|
4
|
+
|
|
5
|
+
## Fidelity
|
|
6
|
+
|
|
7
|
+
- Layout: frame size, grid, alignment, content order, spatial grouping, card radius, elevation, borders.
|
|
8
|
+
- Spacing: page margins, section gaps, item gaps, padding, tap-target spacing, vertical rhythm, cramped text, collapsed sections, and density drift.
|
|
9
|
+
- Typography: font family, weight, size, line height, letter spacing, wrapping, truncation, hierarchy, text density, optical balance, and mismatched display/body treatment.
|
|
10
|
+
- Color: token mapping, contrast, brand palette, state colors, gradients, opacity, shadows.
|
|
11
|
+
- Imagery: all target image assets are accounted for and match subject accuracy, crop, aspect ratio, generated/real image quality, background treatment.
|
|
12
|
+
- Icons: all icons are accounted for and match stroke weight, size, style family, alignment, optical balance, state changes.
|
|
13
|
+
- Shape and surfaces: rounded cards, borders, dividers, shadows, fills, and container treatments match the target rather than generic component defaults.
|
|
14
|
+
- Responsiveness: elements do not overlap, collapse into adjacent sections, clip, wrap awkwardly, or break hierarchy across desktop, tablet, and mobile viewports.
|
|
15
|
+
- Implementation shortcuts: custom CSS art, inline SVG substitutes, placeholder avatars, decorative blobs, and fake product imagery are flagged when they drift from the target design.
|
|
16
|
+
|
|
17
|
+
## Mandatory Comparison Passes
|
|
18
|
+
|
|
19
|
+
Do not rely on generic "looks close" judgment. For each design QA pass, inspect and report on these areas:
|
|
20
|
+
|
|
21
|
+
### Core design and functionality
|
|
22
|
+
|
|
23
|
+
- Fonts and typography: identify mismatched font family/fallback, weight, scale, line height, letter spacing, antialiasing, text hierarchy, wrapping, truncation, display-vs-body optical treatment, cramped text, and places where text spacing makes the UI feel broken or harder to scan.
|
|
24
|
+
- Spacing and layout: compare frame/crop, alignment, margins, padding, gaps, component sizes, radii, elevation, borders, and vertical rhythm. Cite where spacing drift changes hierarchy, density, readability, or causes elements to collide.
|
|
25
|
+
- Viewport resilience: check desktop, tablet, and mobile widths for overlapping elements, clipped content, collapsing sections, broken grids, awkward wrapping, and controls that become unusable.
|
|
26
|
+
- Colors and tokens: compare palette, gradients, opacity, shadows, contrast, semantic status colors, disabled/active states, and whether implementation tokens map to design intent.
|
|
27
|
+
- Image quality and asset fidelity: check subject match, crop, scale, aspect ratio, sharpness, compression, transparency/masking artifacts, halos, background integration, and raster-vs-vector suitability. Div/CSS art or custom SVG art that replace images in the target design are banned.
|
|
28
|
+
- Copy and content: for any copy that is part of the app, not dynamic content, check that it is coherent, makes sense in the standalone context of the app, and is visually appealing.
|
|
29
|
+
- Icons: zoom in and analyze all visible icons and icons hidden behind controls/interactions to ensure they are fully implemented, aligned, and visually consistent.
|
|
30
|
+
- States and interactions: expand/collapse sidebars, tooltips, forms, hover, focus, active, selected, disabled, loading, success, error, empty states, and any interactive controls needed for a functional frontend.
|
|
31
|
+
- AI shortcut artifacts: flag generic rounded cards, unnecessary borders, decorative CSS blobs, fake SVG illustrations, half-built avatars, mismatched hero art, and custom CSS/SVG replacements where the target called for real imagery, real icons, or a different surface treatment.
|
|
32
|
+
|
|
33
|
+
### Accessibility
|
|
34
|
+
|
|
35
|
+
- Contrast, focus indicators, keyboard reachability, semantic controls, labels, alt text, reduced motion.
|
|
36
|
+
- Text scaling and zoom resilience.
|
|
37
|
+
- Tap targets at practical mobile sizes.
|
|
38
|
+
- Layout stability when text wraps, scales, or appears in longer real-world strings.
|
|
39
|
+
|
|
40
|
+
## Finding Quality
|
|
41
|
+
|
|
42
|
+
A useful finding includes:
|
|
43
|
+
|
|
44
|
+
- One specific mismatch or flaw.
|
|
45
|
+
- Design evidence and implementation evidence.
|
|
46
|
+
- User or fidelity impact.
|
|
47
|
+
- Concrete fix, ideally with file/component/token/CSS guidance.
|
|
48
|
+
- Severity based on user impact, not personal taste.
|
|
49
|
+
- The affected fidelity surface when relevant: fonts, spacing, colors, image quality, layout, behavior, accessibility, content, icons, or responsiveness.
|
|
50
|
+
- Crammed text, broken wrapping, mismatched font weights, bad line height, or awkward letter spacing when they affect readability or hierarchy.
|
|
51
|
+
- Elements that overlap, clip, collapse into nearby sections, or break at alternate viewport sizes.
|
|
52
|
+
- Rounded cards, borders, shadows, or container treatments that appear in the implementation but are not present in the target.
|
|
53
|
+
- Borked icons, custom SVGs, half-assed attempts at avatars, hero art mismatches, custom CSS art, and placeholder-looking generated assets.
|
|
54
|
+
- Overflowing text, cramped text, broken layout, missing states, and incomplete interactions.
|
|
55
|
+
|
|
56
|
+
Avoid:
|
|
57
|
+
|
|
58
|
+
- Vague statements such as "make it more polished."
|
|
59
|
+
- Criticizing known placeholder content unless it affects the design goal.
|
|
60
|
+
- Treating every pixel difference as a bug when the design intent is preserved.
|
|
61
|
+
- Mixing multiple unrelated flaws into one finding.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-context
|
|
3
|
+
description: "Mandatory design-brief gate for Product Design build and design workflows. Use before ideation, prototyping, image-to-code builds, redesigns, or product UI work to clarify missing product, visual, and interactivity context or play back the supplied brief before proceeding."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Get Context
|
|
7
|
+
|
|
8
|
+
Gather only the context needed for the next design action. This skill resolves or confirms the design brief; it does not implement UI or create durable design artifacts.
|
|
9
|
+
|
|
10
|
+
Run this skill at the start of Product Design requests that ask to design, build, prototype, clone, redesign, extend, or generate product UI directions.
|
|
11
|
+
|
|
12
|
+
Use question mode when any of the following are unclear:
|
|
13
|
+
|
|
14
|
+
- what product, site, feature, workflow, component, or screen is being designed
|
|
15
|
+
- what visual source should determine how it looks
|
|
16
|
+
- what concrete preferences or avoidances should shape visual exploration when no source exists
|
|
17
|
+
- what level of interactivity the user expects
|
|
18
|
+
|
|
19
|
+
Use playback mode when the user already provided the needed details. In playback mode, do not re-ask answered questions; play back the brief in a pithy format and name the next workflow.
|
|
20
|
+
|
|
21
|
+
Hard boundary: do not implement UI, scaffold a prototype, start a server, or create files while context is still missing.
|
|
22
|
+
|
|
23
|
+
## Critical Overrides
|
|
24
|
+
|
|
25
|
+
- Refer to the Plugin router [$index](../index/SKILL.md) before proceeding.
|
|
26
|
+
- Follow [$critical-overrides](../../references/critical-overrides.md).
|
|
27
|
+
|
|
28
|
+
## User Context
|
|
29
|
+
|
|
30
|
+
Before starting, load [$user-context](../user-context/SKILL.md) and run its preflight script when local shell access is available.
|
|
31
|
+
|
|
32
|
+
Use saved product URLs, Figma files, screenshots, reference images, codebase paths, Storybook, tokens, design systems, brand assets, component refs, browser preferences, and share targets as grounding material when relevant.
|
|
33
|
+
|
|
34
|
+
Do not inspect every saved reference. Inspect only what the current task needs.
|
|
35
|
+
|
|
36
|
+
## Get Context Script
|
|
37
|
+
|
|
38
|
+
The following three questions should be answered by the user. Adapt the questions based on what the user has provided so far in the conversation. If some or all fields are already known, skip the questions and summarize the design brief in your own words.
|
|
39
|
+
|
|
40
|
+
The questions to answer are:
|
|
41
|
+
|
|
42
|
+
> What do you want the thing to do?
|
|
43
|
+
|
|
44
|
+
> What existing product, design system, Figma file, screenshot, URL, image, or other visual source should it match? If none, what look are you going for? Mention existing design systems already in user-context if they exist.
|
|
45
|
+
|
|
46
|
+
> What level of interactivity should the thing have?
|
|
47
|
+
|
|
48
|
+
One of:
|
|
49
|
+
|
|
50
|
+
- Full interactivity: all controls and states are completely functional and implemented.
|
|
51
|
+
- Static: controls and states are minimally interactive, preferring speed.
|
|
52
|
+
|
|
53
|
+
After the questions, reply with a pithy design brief that summarizes what you're about to explore. Avoid walls of text at all costs. Be clear and concise.
|
|
54
|
+
|
|
55
|
+
Example script to follow:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Before I build, the Product Design workflow needs a quick design brief.
|
|
59
|
+
|
|
60
|
+
What should the login page do? Email/password only, magic link, SSO, sign-up link, forgot password?
|
|
61
|
+
Do you have an existing design system, app, Figma, or screenshot to match?
|
|
62
|
+
If not, what look are you going for?
|
|
63
|
+
Interactivity level: full working form states, or a faster mostly-static mock?
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Final message
|
|
68
|
+
|
|
69
|
+
1. Before proceeding to `$ideate`, `$prototype`, `$url-to-code`, or `$image-to-code`, confirm the design brief by explaining it back to the user in a pithy format as a `final` message.
|
|
70
|
+
|
|
71
|
+
2. Proceed only after the user confirms the design brief, unless the current thread already contains confirmation of that exact brief. If the user provides feedback, continue to refine the design brief with them.
|
|
72
|
+
|
|
73
|
+
3. After the user confirms the design brief, send one short expectation-setting note before starting an involved app, prototype, clone, redesign, or build. Example confirmation message with expectations setting:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Lovely, brief locked. This kind of build usually takes about 10-15 minutes, and ambitious ones can take longer. Good moment to grab coffee or tend to something else; I'll keep moving and bring the prototype back when it is ready.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Do not send this note for tiny static changes, quick audits, simple research, setup-only, or share-only requests.
|
|
80
|
+
|
|
81
|
+
Done means the user has confirmed the design brief.
|