create-yss-spec 1.1.2 → 1.1.4

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.
Files changed (278) hide show
  1. package/package.json +1 -1
  2. package/template/.agents/skills/excalidraw-diagram-generator/SKILL.md +3 -3
  3. package/template/.agents/skills/grill-me/SKILL.md +7 -0
  4. package/template/.agents/skills/grilling/SKILL.md +12 -0
  5. package/template/.agents/skills/handoff/SKILL.md +16 -0
  6. package/template/.agents/skills/to-issues/SKILL.md +2 -2
  7. package/template/.claude/skills/grill-me/SKILL.md +7 -0
  8. package/template/.claude/skills/grilling/SKILL.md +12 -0
  9. package/template/.claude/skills/handoff/SKILL.md +16 -0
  10. package/template/.claude/skills/to-issues/SKILL.md +2 -2
  11. package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +1 -1
  12. package/template/.codex/skills/data-analytics/.app.json +84 -0
  13. package/template/.codex/skills/data-analytics/.codex-plugin/plugin.json +66 -0
  14. package/template/.codex/skills/data-analytics/.mcp.json +30 -0
  15. package/template/.codex/skills/data-analytics/AGENTS.md +20 -0
  16. package/template/.codex/skills/data-analytics/DEPENDENCIES.MD +27 -0
  17. package/template/.codex/skills/data-analytics/README.md +60 -0
  18. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html +16 -0
  19. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part001 +1 -0
  20. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part002 +1 -0
  21. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part003 +1 -0
  22. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part004 +1 -0
  23. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part005 +1 -0
  24. package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part006 +1 -0
  25. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html +16 -0
  26. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part001 +1 -0
  27. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part002 +1 -0
  28. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part003 +1 -0
  29. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part004 +1 -0
  30. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part005 +1 -0
  31. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part006 +1 -0
  32. package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part007 +1 -0
  33. package/template/.codex/skills/data-analytics/assets/datascience-small.svg +5 -0
  34. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html +16 -0
  35. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part001 +1 -0
  36. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part002 +1 -0
  37. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part003 +1 -0
  38. package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part004 +1 -0
  39. package/template/.codex/skills/data-analytics/assets/datascience.png +0 -0
  40. package/template/.codex/skills/data-analytics/assets/datascience.svg +10 -0
  41. package/template/.codex/skills/data-analytics/mcp/server.cjs +2963 -0
  42. package/template/.codex/skills/data-analytics/package-lock.json +3048 -0
  43. package/template/.codex/skills/data-analytics/package.json +43 -0
  44. package/template/.codex/skills/data-analytics/scripts/normalize-widget-assets.mjs +75 -0
  45. package/template/.codex/skills/data-analytics/skills/analyze-data-quality/SKILL.md +160 -0
  46. package/template/.codex/skills/data-analytics/skills/analyze-data-quality/agents/openai.yaml +6 -0
  47. package/template/.codex/skills/data-analytics/skills/build-dashboard/SKILL.md +148 -0
  48. package/template/.codex/skills/data-analytics/skills/build-dashboard/agents/openai.yaml +6 -0
  49. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/bi-platform-dashboard.md +18 -0
  50. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/html-dashboard.md +24 -0
  51. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/mcp-artifact-dashboard.md +71 -0
  52. package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/streamlit-dashboard.md +85 -0
  53. package/template/.codex/skills/data-analytics/skills/build-report/SKILL.md +207 -0
  54. package/template/.codex/skills/data-analytics/skills/build-report/agents/openai.yaml +6 -0
  55. package/template/.codex/skills/data-analytics/skills/build-report/assets/executive-report-shell.html +70 -0
  56. package/template/.codex/skills/data-analytics/skills/build-report/assets/technical-report-shell.html +66 -0
  57. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/SKILL.md +118 -0
  58. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/agents/openai.yaml +6 -0
  59. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/__init__.py +1 -0
  60. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/cli.py +57 -0
  61. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/constants.py +61 -0
  62. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/docx_writer.py +362 -0
  63. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/html_parser.py +829 -0
  64. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/model.py +30 -0
  65. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/plan.py +129 -0
  66. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/quality.py +374 -0
  67. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/rendering.py +613 -0
  68. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/table_utils.py +54 -0
  69. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/utils.py +16 -0
  70. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc_plan.py +9 -0
  71. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/SKILL.md +78 -0
  72. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/agents/openai.yaml +6 -0
  73. package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/scripts/report_to_google_slides.py +2379 -0
  74. package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/SKILL.md +88 -0
  75. package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/agents/openai.yaml +6 -0
  76. package/template/.codex/skills/data-analytics/skills/build-report/specifications/executive-report.md +97 -0
  77. package/template/.codex/skills/data-analytics/skills/build-report/specifications/mcp-app-report.md +59 -0
  78. package/template/.codex/skills/data-analytics/skills/build-report/specifications/technical-report.md +75 -0
  79. package/template/.codex/skills/data-analytics/skills/design-kpis/SKILL.md +103 -0
  80. package/template/.codex/skills/data-analytics/skills/design-kpis/agents/openai.yaml +6 -0
  81. package/template/.codex/skills/data-analytics/skills/gather-business-context/SKILL.md +68 -0
  82. package/template/.codex/skills/data-analytics/skills/gather-business-context/agents/openai.yaml +6 -0
  83. package/template/.codex/skills/data-analytics/skills/index/SKILL.md +251 -0
  84. package/template/.codex/skills/data-analytics/skills/index/agents/openai.yaml +6 -0
  85. package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/SKILL.md +131 -0
  86. package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/agents/openai.yaml +6 -0
  87. package/template/.codex/skills/data-analytics/skills/kpi-reporting/SKILL.md +141 -0
  88. package/template/.codex/skills/data-analytics/skills/kpi-reporting/agents/openai.yaml +6 -0
  89. package/template/.codex/skills/data-analytics/skills/kpi-reporting/references/report-templates.md +32 -0
  90. package/template/.codex/skills/data-analytics/skills/market-sizing/SKILL.md +106 -0
  91. package/template/.codex/skills/data-analytics/skills/market-sizing/agents/openai.yaml +6 -0
  92. package/template/.codex/skills/data-analytics/skills/metric-diagnostics/SKILL.md +130 -0
  93. package/template/.codex/skills/data-analytics/skills/metric-diagnostics/agents/openai.yaml +6 -0
  94. package/template/.codex/skills/data-analytics/skills/product-business-analysis/SKILL.md +141 -0
  95. package/template/.codex/skills/data-analytics/skills/product-business-analysis/agents/openai.yaml +6 -0
  96. package/template/.codex/skills/data-analytics/skills/spreadsheets/SKILL.md +178 -0
  97. package/template/.codex/skills/data-analytics/skills/spreadsheets/agents/openai.yaml +9 -0
  98. package/template/.codex/skills/data-analytics/skills/spreadsheets/assets/file-spreadsheet.png +0 -0
  99. package/template/.codex/skills/data-analytics/skills/spreadsheets/charts.md +31 -0
  100. package/template/.codex/skills/data-analytics/skills/spreadsheets/references/artifact_tool_api.md +466 -0
  101. package/template/.codex/skills/data-analytics/skills/spreadsheets/style_guidelines.md +99 -0
  102. package/template/.codex/skills/data-analytics/skills/user-context/SKILL.md +195 -0
  103. package/template/.codex/skills/data-analytics/skills/user-context/agents/openai.yaml +6 -0
  104. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/automation-config.md +26 -0
  105. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/source-category-config.json +51 -0
  106. package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/user-context-config.md +66 -0
  107. package/template/.codex/skills/data-analytics/skills/user-context/references/automation.md +69 -0
  108. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-examples.md +204 -0
  109. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-state-template.json +87 -0
  110. package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding.md +497 -0
  111. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/connector-playbook.md +74 -0
  112. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/setup.md +65 -0
  113. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/skill-template.md +160 -0
  114. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/source-intake.md +75 -0
  115. package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/weekly-polling-automation.md +96 -0
  116. package/template/.codex/skills/data-analytics/skills/user-context/references/source-category-runtime.md +263 -0
  117. package/template/.codex/skills/data-analytics/skills/user-context/scripts/data_analytics_preflight.py +1460 -0
  118. package/template/.codex/skills/data-analytics/skills/user-context/scripts/init_user_context_state.py +128 -0
  119. package/template/.codex/skills/data-analytics/skills/user-context/scripts/reset_user_context_state.py +101 -0
  120. package/template/.codex/skills/data-analytics/skills/user-context/scripts/validate_user_context_preflight.py +499 -0
  121. package/template/.codex/skills/data-analytics/skills/user-context/tests/test_state_helpers.py +978 -0
  122. package/template/.codex/skills/data-analytics/skills/validate-data/SKILL.md +190 -0
  123. package/template/.codex/skills/data-analytics/skills/validate-data/agents/openai.yaml +6 -0
  124. package/template/.codex/skills/data-analytics/skills/visualize-data/SKILL.md +157 -0
  125. package/template/.codex/skills/data-analytics/skills/visualize-data/agents/openai.yaml +6 -0
  126. package/template/.codex/skills/data-analytics/skills/visualize-data/references/seaborn-templates.md +774 -0
  127. package/template/.codex/skills/data-analytics/src/DESIGN.md +222 -0
  128. package/template/.codex/skills/data-analytics/src/analytics-app/App.tsx +3666 -0
  129. package/template/.codex/skills/data-analytics/src/analytics-app/analytics-layout.test.mjs +136 -0
  130. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartFrame.tsx +54 -0
  131. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartLegend.tsx +96 -0
  132. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartRenderer.tsx +1647 -0
  133. package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartTooltip.tsx +245 -0
  134. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-app-helpers.tsx +462 -0
  135. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-capabilities.ts +107 -0
  136. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-compatibility.ts +164 -0
  137. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-contract.ts +192 -0
  138. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-theme.ts +203 -0
  139. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-tokens.css +619 -0
  140. package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-transforms.ts +402 -0
  141. package/template/.codex/skills/data-analytics/src/analytics-app/fonts/SystemSansVariableVF.woff2 +0 -0
  142. package/template/.codex/skills/data-analytics/src/analytics-app/imageExport.ts +370 -0
  143. package/template/.codex/skills/data-analytics/src/analytics-app/layout/AnalyticsLayoutCanvas.tsx +536 -0
  144. package/template/.codex/skills/data-analytics/src/analytics-app/layout/RichMarkdown.tsx +681 -0
  145. package/template/.codex/skills/data-analytics/src/analytics-app/layout/analyticsLayoutCore.ts +164 -0
  146. package/template/.codex/skills/data-analytics/src/analytics-app/main.tsx +21 -0
  147. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/chart_contract.py +472 -0
  148. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/check_analytics_app_runtime_links.py +75 -0
  149. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/design_contract.py +142 -0
  150. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/package_utils.py +142 -0
  151. package/template/.codex/skills/data-analytics/src/analytics-app/scripts/tests/test_package_utils.py +377 -0
  152. package/template/.codex/skills/data-analytics/src/analytics-app/styles.css +3468 -0
  153. package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.d.ts +44 -0
  154. package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.jsx +639 -0
  155. package/template/.codex/skills/data-analytics/src/analytics-app/tables/data-table.css +327 -0
  156. package/template/.codex/skills/data-analytics/src/analytics-app/tokens.css +225 -0
  157. package/template/.codex/skills/data-analytics/src/analytics-app/types.ts +204 -0
  158. package/template/.codex/skills/data-analytics/src/analytics-app-core.md +85 -0
  159. package/template/.codex/skills/data-analytics/src/codex-style-contract.md +30 -0
  160. package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.html +12 -0
  161. package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.jsx +1008 -0
  162. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.css +2117 -0
  163. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.html +122 -0
  164. package/template/.codex/skills/data-analytics/src/datascience-chart-widget.js +3588 -0
  165. package/template/.codex/skills/data-analytics/src/datascience-table-widget.css +483 -0
  166. package/template/.codex/skills/data-analytics/src/datascience-table-widget.html +32 -0
  167. package/template/.codex/skills/data-analytics/src/datascience-table-widget.js +333 -0
  168. package/template/.codex/skills/data-analytics/src/mcp-host.js +153 -0
  169. package/template/.codex/skills/data-analytics/src/recharts-config.js +315 -0
  170. package/template/.codex/skills/data-analytics/src/recharts-renderer.jsx +294 -0
  171. package/template/.codex/skills/data-analytics/src/sql-source-view.css +33 -0
  172. package/template/.codex/skills/data-analytics/src/sql-source-view.js +157 -0
  173. package/template/.codex/skills/data-analytics/src/styles/codex-theme.css +121 -0
  174. package/template/.codex/skills/data-analytics/src/table-renderer.jsx +28 -0
  175. package/template/.codex/skills/data-analytics/tests/chart-transforms.test.mjs +87 -0
  176. package/template/.codex/skills/data-analytics/tests/funnel-smoke.html +105 -0
  177. package/template/.codex/skills/data-analytics/tests/inline-widget-compare.html +233 -0
  178. package/template/.codex/skills/data-analytics/tests/mcp-server.test.mjs +1500 -0
  179. package/template/.codex/skills/data-analytics/tests/native-style-contract.test.mjs +219 -0
  180. package/template/.codex/skills/data-analytics/tests/recharts-config.test.mjs +144 -0
  181. package/template/.codex/skills/data-analytics/tests/recharts-renderer.test.mjs +11 -0
  182. package/template/.codex/skills/data-analytics/tests/rich-markdown.test.mjs +54 -0
  183. package/template/.codex/skills/data-analytics/tests/widget-render-harness.html +321 -0
  184. package/template/.codex/skills/data-analytics/tsconfig.json +19 -0
  185. package/template/.codex/skills/data-analytics/vite.config.ts +46 -0
  186. package/template/.codex/skills/product-design/.app.json +7 -0
  187. package/template/.codex/skills/product-design/.codex-plugin/plugin.json +50 -0
  188. package/template/.codex/skills/product-design/README.md +50 -0
  189. package/template/.codex/skills/product-design/agents/openai.yaml +4 -0
  190. package/template/.codex/skills/product-design/assets/composerIcon.svg +9 -0
  191. package/template/.codex/skills/product-design/assets/logo.png +0 -0
  192. package/template/.codex/skills/product-design/package.json +11 -0
  193. package/template/.codex/skills/product-design/references/browser-order.md +9 -0
  194. package/template/.codex/skills/product-design/references/communication-protocol.md +45 -0
  195. package/template/.codex/skills/product-design/references/critical-overrides.md +58 -0
  196. package/template/.codex/skills/product-design/references/local-prototype-preflight.md +16 -0
  197. package/template/.codex/skills/product-design/scripts/bootstrap-prototype.mjs +147 -0
  198. package/template/.codex/skills/product-design/skills/audit/SKILL.md +159 -0
  199. package/template/.codex/skills/product-design/skills/audit/agents/openai.yaml +6 -0
  200. package/template/.codex/skills/product-design/skills/audit/references/design-audit-framework.md +73 -0
  201. package/template/.codex/skills/product-design/skills/design-qa/SKILL.md +133 -0
  202. package/template/.codex/skills/product-design/skills/design-qa/agents/openai.yaml +6 -0
  203. package/template/.codex/skills/product-design/skills/design-qa/references/qa-rubric.md +61 -0
  204. package/template/.codex/skills/product-design/skills/get-context/SKILL.md +81 -0
  205. package/template/.codex/skills/product-design/skills/get-context/agents/openai.yaml +6 -0
  206. package/template/.codex/skills/product-design/skills/ideate/SKILL.md +179 -0
  207. package/template/.codex/skills/product-design/skills/ideate/agents/openai.yaml +6 -0
  208. package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +105 -0
  209. package/template/.codex/skills/product-design/skills/image-to-code/agents/openai.yaml +6 -0
  210. package/template/.codex/skills/product-design/skills/index/SKILL.md +126 -0
  211. package/template/.codex/skills/product-design/skills/index/agents/openai.yaml +6 -0
  212. package/template/.codex/skills/product-design/skills/prototype/SKILL.md +128 -0
  213. package/template/.codex/skills/product-design/skills/prototype/agents/openai.yaml +6 -0
  214. package/template/.codex/skills/product-design/skills/prototype/references/existing-codebase-edits.md +18 -0
  215. package/template/.codex/skills/product-design/skills/research/SKILL.md +92 -0
  216. package/template/.codex/skills/product-design/skills/research/agents/openai.yaml +6 -0
  217. package/template/.codex/skills/product-design/skills/share/SKILL.md +41 -0
  218. package/template/.codex/skills/product-design/skills/share/agents/openai.yaml +6 -0
  219. package/template/.codex/skills/product-design/skills/url-to-code/SKILL.md +124 -0
  220. package/template/.codex/skills/product-design/skills/url-to-code/agents/openai.yaml +6 -0
  221. package/template/.codex/skills/product-design/skills/user-context/SKILL.md +147 -0
  222. package/template/.codex/skills/product-design/skills/user-context/agents/openai.yaml +6 -0
  223. package/template/.codex/skills/product-design/skills/user-context/plugin-author-config/user-context-template.md +63 -0
  224. package/template/.codex/skills/product-design/skills/user-context/references/onboarding.md +66 -0
  225. package/template/.codex/skills/product-design/skills/user-context/scripts/init_user_context.py +86 -0
  226. package/template/.codex/skills/product-design/skills/user-context/scripts/user_context_preflight.py +204 -0
  227. package/template/.codex/skills/product-design/templates/prototype/AGENTS.md +7 -0
  228. package/template/.codex/skills/product-design/templates/prototype/index.html +12 -0
  229. package/template/.codex/skills/product-design/templates/prototype/package.json +18 -0
  230. package/template/.codex/skills/product-design/templates/prototype/src/App.jsx +5 -0
  231. package/template/.codex/skills/product-design/templates/prototype/src/main.jsx +10 -0
  232. package/template/.codex/skills/product-design/templates/prototype/src/styles.css +13 -0
  233. package/template/.codex/skills/product-design/templates/prototype/vite.config.mjs +14 -0
  234. package/template/.codex/skills/product-design-prototype/SKILL.md +1 -1
  235. package/template/.codex/skills/yss-api-integration/SKILL.md +1 -1
  236. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  237. package/template/.codex/skills/yss-filerunner/SKILL.md +1 -1
  238. package/template/.codex/skills/yss-openapi/SKILL.md +1 -1
  239. package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +1 -1
  240. package/template/.codex/skills/yss-openapi-governance/SKILL.md +3 -3
  241. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +23 -7
  242. package/template/.codex/skills/yss-router/SKILL.md +1 -2
  243. package/template/.codex/skills/yss-router/references/boundaries.md +0 -1
  244. package/template/.codex/skills/yss-source-index/references/source-map-config.md +0 -1
  245. package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -3
  246. package/template/.hermes/skills/grill-me/SKILL.md +7 -0
  247. package/template/.hermes/skills/grilling/SKILL.md +12 -0
  248. package/template/.hermes/skills/handoff/SKILL.md +16 -0
  249. package/template/.hermes/skills/to-issues/SKILL.md +2 -2
  250. package/template/.pi/skills/grill-me/SKILL.md +7 -0
  251. package/template/.pi/skills/grilling/SKILL.md +12 -0
  252. package/template/.pi/skills/handoff/SKILL.md +16 -0
  253. package/template/.pi/skills/to-issues/SKILL.md +2 -2
  254. package/template/.trae/skills/grill-me/SKILL.md +7 -0
  255. package/template/.trae/skills/grilling/SKILL.md +12 -0
  256. package/template/.trae/skills/handoff/SKILL.md +16 -0
  257. package/template/.trae/skills/to-issues/SKILL.md +2 -2
  258. package/template/AGENTS.md +11 -3
  259. package/template/docs/adr/adr-product-design-prototype-entrypoint.md +54 -0
  260. package/template/docs/api/templates/openapi-draft-review-checklist.md +4 -2
  261. package/template/docs/design/README.md +8 -4
  262. package/template/docs/design/templates/interaction-spec-template.md +4 -1
  263. package/template/docs/design/templates/prototype-confirmation-template.md +57 -0
  264. package/template/docs/design/templates/prototype-review-checklist.md +6 -2
  265. package/template/docs/design/templates/state-matrix-template.md +1 -1
  266. package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +22 -3
  267. package/template/docs/process/harness-executive-blueprint.md +2 -1
  268. package/template/docs/process/harness-process-tailoring.md +8 -1
  269. package/template/docs/process/harness-work-unit-map.md +1 -1
  270. package/template/docs/process/lifecycle-artifact-map.md +17 -8
  271. package/template/docs/process/product-prototype-workflow.md +82 -0
  272. package/template/docs/user-guide/product-lifecycle-workflow.md +2 -2
  273. package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +15 -10
  274. package/template/scripts/verify-template +0 -14
  275. package/template/skills-lock.json +70 -27
  276. package/template/.codex/skills/yss-anti-scheduler/SKILL.md +0 -53
  277. package/template/.codex/skills/yss-anti-scheduler/agents/openai.yaml +0 -4
  278. package/template/.codex/skills/yss-anti-scheduler/references/source-index.md +0 -157
@@ -0,0 +1,377 @@
1
+ import sys
2
+ from pathlib import Path
3
+
4
+ import pytest
5
+
6
+ sys.path.append(str(Path(__file__).resolve().parents[1]))
7
+
8
+ from chart_contract import ( # noqa: E402
9
+ SUPPORTED_CHART_TYPES,
10
+ chart_quality_warnings,
11
+ validate_chart_data_compatibility,
12
+ validate_chart_field_compatibility,
13
+ validate_chart_intent_metadata,
14
+ validate_chart_presentation_options,
15
+ validate_chart_type,
16
+ )
17
+ from design_contract import validate_design_contract # noqa: E402
18
+ from package_utils import ( # noqa: E402
19
+ ContractError,
20
+ copy_template,
21
+ slugify,
22
+ validate_no_sensitive_files,
23
+ validate_relative_source_path,
24
+ )
25
+
26
+
27
+ def test_slugify_uses_stable_package_safe_default() -> None:
28
+ assert slugify("Codex Workspace Adoption!", "fallback") == "codex-workspace-adoption"
29
+ assert slugify("...", "fallback") == "fallback"
30
+
31
+
32
+ def test_copy_template_omits_generated_app_artifacts(tmp_path: Path) -> None:
33
+ template = tmp_path / "template"
34
+ template.mkdir()
35
+ (template / "src").mkdir()
36
+ (template / "src" / "App.tsx").write_text("export {};\n", encoding="utf-8")
37
+ (template / "dist").mkdir()
38
+ (template / "dist" / "bundle.js").write_text("generated\n", encoding="utf-8")
39
+ (template / "node_modules").mkdir()
40
+ (template / "node_modules" / "package.js").write_text("generated\n", encoding="utf-8")
41
+
42
+ output = tmp_path / "output"
43
+ copy_template(template, output)
44
+
45
+ assert (output / "src" / "App.tsx").exists()
46
+ assert not (output / "dist").exists()
47
+ assert not (output / "node_modules").exists()
48
+
49
+
50
+ def test_copy_template_materializes_symlinked_runtime_files(tmp_path: Path) -> None:
51
+ runtime = tmp_path / "runtime"
52
+ template = tmp_path / "template"
53
+ runtime.mkdir()
54
+ template.mkdir()
55
+ (runtime / "tokens.css").write_text(":root { --ds-surface: #fff; }\n", encoding="utf-8")
56
+ (template / "tokens.css").symlink_to(runtime / "tokens.css")
57
+
58
+ output = tmp_path / "output"
59
+ copy_template(template, output)
60
+
61
+ assert (output / "tokens.css").read_text(encoding="utf-8") == ":root { --ds-surface: #fff; }\n"
62
+ assert not (output / "tokens.css").is_symlink()
63
+
64
+
65
+ def test_validate_relative_source_path_stays_inside_package(tmp_path: Path) -> None:
66
+ with pytest.raises(ContractError, match="inside the analytics app package"):
67
+ validate_relative_source_path(tmp_path, "../queries.sql", "manifest.sources[0]")
68
+
69
+
70
+ def test_validate_relative_source_path_uses_custom_package_label(tmp_path: Path) -> None:
71
+ with pytest.raises(ContractError, match="inside the dashboard package"):
72
+ validate_relative_source_path(
73
+ tmp_path, "../queries.sql", "manifest.sources[0]", "dashboard package"
74
+ )
75
+
76
+
77
+ def test_validate_no_sensitive_files_rejects_private_keys(tmp_path: Path) -> None:
78
+ (tmp_path / "id_rsa").write_text("secret\n", encoding="utf-8")
79
+
80
+ with pytest.raises(ContractError, match="sensitive files"):
81
+ validate_no_sensitive_files(tmp_path, "report")
82
+
83
+
84
+ def test_shared_chart_contract_rejects_removed_or_malformed_chart_types() -> None:
85
+ assert "bullet" not in SUPPORTED_CHART_TYPES
86
+ assert validate_chart_type("line", "manifest.charts[0]") == "line"
87
+
88
+ with pytest.raises(ContractError, match="must be one of"):
89
+ validate_chart_type("bullet", "manifest.charts[0]")
90
+
91
+
92
+ def test_shared_chart_contract_requires_intent_and_chart_type_fit() -> None:
93
+ trend_chart = {
94
+ "id": "active_users",
95
+ "title": "Active users trend",
96
+ "type": "line",
97
+ "intent": "trend",
98
+ "question": "How are active users moving by week?",
99
+ "rationale": "A line chart fits a weekly time series and makes trend shape easy to compare.",
100
+ "dataset": "active_users",
101
+ "encodings": {"x": {"field": "week"}, "y": {"field": "wau"}},
102
+ }
103
+ assert (
104
+ validate_chart_intent_metadata(trend_chart, "manifest.charts[0]", require=True) == "trend"
105
+ )
106
+
107
+ with pytest.raises(ContractError, match="intent is required"):
108
+ validate_chart_intent_metadata(
109
+ {**trend_chart, "intent": None}, "manifest.charts[0]", require=True
110
+ )
111
+
112
+ with pytest.raises(ContractError, match="not compatible"):
113
+ validate_chart_intent_metadata(
114
+ {**trend_chart, "intent": "distribution"}, "manifest.charts[0]", require=True
115
+ )
116
+
117
+ custom_chart = {
118
+ **trend_chart,
119
+ "intent": "custom",
120
+ "rationale": "The user explicitly asked for this unusual line-based diagnostic view.",
121
+ }
122
+ assert (
123
+ validate_chart_intent_metadata(custom_chart, "manifest.charts[0]", require=True) == "custom"
124
+ )
125
+
126
+
127
+ def test_shared_chart_contract_allows_grouped_scatter_encodings() -> None:
128
+ validate_chart_data_compatibility(
129
+ {
130
+ "id": "relationship",
131
+ "title": "Activation and retention by segment",
132
+ "type": "scatter",
133
+ "dataset": "segments",
134
+ "encodings": {
135
+ "x": {"field": "users"},
136
+ "y": {"field": "activation"},
137
+ "color": {"field": "segment"},
138
+ },
139
+ "combinationRationale": "Color groups segment-level relationships without pivoting the Y measure.",
140
+ },
141
+ [
142
+ {"segment": "A", "users": 100, "activation": 0.45},
143
+ {"segment": "B", "users": 240, "activation": 0.58},
144
+ ],
145
+ "manifest.charts[0]",
146
+ )
147
+
148
+
149
+ def test_shared_chart_contract_allows_hardened_presentation_options() -> None:
150
+ validate_chart_presentation_options(
151
+ {
152
+ "id": "usage-trend",
153
+ "palette": {"kind": "semantic", "name": "actual-vs-forecast"},
154
+ "legend": {
155
+ "interactive": True,
156
+ "position": "bottom",
157
+ "sort": "labelAsc",
158
+ "title": "Segment",
159
+ },
160
+ "labels": {"values": "endpoints"},
161
+ "referenceLines": [
162
+ {
163
+ "axis": "y",
164
+ "color": "neutral",
165
+ "label": "Target",
166
+ "lineStyle": "dashed",
167
+ "value": 100,
168
+ }
169
+ ],
170
+ },
171
+ "manifest.charts[0]",
172
+ )
173
+
174
+
175
+ def test_shared_chart_contract_rejects_invalid_presentation_options() -> None:
176
+ with pytest.raises(ContractError, match="palette.kind"):
177
+ validate_chart_presentation_options(
178
+ {"palette": {"kind": "rainbow"}},
179
+ "manifest.charts[0]",
180
+ )
181
+
182
+ with pytest.raises(ContractError, match="labels.values"):
183
+ validate_chart_presentation_options(
184
+ {"labels": {"values": "everywhere"}},
185
+ "manifest.charts[0]",
186
+ )
187
+
188
+ with pytest.raises(ContractError, match="referenceLines\\[0\\].color"):
189
+ validate_chart_presentation_options(
190
+ {"referenceLines": [{"value": 0, "color": "brand"}]},
191
+ "manifest.charts[0]",
192
+ )
193
+
194
+
195
+ def test_shared_chart_contract_requires_categorical_palette_for_metric_movement() -> None:
196
+ with pytest.raises(ContractError, match="distinct category"):
197
+ validate_chart_field_compatibility(
198
+ "bar",
199
+ "metric",
200
+ ["change_pct"],
201
+ "manifest.charts[0]",
202
+ )
203
+
204
+ validate_chart_field_compatibility(
205
+ "horizontalBar",
206
+ "metric",
207
+ ["wow_change"],
208
+ "manifest.charts[0]",
209
+ {"palette": {"kind": "categorical"}},
210
+ )
211
+
212
+ with pytest.raises(ContractError, match="omit fixed measure colors"):
213
+ validate_chart_field_compatibility(
214
+ "horizontalBar",
215
+ "metric",
216
+ ["wow_change"],
217
+ "manifest.charts[0]",
218
+ {"palette": {"kind": "categorical"}, "encodings": {"color": {"scale": "green"}}},
219
+ )
220
+
221
+ with pytest.raises(ContractError, match="ranks metric definitions"):
222
+ validate_chart_field_compatibility(
223
+ "leaderboard",
224
+ "metric",
225
+ ["latest_value"],
226
+ "manifest.charts[1]",
227
+ )
228
+
229
+
230
+ def test_shared_chart_contract_rejects_latest_active_user_leaderboard() -> None:
231
+ chart = {
232
+ "id": "latest_active_user_values",
233
+ "title": "Latest DAU WAU MAU values",
234
+ "type": "leaderboard",
235
+ "intent": "lookup",
236
+ "question": "What are the latest DAU, WAU, and MAU values?",
237
+ "rationale": "This intentionally bad fixture should be rejected before it ranks KPI definitions.",
238
+ "dataset": "latest_active_users",
239
+ "encodings": {"x": {"field": "metric_name"}, "y": {"field": "latest_value"}},
240
+ }
241
+
242
+ with pytest.raises(ContractError, match="ranks metric definitions"):
243
+ validate_chart_field_compatibility(
244
+ "leaderboard",
245
+ chart["encodings"]["x"]["field"],
246
+ [chart["encodings"]["y"]["field"]],
247
+ "manifest.charts[0]",
248
+ chart,
249
+ )
250
+
251
+
252
+ def test_shared_chart_quality_warnings_flag_redundant_questions() -> None:
253
+ chart = {
254
+ "id": "wau_trend",
255
+ "title": "WAU trend",
256
+ "type": "line",
257
+ "intent": "trend",
258
+ "question": "How is WAU trending?",
259
+ "rationale": "A line chart is the right family for a weekly user metric over time.",
260
+ "dataset": "active_users",
261
+ "encodings": {"x": {"field": "week"}, "y": {"field": "wau"}},
262
+ }
263
+ sibling = {**chart, "id": "wau_trend_copy"}
264
+
265
+ warnings = chart_quality_warnings(chart, sibling_charts=[chart, sibling])
266
+
267
+ assert "Chart repeats another chart question." in warnings
268
+
269
+
270
+ def test_shared_chart_contract_rejects_mixed_scale_measures() -> None:
271
+ with pytest.raises(ContractError, match="materially different scales"):
272
+ validate_chart_data_compatibility(
273
+ {
274
+ "id": "movement",
275
+ "title": "Movement",
276
+ "type": "line",
277
+ "dataset": "trend",
278
+ "encodings": {"x": {"field": "week"}, "y": {"fields": ["large", "small"]}},
279
+ },
280
+ [
281
+ {"week": "W1", "large": 1_000_000, "small": 10},
282
+ {"week": "W2", "large": 1_200_000, "small": 12},
283
+ ],
284
+ "manifest.charts[0]",
285
+ )
286
+
287
+
288
+ def test_shared_chart_contract_rejects_non_numeric_measure_fields() -> None:
289
+ with pytest.raises(ContractError, match="must reference a numeric dataset field"):
290
+ validate_chart_data_compatibility(
291
+ {
292
+ "id": "product_line_share",
293
+ "title": "Product-line share by country",
294
+ "type": "bar",
295
+ "dataset": "product_line_share",
296
+ "encodings": {"x": {"field": "country_name"}, "y": {"field": "product_line"}},
297
+ },
298
+ [
299
+ {"country_name": "India", "product_line": "Consumer", "share_pct": 71},
300
+ {"country_name": "India", "product_line": "API", "share_pct": 18},
301
+ ],
302
+ "manifest.charts[0]",
303
+ )
304
+
305
+
306
+ def test_design_contract_validates_template_file() -> None:
307
+ template_root = Path(__file__).resolve().parents[3]
308
+
309
+ validate_design_contract(template_root)
310
+
311
+
312
+ def test_design_contract_requires_frontmatter(tmp_path: Path) -> None:
313
+ (tmp_path / "DESIGN.md").write_text("# Missing front matter\n", encoding="utf-8")
314
+
315
+ with pytest.raises(ContractError, match="front matter"):
316
+ validate_design_contract(tmp_path)
317
+
318
+
319
+ def test_design_contract_requires_design_tokens(tmp_path: Path) -> None:
320
+ (tmp_path / "DESIGN.md").write_text(
321
+ """---
322
+ name: Example
323
+ description: Generic design file
324
+ colors: {}
325
+ typography: {}
326
+ spacing: {}
327
+ rounded: {}
328
+ surfaces: {}
329
+ components:
330
+ top-bar: {}
331
+ metric-card: {}
332
+ report-block: {}
333
+ chart-block: {}
334
+ table-list: {}
335
+ popover-menu: {}
336
+ implementation: {}
337
+ ---
338
+
339
+ # Example
340
+
341
+ ## Overview
342
+
343
+ Generated artifacts are customizable.
344
+
345
+ ## Colors
346
+
347
+ Generic source.
348
+
349
+ ## Typography
350
+
351
+ Generic tokens.
352
+
353
+ ## Layout
354
+
355
+ Generic surfaces.
356
+
357
+ ## Elevation & Depth
358
+
359
+ Generic elevation.
360
+
361
+ ## Shapes
362
+
363
+ Generic shapes.
364
+
365
+ ## Components
366
+
367
+ Generic components.
368
+
369
+ ## Do's and Don'ts
370
+
371
+ Generic visuals.
372
+ """,
373
+ encoding="utf-8",
374
+ )
375
+
376
+ with pytest.raises(ContractError, match="design token"):
377
+ validate_design_contract(tmp_path)