integrate-ui 0.1.0__tar.gz

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 (389) hide show
  1. integrate_ui-0.1.0/.claude/agents/core-dev.md +34 -0
  2. integrate_ui-0.1.0/.claude/agents/desktop-dev.md +34 -0
  3. integrate_ui-0.1.0/.claude/agents/docs-writer.md +34 -0
  4. integrate_ui-0.1.0/.claude/agents/parity-scout.md +34 -0
  5. integrate_ui-0.1.0/.claude/agents/qa.md +34 -0
  6. integrate_ui-0.1.0/.claude/agents/reviewer.md +34 -0
  7. integrate_ui-0.1.0/.claude/agents/ux-architect.md +34 -0
  8. integrate_ui-0.1.0/.claude/agents/viz-dev.md +34 -0
  9. integrate_ui-0.1.0/.claude/agents/web-dev.md +34 -0
  10. integrate_ui-0.1.0/.claude/commands/new-feature.md +35 -0
  11. integrate_ui-0.1.0/.claude/commands/parity-scan.md +23 -0
  12. integrate_ui-0.1.0/.github/agent-ownership.yml +67 -0
  13. integrate_ui-0.1.0/.github/workflows/ci.yml +263 -0
  14. integrate_ui-0.1.0/.github/workflows/parity-weekly.yml +124 -0
  15. integrate_ui-0.1.0/.gitignore +11 -0
  16. integrate_ui-0.1.0/.python-version +1 -0
  17. integrate_ui-0.1.0/AGENT.md +131 -0
  18. integrate_ui-0.1.0/CLAUDE.md +1 -0
  19. integrate_ui-0.1.0/DAUGAARD_POST_XLS_EM_BH_N10001_iN2__6266_5431_profile_M1XLS_EM_BH.png +0 -0
  20. integrate_ui-0.1.0/DAUGAARD_POST_XLS_EM_BH_N10001_iN2__6266_5431_profile_M2XLS_EM_BH.png +0 -0
  21. integrate_ui-0.1.0/LICENSE +21 -0
  22. integrate_ui-0.1.0/PKG-INFO +266 -0
  23. integrate_ui-0.1.0/README.md +245 -0
  24. integrate_ui-0.1.0/docs/PLAN.md +311 -0
  25. integrate_ui-0.1.0/docs/ROADMAP.md +154 -0
  26. integrate_ui-0.1.0/docs/STATUS.md +271 -0
  27. integrate_ui-0.1.0/docs/decisions/ADR-0001-architecture.md +58 -0
  28. integrate_ui-0.1.0/docs/decisions/ADR-0002-library-pin.md +80 -0
  29. integrate_ui-0.1.0/docs/decisions/ADR-0003-agent-definitions.md +117 -0
  30. integrate_ui-0.1.0/docs/decisions/ADR-0004-desktop-shell.md +185 -0
  31. integrate_ui-0.1.0/docs/decisions/ADR-0005-rendering-stack.md +442 -0
  32. integrate_ui-0.1.0/docs/decisions/ADR-0006-forms.md +182 -0
  33. integrate_ui-0.1.0/docs/decisions/ADR-0007-array-transfer.md +272 -0
  34. integrate_ui-0.1.0/docs/decisions/ADR-0008-agent-md-sync-at-phase-0-exit.md +206 -0
  35. integrate_ui-0.1.0/docs/decisions/ADR-0009-local-server-token-and-project-root.md +345 -0
  36. integrate_ui-0.1.0/docs/decisions/ADR-0010-writing-results-into-the-project.md +57 -0
  37. integrate_ui-0.1.0/docs/decisions/ADR-0011-3d-voronoi-view-vtkjs.md +84 -0
  38. integrate_ui-0.1.0/docs/decisions/ADR-0012-native-pyvista-3d-viewer.md +36 -0
  39. integrate_ui-0.1.0/docs/decisions/ADR-0013-library-error-detail-on-failed-jobs.md +33 -0
  40. integrate_ui-0.1.0/docs/decisions/TEMPLATE.md +17 -0
  41. integrate_ui-0.1.0/docs/design/data-browser.md +218 -0
  42. integrate_ui-0.1.0/docs/design/explore-profile.md +212 -0
  43. integrate_ui-0.1.0/docs/design/tokens.json +61 -0
  44. integrate_ui-0.1.0/docs/design/view-3d.md +366 -0
  45. integrate_ui-0.1.0/docs/parity/PARITY.md +168 -0
  46. integrate_ui-0.1.0/docs/parity/UPSTREAM.md +29 -0
  47. integrate_ui-0.1.0/docs/parity/api_snapshot.json +1697 -0
  48. integrate_ui-0.1.0/docs/parity/upstream-requests.md +300 -0
  49. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-18-phase0-bootstrap.md +298 -0
  50. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-20-hardening-part-3.md +55 -0
  51. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-20-local-server-hardening.md +69 -0
  52. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-20-project-open.md +62 -0
  53. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-20-serve-built-ui.md +83 -0
  54. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-20-token-and-project-root.md +96 -0
  55. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-21-csp-and-docs.md +63 -0
  56. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-21-decision-slice1.md +35 -0
  57. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-21-explore-posterior.md +57 -0
  58. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-21-h5-inspector.md +65 -0
  59. integrate_ui-0.1.0/docs/superpowers/plans/2026-10-21-web-project-view.md +66 -0
  60. integrate_ui-0.1.0/docs/superpowers/plans/2026-11-03-data-browser.md +168 -0
  61. integrate_ui-0.1.0/pypi_build_script +116 -0
  62. integrate_ui-0.1.0/pyproject.toml +62 -0
  63. integrate_ui-0.1.0/run_gui.sh +3 -0
  64. integrate_ui-0.1.0/spikes/s1-shell/.gitignore +3 -0
  65. integrate_ui-0.1.0/spikes/s1-shell/README.md +30 -0
  66. integrate_ui-0.1.0/spikes/s1-shell/bench.py +159 -0
  67. integrate_ui-0.1.0/spikes/s1-shell/launcher.py +365 -0
  68. integrate_ui-0.1.0/spikes/s1-shell/serve_ui.py +31 -0
  69. integrate_ui-0.1.0/spikes/s2-render/.gitignore +4 -0
  70. integrate_ui-0.1.0/spikes/s2-render/README.md +107 -0
  71. integrate_ui-0.1.0/spikes/s2-render/build.mjs +23 -0
  72. integrate_ui-0.1.0/spikes/s2-render/package-lock.json +934 -0
  73. integrate_ui-0.1.0/spikes/s2-render/package.json +16 -0
  74. integrate_ui-0.1.0/spikes/s2-render/results/bundle_sizes.json +14 -0
  75. integrate_ui-0.1.0/spikes/s2-render/results/gpu-diag-canvas2d-bitmap.json +1 -0
  76. integrate_ui-0.1.0/spikes/s2-render/results/gpu.json +1 -0
  77. integrate_ui-0.1.0/spikes/s2-render/results/swiftshader-4core.json +1 -0
  78. integrate_ui-0.1.0/spikes/s2-render/results/swiftshader-diag-canvas2d-bitmap.json +1 -0
  79. integrate_ui-0.1.0/spikes/s2-render/results/swiftshader-diag-canvas2d-wrf.json +1 -0
  80. integrate_ui-0.1.0/spikes/s2-render/results/swiftshader-diag-deck-nostroke.json +1 -0
  81. integrate_ui-0.1.0/spikes/s2-render/results/swiftshader-diag-webgl-instanced.json +1 -0
  82. integrate_ui-0.1.0/spikes/s2-render/results/swiftshader.json +1 -0
  83. integrate_ui-0.1.0/spikes/s2-render/run.mjs +180 -0
  84. integrate_ui-0.1.0/spikes/s2-render/src/common.js +230 -0
  85. integrate_ui-0.1.0/spikes/s2-render/src/entry_canvas2d.js +3 -0
  86. integrate_ui-0.1.0/spikes/s2-render/src/entry_deck.js +3 -0
  87. integrate_ui-0.1.0/spikes/s2-render/src/entry_webgl.js +3 -0
  88. integrate_ui-0.1.0/spikes/s2-render/src/measure.js +226 -0
  89. integrate_ui-0.1.0/spikes/s2-render/src/r_canvas2d.js +178 -0
  90. integrate_ui-0.1.0/spikes/s2-render/src/r_deck.js +157 -0
  91. integrate_ui-0.1.0/spikes/s2-render/src/r_webgl.js +289 -0
  92. integrate_ui-0.1.0/spikes/s3-forms/.gitignore +2 -0
  93. integrate_ui-0.1.0/spikes/s3-forms/README.md +18 -0
  94. integrate_ui-0.1.0/spikes/s3-forms/discoverability.py +70 -0
  95. integrate_ui-0.1.0/spikes/s3-forms/package-lock.json +1255 -0
  96. integrate_ui-0.1.0/spikes/s3-forms/package.json +19 -0
  97. integrate_ui-0.1.0/spikes/s3-forms/results.json +443 -0
  98. integrate_ui-0.1.0/spikes/s3-forms/run.mjs +204 -0
  99. integrate_ui-0.1.0/spikes/s3-forms/schemas/integrate_rejection.json +225 -0
  100. integrate_ui-0.1.0/spikes/s3-forms/schemas/plot_profile.json +199 -0
  101. integrate_ui-0.1.0/spikes/s3-forms/schemas/prior_model_layered.json +208 -0
  102. integrate_ui-0.1.0/spikes/s3-forms/specs.py +593 -0
  103. integrate_ui-0.1.0/spikes/s3-forms/src/custom.jsx +110 -0
  104. integrate_ui-0.1.0/spikes/s3-forms/src/entry-baseline.jsx +3 -0
  105. integrate_ui-0.1.0/spikes/s3-forms/src/entry-custom.jsx +8 -0
  106. integrate_ui-0.1.0/spikes/s3-forms/src/entry-rjsf.jsx +8 -0
  107. integrate_ui-0.1.0/spikes/s3-forms/src/rjsf.jsx +78 -0
  108. integrate_ui-0.1.0/spikes/s3-forms/src/rules.js +16 -0
  109. integrate_ui-0.1.0/spikes/s3-forms/src/test-entry.jsx +5 -0
  110. integrate_ui-0.1.0/spikes/s4-transfer/.gitignore +5 -0
  111. integrate_ui-0.1.0/spikes/s4-transfer/README.md +42 -0
  112. integrate_ui-0.1.0/spikes/s4-transfer/build.mjs +3 -0
  113. integrate_ui-0.1.0/spikes/s4-transfer/diag.mjs +17 -0
  114. integrate_ui-0.1.0/spikes/s4-transfer/diag2.mjs +18 -0
  115. integrate_ui-0.1.0/spikes/s4-transfer/ergonomics/client-check.ts +21 -0
  116. integrate_ui-0.1.0/spikes/s4-transfer/ergonomics/neg-check.ts +10 -0
  117. integrate_ui-0.1.0/spikes/s4-transfer/ergonomics/openapi-binary.json +40 -0
  118. integrate_ui-0.1.0/spikes/s4-transfer/ergonomics/schema.d.ts +120 -0
  119. integrate_ui-0.1.0/spikes/s4-transfer/package-lock.json +1003 -0
  120. integrate_ui-0.1.0/spikes/s4-transfer/package.json +18 -0
  121. integrate_ui-0.1.0/spikes/s4-transfer/results/diag.txt +12 -0
  122. integrate_ui-0.1.0/spikes/s4-transfer/results/diag2.txt +20 -0
  123. integrate_ui-0.1.0/spikes/s4-transfer/results/results.json +704 -0
  124. integrate_ui-0.1.0/spikes/s4-transfer/run.mjs +85 -0
  125. integrate_ui-0.1.0/spikes/s4-transfer/server.py +213 -0
  126. integrate_ui-0.1.0/spikes/s4-transfer/src/client.js +89 -0
  127. integrate_ui-0.1.0/spikes/s4-transfer/src/index.html +1 -0
  128. integrate_ui-0.1.0/src/backend/integrate_ui/__init__.py +9 -0
  129. integrate_ui-0.1.0/src/backend/integrate_ui/__main__.py +8 -0
  130. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/__init__.py +1 -0
  131. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/data_arrays.py +1308 -0
  132. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/h5.py +516 -0
  133. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/library.py +212 -0
  134. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/library_calls.py +103 -0
  135. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/post_arrays.py +2052 -0
  136. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/query_job.py +533 -0
  137. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/query_worker.py +400 -0
  138. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/render.py +221 -0
  139. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/render_worker.py +238 -0
  140. integrate_ui-0.1.0/src/backend/integrate_ui/adapter/results_io.py +317 -0
  141. integrate_ui-0.1.0/src/backend/integrate_ui/api/__init__.py +1 -0
  142. integrate_ui-0.1.0/src/backend/integrate_ui/api/app.py +168 -0
  143. integrate_ui-0.1.0/src/backend/integrate_ui/api/data.py +413 -0
  144. integrate_ui-0.1.0/src/backend/integrate_ui/api/decision.py +38 -0
  145. integrate_ui-0.1.0/src/backend/integrate_ui/api/docs_assets/swagger-initializer.js +23 -0
  146. integrate_ui-0.1.0/src/backend/integrate_ui/api/docs_page.py +60 -0
  147. integrate_ui-0.1.0/src/backend/integrate_ui/api/explore.py +469 -0
  148. integrate_ui-0.1.0/src/backend/integrate_ui/api/fs.py +100 -0
  149. integrate_ui-0.1.0/src/backend/integrate_ui/api/headers.py +80 -0
  150. integrate_ui-0.1.0/src/backend/integrate_ui/api/jobs.py +419 -0
  151. integrate_ui-0.1.0/src/backend/integrate_ui/api/project.py +294 -0
  152. integrate_ui-0.1.0/src/backend/integrate_ui/api/results.py +217 -0
  153. integrate_ui-0.1.0/src/backend/integrate_ui/api/schemas.py +37 -0
  154. integrate_ui-0.1.0/src/backend/integrate_ui/api/security.py +166 -0
  155. integrate_ui-0.1.0/src/backend/integrate_ui/api/web_ui.py +76 -0
  156. integrate_ui-0.1.0/src/backend/integrate_ui/cli.py +293 -0
  157. integrate_ui-0.1.0/src/backend/integrate_ui/jobs/__init__.py +1 -0
  158. integrate_ui-0.1.0/src/backend/integrate_ui/jobs/errors.py +17 -0
  159. integrate_ui-0.1.0/src/backend/integrate_ui/jobs/models.py +619 -0
  160. integrate_ui-0.1.0/src/backend/integrate_ui/jobs/record.py +326 -0
  161. integrate_ui-0.1.0/src/backend/integrate_ui/jobs/registry.py +657 -0
  162. integrate_ui-0.1.0/src/backend/integrate_ui/project/__init__.py +1 -0
  163. integrate_ui-0.1.0/src/backend/integrate_ui/project/browse.py +109 -0
  164. integrate_ui-0.1.0/src/backend/integrate_ui/project/manifest.py +228 -0
  165. integrate_ui-0.1.0/src/backend/integrate_ui/project/paths.py +189 -0
  166. integrate_ui-0.1.0/src/backend/integrate_ui/project/results.py +477 -0
  167. integrate_ui-0.1.0/src/backend/integrate_ui/project/results_models.py +180 -0
  168. integrate_ui-0.1.0/src/backend/integrate_ui/project/scan.py +170 -0
  169. integrate_ui-0.1.0/src/backend/integrate_ui/project/service.py +197 -0
  170. integrate_ui-0.1.0/src/backend/integrate_ui/project/text.py +17 -0
  171. integrate_ui-0.1.0/src/web/index.html +12 -0
  172. integrate_ui-0.1.0/src/web/openapi.json +8522 -0
  173. integrate_ui-0.1.0/src/web/package-lock.json +2874 -0
  174. integrate_ui-0.1.0/src/web/package.json +32 -0
  175. integrate_ui-0.1.0/src/web/src/App.test.tsx +77 -0
  176. integrate_ui-0.1.0/src/web/src/App.tsx +58 -0
  177. integrate_ui-0.1.0/src/web/src/api/client.ts +8 -0
  178. integrate_ui-0.1.0/src/web/src/api/generated/schema.d.ts +5775 -0
  179. integrate_ui-0.1.0/src/web/src/main.tsx +12 -0
  180. integrate_ui-0.1.0/src/web/src/project/DataBrowser.test.tsx +231 -0
  181. integrate_ui-0.1.0/src/web/src/project/DataBrowser.tsx +249 -0
  182. integrate_ui-0.1.0/src/web/src/project/DataRegionPanel.test.tsx +423 -0
  183. integrate_ui-0.1.0/src/web/src/project/DataRegionPanel.tsx +332 -0
  184. integrate_ui-0.1.0/src/web/src/project/ExplorePanel.test.tsx +863 -0
  185. integrate_ui-0.1.0/src/web/src/project/ExplorePanel.tsx +274 -0
  186. integrate_ui-0.1.0/src/web/src/project/ExploreSection.test.tsx +500 -0
  187. integrate_ui-0.1.0/src/web/src/project/ExploreSection.tsx +332 -0
  188. integrate_ui-0.1.0/src/web/src/project/FigureOptions.test.tsx +328 -0
  189. integrate_ui-0.1.0/src/web/src/project/FigureOptions.tsx +160 -0
  190. integrate_ui-0.1.0/src/web/src/project/FigureSection.tsx +42 -0
  191. integrate_ui-0.1.0/src/web/src/project/FileList.test.tsx +241 -0
  192. integrate_ui-0.1.0/src/web/src/project/FolderBrowser.tsx +119 -0
  193. integrate_ui-0.1.0/src/web/src/project/FolderChooser.test.tsx +318 -0
  194. integrate_ui-0.1.0/src/web/src/project/H5Browser.tsx +278 -0
  195. integrate_ui-0.1.0/src/web/src/project/H5Inspector.test.tsx +199 -0
  196. integrate_ui-0.1.0/src/web/src/project/H5Inspector.tsx +206 -0
  197. integrate_ui-0.1.0/src/web/src/project/JsonText.test.tsx +47 -0
  198. integrate_ui-0.1.0/src/web/src/project/JsonText.tsx +72 -0
  199. integrate_ui-0.1.0/src/web/src/project/OpenProjectForm.tsx +122 -0
  200. integrate_ui-0.1.0/src/web/src/project/PostTabs.test.tsx +83 -0
  201. integrate_ui-0.1.0/src/web/src/project/PostTabs.tsx +97 -0
  202. integrate_ui-0.1.0/src/web/src/project/ProjectView.test.tsx +413 -0
  203. integrate_ui-0.1.0/src/web/src/project/ProjectView.tsx +182 -0
  204. integrate_ui-0.1.0/src/web/src/project/Voronoi3dPanel.test.tsx +686 -0
  205. integrate_ui-0.1.0/src/web/src/project/Voronoi3dPanel.tsx +737 -0
  206. integrate_ui-0.1.0/src/web/src/project/Voronoi3dRail.tsx +185 -0
  207. integrate_ui-0.1.0/src/web/src/project/decision/Comparison.tsx +79 -0
  208. integrate_ui-0.1.0/src/web/src/project/decision/DecisionPanel.test.tsx +576 -0
  209. integrate_ui-0.1.0/src/web/src/project/decision/DecisionPanel.tsx +298 -0
  210. integrate_ui-0.1.0/src/web/src/project/decision/JobStatusView.tsx +182 -0
  211. integrate_ui-0.1.0/src/web/src/project/decision/QuestionFormView.tsx +242 -0
  212. integrate_ui-0.1.0/src/web/src/project/decision/exports.ts +33 -0
  213. integrate_ui-0.1.0/src/web/src/project/decision/fakeJobs.ts +97 -0
  214. integrate_ui-0.1.0/src/web/src/project/decision/question.test.ts +175 -0
  215. integrate_ui-0.1.0/src/web/src/project/decision/question.ts +233 -0
  216. integrate_ui-0.1.0/src/web/src/project/decision/useDecision.ts +387 -0
  217. integrate_ui-0.1.0/src/web/src/project/decision/useJobSlot.ts +285 -0
  218. integrate_ui-0.1.0/src/web/src/project/errors.test.ts +63 -0
  219. integrate_ui-0.1.0/src/web/src/project/errors.ts +101 -0
  220. integrate_ui-0.1.0/src/web/src/project/fileBrowserUi.ts +76 -0
  221. integrate_ui-0.1.0/src/web/src/project/format.test.ts +69 -0
  222. integrate_ui-0.1.0/src/web/src/project/format.ts +76 -0
  223. integrate_ui-0.1.0/src/web/src/project/noUnsafeHtml.test.ts +22 -0
  224. integrate_ui-0.1.0/src/web/src/project/profileCaption.test.ts +114 -0
  225. integrate_ui-0.1.0/src/web/src/project/profileCaption.ts +118 -0
  226. integrate_ui-0.1.0/src/web/src/project/recent.ts +64 -0
  227. integrate_ui-0.1.0/src/web/src/project/regionPanel.test.ts +227 -0
  228. integrate_ui-0.1.0/src/web/src/project/regionPanel.ts +272 -0
  229. integrate_ui-0.1.0/src/web/src/project/testBackend.ts +136 -0
  230. integrate_ui-0.1.0/src/web/src/project/useDataBrowser.ts +334 -0
  231. integrate_ui-0.1.0/src/web/src/project/useExplore.ts +355 -0
  232. integrate_ui-0.1.0/src/web/src/project/useFigure.test.tsx +229 -0
  233. integrate_ui-0.1.0/src/web/src/project/useFigure.ts +89 -0
  234. integrate_ui-0.1.0/src/web/src/project/useFolderBrowser.ts +112 -0
  235. integrate_ui-0.1.0/src/web/src/project/useProject.test.tsx +309 -0
  236. integrate_ui-0.1.0/src/web/src/project/useProject.ts +256 -0
  237. integrate_ui-0.1.0/src/web/src/project/useRegionData.ts +147 -0
  238. integrate_ui-0.1.0/src/web/src/project/useVoronoi3d.ts +339 -0
  239. integrate_ui-0.1.0/src/web/src/project/useVtuExport.ts +151 -0
  240. integrate_ui-0.1.0/src/web/src/project/voronoi3dForm.test.ts +262 -0
  241. integrate_ui-0.1.0/src/web/src/project/voronoi3dForm.ts +312 -0
  242. integrate_ui-0.1.0/src/web/src/styles/app.css +1178 -0
  243. integrate_ui-0.1.0/src/web/src/styles/tokens.css +71 -0
  244. integrate_ui-0.1.0/src/web/src/test/setup.ts +20 -0
  245. integrate_ui-0.1.0/src/web/src/ui/loading.test.tsx +83 -0
  246. integrate_ui-0.1.0/src/web/src/ui/loading.tsx +42 -0
  247. integrate_ui-0.1.0/src/web/src/viteConfig.test.ts +16 -0
  248. integrate_ui-0.1.0/src/web/src/viz/ClassLegend.tsx +23 -0
  249. integrate_ui-0.1.0/src/web/src/viz/Colorbar.test.tsx +35 -0
  250. integrate_ui-0.1.0/src/web/src/viz/Colorbar.tsx +106 -0
  251. integrate_ui-0.1.0/src/web/src/viz/DataPlot.tsx +244 -0
  252. integrate_ui-0.1.0/src/web/src/viz/MapView.test.tsx +312 -0
  253. integrate_ui-0.1.0/src/web/src/viz/MapView.tsx +1181 -0
  254. integrate_ui-0.1.0/src/web/src/viz/MapViewLine.test.tsx +242 -0
  255. integrate_ui-0.1.0/src/web/src/viz/MapViewOutline.test.tsx +202 -0
  256. integrate_ui-0.1.0/src/web/src/viz/MapViewProfile.test.tsx +360 -0
  257. integrate_ui-0.1.0/src/web/src/viz/MapViewRegion.test.tsx +276 -0
  258. integrate_ui-0.1.0/src/web/src/viz/RegionDataPlot.test.tsx +495 -0
  259. integrate_ui-0.1.0/src/web/src/viz/RegionDataPlot.tsx +199 -0
  260. integrate_ui-0.1.0/src/web/src/viz/RegionPanel.test.tsx +115 -0
  261. integrate_ui-0.1.0/src/web/src/viz/RegionPanel.tsx +203 -0
  262. integrate_ui-0.1.0/src/web/src/viz/SectionView.test.tsx +393 -0
  263. integrate_ui-0.1.0/src/web/src/viz/SectionView.tsx +482 -0
  264. integrate_ui-0.1.0/src/web/src/viz/SoundingView.test.tsx +340 -0
  265. integrate_ui-0.1.0/src/web/src/viz/SoundingView.tsx +737 -0
  266. integrate_ui-0.1.0/src/web/src/viz/arrays.test.ts +215 -0
  267. integrate_ui-0.1.0/src/web/src/viz/arrays.ts +1094 -0
  268. integrate_ui-0.1.0/src/web/src/viz/categorical.test.tsx +271 -0
  269. integrate_ui-0.1.0/src/web/src/viz/colorGolden.test.ts +28 -0
  270. integrate_ui-0.1.0/src/web/src/viz/colourSource.test.tsx +85 -0
  271. integrate_ui-0.1.0/src/web/src/viz/dataArrays.test.ts +198 -0
  272. integrate_ui-0.1.0/src/web/src/viz/dataArrays.ts +350 -0
  273. integrate_ui-0.1.0/src/web/src/viz/fixtures/classColours.json +22 -0
  274. integrate_ui-0.1.0/src/web/src/viz/fixtures/colorGolden.json +318 -0
  275. integrate_ui-0.1.0/src/web/src/viz/fixtures/colours.json +48 -0
  276. integrate_ui-0.1.0/src/web/src/viz/gridIndex.test.ts +105 -0
  277. integrate_ui-0.1.0/src/web/src/viz/gridIndex.ts +112 -0
  278. integrate_ui-0.1.0/src/web/src/viz/index.ts +135 -0
  279. integrate_ui-0.1.0/src/web/src/viz/jobResults.test.ts +211 -0
  280. integrate_ui-0.1.0/src/web/src/viz/lineSegments.test.ts +106 -0
  281. integrate_ui-0.1.0/src/web/src/viz/lineSegments.ts +85 -0
  282. integrate_ui-0.1.0/src/web/src/viz/lut.ts +138 -0
  283. integrate_ui-0.1.0/src/web/src/viz/profileArrays.test.ts +155 -0
  284. integrate_ui-0.1.0/src/web/src/viz/regionData.test.ts +299 -0
  285. integrate_ui-0.1.0/src/web/src/viz/regionData.ts +388 -0
  286. integrate_ui-0.1.0/src/web/src/viz/regionDataLayout.ts +496 -0
  287. integrate_ui-0.1.0/src/web/src/viz/regionSelect.test.ts +181 -0
  288. integrate_ui-0.1.0/src/web/src/viz/regionSelect.ts +287 -0
  289. integrate_ui-0.1.0/src/web/src/viz/regionStats.test.ts +95 -0
  290. integrate_ui-0.1.0/src/web/src/viz/regionStats.ts +185 -0
  291. integrate_ui-0.1.0/src/web/src/viz/sectionLayout.test.ts +232 -0
  292. integrate_ui-0.1.0/src/web/src/viz/sectionLayout.ts +377 -0
  293. integrate_ui-0.1.0/src/web/src/viz/selection.test.ts +230 -0
  294. integrate_ui-0.1.0/src/web/src/viz/selection.ts +185 -0
  295. integrate_ui-0.1.0/src/web/src/viz/sounding.test.ts +268 -0
  296. integrate_ui-0.1.0/src/web/src/viz/soundingLayout.test.ts +157 -0
  297. integrate_ui-0.1.0/src/web/src/viz/soundingLayout.ts +250 -0
  298. integrate_ui-0.1.0/src/web/src/viz/stepFocus.test.ts +98 -0
  299. integrate_ui-0.1.0/src/web/src/viz/stepFocus.ts +132 -0
  300. integrate_ui-0.1.0/src/web/src/viz/testUtils.ts +550 -0
  301. integrate_ui-0.1.0/src/web/src/viz/ticks.test.ts +35 -0
  302. integrate_ui-0.1.0/src/web/src/viz/ticks.ts +51 -0
  303. integrate_ui-0.1.0/src/web/src/viz/tokens.test.ts +21 -0
  304. integrate_ui-0.1.0/src/web/src/viz/tokens.ts +82 -0
  305. integrate_ui-0.1.0/src/web/src/viz/viewMath.test.ts +65 -0
  306. integrate_ui-0.1.0/src/web/src/viz/viewMath.ts +81 -0
  307. integrate_ui-0.1.0/src/web/src/viz/viz.css +407 -0
  308. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/Voronoi3dView.test.tsx +29 -0
  309. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/Voronoi3dView.tsx +176 -0
  310. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/colour.test.ts +122 -0
  311. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/colour.ts +162 -0
  312. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/decode.test.ts +109 -0
  313. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/decode.ts +193 -0
  314. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/geometry.test.ts +174 -0
  315. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/geometry.ts +442 -0
  316. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/golden.test.ts +308 -0
  317. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/navigation.ts +14 -0
  318. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/slices.test.ts +122 -0
  319. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/slices.ts +152 -0
  320. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/testFixtures.ts +160 -0
  321. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/types.ts +97 -0
  322. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/vtkScene.ts +703 -0
  323. integrate_ui-0.1.0/src/web/src/viz/voronoi3d/webgl.ts +21 -0
  324. integrate_ui-0.1.0/src/web/src/viz/webglPoints.test.ts +134 -0
  325. integrate_ui-0.1.0/src/web/src/viz/webglPoints.ts +317 -0
  326. integrate_ui-0.1.0/src/web/tsconfig.json +19 -0
  327. integrate_ui-0.1.0/src/web/vite.config.ts +21 -0
  328. integrate_ui-0.1.0/tests/backend/conftest.py +200 -0
  329. integrate_ui-0.1.0/tests/backend/h5_fixtures.py +136 -0
  330. integrate_ui-0.1.0/tests/backend/test_adapter.py +373 -0
  331. integrate_ui-0.1.0/tests/backend/test_adapter_h5.py +621 -0
  332. integrate_ui-0.1.0/tests/backend/test_cli.py +707 -0
  333. integrate_ui-0.1.0/tests/backend/test_cli_default.py +153 -0
  334. integrate_ui-0.1.0/tests/backend/test_colour_scale_rule.py +177 -0
  335. integrate_ui-0.1.0/tests/backend/test_data_api.py +496 -0
  336. integrate_ui-0.1.0/tests/backend/test_data_region.py +475 -0
  337. integrate_ui-0.1.0/tests/backend/test_decisions_save.py +869 -0
  338. integrate_ui-0.1.0/tests/backend/test_docs.py +239 -0
  339. integrate_ui-0.1.0/tests/backend/test_explore_api.py +854 -0
  340. integrate_ui-0.1.0/tests/backend/test_explore_discrete.py +671 -0
  341. integrate_ui-0.1.0/tests/backend/test_explore_profile.py +463 -0
  342. integrate_ui-0.1.0/tests/backend/test_explore_sounding.py +945 -0
  343. integrate_ui-0.1.0/tests/backend/test_figure_api.py +750 -0
  344. integrate_ui-0.1.0/tests/backend/test_fs_api.py +301 -0
  345. integrate_ui-0.1.0/tests/backend/test_h5_api.py +347 -0
  346. integrate_ui-0.1.0/tests/backend/test_headers.py +265 -0
  347. integrate_ui-0.1.0/tests/backend/test_health.py +32 -0
  348. integrate_ui-0.1.0/tests/backend/test_jobs_decision.py +980 -0
  349. integrate_ui-0.1.0/tests/backend/test_jobs_query.py +984 -0
  350. integrate_ui-0.1.0/tests/backend/test_jobs_voronoi3d.py +620 -0
  351. integrate_ui-0.1.0/tests/backend/test_package.py +32 -0
  352. integrate_ui-0.1.0/tests/backend/test_project_api.py +469 -0
  353. integrate_ui-0.1.0/tests/backend/test_project_manifest.py +273 -0
  354. integrate_ui-0.1.0/tests/backend/test_project_paths.py +422 -0
  355. integrate_ui-0.1.0/tests/backend/test_project_service.py +433 -0
  356. integrate_ui-0.1.0/tests/backend/test_scan.py +400 -0
  357. integrate_ui-0.1.0/tests/backend/test_security.py +645 -0
  358. integrate_ui-0.1.0/tests/backend/test_web_ui.py +214 -0
  359. integrate_ui-0.1.0/tests/backend/test_wheel_bundle.py +166 -0
  360. integrate_ui-0.1.0/tests/conftest.py +26 -0
  361. integrate_ui-0.1.0/tests/golden/data_region/README.md +116 -0
  362. integrate_ui-0.1.0/tests/golden/data_region/make_region_reference.py +609 -0
  363. integrate_ui-0.1.0/tests/golden/data_region/region.golden.test.ts +224 -0
  364. integrate_ui-0.1.0/tests/golden/data_region/region_reference.json +1 -0
  365. integrate_ui-0.1.0/tests/golden/data_region/test_region_reference.py +329 -0
  366. integrate_ui-0.1.0/tests/golden/explore_profile/README.md +116 -0
  367. integrate_ui-0.1.0/tests/golden/explore_profile/make_profile_reference.py +594 -0
  368. integrate_ui-0.1.0/tests/golden/explore_profile/profile.golden.test.ts +232 -0
  369. integrate_ui-0.1.0/tests/golden/explore_profile/profile_reference.json +1 -0
  370. integrate_ui-0.1.0/tests/golden/explore_profile/test_profile_reference.py +289 -0
  371. integrate_ui-0.1.0/tests/golden/vitest.config.mjs +21 -0
  372. integrate_ui-0.1.0/tests/golden/voronoi3d/README.md +91 -0
  373. integrate_ui-0.1.0/tests/golden/voronoi3d/make_reference.py +340 -0
  374. integrate_ui-0.1.0/tests/golden/voronoi3d/reference.json +1 -0
  375. integrate_ui-0.1.0/tests/golden/voronoi3d/test_reference.py +136 -0
  376. integrate_ui-0.1.0/tests/tools/test_agents.py +373 -0
  377. integrate_ui-0.1.0/tests/tools/test_check_boundaries.py +335 -0
  378. integrate_ui-0.1.0/tests/tools/test_check_ownership.py +498 -0
  379. integrate_ui-0.1.0/tests/tools/test_gen_api.py +77 -0
  380. integrate_ui-0.1.0/tests/tools/test_gen_design.py +211 -0
  381. integrate_ui-0.1.0/tests/tools/test_parity_scan.py +895 -0
  382. integrate_ui-0.1.0/tests/tools/test_workflows.py +821 -0
  383. integrate_ui-0.1.0/tools/__init__.py +1 -0
  384. integrate_ui-0.1.0/tools/check_boundaries.py +180 -0
  385. integrate_ui-0.1.0/tools/check_ownership.py +151 -0
  386. integrate_ui-0.1.0/tools/gen_api.py +76 -0
  387. integrate_ui-0.1.0/tools/gen_design.py +127 -0
  388. integrate_ui-0.1.0/tools/hatch_build.py +41 -0
  389. integrate_ui-0.1.0/tools/parity_scan.py +425 -0
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: core-dev
3
+ description: Use when work touches the Python backend, its API, projects and lineage, jobs, schemas, data services, tools or backend tests.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash, WebFetch
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `core-dev`, the Python agent. You build the backend in `src/backend/` (package `integrate_ui`): API, projects/lineage, jobs, schemas, data services. Computation comes from `integrate` and only `src/backend/integrate_ui/adapter/` imports it. Contract changes (`ModuleSpec` to JSON Schema to OpenAPI) are merged before UI work depends on them.
10
+
11
+ ## Owns
12
+
13
+ `src/backend/**`, `tools/**` except `tools/parity_scan.py` and `tools/gen_design.py`, `tests/*.py`, `tests/backend/**`, `tests/tools/**` except the two script tests above, `pyproject.toml` (backend dependencies and packaging, co-owned with the orchestrator), and the generated contract files `src/web/openapi.json` and `src/web/src/api/generated/**`
14
+
15
+ ## Must not
16
+
17
+ touch `src/desktop`, or anything else under `src/web`
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/parity/UPSTREAM.md` (the pinned upstream version) and `docs/decisions/` (accepted decisions).
23
+ - Work on a branch `agent/core-dev/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/core-dev/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: desktop-dev
3
+ description: Use when work touches the desktop shell in src/desktop, including the sidecar, packaging, installers and native OS integration.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash, WebFetch
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `desktop-dev`. You build the native shell in `src/desktop/` around the same TypeScript UI as the web app, with the sidecar, packaging, installers and OS integration. No GPL code (GA-AEM) goes into distributed installers without an owner decision.
10
+
11
+ ## Owns
12
+
13
+ `src/desktop/**` (shell, sidecar, packaging, installers, native integration)
14
+
15
+ ## Must not
16
+
17
+ fork UI behavior from web
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/decisions/` (accepted decisions).
23
+ - Work on a branch `agent/desktop-dev/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/desktop-dev/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: docs-writer
3
+ description: Use when the README or the user documentation under docs/user needs writing or updating.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `docs-writer`. You write `README.md` and the user documentation in `docs/user/`, describing the behavior the product has today. You never change that behavior.
10
+
11
+ ## Owns
12
+
13
+ `README.md`, `docs/user/**`
14
+
15
+ ## Must not
16
+
17
+ change behavior
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `README.md` and `docs/decisions/` (accepted decisions).
23
+ - Work on a branch `agent/docs-writer/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/docs-writer/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: parity-scout
3
+ description: Use when the upstream integrate_module API changed or the parity ledger needs a scan, a diff or a gap issue.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `parity-scout`. You run the parity loop (AGENT.md section 7): scan the upstream public API with `tools/parity_scan.py`, diff it against `docs/parity/api_snapshot.json`, keep the ledger `docs/parity/PARITY.md` current and draft one issue per gap. You also draft upstream requests (option registry, array accessors, cancel hooks), but you never edit upstream.
10
+
11
+ ## Owns
12
+
13
+ `docs/parity/**`, `tools/parity_scan.py` with `tests/tools/test_parity_scan.py`, issues
14
+
15
+ ## Must not
16
+
17
+ edit other code; edit upstream (drafts issues only)
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/parity/UPSTREAM.md` (the pinned upstream version) and `docs/parity/PARITY.md` (the ledger).
23
+ - Work on a branch `agent/parity-scout/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/parity-scout/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: qa
3
+ description: Use when a feature needs end-to-end, visual, golden, performance or accessibility tests, or CI configuration.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash, WebFetch
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `qa`. You build the e2e, visual, golden, performance and accessibility suites and the CI configuration, and you measure the quality bars in AGENT.md section 6. When you find a product bug you file it instead of fixing it.
10
+
11
+ ## Owns
12
+
13
+ `tests/e2e/**`, `tests/golden/**`, `tests/perf/**`, `tests/a11y/**`, `tests/visual/**`, CI config (`.github/**` except `.github/agent-ownership.yml`)
14
+
15
+ ## Must not
16
+
17
+ fix product code (files bugs)
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/design/**` (the design contract that the visual and a11y suites check).
23
+ - Work on a branch `agent/qa/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/qa/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: reviewer
3
+ description: Use when a finished change needs an independent, comment-only review against AGENT.md before it is merged.
4
+ tools: Read, Grep, Glob, Bash
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `reviewer`. You review a change against the non-negotiable rules (AGENT.md section 3) and the definition of done (section 5), and you leave comments only. You have no Write or Edit tools, and you use Bash only to inspect (git diff, tests, linters).
10
+
11
+ ## Owns
12
+
13
+ nothing (comments only)
14
+
15
+ ## Must not
16
+
17
+ edit code
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/decisions/` (accepted decisions the change must respect).
23
+ - You do not commit. Check out the branch under review in a worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> <branch>`; a branch of your own, if ever needed, is `agent/reviewer/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: ux-architect
3
+ description: Use when a feature needs a design contract such as tokens, components, layouts, interaction, accessibility rules or the plot catalog in docs/design.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `ux-architect`. You write the design contract that the other agents implement under `docs/design/`. The design tokens in `docs/design/tokens.json` are the only visual truth, and colors must be accessible and honest (WCAG AA, colorblind-safe default colormaps). You specify the shared selection model that `viz-dev` implements.
10
+
11
+ ## Owns
12
+
13
+ `docs/design/**` (tokens, components, layouts, interaction, a11y, plot-catalog), the token generator `tools/gen_design.py` with `tests/tools/test_gen_design.py`, and its generated output `src/web/src/styles/tokens.css`
14
+
15
+ ## Must not
16
+
17
+ write app code (the token generator and its output are the only code it may edit)
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/design/**` (the current design contract and tokens).
23
+ - Work on a branch `agent/ux-architect/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/ux-architect/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: viz-dev
3
+ description: Use when work touches linked views, WebGL or Canvas renderers, Tier-2 views or interaction performance in src/web/src/viz.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash, WebFetch
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `viz-dev`. You build the interactive Tier-2 views in `src/web/src/viz/`: linked views, WebGL/Canvas renderers and their performance. They render already-computed arrays, each with a golden test against the Tier-1 library figure, and they read the shared selection model instead of keeping private selection.
10
+
11
+ ## Owns
12
+
13
+ `src/web/src/viz/**` (linked views, WebGL/Canvas, Tier-2 renderers, perf)
14
+
15
+ ## Must not
16
+
17
+ add science; own selection store design (ux-architect specifies)
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/design/**` (the design contract, tokens and selection model).
23
+ - Work on a branch `agent/viz-dev/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/viz-dev/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: web-dev
3
+ description: Use when work touches the TypeScript web app in src/web, except the visualization code in src/web/src/viz.
4
+ tools: Read, Grep, Glob, Write, Edit, Bash, WebFetch
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You are `web-dev`. You build the one UI codebase in `src/web/` in strict TypeScript. API types come from the generated client, module parameter forms are schema-driven, every view uses the shared selection model, and visual values come from the design tokens. Linked-view and renderer code lives in `src/web/src/viz/`, which `viz-dev` owns.
10
+
11
+ ## Owns
12
+
13
+ `src/web/**` except `src/web/src/viz/**`, the generated contract files `src/web/openapi.json` and `src/web/src/api/generated/**`, and `src/web/src/styles/tokens.css`; web tests live beside the code in `src/web/src/**/*.test.ts(x)`
14
+
15
+ ## Must not
16
+
17
+ import Python; hand-write API types; edit generated files
18
+
19
+ ## Before you start
20
+
21
+ - Read `AGENT.md` (the operating contract), `docs/STATUS.md` and `docs/PLAN.md`.
22
+ - Also read `docs/design/**` (the design contract and tokens).
23
+ - Work on a branch `agent/web-dev/<topic>`, in its own git worktree next to the main checkout: `git worktree add ../integrate_ui-<topic> -b agent/web-dev/<topic>`. The library is a uv path source resolved from the project root, so the worktree must sit next to the `integrate_module` checkout (a sibling directory); anywhere else `uv sync` fails with "Distribution not found".
24
+ - Edit only the paths under Owns; cross-boundary needs go through an issue/handoff note.
25
+
26
+ ## Report format
27
+
28
+ End every task with a 5-line report:
29
+
30
+ 1. done
31
+ 2. files touched
32
+ 3. risks
33
+ 4. open questions
34
+ 5. next
@@ -0,0 +1,35 @@
1
+ ---
2
+ description: Start a user-visible feature for one product module with the definition of done and the handoff chain from AGENT.md
3
+ argument-hint: "<module>"
4
+ ---
5
+
6
+ Plan a user-visible feature for the module `$ARGUMENTS`.
7
+
8
+ Valid modules (AGENT.md section 2): `files`, `data`, `prior`, `forward`, `inversion`, `explore`, `plot`, `pipeline`, `decision`.
9
+
10
+ If `$ARGUMENTS` is empty or is not one of these, stop and ask which module is meant.
11
+
12
+ ## Handoff chain (AGENT.md section 5)
13
+
14
+ parity-scout → orchestrator → ux-architect / core-dev → web-dev / viz-dev / desktop-dev → qa → reviewer → merge
15
+
16
+ - `ux-architect` writes the design contract. `core-dev` writes the spec, API and backend tests and is merged first.
17
+ - `web-dev`, `viz-dev` and `desktop-dev` then work in parallel worktrees.
18
+ - `qa` adds the e2e, visual, golden, perf and a11y tests, then `reviewer` reviews and the orchestrator merges.
19
+
20
+ ## Definition of done (user-visible feature)
21
+
22
+ - [ ] design doc updated
23
+ - [ ] spec + API + backend tests
24
+ - [ ] web (and desktop-affecting changes) implemented
25
+ - [ ] parity ledger row updated
26
+ - [ ] e2e + visual + (if Tier-2) golden tests pass
27
+ - [ ] budgets met
28
+ - [ ] user doc note
29
+
30
+ ## How to work
31
+
32
+ - Use a branch `agent/<role>/<topic>` and one git worktree per task.
33
+ - Each agent edits only its own paths (AGENT.md section 4) and ends with a 5-line report: done / files touched / risks / open questions / next.
34
+
35
+ Print the handoff chain and the checklist above for `$ARGUMENTS`, then name the first step and the role that owns it.
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: Scan the upstream integrate library for API changes against the recorded parity snapshot
3
+ ---
4
+
5
+ Run the parity scanner against the recorded snapshot and summarize the result.
6
+
7
+ 1. From the repository root, run this command:
8
+
9
+ `PYTHONDONTWRITEBYTECODE=1 uv run python tools/parity_scan.py diff --against docs/parity/api_snapshot.json`
10
+
11
+ 2. Read the exit code. This is the exit-code contract of `tools/parity_scan.py`:
12
+
13
+ - 0: no API changes against the snapshot.
14
+ - 1: API changes found. Each output line is `+ name` (added), `- name` (removed) or `~ name` (changed).
15
+ - 2: failure (library import error, bad input). The tool prints one `error:` line on stderr. Report it as a failed scan, not as an API change.
16
+
17
+ 3. Summarize for the reader:
18
+
19
+ - Exit 0: say that the snapshot is current.
20
+ - Exit 1: count the added, removed and changed symbols, name the notable ones, and say which rows of `docs/parity/PARITY.md` need a new status (`covered | partial | planned | excluded`). Suggest one issue per gap.
21
+ - Exit 2: quote the `error:` line and stop.
22
+
23
+ Do not edit any file. The `parity-scout` role owns `docs/parity/**` and the snapshot.
@@ -0,0 +1,67 @@
1
+ # Path ownership per agent role (AGENT.md section 4). Enforced by tools/check_ownership.py in CI.
2
+ #
3
+ # Patterns: "**" matches any depth, "*" matches within one path segment. A leading "!" negates.
4
+ # The LAST matching pattern wins; a path that matches no pattern is not allowed.
5
+ roles:
6
+ orchestrator:
7
+ - AGENT.md
8
+ - CLAUDE.md
9
+ - LICENSE
10
+ - .python-version
11
+ - docs/PLAN.md
12
+ - docs/ROADMAP.md
13
+ - docs/STATUS.md
14
+ - docs/decisions/**
15
+ - docs/superpowers/**
16
+ - .claude/**
17
+ - .github/agent-ownership.yml
18
+ - pyproject.toml
19
+ - .gitignore
20
+ - .gitattributes
21
+ - spikes/**
22
+ - run_gui.sh
23
+ - pypi_build_script
24
+ ux-architect:
25
+ - docs/design/**
26
+ - tools/gen_design.py
27
+ - tests/tools/test_gen_design.py
28
+ - src/web/src/styles/tokens.css
29
+ parity-scout:
30
+ - docs/parity/**
31
+ - tools/parity_scan.py
32
+ - tests/tools/test_parity_scan.py
33
+ core-dev:
34
+ - src/backend/**
35
+ - tools/**
36
+ - tests/*.py
37
+ - tests/backend/**
38
+ - tests/tools/**
39
+ - pyproject.toml
40
+ - src/web/src/api/generated/**
41
+ - src/web/openapi.json
42
+ - "!tools/parity_scan.py"
43
+ - "!tools/gen_design.py"
44
+ - "!tests/tools/test_parity_scan.py"
45
+ - "!tests/tools/test_gen_design.py"
46
+ web-dev:
47
+ - src/web/**
48
+ - "!src/web/src/viz/**"
49
+ - "!src/web/src/api/generated/**"
50
+ - "!src/web/openapi.json"
51
+ - "!src/web/src/styles/tokens.css"
52
+ viz-dev:
53
+ - src/web/src/viz/**
54
+ desktop-dev:
55
+ - src/desktop/**
56
+ qa:
57
+ - tests/e2e/**
58
+ - tests/golden/**
59
+ - tests/perf/**
60
+ - tests/a11y/**
61
+ - tests/visual/**
62
+ - .github/**
63
+ - "!.github/agent-ownership.yml"
64
+ reviewer: []
65
+ docs-writer:
66
+ - README.md
67
+ - docs/user/**