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,75 @@
1
+ #!/usr/bin/env python3
2
+ """Fail when analytics app runtime paths drift from their expected layout."""
3
+
4
+ from __future__ import annotations
5
+
6
+ from pathlib import Path
7
+
8
+ PLUGIN_ROOT = Path(__file__).resolve().parents[3]
9
+ ANALYTICS_APP_SRC = PLUGIN_ROOT / "src" / "analytics-app"
10
+
11
+ EXPECTED_LOCAL_PATHS = {
12
+ ANALYTICS_APP_SRC / "charting": [
13
+ "ChartFrame.tsx",
14
+ "ChartLegend.tsx",
15
+ "ChartRenderer.tsx",
16
+ "ChartTooltip.tsx",
17
+ "chart-capabilities.ts",
18
+ "chart-compatibility.ts",
19
+ "chart-contract.ts",
20
+ "chart-theme.ts",
21
+ "chart-tokens.css",
22
+ "chart-transforms.ts",
23
+ ],
24
+ ANALYTICS_APP_SRC / "tables": [
25
+ "DataTable.d.ts",
26
+ "DataTable.jsx",
27
+ "data-table.css",
28
+ ],
29
+ ANALYTICS_APP_SRC / "layout": [
30
+ "AnalyticsLayoutCanvas.tsx",
31
+ "RichMarkdown.tsx",
32
+ "analyticsLayoutCore.ts",
33
+ ],
34
+ ANALYTICS_APP_SRC / "fonts": [
35
+ "SystemSansVariableVF.woff2",
36
+ ],
37
+ }
38
+
39
+ EXPECTED_LOCAL_FILES = [
40
+ ANALYTICS_APP_SRC / "analytics-layout.test.mjs",
41
+ ANALYTICS_APP_SRC / "main.tsx",
42
+ ANALYTICS_APP_SRC / "tokens.css",
43
+ ]
44
+
45
+
46
+ def layout_problems() -> list[str]:
47
+ problems: list[str] = []
48
+ for path, required_files in EXPECTED_LOCAL_PATHS.items():
49
+ if path.is_symlink():
50
+ problems.append(f"{path.relative_to(PLUGIN_ROOT)} must be a real directory")
51
+ continue
52
+ if not path.is_dir():
53
+ problems.append(f"{path.relative_to(PLUGIN_ROOT)} is not a directory")
54
+ continue
55
+ for filename in required_files:
56
+ if not (path / filename).is_file():
57
+ problems.append(f"{(path / filename).relative_to(PLUGIN_ROOT)} is missing")
58
+ for path in EXPECTED_LOCAL_FILES:
59
+ if path.is_symlink():
60
+ problems.append(f"{path.relative_to(PLUGIN_ROOT)} must be a real file")
61
+ elif not path.is_file():
62
+ problems.append(f"{path.relative_to(PLUGIN_ROOT)} is missing")
63
+ return problems
64
+
65
+
66
+ def main() -> int:
67
+ problems = layout_problems()
68
+ if problems:
69
+ names = "\n".join(f" - {problem}" for problem in problems)
70
+ raise SystemExit(f"Analytics app runtime layout is out of sync:\n{names}")
71
+ return 0
72
+
73
+
74
+ if __name__ == "__main__":
75
+ raise SystemExit(main())
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env python3
2
+ """Shared DESIGN.md contract checks for generated analytics app packages."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import re
7
+ from pathlib import Path
8
+
9
+ from package_utils import ContractError
10
+
11
+ CANONICAL_DESIGN_SECTIONS = [
12
+ "Overview",
13
+ "Colors",
14
+ "Typography",
15
+ "Layout",
16
+ "Elevation & Depth",
17
+ "Shapes",
18
+ "Components",
19
+ "Do's and Don'ts",
20
+ ]
21
+ REQUIRED_FRONTMATTER_KEYS = (
22
+ "name",
23
+ "description",
24
+ "colors",
25
+ "typography",
26
+ "spacing",
27
+ "rounded",
28
+ "surfaces",
29
+ "components",
30
+ "implementation",
31
+ )
32
+ REQUIRED_DESIGN_TOKENS = (
33
+ "bg/primary",
34
+ "bg/secondary",
35
+ "bg/tertiary",
36
+ "border/light",
37
+ "border/default",
38
+ "text/primary",
39
+ "text/secondary",
40
+ "text/tertiary",
41
+ "icon/accent",
42
+ "space-12",
43
+ "space-24",
44
+ "corner-radius/cr-24",
45
+ "elevation/01",
46
+ "blue/500",
47
+ "green/700",
48
+ "purple/500",
49
+ )
50
+ REQUIRED_TYPE_TOKENS = (
51
+ "System Sans Variable",
52
+ "text/xs/normal",
53
+ "text/xs/semibold",
54
+ "text/sm/normal",
55
+ "text/sm/medium",
56
+ "heading/md/medium",
57
+ "heading/2xl",
58
+ )
59
+ REQUIRED_SURFACE_MEASUREMENTS = (
60
+ "1140px",
61
+ "800px",
62
+ "48px",
63
+ "24px",
64
+ )
65
+ REQUIRED_COMPONENT_NAMES = (
66
+ "top-bar",
67
+ "metric-card",
68
+ "report-block",
69
+ "chart-block",
70
+ "table-list",
71
+ "popover-menu",
72
+ )
73
+
74
+
75
+ def split_design_file(markdown: str, path: Path) -> tuple[str, str]:
76
+ if not markdown.startswith("---\n"):
77
+ raise ContractError(f"{path.name} must start with YAML front matter")
78
+ try:
79
+ _opening, frontmatter, body = markdown.split("---\n", 2)
80
+ except ValueError as exc:
81
+ raise ContractError(f"{path.name} must contain closed YAML front matter") from exc
82
+ if not frontmatter.strip():
83
+ raise ContractError(f"{path.name} front matter must not be empty")
84
+ if not body.strip():
85
+ raise ContractError(f"{path.name} body must not be empty")
86
+ return frontmatter, body
87
+
88
+
89
+ def require_frontmatter_key(frontmatter: str, key: str, path: Path) -> None:
90
+ if not re.search(rf"^{re.escape(key)}\s*:", frontmatter, flags=re.MULTILINE):
91
+ raise ContractError(f"{path.name} front matter must define {key}")
92
+
93
+
94
+ def require_text_anchor(markdown: str, anchor: str, path: Path, group: str) -> None:
95
+ if anchor not in markdown:
96
+ raise ContractError(f"{path.name} must include {group} anchor: {anchor}")
97
+
98
+
99
+ def section_positions(body: str) -> dict[str, int]:
100
+ positions: dict[str, int] = {}
101
+ for match in re.finditer(r"^##\s+(.+?)\s*$", body, flags=re.MULTILINE):
102
+ title = match.group(1).strip()
103
+ if title in CANONICAL_DESIGN_SECTIONS:
104
+ positions[title] = match.start()
105
+ return positions
106
+
107
+
108
+ def validate_design_contract(root: Path) -> None:
109
+ path = root / "DESIGN.md"
110
+ if not path.exists():
111
+ raise ContractError("analytics app package must include DESIGN.md")
112
+
113
+ markdown = path.read_text(encoding="utf-8")
114
+ frontmatter, body = split_design_file(markdown, path)
115
+
116
+ for key in REQUIRED_FRONTMATTER_KEYS:
117
+ require_frontmatter_key(frontmatter, key, path)
118
+
119
+ for token in REQUIRED_DESIGN_TOKENS:
120
+ require_text_anchor(markdown, token, path, "design token")
121
+ for token in REQUIRED_TYPE_TOKENS:
122
+ require_text_anchor(markdown, token, path, "typography token")
123
+ for measurement in REQUIRED_SURFACE_MEASUREMENTS:
124
+ require_text_anchor(markdown, measurement, path, "surface measurement")
125
+ for component in REQUIRED_COMPONENT_NAMES:
126
+ require_text_anchor(frontmatter, component, path, "component recipe")
127
+
128
+ positions = section_positions(body)
129
+ missing_sections = [
130
+ section for section in CANONICAL_DESIGN_SECTIONS if section not in positions
131
+ ]
132
+ if missing_sections:
133
+ raise ContractError(f"{path.name} is missing sections: {missing_sections}")
134
+ ordered_positions = [positions[section] for section in CANONICAL_DESIGN_SECTIONS]
135
+ if ordered_positions != sorted(ordered_positions):
136
+ raise ContractError(f"{path.name} sections must follow the canonical DESIGN.md order")
137
+
138
+ lower_body = body.lower()
139
+ if "decorative orb" in lower_body or "bokeh" in lower_body:
140
+ raise ContractError(f"{path.name} must not encourage decorative effects")
141
+ if "customiz" not in lower_body and "customis" not in lower_body:
142
+ raise ContractError(f"{path.name} must explain how users can customize outputs")
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env python3
2
+ """Shared helpers for generated data analytics app packages."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import fnmatch
7
+ import json
8
+ import shutil
9
+ from pathlib import Path
10
+ from typing import Any
11
+
12
+
13
+ class ContractError(Exception):
14
+ """Raised when an analytics app package does not satisfy its contract."""
15
+
16
+
17
+ ALLOWED_SOURCE_EXTENSIONS = {".csv", ".json", ".md", ".sql", ".tsv", ".txt"}
18
+ SENSITIVE_FILE_NAMES = {".env", ".env.local", ".env.production", ".env.staging"}
19
+ SENSITIVE_FILE_GLOBS = {"*.pem", "*.key", "*.p12", "*.pfx", "id_rsa*", "id_ed25519*"}
20
+ SENSITIVE_SCAN_SKIP_DIRS = {
21
+ ".git",
22
+ ".pytest_cache",
23
+ ".ruff_cache",
24
+ ".vite",
25
+ "build",
26
+ "dist",
27
+ "node_modules",
28
+ "__pycache__",
29
+ }
30
+ TEMPLATE_IGNORE_PATTERNS = (
31
+ ".dashboard-data",
32
+ ".report-data",
33
+ "dist",
34
+ "node_modules",
35
+ )
36
+
37
+
38
+ def slugify(value: str, fallback: str) -> str:
39
+ chars: list[str] = []
40
+ previous_dash = False
41
+ for char in value.lower():
42
+ if char.isalnum():
43
+ chars.append(char)
44
+ previous_dash = False
45
+ elif not previous_dash:
46
+ chars.append("-")
47
+ previous_dash = True
48
+ slug = "".join(chars).strip("-")
49
+ return slug or fallback
50
+
51
+
52
+ def load_json(path: Path) -> dict[str, Any]:
53
+ if not path.exists():
54
+ raise ContractError(f"Missing required file: {path}")
55
+ try:
56
+ value = json.loads(path.read_text(encoding="utf-8"))
57
+ except json.JSONDecodeError as exc:
58
+ raise ContractError(f"Invalid JSON in {path}: {exc}") from exc
59
+ if not isinstance(value, dict):
60
+ raise ContractError(f"{path} must contain a JSON object")
61
+ return value
62
+
63
+
64
+ def write_json(path: Path, payload: dict[str, Any]) -> None:
65
+ path.write_text(f"{json.dumps(payload, indent=2)}\n", encoding="utf-8")
66
+
67
+
68
+ def copy_template(template: Path, output: Path, *, force: bool = False) -> None:
69
+ output = output.resolve()
70
+ if output.exists() and any(output.iterdir()) and not force:
71
+ raise RuntimeError(f"{output} already exists and is not empty; pass --force to replace it")
72
+ if output.exists() and force:
73
+ shutil.rmtree(output)
74
+ shutil.copytree(
75
+ template,
76
+ output,
77
+ ignore=shutil.ignore_patterns(*TEMPLATE_IGNORE_PATTERNS),
78
+ )
79
+
80
+
81
+ def require_string(obj: dict[str, Any], field: str, path: str) -> str:
82
+ value = obj.get(field)
83
+ if not isinstance(value, str) or not value.strip():
84
+ raise ContractError(f"{path}.{field} must be a non-empty string")
85
+ return value
86
+
87
+
88
+ def optional_list(obj: dict[str, Any], field: str, path: str) -> list[Any]:
89
+ value = obj.get(field, [])
90
+ if not isinstance(value, list):
91
+ raise ContractError(f"{path}.{field} must be a list when present")
92
+ return value
93
+
94
+
95
+ def require_list(obj: dict[str, Any], field: str, path: str) -> list[Any]:
96
+ value = obj.get(field)
97
+ if not isinstance(value, list):
98
+ raise ContractError(f"{path}.{field} must be a list")
99
+ return value
100
+
101
+
102
+ def require_unique_ids(items: list[Any], field_path: str) -> None:
103
+ seen: set[str] = set()
104
+ for idx, item in enumerate(items):
105
+ if not isinstance(item, dict):
106
+ continue
107
+ item_id = item.get("id")
108
+ if not isinstance(item_id, str) or not item_id.strip():
109
+ continue
110
+ if item_id in seen:
111
+ raise ContractError(f"{field_path}[{idx}].id must be unique")
112
+ seen.add(item_id)
113
+
114
+
115
+ def validate_relative_source_path(
116
+ root: Path, source_path: str, path: str, package_label: str = "analytics app package"
117
+ ) -> None:
118
+ candidate = (root / source_path).resolve()
119
+ try:
120
+ candidate.relative_to(root.resolve())
121
+ except ValueError as exc:
122
+ raise ContractError(f"{path}.path must stay inside the {package_label}") from exc
123
+ if candidate.is_dir():
124
+ raise ContractError(f"{path}.path must point to a file, not a directory")
125
+ if candidate.suffix.lower() not in ALLOWED_SOURCE_EXTENSIONS:
126
+ raise ContractError(f"{path}.path must use one of {sorted(ALLOWED_SOURCE_EXTENSIONS)}")
127
+
128
+
129
+ def validate_no_sensitive_files(root: Path, package_label: str = "analytics app") -> None:
130
+ for path in root.rglob("*"):
131
+ if not path.is_file():
132
+ continue
133
+ relative = path.relative_to(root)
134
+ if any(part in SENSITIVE_SCAN_SKIP_DIRS for part in relative.parts[:-1]):
135
+ continue
136
+ name = path.name
137
+ if name in SENSITIVE_FILE_NAMES or any(
138
+ fnmatch.fnmatch(name, pattern) for pattern in SENSITIVE_FILE_GLOBS
139
+ ):
140
+ raise ContractError(
141
+ f"{package_label} package must not include sensitive files: {relative}"
142
+ )