cellpycore 0.1.2__tar.gz → 0.1.4__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 (205) hide show
  1. cellpycore-0.1.4/.cursor/rules/graphify.mdc +11 -0
  2. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/issueflow-rules.mdc +5 -1
  3. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-close/SKILL.md +10 -4
  4. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-pick/SKILL.md +5 -1
  5. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-yolo/SKILL.md +5 -4
  6. {cellpycore-0.1.2 → cellpycore-0.1.4}/.gitignore +5 -1
  7. cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_original.md +27 -0
  8. cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_plan.md +166 -0
  9. cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_status.md +16 -0
  10. cellpycore-0.1.4/.issueflows/03-solved-issues/issue62_original.md +13 -0
  11. cellpycore-0.1.4/.issueflows/03-solved-issues/issue62_plan.md +22 -0
  12. cellpycore-0.1.4/.issueflows/03-solved-issues/issue62_status.md +14 -0
  13. cellpycore-0.1.4/.issueflows/03-solved-issues/issue64_original.md +7 -0
  14. cellpycore-0.1.4/.issueflows/03-solved-issues/issue64_plan.md +28 -0
  15. cellpycore-0.1.4/.issueflows/03-solved-issues/issue64_status.md +17 -0
  16. cellpycore-0.1.4/.issueflows/03-solved-issues/issue66_original.md +9 -0
  17. cellpycore-0.1.4/.issueflows/03-solved-issues/issue66_plan.md +140 -0
  18. cellpycore-0.1.4/.issueflows/03-solved-issues/issue66_status.md +42 -0
  19. cellpycore-0.1.4/.issueflows/03-solved-issues/issue67_original.md +15 -0
  20. cellpycore-0.1.4/.issueflows/03-solved-issues/issue67_plan.md +114 -0
  21. cellpycore-0.1.4/.issueflows/03-solved-issues/issue67_status.md +19 -0
  22. cellpycore-0.1.4/.issueflows/03-solved-issues/issue68_original.md +13 -0
  23. cellpycore-0.1.4/.issueflows/03-solved-issues/issue68_plan.md +90 -0
  24. cellpycore-0.1.4/.issueflows/03-solved-issues/issue68_status.md +16 -0
  25. cellpycore-0.1.4/.issueflows/03-solved-issues/issue69_original.md +11 -0
  26. cellpycore-0.1.4/.issueflows/03-solved-issues/issue69_plan.md +22 -0
  27. cellpycore-0.1.4/.issueflows/03-solved-issues/issue69_status.md +14 -0
  28. cellpycore-0.1.4/.issueflows/03-solved-issues/issue70_original.md +15 -0
  29. cellpycore-0.1.4/.issueflows/03-solved-issues/issue70_plan.md +127 -0
  30. cellpycore-0.1.4/.issueflows/03-solved-issues/issue70_status.md +15 -0
  31. cellpycore-0.1.4/.issueflows/03-solved-issues/issue72_original.md +9 -0
  32. cellpycore-0.1.4/.issueflows/03-solved-issues/issue72_status.md +9 -0
  33. cellpycore-0.1.4/.issueflows/03-solved-issues/issue77_original.md +13 -0
  34. cellpycore-0.1.4/.issueflows/03-solved-issues/issue77_plan.md +176 -0
  35. cellpycore-0.1.4/.issueflows/03-solved-issues/issue77_status.md +16 -0
  36. cellpycore-0.1.4/.issueflows/03-solved-issues/issue82_original.md +9 -0
  37. cellpycore-0.1.4/.issueflows/03-solved-issues/issue82_status.md +13 -0
  38. cellpycore-0.1.4/.issueflows/03-solved-issues/issue84_original.md +7 -0
  39. cellpycore-0.1.4/.issueflows/03-solved-issues/issue84_plan.md +71 -0
  40. cellpycore-0.1.4/.issueflows/03-solved-issues/issue84_status.md +17 -0
  41. cellpycore-0.1.4/.issueflows/03-solved-issues/issue86_original.md +60 -0
  42. cellpycore-0.1.4/.issueflows/03-solved-issues/issue86_plan.md +169 -0
  43. cellpycore-0.1.4/.issueflows/03-solved-issues/issue86_status.md +22 -0
  44. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-migration.md +1 -1
  45. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/code-review-2026-07.md +11 -0
  46. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/step-table-polars-migration.md +3 -3
  47. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/summary-extractors.md +3 -3
  48. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-data-and-fixtures.md +5 -5
  49. cellpycore-0.1.4/.issueflows/04-designs-and-guides/this-project.md +81 -0
  50. cellpycore-0.1.4/.issueflows/04-designs-and-guides/zensical-docs.md +39 -0
  51. cellpycore-0.1.4/.pre-commit-config.yaml +13 -0
  52. cellpycore-0.1.4/.readthedocs.yaml +17 -0
  53. {cellpycore-0.1.2 → cellpycore-0.1.4}/AGENTS.md +14 -1
  54. cellpycore-0.1.4/HISTORY.md +105 -0
  55. cellpycore-0.1.4/PKG-INFO +110 -0
  56. cellpycore-0.1.4/README.md +90 -0
  57. cellpycore-0.1.4/ROADMAP.md +57 -0
  58. {cellpycore-0.1.2 → cellpycore-0.1.4}/cellpy-core.code-workspace +3 -1
  59. cellpycore-0.1.4/graphify-out/.graphify_labels.json +266 -0
  60. cellpycore-0.1.4/graphify-out/.graphify_root +1 -0
  61. cellpycore-0.1.4/graphify-out/GRAPH_REPORT.md +1125 -0
  62. cellpycore-0.1.4/graphify-out/graph.html +307 -0
  63. cellpycore-0.1.4/graphify-out/graph.json +55732 -0
  64. cellpycore-0.1.4/graphify-out/manifest.json +932 -0
  65. {cellpycore-0.1.2 → cellpycore-0.1.4}/pyproject.toml +31 -9
  66. cellpycore-0.1.4/src/cellpycore/__init__.py +47 -0
  67. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/cell_core.py +244 -58
  68. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/config.py +40 -8
  69. cellpycore-0.1.4/src/cellpycore/exceptions.py +13 -0
  70. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/extractors.py +1 -3
  71. cellpycore-0.1.4/src/cellpycore/legacy/__init__.py +41 -0
  72. cellpycore-0.1.2/src/cellpycore/legacy.py → cellpycore-0.1.4/src/cellpycore/legacy/headers.py +2 -138
  73. cellpycore-0.1.4/src/cellpycore/legacy/limits.py +34 -0
  74. cellpycore-0.1.2/src/cellpycore/header_mapping.py → cellpycore-0.1.4/src/cellpycore/legacy/mapping.py +142 -51
  75. cellpycore-0.1.4/src/cellpycore/legacy/meta.py +22 -0
  76. cellpycore-0.1.4/src/cellpycore/legacy/mock_core.py +66 -0
  77. {cellpycore-0.1.2/src/cellpycore → cellpycore-0.1.4/src/cellpycore/legacy}/selectors.py +19 -19
  78. cellpycore-0.1.4/src/cellpycore/merge.py +459 -0
  79. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/metadata/__init__.py +8 -8
  80. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/metadata/models.py +2 -2
  81. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/settings_base.py +5 -3
  82. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/summarizers.py +108 -19
  83. cellpycore-0.1.4/src/cellpycore/testing/__init__.py +4 -0
  84. cellpycore-0.1.2/src/cellpycore/_helpers.py → cellpycore-0.1.4/src/cellpycore/testing/mock_data.py +3 -1
  85. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/timestamps.py +3 -1
  86. cellpycore-0.1.4/src/cellpycore/units/__init__.py +19 -0
  87. cellpycore-0.1.4/src/cellpycore/units/converters.py +322 -0
  88. cellpycore-0.1.4/src/cellpycore/units/spec.py +87 -0
  89. {cellpycore-0.1.2 → cellpycore-0.1.4}/uv.lock +870 -64
  90. cellpycore-0.1.4/zensical.toml +125 -0
  91. cellpycore-0.1.2/.cursor/rules/graphify.mdc +0 -10
  92. cellpycore-0.1.2/.issueflows/04-designs-and-guides/this-project.md +0 -32
  93. cellpycore-0.1.2/HISTORY.md +0 -48
  94. cellpycore-0.1.2/PKG-INFO +0 -104
  95. cellpycore-0.1.2/README.md +0 -80
  96. cellpycore-0.1.2/graphify-out/.graphify_labels.json +0 -76
  97. cellpycore-0.1.2/graphify-out/.graphify_root +0 -1
  98. cellpycore-0.1.2/graphify-out/GRAPH_REPORT.md +0 -329
  99. cellpycore-0.1.2/graphify-out/graph.html +0 -305
  100. cellpycore-0.1.2/graphify-out/graph.json +0 -21426
  101. cellpycore-0.1.2/graphify-out/manifest.json +0 -198
  102. cellpycore-0.1.2/scratch.db +0 -0
  103. cellpycore-0.1.2/src/cellpycore/units.py +0 -257
  104. {cellpycore-0.1.2 → cellpycore-0.1.4}/.aliases +0 -0
  105. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/cellpy-core-migration.mdc +0 -0
  106. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/kiss.mdc +0 -0
  107. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/this-project.mdc +0 -0
  108. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/caveman/SKILL.md +0 -0
  109. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/grill-me/SKILL.md +0 -0
  110. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow/SKILL.md +0 -0
  111. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
  112. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-comments/SKILL.md +0 -0
  113. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-fix/SKILL.md +0 -0
  114. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
  115. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
  116. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-init/SKILL.md +0 -0
  117. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-pause/SKILL.md +0 -0
  118. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-plan/SKILL.md +0 -0
  119. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-start/SKILL.md +0 -0
  120. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-status/SKILL.md +0 -0
  121. {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
  122. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/00-tools/.gitkeep +0 -0
  123. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/00-tools/README.md +0 -0
  124. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/01-current-issues/.gitkeep +0 -0
  125. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
  126. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/.gitkeep +0 -0
  127. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_original.md +0 -0
  128. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_plan.md +0 -0
  129. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_status.md +0 -0
  130. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_original.md +0 -0
  131. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_plan.md +0 -0
  132. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_status.md +0 -0
  133. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_original.md +0 -0
  134. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_plan.md +0 -0
  135. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_status.md +0 -0
  136. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_original.md +0 -0
  137. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_plan.md +0 -0
  138. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_status.md +0 -0
  139. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_original.md +0 -0
  140. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_plan.md +0 -0
  141. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_status.md +0 -0
  142. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_original.md +0 -0
  143. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_plan.md +0 -0
  144. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_status.md +0 -0
  145. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_original.md +0 -0
  146. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_status.md +0 -0
  147. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_original.md +0 -0
  148. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_plan.md +0 -0
  149. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_status.md +0 -0
  150. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_original.md +0 -0
  151. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_plan.md +0 -0
  152. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_status.md +0 -0
  153. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_original.md +0 -0
  154. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_plan.md +0 -0
  155. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_status.md +0 -0
  156. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_original.md +0 -0
  157. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_plan.md +0 -0
  158. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_original.md +0 -0
  159. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_status.md +0 -0
  160. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_original.md +0 -0
  161. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_plan.md +0 -0
  162. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_status.md +0 -0
  163. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_original.md +0 -0
  164. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_plan.md +0 -0
  165. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_status.md +0 -0
  166. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_original.md +0 -0
  167. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_plan.md +0 -0
  168. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_status.md +0 -0
  169. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_original.md +0 -0
  170. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_plan.md +0 -0
  171. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_status.md +0 -0
  172. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_original.md +0 -0
  173. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_plan.md +0 -0
  174. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_status.md +0 -0
  175. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_original.md +0 -0
  176. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_status.md +0 -0
  177. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_original.md +0 -0
  178. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_plan.md +0 -0
  179. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_status.md +0 -0
  180. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_original.md +0 -0
  181. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_plan.md +0 -0
  182. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_status.md +0 -0
  183. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_original.md +0 -0
  184. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_plan.md +0 -0
  185. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_status.md +0 -0
  186. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_original.md +0 -0
  187. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_plan.md +0 -0
  188. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_status.md +0 -0
  189. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_original.md +0 -0
  190. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_plan.md +0 -0
  191. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_status.md +0 -0
  192. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
  193. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-into-cellpy.md +0 -0
  194. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-roadmap.md +0 -0
  195. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/column-headers-review.md +0 -0
  196. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/metadata-scaffolding.md +0 -0
  197. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
  198. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/selector-dead-code-deferral.md +0 -0
  199. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-metadata-and-merging.md +0 -0
  200. {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/config.toml +0 -0
  201. {cellpycore-0.1.2 → cellpycore-0.1.4}/.python-version +0 -0
  202. {cellpycore-0.1.2 → cellpycore-0.1.4}/.vscode/settings.json +0 -0
  203. {cellpycore-0.1.2 → cellpycore-0.1.4}/LICENSE +0 -0
  204. {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/metadata/io.py +0 -0
  205. /cellpycore-0.1.2/src/cellpycore/__init__.py → /cellpycore-0.1.4/src/cellpycore/py.typed +0 -0
@@ -0,0 +1,11 @@
1
+ ---
2
+ description: graphify knowledge graph context
3
+ alwaysApply: true
4
+ ---
5
+
6
+ This project has a graphify knowledge graph at graphify-out/.
7
+
8
+ - For codebase or architecture questions, when `graphify-out/graph.json` exists, first run `graphify query "<question>"` (or `graphify path "<A>" "<B>"` / `graphify explain "<concept>"`). These return a scoped subgraph, usually much smaller than `GRAPH_REPORT.md` or raw grep output.
9
+ - If graphify-out/wiki/index.md exists, navigate it instead of reading raw files
10
+ - Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context
11
+ - After modifying code files in this session, run `graphify update .` to keep the graph current (AST-only, no API cost)
@@ -118,7 +118,11 @@ The full slash-command lifecycle is:
118
118
  5. **`/iflow-close`** — tests, optional `uv version --bump`, status update, commit, push, PR. Does not delete branches.
119
119
  6. **`/iflow-cleanup`** — post-merge: switch to default, `git pull --ff-only`, `git fetch --prune`, `git branch -d` on merged local branches under a single consolidated confirm. Never `-D`.
120
120
 
121
- `/iflow-yolo` chains `init → plan → start → close` for small, low-risk issues with up-front safeguards (clean tree, passing tests, single consolidated confirm).
121
+ `/iflow-yolo` chains `init → plan → start → close yolo` for small, low-risk issues with up-front safeguards (clean tree, passing tests, single consolidated confirm). Its close step is hands-off: changelog decided without a prompt, PR merged (`gh pr merge --squash`, `--auto` fallback), then default-branch switch + pull.
122
+
123
+
124
+ Issue labels can select the flow: when an issue picked via `/iflow-pick` carries the **`yolo`** label, it is routed through `/iflow-yolo` (one combined confirmation). Controlled by `label_flows` (default `true`) and `yolo_label` (default `"yolo"`) under `[issueflow]` in `.issueflows/config.toml`; re-run `issue-flow update` after changing them.
125
+
122
126
 
123
127
  `/iflow-fix` opens an interactive iterative-fixes session: it creates one GitHub issue + long-lived branch, then loops over many small fixes (each gets a short plan and is implemented only on confirmation, recorded as a dated bullet in `issue<N>_status.md`), and ends with `/iflow-close`. It is off-path (never auto-dispatched); while a session is active, drive it with `/iflow-fix` + `/iflow-close`, not `/iflow`.
124
128
 
@@ -38,13 +38,17 @@ When a bump applies: read `.cursor/skills/iflow-version-bump/SKILL.md`, run the
38
38
 
39
39
  - **`stay`**, **`stay on branch`**, **`don't switch`**, or **`dont switch to main`** → after the PR step, stay on the issue branch instead of switching back to the default branch.
40
40
 
41
+ ## Hands-off token (command input)
42
+
43
+ - **`yolo`** (used by `/iflow-yolo`) → close the loop without user input: write the `HISTORY.md` bullet without a confirm prompt (step 3), **merge the PR** right after opening it (step 8a), then switch back to the default branch and `git pull --ff-only` (step 9, unless `stay` was also passed).
44
+
41
45
  ## Instructions
42
46
 
43
47
  1. **Sanity check** — Run the project test suite (e.g. `uv run pytest`) and any checks the repo relies on. Skim the diff; avoid bundling unrelated changes. Confirm that any design decisions or good practices that emerged from this issue are captured under `.issueflows/04-designs-and-guides/` before committing.
44
48
 
45
49
  2. **Optional version bump** — If the user asked for a bump (see above), follow `.cursor/skills/iflow-version-bump/SKILL.md` and run `uv version --bump <patch|minor|major>`. If there is no bumpable `pyproject.toml`, skip and continue.
46
50
 
47
- 3. **Update `HISTORY.md`** — Unless the user passed `nohistory`, follow `.cursor/skills/iflow-history-update/SKILL.md`. If step 2 did not bump the version, append a bullet to the `## [Unreleased]` section. If step 2 bumped the version, promote `## [Unreleased]` to `## [<new_version>] - <YYYY-MM-DD>` and open a fresh empty `## [Unreleased]` above it. Show the diff and confirm once before writing. Skip with a note if `HISTORY.md` does not exist at the project root.
51
+ 3. **Update `HISTORY.md`** — Unless the user passed `nohistory`, follow `.cursor/skills/iflow-history-update/SKILL.md`. If step 2 did not bump the version, append a bullet to the `## [Unreleased]` section. If step 2 bumped the version, promote `## [Unreleased]` to `## [<new_version>] - <YYYY-MM-DD>` and open a fresh empty `## [Unreleased]` above it. Show the diff and confirm once before writing. Skip with a note if `HISTORY.md` does not exist at the project root. With the `yolo` token, do not ask — decide yourself and write the bullet (issue title, or `log "..."` text) directly.
48
52
 
49
53
  4. **Issue tracking** — Under `.issueflows/01-current-issues/`, update the status file: remaining work, checklists, and **`- [x] Done`** only when the issue is fully resolved. If fully resolved, move that issue's markdown files (`issue<n>_*`) to `.issueflows/03-solved-issues/`. If partially resolved, move to `.issueflows/02-partly-solved-issues/`. Follow any stricter rules in `.cursor/rules/issueflow-rules.mdc` if present.
50
54
 
@@ -56,11 +60,13 @@ When a bump applies: read `.cursor/skills/iflow-version-bump/SKILL.md`, run the
56
60
 
57
61
  8. **Pull request** — Open (or update) a PR against the default branch. Body should explain the change, how to test, and link the GitHub issue (`Closes #n` / `Refs #n`).
58
62
 
59
- 9. **Switch back when safe** — Detect the default branch (prefer `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`, else `git symbolic-ref --quiet --short refs/remotes/origin/HEAD`, else `main`). If the input included `stay`, `stay on branch`, `don't switch`, or `dont switch to main`, stay on the issue branch and report that opt-out. Otherwise run `git status --porcelain` after the PR is open or updated. If it is clean, run `git switch <default>` and then `git pull --ff-only`; a clean tree here means the branch work has been committed and pushed to the PR branch. If dirty, stay on the current branch, list the uncommitted paths, and explain that switching is unsafe until those changes are committed, stashed, or discarded by the user. Never delete the issue branch here.
63
+ 8a. **Merge the PR (`yolo` token only)** — Merge immediately with `gh pr merge <number> --squash` (never `--delete-branch`; branch deletion stays in `/iflow-cleanup`). If GitHub refuses (branch protection, pending checks), fall back to `gh pr merge <number> --squash --auto` and report the merge as queued. If even `--auto` fails, stop the hands-off behaviour, report the error, and leave the PR open. Without the `yolo` token, skip this step merging stays a user decision (step 10).
64
+
65
+ 9. **Switch back when safe** — Detect the default branch (prefer `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`, else `git symbolic-ref --quiet --short refs/remotes/origin/HEAD`, else `main`). If the input included `stay`, `stay on branch`, `don't switch`, or `dont switch to main`, stay on the issue branch and report that opt-out. Otherwise run `git status --porcelain` after the PR is open or updated. If it is clean, run `git switch <default>` and then `git pull --ff-only`; a clean tree here means the branch work has been committed and pushed to the PR branch. If dirty, stay on the current branch, list the uncommitted paths, and explain that switching is unsafe until those changes are committed, stashed, or discarded by the user. Never delete the issue branch here. With the `yolo` token this step runs **after** the merge from step 8a so the pull brings the squash commit into the local default branch (a queued auto-merge arrives later; note that).
60
66
 
61
- 10. **After review** — Address feedback, push updates, and merge when approved and CI is green. If step 9 switched back to the default branch, switch to the PR branch again before making review fixes. Tell the user to run **`/iflow-cleanup`** once the PR is merged so the standard post-merge cleanup runs (`git fetch --prune`, `git branch -d` on merged local branches under a single consolidated confirm).
67
+ 10. **After review** — With the `yolo` token the PR was already merged in step 8a; skip to the `/iflow-cleanup` reminder. Otherwise address feedback, push updates, and merge when approved and CI is green. If step 9 switched back to the default branch, switch to the PR branch again before making review fixes. Tell the user to run **`/iflow-cleanup`** once the PR is merged so the standard post-merge cleanup runs (`git fetch --prune`, `git branch -d` on merged local branches under a single consolidated confirm).
62
68
 
63
- 11. **Output** — Summarize commit, push result, PR URL, whether the working copy switched back to the default branch or stayed on the issue branch, and next step (`/iflow-cleanup` after merge, or "blocked on …" if stuck).
69
+ 11. **Output** — Summarize commit, push result, PR URL, whether the working copy switched back to the default branch or stayed on the issue branch, the merge result when `yolo` applied (merged, or queued via `--auto`), and next step (`/iflow-cleanup` after merge, or "blocked on …" if stuck).
64
70
 
65
71
  ## Constraints
66
72
 
@@ -40,7 +40,8 @@ Do **not** use this skill from `/iflow`, `/iflow-start`, or `/iflow-close`. `/if
40
40
  5. **Create a `fix` issue (only when requested).** Use `gh issue create` (e.g. `chore: general fixes`), confirm title/body first, capture the new number. A fresh issue is created each time — never reuse an existing open general-fixes issue.
41
41
  6. **Over-large issue (note only).** If the chosen issue is too big for one PR, **mention** that breaking it into sub-issues is possible and tracked as a follow-up (Phase B of issue #63). Do **not** auto-create sub-issues here.
42
42
 
43
- ### Phase 2 create the branch
43
+ 7. **Label-driven yolo flow.** If the chosen issue carries the **`yolo`** label (case-insensitive), announce it and fold `/iflow-yolo`'s consolidated confirm into the pick confirmation (one prompt: branch + full `init → plan → start → close yolo` chain). On yes, run Phase 2 then follow the `iflow-yolo` skill **instead of** the Phase 3 handoff — its preflight still applies, but do not re-ask its confirm. Configurable via `label_flows` / `yolo_label` under `[issueflow]` in `.issueflows/config.toml` (re-run `issue-flow update` after changing).
44
+
44
45
 
45
46
  1. **Require a clean tree** (`git status --porcelain`). If dirty, **stop** and ask the user to commit/stash.
46
47
  2. **Branch off the default** — switch to default, fast-forward, then `git switch -c <N>-<short-slug>` (GitHub numeric convention). Confirm a non-obvious slug.
@@ -50,6 +51,9 @@ Do **not** use this skill from `/iflow`, `/iflow-start`, or `/iflow-close`. `/if
50
51
 
51
52
  1. **Ask** whether to continue with `/iflow-plan`. Do not auto-run it.
52
53
 
54
+ 2. **Exception:** when the `yolo`-label routing was confirmed in Phase 1, skip this handoff — the `iflow-yolo` chain (which includes `/iflow-init`) takes over after the branch is created.
55
+
56
+
53
57
  ## Constraints
54
58
 
55
59
  - Off-path: never auto-dispatch from `/iflow`, `/iflow-start`, or `/iflow-close`.
@@ -3,7 +3,8 @@ name: iflow-yolo
3
3
  description: >-
4
4
  Run the /iflow-yolo workflow: preflight (no default branch, clean tree,
5
5
  passing tests), single consolidated confirm, then chain init → plan → start
6
- → close for small, low-risk issues. Stops on any ambiguity.
6
+ → close yolo (hands-off close: auto changelog, PR merge, default-branch
7
+ pull) for small, low-risk issues. Stops on any ambiguity.
7
8
  disable-model-invocation: true
8
9
  ---
9
10
 
@@ -26,7 +27,7 @@ Use only for minor fixes, doc tweaks, and similar low-risk changes. Anything non
26
27
 
27
28
  3. **Tests must pass up front.** Run `uv run pytest` (or the repo's documented test command). On any failure, **stop** before the chain starts.
28
29
 
29
- 4. **Single consolidated confirm.** Present the full planned chain explicitly (issue reference, target branch, repo, downstream commands including any `bump` / `patch` / `draft` / `stay` flags). Require an explicit yes; any other input aborts.
30
+ 4. **Single consolidated confirm.** Present the full planned chain explicitly (issue reference, target branch, repo, downstream commands including any `bump` / `patch` / `draft` / `stay` flags). Require an explicit yes; any other input aborts. (When `/iflow-pick` routed here via the yolo issue label, its combined confirmation already covered this — do not ask twice.)
30
31
 
31
32
  ## Chain
32
33
 
@@ -36,11 +37,11 @@ Once preflight has passed and the user confirmed:
36
37
  2. **`/iflow-plan`** — write a **short** `issue<N>_plan.md` (Goal + Approach + Files to touch + Test strategy). Auto-confirm — the consolidated confirm above covered it. If the scope check reveals the change is not actually small, **abort the yolo chain** and tell the user to run the commands individually.
37
38
  3. **`/iflow-start`** — implement the plan without an additional plan-mode prompt.
38
39
  4. **Re-run tests.** `uv run pytest` again. On failure, **stop** before commit / push / PR.
39
- 5. **`/iflow-close`** — run the full close flow (optional version bump if the user passed `bump` / `patch` / `minor` / `major`, issue-folder update, commit, push, PR, and the default-branch switch unless `stay` / `don't switch` text was passed). Do **not** chain `/iflow-cleanup` automatically — the PR has not merged yet.
40
+ 5. **`/iflow-close yolo`** — run the close flow with the `yolo` token (plus forwarded `bump` / `log` / `nohistory` / `draft` / `stay` tokens). The `yolo` token makes close hands-off: changelog bullet written without a confirm prompt, PR **merged** via `gh pr merge --squash` (fall back to `--squash --auto` when branch protection or pending checks block it), then default-branch switch + `git pull --ff-only`. `draft` conflicts with auto-merge — when passed, skip the merge and say so. Do **not** chain `/iflow-cleanup` automatically — local branch deletion stays a user decision.
40
41
 
41
42
  ## Post-run
42
43
 
43
- Report the PR URL and final branch. By default `/iflow-close` switches back to the default branch when the tree is clean; forwarded `stay` text leaves the user on the issue branch instead. Remind them to re-run `/iflow-cleanup` once the PR merges.
44
+ Report the PR URL, the merge result (merged, or queued via `--auto`), and the final branch. By default `/iflow-close yolo` merges the PR and switches back to the default branch with a pull; forwarded `stay` text leaves the user on the issue branch instead. Remind them that `/iflow-cleanup` will delete the now-merged local branch when they are ready.
44
45
 
45
46
  ## Constraints
46
47
 
@@ -179,4 +179,8 @@ local/
179
179
  __marimo__/
180
180
 
181
181
  # graphify
182
- graphify-out/cache/
182
+ graphify-out/cache/
183
+
184
+ # scratch / throwaway artifacts
185
+ scratch.db
186
+ tmp/
@@ -0,0 +1,27 @@
1
+ # Issue #91: Release v0.1.4: docs (#90) and cellpy re-pin
2
+
3
+ Source: https://github.com/cellpy/cellpy-core/issues/91
4
+
5
+ ## Original issue text
6
+
7
+ ## Context
8
+
9
+ `v0.1.3` (2026-07-04) already ships the merge/update API from #86/#87. One commit on `main` since that tag:
10
+
11
+ - #90 — Zensical docs migration, Read the Docs config, example notebooks
12
+
13
+ `cellpy` still pins `cellpycore==0.1.2` in `[project.dependencies]` — needs re-pin after this release.
14
+
15
+ ## Tasks
16
+
17
+ - [ ] Confirm `main` is green (ruff + pytest)
18
+ - [ ] Update changelog / release notes for 0.1.4 (docs + any misc since 0.1.3)
19
+ - [ ] Bump version (`uv version --bump patch` → 0.1.4) and commit
20
+ - [ ] Cut GitHub release (`release patch` or equivalent) from up-to-date `main`
21
+ - [ ] Verify `release.yml` passes and `cellpycore 0.1.4` appears on PyPI
22
+ - [ ] cellpy: bump `cellpycore` pin in `pyproject.toml`, refresh `uv.lock`, run seam tests (`tests/test_slim.py`)
23
+
24
+ ## References
25
+
26
+ - `.issueflows/04-designs-and-guides/release-procedure.md`
27
+ - Issue #44 (release pipeline — done)
@@ -0,0 +1,166 @@
1
+ # Issue #91 plan — Release v0.1.4 + retroactive HISTORY backfill
2
+
3
+ ## Goal
4
+
5
+ Correct `HISTORY.md` so shipped work is attributed to the right versions (everything
6
+ currently under `[Unreleased]` → **`[0.1.3]`**, dated 2026-07-04), add **`[0.1.4]`**
7
+ with **only** the Zensical / Read the Docs documentation work (#90), then cut the
8
+ `v0.1.4` release and re-pin `cellpy` off the stale `cellpycore==0.1.2` pin.
9
+
10
+ ## Constraints
11
+
12
+ - **Version attribution (user):** Only the Zensical documentation migration belongs in
13
+ `0.1.4`. No code/API bullets in the 0.1.4 section.
14
+ - **No PyPI re-release of 0.1.3** — backfill is changelog-only; `v0.1.3` on PyPI is
15
+ already correct for code content.
16
+ - **Single source of truth:** Root [`HISTORY.md`](../../HISTORY.md) is included into the
17
+ docs site via [`docs/changelog.md`](../../docs/changelog.md) (`--8<--` snippet); edit
18
+ `HISTORY.md` only.
19
+ - **Release ritual:** Follow
20
+ [`.issueflows/04-designs-and-guides/release-procedure.md`](../04-designs-and-guides/release-procedure.md)
21
+ — bump committed on branch, tag from clean `main` after merge (or user runs `release`
22
+ alias post-merge).
23
+ - **cellpy boundary:** Re-pin lives in `jepegit/cellpy` (separate branch/PR); keep
24
+ editable `[tool.uv.sources]` path override unchanged per migration guide.
25
+
26
+ ### Prior art
27
+
28
+ - [`release-procedure.md`](../04-designs-and-guides/release-procedure.md) — bump, `release`
29
+ alias, `release.yml`, cellpy re-pin checklist.
30
+ - [`zensical-docs.md`](../04-designs-and-guides/zensical-docs.md) — what #90 landed
31
+ (structure, RTD build, notebook → markdown pipeline).
32
+ - [`iflow-history-update`](../../.cursor/skills/iflow-history-update/SKILL.md) — Keep a
33
+ Changelog promote pattern (`[Unreleased]` → `[x.y.z] - date` + fresh empty
34
+ `[Unreleased]`).
35
+ - Issue #56 close — prior patch release that promoted `[Unreleased]` to `[0.1.2]` at
36
+ `/iflow-close` time.
37
+ - **Toolbox:** none (`00-tools/` index empty).
38
+ - **Grep:** no release/changelog helper scripts; `.aliases` `release()` reads version from
39
+ `pyproject.toml` and calls `gh release create`.
40
+
41
+ ## Approach
42
+
43
+ ### 1. Retroactive `[0.1.3]` section (changelog debt)
44
+
45
+ Move the **entire** current `[Unreleased]` bullet list into a new section:
46
+
47
+ ```markdown
48
+ ## [0.1.3] - 2026-07-04
49
+ ```
50
+
51
+ (Use the actual `v0.1.3` tag date — 2026-07-04.)
52
+
53
+ **Add missing bullets** that shipped between `v0.1.2` and `v0.1.3` but were never
54
+ written to `HISTORY.md`:
55
+
56
+ | Change | Ref | Notes |
57
+ |--------|-----|-------|
58
+ | Merge/update e2e coverage | #89 | Golden-style tests for `merge_data` / `update_data` pipeline |
59
+ | README doc links use absolute GitHub URLs (PyPI-safe) | #62 / #63 | Small docs fix in the same release window |
60
+
61
+ **Do not add** #88 (Cursor Cloud `AGENTS.md` blurb) — agent/dev doc, not a user-facing
62
+ release note unless you explicitly want it.
63
+
64
+ **Optional tidy while editing:** align issue refs where HISTORY already mentions work
65
+ (e.g. pre-commit is #84 issue / #85 PR — keep `#84` or note both; merge is #86 issue /
66
+ #87 PR — current `#86` is fine).
67
+
68
+ Leave a fresh empty:
69
+
70
+ ```markdown
71
+ ## [Unreleased]
72
+
73
+ ```
74
+
75
+ above `[0.1.4]` (added in step 2).
76
+
77
+ ### 2. `[0.1.4]` section (this release)
78
+
79
+ Under `[Unreleased]`, add **one** consolidated bullet for #90 (paraphrase from
80
+ [`zensical-docs.md`](../04-designs-and-guides/zensical-docs.md)):
81
+
82
+ - Migrate documentation to **Zensical** with **Read the Docs** hosting
83
+ (`.readthedocs.yaml`, `zensical.toml`, `docs` group in `pyproject.toml`).
84
+ - Restructure docs tree (`getting-started`, `user-guide/`, `specifications/`,
85
+ `examples/`, `development/`); `changelog.md` and `development/roadmap.md` snippet-include
86
+ root `HISTORY.md` / `ROADMAP.md`.
87
+ - Add executable example notebooks (committed markdown + plot outputs under
88
+ `docs/examples/`). (#90)
89
+
90
+ Then **promote** for release (during `/iflow-close` with bump):
91
+
92
+ ```markdown
93
+ ## [0.1.4] - <release-date>
94
+ ```
95
+
96
+ (empty `[Unreleased]` above it again).
97
+
98
+ ### 3. Version bump + release (cellpy-core)
99
+
100
+ On branch `91-release-v0-1-4`:
101
+
102
+ 1. Preflight: `uv run ruff check`, `uv run pytest` (matches `release.yml`).
103
+ 2. Commit HISTORY backfill + `[0.1.4]` unreleased bullet (can be one commit or two —
104
+ prefer **one PR** with clear commit message).
105
+ 3. `/iflow-close bump patch` → `0.1.4`, promote `[Unreleased]` → `[0.1.4]`, open PR.
106
+ 4. After merge to `main`: user runs `release` (or `release patch` if version not yet
107
+ committed — follow alias guards) → verify `release.yml` green → confirm
108
+ `cellpycore 0.1.4` on PyPI.
109
+
110
+ Current state: `pyproject.toml` is `0.1.3`; `v0.1.3` tag exists; one commit since tag
111
+ (`b5f088a` #90 docs only) — aligns with 0.1.4 scope.
112
+
113
+ ### 4. cellpy re-pin (follow-up in sibling repo)
114
+
115
+ On a `cellpy` branch (e.g. `core91-pin-cellpycore-0-1-4`):
116
+
117
+ - `[project.dependencies]`: `cellpycore==0.1.2` → `cellpycore==0.1.4` (or `>=0.1.4` if
118
+ you prefer minimum pin — match #400 style: exact `==` before cellpy release).
119
+ - `uv lock` / `uv sync` in `cellpy`.
120
+ - `uv run pytest tests/test_slim.py` (and optionally parity tests).
121
+ - Open PR on `jepegit/cellpy`; reference cellpy-core #91.
122
+
123
+ Can land same day as core release but is a **separate PR** (different repo).
124
+
125
+ ## Files to touch
126
+
127
+ | Path | Change |
128
+ |------|--------|
129
+ | [`HISTORY.md`](../../HISTORY.md) | Promote `[Unreleased]` → `[0.1.3]`; add missing #89/#63 bullets; add #90 under unreleased then promote to `[0.1.4]` at close |
130
+ | [`pyproject.toml`](../../pyproject.toml) | `0.1.3` → `0.1.4` at `/iflow-close bump patch` |
131
+ | [`uv.lock`](../../uv.lock) | Refresh if bump touches lock (usually unchanged for patch) |
132
+ | `.issueflows/01-current-issues/issue91_status.md` | Progress + done checkbox at close |
133
+ | `cellpy/pyproject.toml` + `cellpy/uv.lock` | Re-pin (separate repo, separate PR) |
134
+
135
+ **No code changes** under `src/cellpycore/` for this issue.
136
+
137
+ ## Test strategy
138
+
139
+ **cellpy-core (before PR):**
140
+
141
+ ```bash
142
+ uv run ruff check src/ tests/
143
+ uv run ruff format --check
144
+ uv run pytest
145
+ ```
146
+
147
+ Release CI repeats the same. No new tests — changelog/release only.
148
+
149
+ **cellpy (re-pin PR):**
150
+
151
+ ```bash
152
+ cd ../cellpy && uv lock && uv run pytest tests/test_slim.py
153
+ ```
154
+
155
+ ## Open questions
156
+
157
+ 1. **cellpy pin style:** exact `cellpycore==0.1.4` vs `>=0.1.4`? Recommend `==0.1.4`
158
+ to mirror #400 until the next cellpy release.
159
+ 2. **Include #88 in 0.1.3 HISTORY?** Plan default: **no** (skip).
160
+ 3. **Split PRs?** Recommend single cellpy-core PR (HISTORY backfill + 0.1.4 notes +
161
+ bump); cellpy re-pin as sibling PR after PyPI publish.
162
+
163
+ ---
164
+
165
+ **Ready for `/iflow-start` after you Accept.** Revise/Abort if you want different pin
166
+ style or to include #88.
@@ -0,0 +1,16 @@
1
+ # Issue #91 status
2
+
3
+ - [ ] Done
4
+
5
+ ## What's done
6
+
7
+ - Plan confirmed: `cellpycore==0.1.4` pin style; skip #88 in HISTORY.
8
+ - Retroactive `[0.1.3]` section in `HISTORY.md` (moved unreleased bullets + #89, #63).
9
+ - `[0.1.4]` promoted in `HISTORY.md`; `pyproject.toml` bumped to 0.1.4.
10
+ - Preflight green: ruff + 150 pytest passed.
11
+ - PR opened for cellpy-core changelog + version bump.
12
+
13
+ ## Remaining work
14
+
15
+ - Merge PR, run `release` alias on `main`, verify PyPI `cellpycore 0.1.4`.
16
+ - cellpy: separate PR — `cellpycore==0.1.4`, `uv lock`, `tests/test_slim.py`.
@@ -0,0 +1,13 @@
1
+ # Issue #62 — readme links not working on pypi
2
+
3
+ - **URL:** https://github.com/cellpy/cellpy-core/issues/62
4
+ - **State:** open
5
+ - **Labels:** yolo
6
+ - **Captured:** 2026-07-02
7
+
8
+ ## Original description
9
+
10
+ The links in the readme do not work on pypi. I guess the docs folder is not a
11
+ part of the package. If so, consider either linking to the locations in the
12
+ github repo or include those three files that have links on readme into the
13
+ package.
@@ -0,0 +1,22 @@
1
+ # Issue #62 — plan
2
+
3
+ ## Goal
4
+
5
+ Make the documentation links in `README.md` work when rendered on PyPI.
6
+
7
+ ## Approach
8
+
9
+ Relative links (`docs/...`) break on PyPI because the docs folder is not part
10
+ of the rendered page context. Replace the three relative doc links in the
11
+ README with absolute GitHub URLs pointing at `main`
12
+ (`https://github.com/cellpy/cellpy-core/blob/main/docs/...`). No packaging
13
+ changes — simplest fix, keeps the sdist/wheel lean.
14
+
15
+ ## Files to touch
16
+
17
+ - `README.md`
18
+
19
+ ## Test strategy
20
+
21
+ - `uv run pytest` (no code changes, suite must stay green).
22
+ - Visual check that the rewritten URLs resolve on GitHub.
@@ -0,0 +1,14 @@
1
+ # Issue #62 — status
2
+
3
+ - [x] Done
4
+
5
+ ## What was done
6
+
7
+ - 2026-07-02: Replaced the three relative doc links in `README.md` with
8
+ absolute GitHub URLs (`https://github.com/cellpy/cellpy-core/blob/main/docs/...`)
9
+ so they render correctly on PyPI. Verified all three target files exist.
10
+ Full test suite green (107 passed). No packaging changes needed.
11
+
12
+ ## Remaining work
13
+
14
+ None.
@@ -0,0 +1,7 @@
1
+ # Issue #64: small update in readme
2
+
3
+ Source: https://github.com/cellpy/cellpy-core/issues/64
4
+
5
+ ## Original issue text
6
+
7
+ The developer section in readme mentions running "uv venv". We should instead use the built in project manager in uv (so, developers should run "uv sync" after cloning the repo, and "uv add some-package" when adding new dependencies).
@@ -0,0 +1,28 @@
1
+ # Issue #64 plan: small update in readme
2
+
3
+ ## Goal
4
+
5
+ The Developing section in `README.md` tells developers to run `uv venv` +
6
+ `uv pip install -e ".[dev]"`. Switch to uv's built-in project workflow:
7
+ `uv sync` after cloning, `uv add` for new dependencies.
8
+
9
+ ## Approach
10
+
11
+ Rewrite the "Development Workflow" and "Common Commands" parts of the
12
+ Developing section:
13
+
14
+ - Drop `uv venv` + activate + `uv pip install -e ".[dev]"`; replace with a
15
+ single `uv sync` step (creates `.venv` and installs all locked deps).
16
+ - Keep `uv add` / `uv add --dev` for adding dependencies.
17
+ - Run tests via `uv run pytest`.
18
+ - Update "Common Commands" to project-manager equivalents (`uv remove`,
19
+ `uv sync --upgrade`, `uv tree`).
20
+
21
+ ## Files to touch
22
+
23
+ - `README.md` (only)
24
+
25
+ ## Test strategy
26
+
27
+ Docs-only change; run `uv run pytest` before commit to confirm the suite is
28
+ still green (yolo chain requirement).
@@ -0,0 +1,17 @@
1
+ # Issue #64 status: small update in readme
2
+
3
+ - [x] Done
4
+
5
+ ## What was done
6
+
7
+ - Rewrote the "Development Workflow" part of `README.md` Developing section:
8
+ replaced `uv venv` + activate + `uv pip install -e ".[dev]"` with a single
9
+ `uv sync` step; kept `uv add` / `uv add --dev`; tests now via `uv run pytest`.
10
+ - Updated "Common Commands" to project-manager equivalents (`uv sync`,
11
+ `uv remove`, `uv sync --upgrade`, `uv tree`), dropping the `uv pip ...`
12
+ commands.
13
+ - Added a `HISTORY.md` bullet under `[Unreleased]`.
14
+
15
+ ## Remaining work
16
+
17
+ None. Docs-only change; test suite green (107 passed).
@@ -0,0 +1,9 @@
1
+ # Issue #66: code cleaning and test completion
2
+
3
+ Source: https://github.com/cellpy/cellpy-core/issues/66
4
+
5
+ ## Original issue text
6
+
7
+ Do some refactoring and cleaning up in the codebase. Check .issueflows\04-designs-and-guides\code-review-2026-07.md
8
+ Create appropriate e2e tests.
9
+ Create appropriate profiling tests.
@@ -0,0 +1,140 @@
1
+ # Issue #66 plan: code cleaning and test completion
2
+
3
+ Source issue: [issue66_original.md](issue66_original.md)
4
+ Driving doc: [code-review-2026-07.md](../04-designs-and-guides/code-review-2026-07.md)
5
+ Branch: `66-code-cleaning-and-test-completion`
6
+
7
+ ## Goal
8
+
9
+ Land the mechanical cleanup from the 2026-07 code review (hygiene, API truthing,
10
+ engine guards) and close the test gaps with native-path e2e tests and opt-in
11
+ profiling benchmarks.
12
+
13
+ ## Constraints
14
+
15
+ - **In scope (grilled + confirmed):** review-doc items D1 (hygiene), D2 (API
16
+ truthing), D5 (engine guards), D7 (test gaps) + e2e + profiling tests.
17
+ - **Out of scope (deferred, filed):** D3 selectors decision (#67, see
18
+ `selector-dead-code-deferral.md`), D4 units fallback (A2, #68), CI coverage
19
+ reporting (#69), B1/B2 design pass (#70), structural refactors (no module
20
+ splits/moves — review verdict: engine is healthy; avoid churn before cellpy
21
+ pins a tag).
22
+ - Parity is enforced by tests (migration doc): golden tests must stay green
23
+ byte-for-byte; no changes to computed values.
24
+ - Legacy bridge (`OldCellpyCellCore`) behavior unchanged — cellpy imports only
25
+ this (verified: `cellpy/readers/cellreader.py:72` is the sole entry).
26
+ - Google-style docstrings; project loggers, not root `logging` calls.
27
+
28
+ ### Prior art
29
+
30
+ - `tests/test_golden.py` — legacy-bridge e2e on vendored Arbin parquet with
31
+ golden numbers (`ARBIN_N_STEPS=103`, `ARBIN_N_CYCLES=18`); new native e2e
32
+ mirrors this oracle, does not duplicate the legacy path.
33
+ - `tests/test_harmonized_fixture.py` + `tests/data/arbin_cc_harmonized_raw.parquet`
34
+ — harmonized (native-naming) fixture already vendored; reuse for native e2e.
35
+ - `Data.from_raw_frame` (issue #55) — existing validating front door; native
36
+ e2e drives through it, engine guards (B3) extend the same validation spirit
37
+ into `make_step_table` / `make_summary`.
38
+ - Exclude-types support (issue #54) — covered by `tests/test_exclude_types.py`;
39
+ e2e exercises it as a pipeline variant only.
40
+ - `.issueflows/00-tools/` — only README, no reusable helper applies.
41
+ - graphify: not installed for this repo state (no `graphify-out/` consulted
42
+ beyond rules; grep-based discovery used).
43
+
44
+ ## Approach
45
+
46
+ Phased commits on the issue branch, one concern per commit (Conventional
47
+ Commits), tests green after each phase.
48
+
49
+ ### Phase 1 — hygiene (D1)
50
+
51
+ 1. `pyproject.toml`: remove `duckdb`, `duckdb-engine`, `sqlalchemy`, `narwhals`
52
+ (keep `pyarrow`); drop `uv-dynamic-versioning` from `[build-system]`; real
53
+ description; fix wrong classifier; `uv sync` to refresh lock.
54
+ 2. Delete tracked junk: `scratch.db`, `tmp/simple.csv`, `tmp/simple.parquet`
55
+ (+ `.gitignore` entries for `scratch.db`, `tmp/`).
56
+ 3. Replace root-logger calls with module loggers (`logger = logging.getLogger(__name__)`)
57
+ in `summarizers.py`, `settings_base.py`, `units.py`.
58
+ 4. **A3 falsy-override fix** in `summarizers._classify_steps`: membership test
59
+ (`key in orl`) instead of `or`-fallback for all four override keys +
60
+ regression test with `0.0` override.
61
+ 5. **A5**: `make_step_table(raw_limits=None)` → build fresh
62
+ `asdict(CellpyLimits())` per call; keep `DEFAULT_RAW_LIMITS` as a frozen
63
+ `MappingProxyType` for introspection/back-compat (`test_limits.py` uses it).
64
+ 6. **A6**: delete `Data.cycle` / `Data.step` dead fields (verified unused in
65
+ cellpy).
66
+ 7. CI: add ruff step (`ruff check` + `ruff format --check`) to
67
+ `.github/workflows/simpletest.yml`; minimal `[tool.ruff]` config.
68
+
69
+ ### Phase 2 — API truthing (D2)
70
+
71
+ 1. `src/cellpycore/__init__.py`: minimal curated exports —
72
+ `CellpyCellCore`, `OldCellpyCellCore`, `Data`, `make_step_table`,
73
+ `make_summary`, `default_schema` + schema types, `NoDataFound`;
74
+ `__version__` via `importlib.metadata.version("cellpy-core")` with
75
+ `PackageNotFoundError` fallback. `metadata` stays a submodule import.
76
+ 2. **A4**: delete unused `selector` / `select_columns` / `find_end_voltage`
77
+ params from native `make_core_summary` (legacy bridge keeps its
78
+ `find_end_voltage`).
79
+ 3. Add `py.typed` marker (+ ensure hatch includes it).
80
+ 4. Docs: fill `this-project.md` stubs; README project description.
81
+
82
+ ### Phase 3 — engine guards (D5/B3)
83
+
84
+ - `make_step_table` / `make_summary`: raise `NoDataFound` when `data.raw`
85
+ (resp. `data.steps`) is `None`/missing; raise `ValueError` naming the missing
86
+ required columns. Tests for both.
87
+
88
+ ### Phase 4 — tests (D7 + e2e + profiling)
89
+
90
+ 1. `tests/test_e2e.py` — native pipeline via public API only
91
+ (`from cellpycore import ...`): harmonized raw parquet →
92
+ `Data.from_raw_frame` → `make_step_table` → `make_summary` →
93
+ exclude-types and scaled-columns variants; assert golden cycle/step counts
94
+ and spot values. Edge cases: empty raw frame, cycle without charge step,
95
+ `override_raw_limits={"current_hard": 0.0}`; thread-safety smoke (two
96
+ schemas, parallel `make_step_table` via `ThreadPoolExecutor`).
97
+ 2. `tests/test_benchmarks.py` — `pytest-benchmark` (new dev dep):
98
+ `make_step_table` + `make_summary` on Arbin fixture + small fixture;
99
+ `@pytest.mark.benchmark`, excluded from default run via addopts
100
+ (`-m "not benchmark"`); run manually: `uv run pytest -m benchmark`.
101
+
102
+ ## Files to touch
103
+
104
+ - `pyproject.toml` — deps, build-system, metadata, ruff config, addopts, dev dep
105
+ - `uv.lock` — regenerated
106
+ - `scratch.db`, `tmp/` — deleted; `.gitignore` — updated
107
+ - `.github/workflows/simpletest.yml` — ruff step
108
+ - `src/cellpycore/__init__.py` — public API + `__version__`
109
+ - `src/cellpycore/py.typed` — new marker
110
+ - `src/cellpycore/summarizers.py` — A3, A5, logger, guards
111
+ - `src/cellpycore/cell_core.py` — A6, A4
112
+ - `src/cellpycore/settings_base.py`, `src/cellpycore/units.py` — logger only
113
+ - `tests/test_e2e.py`, `tests/test_benchmarks.py` — new
114
+ - `tests/test_limits.py` — adjust for frozen `DEFAULT_RAW_LIMITS`
115
+ - `README.md`, `.issueflows/04-designs-and-guides/this-project.md` — docs
116
+
117
+ ## Test strategy
118
+
119
+ - Full suite: `uv run pytest` (must stay green after every phase; golden tests
120
+ are the parity gate).
121
+ - New: A3 regression (`0.0` override), guard tests (`NoDataFound`,
122
+ missing-column `ValueError`), native e2e, thread-safety smoke.
123
+ - Benchmarks opt-in: `uv run pytest -m benchmark` (not in CI).
124
+ - Lint locally before push: `uv run ruff check` + `uv run ruff format --check`.
125
+
126
+ ## Open questions
127
+
128
+ - None — resolved via grilling 2026-07-03 (scope split, minimal public API,
129
+ native-path e2e, pytest-benchmark opt-in, no structural refactor).
130
+
131
+ ## Follow-ups (filed as GitHub issues, not this issue)
132
+
133
+ - [#67](https://github.com/cellpy/cellpy-core/issues/67) — D3: selectors module
134
+ decision (port vs bridge-only).
135
+ - [#68](https://github.com/cellpy/cellpy-core/issues/68) — D4/A2: units
136
+ fallback → explicit values or `metadata.CellMeta`.
137
+ - [#69](https://github.com/cellpy/cellpy-core/issues/69) — CI coverage
138
+ reporting.
139
+ - [#70](https://github.com/cellpy/cellpy-core/issues/70) — B1/B2 design pass
140
+ (schema-agnostic stat columns; cycle_mode polarity default).