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.
- cellpycore-0.1.4/.cursor/rules/graphify.mdc +11 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/issueflow-rules.mdc +5 -1
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-close/SKILL.md +10 -4
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-pick/SKILL.md +5 -1
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-yolo/SKILL.md +5 -4
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.gitignore +5 -1
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_original.md +27 -0
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_plan.md +166 -0
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_status.md +16 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue62_original.md +13 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue62_plan.md +22 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue62_status.md +14 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue64_original.md +7 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue64_plan.md +28 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue64_status.md +17 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue66_original.md +9 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue66_plan.md +140 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue66_status.md +42 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue67_original.md +15 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue67_plan.md +114 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue67_status.md +19 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue68_original.md +13 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue68_plan.md +90 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue68_status.md +16 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue69_original.md +11 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue69_plan.md +22 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue69_status.md +14 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue70_original.md +15 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue70_plan.md +127 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue70_status.md +15 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue72_original.md +9 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue72_status.md +9 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue77_original.md +13 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue77_plan.md +176 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue77_status.md +16 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue82_original.md +9 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue82_status.md +13 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue84_original.md +7 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue84_plan.md +71 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue84_status.md +17 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue86_original.md +60 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue86_plan.md +169 -0
- cellpycore-0.1.4/.issueflows/03-solved-issues/issue86_status.md +22 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-migration.md +1 -1
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/code-review-2026-07.md +11 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/step-table-polars-migration.md +3 -3
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/summary-extractors.md +3 -3
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-data-and-fixtures.md +5 -5
- cellpycore-0.1.4/.issueflows/04-designs-and-guides/this-project.md +81 -0
- cellpycore-0.1.4/.issueflows/04-designs-and-guides/zensical-docs.md +39 -0
- cellpycore-0.1.4/.pre-commit-config.yaml +13 -0
- cellpycore-0.1.4/.readthedocs.yaml +17 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/AGENTS.md +14 -1
- cellpycore-0.1.4/HISTORY.md +105 -0
- cellpycore-0.1.4/PKG-INFO +110 -0
- cellpycore-0.1.4/README.md +90 -0
- cellpycore-0.1.4/ROADMAP.md +57 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/cellpy-core.code-workspace +3 -1
- cellpycore-0.1.4/graphify-out/.graphify_labels.json +266 -0
- cellpycore-0.1.4/graphify-out/.graphify_root +1 -0
- cellpycore-0.1.4/graphify-out/GRAPH_REPORT.md +1125 -0
- cellpycore-0.1.4/graphify-out/graph.html +307 -0
- cellpycore-0.1.4/graphify-out/graph.json +55732 -0
- cellpycore-0.1.4/graphify-out/manifest.json +932 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/pyproject.toml +31 -9
- cellpycore-0.1.4/src/cellpycore/__init__.py +47 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/cell_core.py +244 -58
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/config.py +40 -8
- cellpycore-0.1.4/src/cellpycore/exceptions.py +13 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/extractors.py +1 -3
- cellpycore-0.1.4/src/cellpycore/legacy/__init__.py +41 -0
- cellpycore-0.1.2/src/cellpycore/legacy.py → cellpycore-0.1.4/src/cellpycore/legacy/headers.py +2 -138
- cellpycore-0.1.4/src/cellpycore/legacy/limits.py +34 -0
- cellpycore-0.1.2/src/cellpycore/header_mapping.py → cellpycore-0.1.4/src/cellpycore/legacy/mapping.py +142 -51
- cellpycore-0.1.4/src/cellpycore/legacy/meta.py +22 -0
- cellpycore-0.1.4/src/cellpycore/legacy/mock_core.py +66 -0
- {cellpycore-0.1.2/src/cellpycore → cellpycore-0.1.4/src/cellpycore/legacy}/selectors.py +19 -19
- cellpycore-0.1.4/src/cellpycore/merge.py +459 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/metadata/__init__.py +8 -8
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/metadata/models.py +2 -2
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/settings_base.py +5 -3
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/summarizers.py +108 -19
- cellpycore-0.1.4/src/cellpycore/testing/__init__.py +4 -0
- cellpycore-0.1.2/src/cellpycore/_helpers.py → cellpycore-0.1.4/src/cellpycore/testing/mock_data.py +3 -1
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/timestamps.py +3 -1
- cellpycore-0.1.4/src/cellpycore/units/__init__.py +19 -0
- cellpycore-0.1.4/src/cellpycore/units/converters.py +322 -0
- cellpycore-0.1.4/src/cellpycore/units/spec.py +87 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/uv.lock +870 -64
- cellpycore-0.1.4/zensical.toml +125 -0
- cellpycore-0.1.2/.cursor/rules/graphify.mdc +0 -10
- cellpycore-0.1.2/.issueflows/04-designs-and-guides/this-project.md +0 -32
- cellpycore-0.1.2/HISTORY.md +0 -48
- cellpycore-0.1.2/PKG-INFO +0 -104
- cellpycore-0.1.2/README.md +0 -80
- cellpycore-0.1.2/graphify-out/.graphify_labels.json +0 -76
- cellpycore-0.1.2/graphify-out/.graphify_root +0 -1
- cellpycore-0.1.2/graphify-out/GRAPH_REPORT.md +0 -329
- cellpycore-0.1.2/graphify-out/graph.html +0 -305
- cellpycore-0.1.2/graphify-out/graph.json +0 -21426
- cellpycore-0.1.2/graphify-out/manifest.json +0 -198
- cellpycore-0.1.2/scratch.db +0 -0
- cellpycore-0.1.2/src/cellpycore/units.py +0 -257
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.aliases +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/cellpy-core-migration.mdc +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/kiss.mdc +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/rules/this-project.mdc +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/caveman/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/grill-me/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-cleanup/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-comments/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-fix/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-graphify/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-history-update/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-init/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-pause/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-plan/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-start/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-status/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.cursor/skills/iflow-version-bump/SKILL.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/00-tools/.gitkeep +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/00-tools/README.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/01-current-issues/.gitkeep +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/.gitkeep +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue10_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue12_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue13_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue21_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue22_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue23_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue24_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue29_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue30_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue32_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue34_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue36_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue39_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue40_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue41_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue42_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue43_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue44_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue45_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue50_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue54_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue55_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_original.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_plan.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/03-solved-issues/issue56_status.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-into-cellpy.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/cellpy-core-integration-roadmap.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/column-headers-review.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/metadata-scaffolding.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/selector-dead-code-deferral.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/04-designs-and-guides/test-metadata-and-merging.md +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.issueflows/config.toml +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.python-version +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/.vscode/settings.json +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/LICENSE +0 -0
- {cellpycore-0.1.2 → cellpycore-0.1.4}/src/cellpycore/metadata/io.py +0 -0
- /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
|
-
|
|
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** —
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
|
@@ -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).
|