cellpycore 0.1.4__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.aliases +9 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/rules/cellpy-core-migration.mdc +4 -3
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/rules/issueflow-rules.mdc +62 -4
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/caveman/SKILL.md +2 -1
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/grill-me/SKILL.md +1 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow/SKILL.md +44 -10
- cellpycore-0.2.0/.cursor/skills/iflow-archive/SKILL.md +92 -0
- cellpycore-0.2.0/.cursor/skills/iflow-cleanup/SKILL.md +81 -0
- cellpycore-0.2.0/.cursor/skills/iflow-close/SKILL.md +114 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-comments/SKILL.md +18 -13
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-fix/SKILL.md +45 -11
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-graphify/SKILL.md +22 -10
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-history-update/SKILL.md +16 -9
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-init/SKILL.md +50 -23
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-pause/SKILL.md +43 -7
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-pick/SKILL.md +48 -12
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-plan/SKILL.md +43 -8
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-start/SKILL.md +44 -7
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-status/SKILL.md +43 -10
- cellpycore-0.2.0/.cursor/skills/iflow-version-bump/SKILL.md +116 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/skills/iflow-yolo/SKILL.md +43 -8
- cellpycore-0.2.0/.issueflows/02-partly-solved-issues/issue100_original.md +38 -0
- cellpycore-0.2.0/.issueflows/02-partly-solved-issues/issue100_plan.md +113 -0
- cellpycore-0.2.0/.issueflows/02-partly-solved-issues/issue100_status.md +23 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue110_original.md +13 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue110_plan.md +29 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue110_status.md +32 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue112_original.md +7 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue112_plan.md +190 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue112_status.md +17 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue114_original.md +34 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue114_plan.md +24 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue114_status.md +15 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue115_original.md +29 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue115_plan.md +30 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue115_status.md +14 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue116_original.md +22 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue116_plan.md +24 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue116_status.md +15 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue117_original.md +21 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue117_plan.md +26 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue117_status.md +15 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue118_original.md +19 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue118_plan.md +30 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue118_status.md +15 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue121_original.md +7 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue121_plan.md +143 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue121_status.md +14 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue91_status.md +18 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue95_original.md +29 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue95_plan.md +19 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue95_status.md +14 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue96_original.md +47 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue96_plan.md +84 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue96_status.md +15 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue97_original.md +28 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue97_plan.md +108 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue97_status.md +31 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue98_original.md +39 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue98_plan.md +118 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue98_status.md +36 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue99_original.md +50 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue99_plan.md +122 -0
- cellpycore-0.2.0/.issueflows/03-solved-issues/issue99_status.md +37 -0
- cellpycore-0.2.0/.issueflows/04-designs-and-guides/bdf-io-placement.md +52 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/cellpy-core-integration-into-cellpy.md +14 -16
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/cellpy-core-integration-roadmap.md +12 -14
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/cellpy-core-migration.md +19 -20
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/code-review-2026-07.md +1 -1
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/column-headers-review.md +1 -1
- cellpycore-0.2.0/.issueflows/04-designs-and-guides/nom-cap-naming.md +39 -0
- cellpycore-0.2.0/.issueflows/04-designs-and-guides/rawcols-dtype-map.md +30 -0
- cellpycore-0.2.0/.issueflows/04-designs-and-guides/step-c-rate-split.md +37 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/zensical-docs.md +4 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.readthedocs.yaml +1 -1
- {cellpycore-0.1.4 → cellpycore-0.2.0}/AGENTS.md +59 -2
- {cellpycore-0.1.4 → cellpycore-0.2.0}/HISTORY.md +33 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/PKG-INFO +2 -1
- {cellpycore-0.1.4 → cellpycore-0.2.0}/README.md +1 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/ROADMAP.md +8 -0
- cellpycore-0.2.0/SCRATCHPAD.md +78 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/graphify-out/.graphify_labels.json +76 -1
- cellpycore-0.2.0/graphify-out/.graphify_root +1 -0
- cellpycore-0.2.0/graphify-out/GRAPH_REPORT.md +1438 -0
- cellpycore-0.2.0/graphify-out/graph.html +305 -0
- cellpycore-0.2.0/graphify-out/graph.json +116407 -0
- cellpycore-0.2.0/graphify-out/manifest.json +438 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/pyproject.toml +2 -1
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/__init__.py +12 -3
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/cell_core.py +132 -40
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/config.py +115 -1
- cellpycore-0.2.0/src/cellpycore/curves.py +697 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/mapping.py +202 -0
- cellpycore-0.2.0/src/cellpycore/legacy/meta_mapping.py +245 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/mock_core.py +1 -2
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/merge.py +20 -6
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/metadata/models.py +13 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/summarizers.py +143 -38
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/units/__init__.py +14 -0
- cellpycore-0.2.0/src/cellpycore/units/converters.py +779 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/uv.lock +158 -1
- {cellpycore-0.1.4 → cellpycore-0.2.0}/zensical.toml +24 -0
- cellpycore-0.1.4/.cursor/skills/iflow-cleanup/SKILL.md +0 -44
- cellpycore-0.1.4/.cursor/skills/iflow-close/SKILL.md +0 -75
- cellpycore-0.1.4/.cursor/skills/iflow-version-bump/SKILL.md +0 -67
- cellpycore-0.1.4/.issueflows/02-partly-solved-issues/issue91_status.md +0 -16
- cellpycore-0.1.4/cellpy-core.code-workspace +0 -16
- cellpycore-0.1.4/graphify-out/.graphify_root +0 -1
- cellpycore-0.1.4/graphify-out/GRAPH_REPORT.md +0 -1125
- cellpycore-0.1.4/graphify-out/graph.html +0 -307
- cellpycore-0.1.4/graphify-out/graph.json +0 -55732
- cellpycore-0.1.4/graphify-out/manifest.json +0 -932
- cellpycore-0.1.4/src/cellpycore/units/converters.py +0 -322
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/rules/graphify.mdc +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/rules/kiss.mdc +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.cursor/rules/this-project.mdc +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.gitignore +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/00-tools/.gitkeep +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/00-tools/README.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/01-current-issues/.gitkeep +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/.gitkeep +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue10_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue10_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue10_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue12_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue12_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue12_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue13_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue13_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue13_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue21_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue21_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue21_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue22_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue22_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue22_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue23_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue23_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue23_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue24_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue24_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue29_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue29_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue29_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue30_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue30_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue30_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue32_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue32_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue32_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue34_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue34_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue36_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue36_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue39_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue39_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue39_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue40_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue40_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue40_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue41_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue41_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue41_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue42_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue42_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue42_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue43_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue43_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue43_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue44_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue44_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue45_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue45_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue45_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue50_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue50_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue50_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue54_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue54_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue54_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue55_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue55_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue55_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue56_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue56_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue56_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue62_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue62_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue62_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue64_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue64_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue64_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue66_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue66_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue66_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue67_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue67_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue67_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue68_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue68_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue68_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue69_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue69_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue69_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue70_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue70_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue70_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue72_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue72_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue77_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue77_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue77_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue82_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue82_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue84_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue84_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue84_status.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue86_original.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue86_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/03-solved-issues/issue86_status.md +0 -0
- {cellpycore-0.1.4/.issueflows/02-partly-solved-issues → cellpycore-0.2.0/.issueflows/03-solved-issues}/issue91_original.md +0 -0
- {cellpycore-0.1.4/.issueflows/02-partly-solved-issues → cellpycore-0.2.0/.issueflows/03-solved-issues}/issue91_plan.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/metadata-scaffolding.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/release-procedure.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/selector-dead-code-deferral.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/step-table-polars-migration.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/summary-extractors.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/test-data-and-fixtures.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/test-metadata-and-merging.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/04-designs-and-guides/this-project.md +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.issueflows/config.toml +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.pre-commit-config.yaml +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.python-version +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/.vscode/settings.json +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/LICENSE +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/exceptions.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/extractors.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/__init__.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/headers.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/limits.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/meta.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/legacy/selectors.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/metadata/__init__.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/metadata/io.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/py.typed +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/settings_base.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/testing/__init__.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/testing/mock_data.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/timestamps.py +0 -0
- {cellpycore-0.1.4 → cellpycore-0.2.0}/src/cellpycore/units/spec.py +0 -0
|
@@ -54,3 +54,12 @@ release() {
|
|
|
54
54
|
git push || return 1
|
|
55
55
|
gh release create "$tag" --generate-notes
|
|
56
56
|
}
|
|
57
|
+
|
|
58
|
+
# `acp "commit message"` — stage all, commit, push
|
|
59
|
+
acp() {
|
|
60
|
+
if [ $# -lt 1 ]; then
|
|
61
|
+
echo 'acp: usage: acp "commit message"'
|
|
62
|
+
return 1
|
|
63
|
+
fi
|
|
64
|
+
git add -A && git commit -m "$1" && git push
|
|
65
|
+
}
|
|
@@ -17,9 +17,10 @@ Key invariants from that doc:
|
|
|
17
17
|
|
|
18
18
|
- **Branch, don't fork.** Integration work goes on a `cellpy` branch (optionally a
|
|
19
19
|
`git worktree`), never a fresh clone of cellpy.
|
|
20
|
-
- **Dev wiring:** cellpy
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
- **Dev wiring:** cellpy pins `cellpycore` on PyPI in `[project.dependencies]`. Local
|
|
21
|
+
dual-repo dev: `uv sync --no-sources` then `uv pip install -e ../cellpy-core` (or
|
|
22
|
+
`cellpy/scripts/dev_sync.sh`). Do not commit `[tool.uv.sources]` path overrides.
|
|
23
|
+
Regenerate lock with `UV_NO_SOURCES=1 uv lock`. Pin exact `==` before cellpy releases.
|
|
23
24
|
- **Parity is enforced by tests** (legacy header/unit contract tests + golden parquet
|
|
24
25
|
fixtures), not by vigilance.
|
|
25
26
|
- **Metadata boundary:** core may own metadata *scaffolding and tooling* (schemas,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Issue-flow workflow rules for
|
|
2
|
+
description: Issue-flow workflow rules for cellpycore
|
|
3
3
|
globs:
|
|
4
|
-
|
|
4
|
+
- "**/*"
|
|
5
|
+
alwaysApply: false
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
|
|
@@ -103,11 +104,52 @@ Use an explicit status checkbox in the status file:
|
|
|
103
104
|
- `- [x] Done` when fully resolved
|
|
104
105
|
- `- [ ] Done` when not fully resolved
|
|
105
106
|
|
|
107
|
+
### Chat invocation (no slash)
|
|
108
|
+
|
|
109
|
+
On keyboard layouts where `/` and `@` are awkward to type (for example Norwegian), invoke lifecycle skills in **chat** without special keys.
|
|
110
|
+
|
|
111
|
+
**Primary form:** `iflow <step>` (space-separated) — e.g. `iflow plan`, `iflow pick`, `iflow close`. Plain `iflow` runs the smart dispatcher.
|
|
112
|
+
|
|
113
|
+
**Also recognized** (same obligation as slash-menu invocation): hyphen form (`iflow-plan`), slash form (`/iflow-plan`), slash + space (`/iflow plan`).
|
|
114
|
+
|
|
115
|
+
When the user message is **exactly** one of these forms, or **starts with** it followed by a space and trailing arguments, **read and follow** the matching skill immediately. Forward trailing text verbatim (e.g. `iflow pick fix` → `iflow-pick` with arg `fix`). Do **not** treat incidental mid-sentence mentions as commands — the message must **start with** the invocation.
|
|
116
|
+
|
|
117
|
+
| Chat / slash form | Skill |
|
|
118
|
+
|-------------------|-------|
|
|
119
|
+
| `iflow` / `/iflow` | `iflow` (dispatcher) |
|
|
120
|
+
|
|
121
|
+
| `iflow archive`, `iflow-archive`, `/iflow-archive`, `/iflow archive` | `iflow-archive` |
|
|
122
|
+
|
|
123
|
+
| `iflow cleanup`, `iflow-cleanup`, `/iflow-cleanup`, `/iflow cleanup` | `iflow-cleanup` |
|
|
124
|
+
|
|
125
|
+
| `iflow close`, `iflow-close`, `/iflow-close`, `/iflow close` | `iflow-close` |
|
|
126
|
+
|
|
127
|
+
| `iflow fix`, `iflow-fix`, `/iflow-fix`, `/iflow fix` | `iflow-fix` |
|
|
128
|
+
|
|
129
|
+
| `iflow graphify`, `iflow-graphify`, `/iflow-graphify`, `/iflow graphify` | `iflow-graphify` |
|
|
130
|
+
|
|
131
|
+
| `iflow init`, `iflow-init`, `/iflow-init`, `/iflow init` | `iflow-init` |
|
|
132
|
+
|
|
133
|
+
| `iflow pause`, `iflow-pause`, `/iflow-pause`, `/iflow pause` | `iflow-pause` |
|
|
134
|
+
|
|
135
|
+
| `iflow pick`, `iflow-pick`, `/iflow-pick`, `/iflow pick` | `iflow-pick` |
|
|
136
|
+
|
|
137
|
+
| `iflow plan`, `iflow-plan`, `/iflow-plan`, `/iflow plan` | `iflow-plan` |
|
|
138
|
+
|
|
139
|
+
| `iflow start`, `iflow-start`, `/iflow-start`, `/iflow start` | `iflow-start` |
|
|
140
|
+
|
|
141
|
+
| `iflow status`, `iflow-status`, `/iflow-status`, `/iflow status` | `iflow-status` |
|
|
142
|
+
|
|
143
|
+
| `iflow yolo`, `iflow-yolo`, `/iflow-yolo`, `/iflow yolo` | `iflow-yolo` |
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
Skill `@` attachment is supported on some editors but is not the recommended keyboard-friendly path.
|
|
147
|
+
|
|
106
148
|
### Command lifecycle
|
|
107
149
|
|
|
108
|
-
If you have not chosen an issue yet, run **`/iflow-pick`** — the front door that helps you select the next issue (parked work first, else ranked open GitHub issues), creates the branch, and runs `/iflow-init
|
|
150
|
+
If you have not chosen an issue yet, run **`/iflow-pick`** (or type **`iflow pick`** in chat) — the front door that helps you select the next issue (parked work first, else ranked open GitHub issues), creates the branch, and runs `/iflow-init`. It is off-path (never auto-dispatched).
|
|
109
151
|
|
|
110
|
-
If you just want the next right step, run **`/iflow`** — it detects state (by file presence under `.issueflows/01-current-issues/` and the status-file `- [x] Done` marker) and dispatches to `/iflow-init`, `/iflow-plan`, `/iflow-start`, or `/iflow-close`. It never auto-dispatches to `/iflow-pick`, `/iflow-pause`, `/iflow-cleanup`, or `/iflow-yolo` — those stay explicit.
|
|
152
|
+
If you just want the next right step, run **`/iflow`** (or type **`iflow`** in chat) — it detects state (by file presence under `.issueflows/01-current-issues/` and the status-file `- [x] Done` marker) and dispatches to `/iflow-init`, `/iflow-plan`, `/iflow-start`, or `/iflow-close`. It never auto-dispatches to `/iflow-pick`, `/iflow-pause`, `/iflow-cleanup`, or `/iflow-yolo` — those stay explicit.
|
|
111
153
|
|
|
112
154
|
The full slash-command lifecycle is:
|
|
113
155
|
|
|
@@ -124,10 +166,16 @@ The full slash-command lifecycle is:
|
|
|
124
166
|
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
167
|
|
|
126
168
|
|
|
169
|
+
|
|
170
|
+
Lifecycle skills include a **`### MODEL & EXECUTION DIRECTIVE`** section that tells agents whether to prioritize **economy** (speed) or **reasoning** (depth) for that step. Toggle with `step_directives` under `[issueflow]`; override per step via `[issueflow.step_profiles]`; optional label hints during `/iflow-pick` via `model_label_flows`, `deep_model_label`, and `fast_model_label`. Re-run `issue-flow update` after changing any of these.
|
|
171
|
+
|
|
172
|
+
|
|
127
173
|
`/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`.
|
|
128
174
|
|
|
129
175
|
`/iflow-status` prints a **read-only** overview of where every issue stands — the local tracking state under `.issueflows/` (focus / parked / solved) plus open GitHub issues cross-referenced against it. It is off-path (never auto-dispatched) and changes nothing.
|
|
130
176
|
|
|
177
|
+
`/iflow-archive` condenses old solved issue groups under `.issueflows/03-solved-issues/` into a single dated `YYYY-MM-DD_archived_issues.md` summary file (recording the pre-archive git ref for recovery via `git show <ref>:<path>`), then deletes the original `issue<N>_*` files. It is off-path and destructive: nothing is deleted before one consolidated confirmation.
|
|
178
|
+
|
|
131
179
|
> On tools without project slash commands (e.g. Codex CLI), invoke the mirrored Agent Skills instead (for example `iflow-init` in place of `/iflow-init`).
|
|
132
180
|
|
|
133
181
|
### When finishing an issue
|
|
@@ -182,6 +230,16 @@ Long-lived design docs, design decisions, and project "good practices" live unde
|
|
|
182
230
|
- **Never overwritten by `issue-flow update`.** The folder is recreated if missing, but existing files are left alone.
|
|
183
231
|
|
|
184
232
|
|
|
233
|
+
### Multi-root workspaces
|
|
234
|
+
|
|
235
|
+
When an editor workspace contains **multiple sibling repositories**, each with its own `.issueflows/` scaffold:
|
|
236
|
+
|
|
237
|
+
- **Resolve the target repo first** — explicit `root:` / `repo:` hints, then `issue-flow agent resolve`, then branch/single-scaffold heuristics, then the **workspace default** from `issueflow-workspace.toml` at the workspace root (create it with `issue-flow workspace init`); **ask** when still ambiguous. Never let `git` or `gh` infer the repo from cwd alone.
|
|
238
|
+
- **Scoped rules** — this repo's `issueflow-rules` apply under this project root only (path globs). Put **toolchain-specific** run/test commands in `.issueflows/04-designs-and-guides/this-project.md`, not in shared boilerplate that every repo merges.
|
|
239
|
+
- **Per-repo lifecycle** — `/iflow-cleanup`, branch hygiene, and focus issue folders are **per repository**; repeat commands in each repo when needed.
|
|
240
|
+
- **Design doc** — see `.issueflows/04-designs-and-guides/multi-repo-workspaces.md` when present (issue #67).
|
|
241
|
+
|
|
242
|
+
|
|
185
243
|
### Branch hygiene
|
|
186
244
|
|
|
187
245
|
- Do issue work on an **issue branch** named like `<N>-<short-slug>`, not on the default branch.
|
|
@@ -6,6 +6,7 @@ description: >-
|
|
|
6
6
|
caveman mode, token-greedy / terse answers, or says "be brief" / "stop
|
|
7
7
|
wasting tokens". Stays active across the session once on; off via "stop
|
|
8
8
|
caveman" / "normal mode".
|
|
9
|
+
issue-flow-version: 0.4.2a4
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# Be token greedy - as a caveman
|
|
@@ -31,7 +32,7 @@ English only. Caveman applies to English output; do not garble other languages.
|
|
|
31
32
|
|
|
32
33
|
## Intensity
|
|
33
34
|
|
|
34
|
-
Single level: **full**.
|
|
35
|
+
Single level: **full**. Classic caveman — every rule above applies at full strength; there is no milder setting.
|
|
35
36
|
|
|
36
37
|
Example — "Why React component re-render?"
|
|
37
38
|
- "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
|
|
@@ -5,6 +5,7 @@ description: >-
|
|
|
5
5
|
the decision tree is resolved, then feed the conclusions into the issue plan.
|
|
6
6
|
Use when the user wants to stress-test a plan, asks to "grill me", or during
|
|
7
7
|
/iflow-plan when grilling is turned on. Off via "stop grilling" / "normal mode".
|
|
8
|
+
issue-flow-version: 0.4.2a4
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
# Grill me — relentless planning interview
|
|
@@ -1,24 +1,58 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: iflow
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
status markers) and dispatch to /iflow-init, /iflow-plan, /iflow-start, or
|
|
7
|
-
/iflow-close. Forwards trailing args verbatim. Never auto-dispatches to
|
|
8
|
-
/iflow-pause, /iflow-cleanup, or /iflow-yolo.
|
|
4
|
+
Smart dispatcher: detect where the focus issue stands and dispatch to
|
|
5
|
+
/iflow-init, /iflow-plan, /iflow-start, or /iflow-close.
|
|
9
6
|
disable-model-invocation: true
|
|
7
|
+
issue-flow-version: 0.4.2a4
|
|
10
8
|
---
|
|
11
9
|
|
|
12
10
|
# issue-flow — iflow smart dispatcher (`/iflow`)
|
|
13
11
|
|
|
14
|
-
Follow this skill
|
|
12
|
+
Follow this skill to run **the right next step** in the issue-flow lifecycle: it detects state and routes to `/iflow-init`, `/iflow-plan`, `/iflow-start`, or `/iflow-close`, forwarding trailing args verbatim.
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
Do **not** use this skill for `/iflow-pick`, `/iflow-pause`, `/iflow-cleanup`, `/iflow-yolo`, or `/iflow-fix`. Those are explicit-only commands. (`/iflow-pick` is the front door *before* `/iflow-init`, for when no issue has been chosen yet. `/iflow-fix` runs an interactive iterative-fixes session, driven by `/iflow-fix` + `/iflow-close`.)
|
|
17
15
|
|
|
18
|
-
- The user runs `/iflow`, mentions **iflow**, or asks "what's the next step?" during an issue-flow lifecycle.
|
|
19
|
-
- You want a single entry point that routes to `/iflow-init`, `/iflow-plan`, `/iflow-start`, or `/iflow-close` based on current state.
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
**Invoke:** type `iflow` in chat, or `/iflow` from the slash menu.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### MODEL & EXECUTION DIRECTIVE
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
**Profile: economy** — Prioritize speed and token economy over deep reasoning.
|
|
26
|
+
|
|
27
|
+
In Cursor: use **Auto** or a fast model before invoking this step.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
Keep scope tight to what this step requires.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Resolve project root (multi-root workspaces)
|
|
37
|
+
|
|
38
|
+
Before any `git`, `gh`, or `.issueflows/` path operation in this workflow:
|
|
39
|
+
|
|
40
|
+
**Resolution order** (stop when unambiguous):
|
|
41
|
+
|
|
42
|
+
1. **Explicit hints** in slash input — `root:<path>`, `repo:<folder-basename>` (directory name, e.g. `cellpy-core`), or `repo:owner/name`.
|
|
43
|
+
2. **CLI fast path** — `issue-flow agent resolve [-C <start>] [--from-file <active-file>] [--json]`. Use the returned `project_root` and `repo`; pass `-C <project_root>` to other `issue-flow agent …` subcommands. When the answer came from the workspace registry, the payload sets `resolved_via_workspace_default: true`.
|
|
44
|
+
3. **Branch context** — exactly one workspace repo whose branch matches `^\d+-` → that root.
|
|
45
|
+
4. **Single scaffold** — exactly one `.issueflows/` tree visible in the workspace → that root.
|
|
46
|
+
5. **Workspace default** — an `issueflow-workspace.toml` at the workspace root (created with `issue-flow workspace init`) may name a `default` member repo; use it when no scaffold matched above. Tell the user the default was used.
|
|
47
|
+
6. **Ambiguous** → **stop and ask**; never guess between sibling repos.
|
|
48
|
+
|
|
49
|
+
After resolution, treat the result as `<project_root>` and `<owner/repo>`:
|
|
50
|
+
|
|
51
|
+
- **Git:** `git -C <project_root> …` (or `issue-flow agent … -C <project_root>` for supported ops).
|
|
52
|
+
- **GitHub:** always `gh … --repo <owner/repo>` — never rely on `gh`'s implicit cwd default.
|
|
53
|
+
- **Paths:** all `.issueflows/…` paths are under `<project_root>`.
|
|
54
|
+
|
|
55
|
+
When `.issueflows/04-designs-and-guides/multi-repo-workspaces.md` exists, read it for layout and cross-repo guidance.
|
|
22
56
|
|
|
23
57
|
## Instructions
|
|
24
58
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iflow-archive
|
|
3
|
+
description: >-
|
|
4
|
+
Condense old solved issue groups into one dated summary file, then delete
|
|
5
|
+
the originals. Destructive, one consolidated confirm.
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
issue-flow-version: 0.4.2a4
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# issue-flow — archive solved issues (`/iflow-archive`)
|
|
11
|
+
|
|
12
|
+
Follow this skill to **shrink the solved-issues archive**:
|
|
13
|
+
old `issue<N>_*` groups under `.issueflows/03-solved-issues/` are
|
|
14
|
+
summarised into one dated markdown file and the originals are deleted (they
|
|
15
|
+
stay recoverable through git history).
|
|
16
|
+
|
|
17
|
+
Do **not** use this to park or close an active issue — that is `/iflow-pause` / `/iflow-close`. This skill only touches `.issueflows/03-solved-issues/`.
|
|
18
|
+
|
|
19
|
+
## Input
|
|
20
|
+
|
|
21
|
+
- **(nothing)** — smart default: propose archiving every solved group **except the 5 most recent** (highest issue numbers).
|
|
22
|
+
- **`keep <K>`** — same, but keep the `<K>` most recent groups instead.
|
|
23
|
+
- **an explicit list** (e.g. `12 13 24`) — archive exactly those issues.
|
|
24
|
+
- **`all`** — archive every solved group.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
**Invoke:** type `iflow archive` in chat, or `/iflow-archive` from the slash menu (`iflow-archive` also works).
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### MODEL & EXECUTION DIRECTIVE
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
**Profile: reasoning** — Prioritize deep thinking and careful trade-offs over speed or token economy.
|
|
36
|
+
|
|
37
|
+
In Cursor: switch to a thinking-capable model before invoking this step (not Auto-only).
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Keep scope tight to what this step requires.
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Instructions
|
|
46
|
+
|
|
47
|
+
> **CLI fast path (optional).** If the `issue-flow` CLI is on `PATH`, the
|
|
48
|
+
> mechanical deletion step has a deterministic shortcut:
|
|
49
|
+
> `issue-flow agent archive <N> [<N> ...]` (add `--dry-run` to preview,
|
|
50
|
+
> `--json` for a machine-readable object). It removes the chosen groups'
|
|
51
|
+
> files and reports the pre-archive HEAD sha — you still select candidates,
|
|
52
|
+
> confirm with the user, and write the summary file yourself. The CLI is
|
|
53
|
+
> optional: if it is missing or errors, fall back to the manual instructions
|
|
54
|
+
> below.
|
|
55
|
+
|
|
56
|
+
1. **Preflight.** Require a **clean working tree** (`git status --porcelain`); if dirty, **stop** and ask the user to commit or stash first — the recovery ref is only meaningful when the deletion lands as its own commit. Capture the pre-archive ref: `git rev-parse HEAD`.
|
|
57
|
+
|
|
58
|
+
2. **Select candidates.** List every `issue<N>_*` group in `.issueflows/03-solved-issues/` with its number and title (from the `# Issue #N: <title>` heading of `issue<N>_original.md`). Apply the input rule (default: all except the 5 most recent by issue number). Show the resulting candidate list — number, title, file names — and let the user add/remove issues.
|
|
59
|
+
|
|
60
|
+
3. **Consolidated confirm** (destructive — written in normal prose, never shortened). One prompt covering exactly: which issues get summarised, that their files will be **deleted**, and that recovery relies on git history via the recorded ref. Do not proceed without a clear yes.
|
|
61
|
+
|
|
62
|
+
4. **Summarise (before deleting).** Append to `.issueflows/03-solved-issues/YYYY-MM-DD_archived_issues.md` (today's date; create the file if missing). Structure:
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
# Archived issues — YYYY-MM-DD
|
|
66
|
+
|
|
67
|
+
Pre-archive git ref: `<sha>`
|
|
68
|
+
Recover any archived file with `git show <sha>:<path>` (or browse `git log -- <path>`).
|
|
69
|
+
|
|
70
|
+
## Issue #<N>: <title>
|
|
71
|
+
|
|
72
|
+
- Source: <GitHub issue URL, from the original file>
|
|
73
|
+
- Archived files: issue<N>_original.md, issue<N>_plan.md, issue<N>_status.md
|
|
74
|
+
- Summary: 2–4 sentences distilled from the original / plan / status files —
|
|
75
|
+
what the issue was, what was done, and the outcome.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
One `## Issue` section per archived issue. If the dated file already exists (same-day rerun), append a `---` separator followed by a fresh `Pre-archive git ref:` line for this run, then the new issue sections. The dated filename deliberately does **not** match `issue<N>_*`, so it never interferes with issue grouping.
|
|
79
|
+
|
|
80
|
+
5. **Delete.** Remove the archived groups' files — CLI fast path (`issue-flow agent archive ...`), or manually `git rm .issueflows/03-solved-issues/issue<N>_*` per issue.
|
|
81
|
+
|
|
82
|
+
6. **Commit offer.** Propose a single commit, e.g. `chore(iflow): archive <count> solved issues (pre-archive ref <short-sha>)`, including the new/updated dated file and the deletions. Ask before committing; never push from this skill.
|
|
83
|
+
|
|
84
|
+
7. **Report.** Summarise: how many issues were archived, the dated file path, the pre-archive ref, and the one-line recovery recipe.
|
|
85
|
+
|
|
86
|
+
## Constraints
|
|
87
|
+
|
|
88
|
+
- **Off-path.** Never auto-dispatch from `/iflow`, `/iflow-start`, or `/iflow-close`. The user opts in explicitly.
|
|
89
|
+
- **Destructive, so gated.** Never delete anything before the consolidated confirm in step 3, and never delete files that were not summarised in step 4.
|
|
90
|
+
- Only `.issueflows/03-solved-issues/` is touched — never `01-current-issues/`, `02-partly-solved-issues/`, `00-tools/`, or `04-designs-and-guides/`.
|
|
91
|
+
- Requires a clean working tree; the deletion should land as its own commit so `git show <ref>:<path>` recovery always works.
|
|
92
|
+
- Summaries are interpretive (agent judgment); the CLI only ever does the mechanical deletion.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iflow-cleanup
|
|
3
|
+
description: >-
|
|
4
|
+
Post-merge branch hygiene: switch to the default branch and delete merged
|
|
5
|
+
local branches under one consolidated confirm. Never -D.
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
issue-flow-version: 0.4.2a4
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# issue-flow — issue cleanup (`/iflow-cleanup`)
|
|
11
|
+
|
|
12
|
+
Follow this skill to **run post-merge branch hygiene** after a PR has been merged (typically the PR opened by `/iflow-close`).
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
**Invoke:** type `iflow cleanup` in chat, or `/iflow-cleanup` from the slash menu (`iflow-cleanup` also works).
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### MODEL & EXECUTION DIRECTIVE
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
**Profile: economy** — Prioritize speed and token economy over deep reasoning.
|
|
24
|
+
|
|
25
|
+
In Cursor: use **Auto** or a fast model before invoking this step.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
Keep scope tight to what this step requires.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Resolve project root (multi-root workspaces)
|
|
35
|
+
|
|
36
|
+
Before any `git`, `gh`, or `.issueflows/` path operation in this workflow:
|
|
37
|
+
|
|
38
|
+
**Resolution order** (stop when unambiguous):
|
|
39
|
+
|
|
40
|
+
1. **Explicit hints** in slash input — `root:<path>`, `repo:<folder-basename>` (directory name, e.g. `cellpy-core`), or `repo:owner/name`.
|
|
41
|
+
2. **CLI fast path** — `issue-flow agent resolve [-C <start>] [--from-file <active-file>] [--json]`. Use the returned `project_root` and `repo`; pass `-C <project_root>` to other `issue-flow agent …` subcommands. When the answer came from the workspace registry, the payload sets `resolved_via_workspace_default: true`.
|
|
42
|
+
3. **Branch context** — exactly one workspace repo whose branch matches `^\d+-` → that root.
|
|
43
|
+
4. **Single scaffold** — exactly one `.issueflows/` tree visible in the workspace → that root.
|
|
44
|
+
5. **Workspace default** — an `issueflow-workspace.toml` at the workspace root (created with `issue-flow workspace init`) may name a `default` member repo; use it when no scaffold matched above. Tell the user the default was used.
|
|
45
|
+
6. **Ambiguous** → **stop and ask**; never guess between sibling repos.
|
|
46
|
+
|
|
47
|
+
After resolution, treat the result as `<project_root>` and `<owner/repo>`:
|
|
48
|
+
|
|
49
|
+
- **Git:** `git -C <project_root> …` (or `issue-flow agent … -C <project_root>` for supported ops).
|
|
50
|
+
- **GitHub:** always `gh … --repo <owner/repo>` — never rely on `gh`'s implicit cwd default.
|
|
51
|
+
- **Paths:** all `.issueflows/…` paths are under `<project_root>`.
|
|
52
|
+
|
|
53
|
+
When `.issueflows/04-designs-and-guides/multi-repo-workspaces.md` exists, read it for layout and cross-repo guidance.
|
|
54
|
+
|
|
55
|
+
## Instructions
|
|
56
|
+
|
|
57
|
+
1. **Detect the default branch.** Prefer `gh repo view --repo <owner/repo> --json defaultBranchRef -q .defaultBranchRef.name`, else `git -C <project_root> symbolic-ref --quiet --short refs/remotes/origin/HEAD`, else `main`.
|
|
58
|
+
|
|
59
|
+
2. **Identify the target branch.** If the user named a branch after `/iflow-cleanup`, use it. Else use the current branch (`git branch --show-current`). If the current branch **is** the default, skip to step 4 (folder sweep only).
|
|
60
|
+
|
|
61
|
+
3. **Check PR / merge state.** Prefer `gh pr view <branch> --json state,mergedAt,mergeCommit,headRefName`. If `gh` is unavailable, approximate with `git fetch --prune` then `git cherry origin/<default> <branch>` (all commits marked `-` means squash-merged).
|
|
62
|
+
- **If not merged:** remind the user that the working copy is still on the issue branch; suggest `git switch <default>` before unrelated work and re-run `/iflow-cleanup` after the PR merges. **Stop.** Do not delete anything.
|
|
63
|
+
- **If merged:** continue.
|
|
64
|
+
|
|
65
|
+
4. **Consolidated confirm** — one yes/no prompt listing every action:
|
|
66
|
+
- `git switch <default>`
|
|
67
|
+
- `git pull --ff-only`
|
|
68
|
+
- `git fetch --prune`
|
|
69
|
+
- Every local branch whose tip is already reachable from `origin/<default>` (include squash-merges via `git cherry`). List them explicitly before running `git branch -d <branch>` for each. Never use `-D`; if `-d` refuses, report the branch and move on.
|
|
70
|
+
- **Planned release tag (tag-derived projects only).** When `/iflow-close` planned a tag it did not create — check the focus issue's status file and the newest `HISTORY.md` release section for a version whose tag is missing from `git tag -l` — include creating it here: `git tag <planned>` then `git push origin <planned>` (or `gh release create <planned> --generate-notes`). Run it **after** the pull so the tag lands on the merged squash commit.
|
|
71
|
+
|
|
72
|
+
5. **Optional folder sweep** (safe; no destructive git). In `.issueflows/01-current-issues/`, for each `issue<N>_*` group whose status file contains `- [x] Done` (case-insensitive on `done`), move the group to `.issueflows/03-solved-issues/`. Leave groups without a checked `Done` in place — routing them to `.issueflows/02-partly-solved-issues/` is `/iflow-pause`'s job.
|
|
73
|
+
|
|
74
|
+
6. **Report.** Summarize: default branch, PR/merge status, commands run, branches deleted, branches skipped (with reason), folder sweep result. If `issue-flow agent resolve --json` reports `sibling_roots`, list them and remind the user that **each scaffolded repo needs its own `/iflow-cleanup`** — do not loop automatically in this step.
|
|
75
|
+
|
|
76
|
+
## Constraints
|
|
77
|
+
|
|
78
|
+
- Never use `git branch -D` or `git push --force`.
|
|
79
|
+
- Never delete the default branch.
|
|
80
|
+
- If anything is ambiguous (detached HEAD, multiple remotes, missing tracking info), report and stop rather than guess.
|
|
81
|
+
- Do not open or update PRs. Do not bump version fields — pyproject bumps belong to `/iflow-close`. The only version action allowed here is creating a release tag that `/iflow-close` **planned** (tag-derived strategy), inside the consolidated confirm.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iflow-close
|
|
3
|
+
description: >-
|
|
4
|
+
Finish and land the focus issue: tests, optional version bump, status
|
|
5
|
+
update, commit, push, and PR.
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
issue-flow-version: 0.4.2a4
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# issue-flow — issue close (`/iflow-close`)
|
|
11
|
+
|
|
12
|
+
Follow this skill to **finish and land** work: tests, optional version bump, issue-folder updates, git, and PR.
|
|
13
|
+
|
|
14
|
+
Post-merge branch hygiene lives in `/iflow-cleanup` — this skill never deletes branches.
|
|
15
|
+
|
|
16
|
+
## Optional version bump (command input)
|
|
17
|
+
|
|
18
|
+
If the user included text after `/iflow-close` that requests a version bump:
|
|
19
|
+
|
|
20
|
+
- **`bump`** (no level) → apply the pre-release-aware default.
|
|
21
|
+
- **A named level** (`patch`, `minor`, `major`, `stable`, `alpha`, `beta`, `rc`, `post`, `dev`) → use exactly that.
|
|
22
|
+
- Otherwise infer the level from natural language (e.g. "bugfix release" → `patch`); ask once if ambiguous. Never auto-pick `major`.
|
|
23
|
+
|
|
24
|
+
The exact semantics and the default rule live in `.cursor/skills/iflow-version-bump/SKILL.md` — that skill is the source of truth. When a bump applies: read it, then run the bump from the **project root** **after** the sanity check and **before** issue-folder updates and **before** commit / push / PR.
|
|
25
|
+
|
|
26
|
+
## Changelog update tokens (command input)
|
|
27
|
+
|
|
28
|
+
- **`nohistory`** or **`skip history`** → skip step 3 entirely.
|
|
29
|
+
- **`log "..."`** or **`note "..."`** → override the bullet summary verbatim. Otherwise the GitHub issue title is used.
|
|
30
|
+
|
|
31
|
+
## Branch switch tokens (command input)
|
|
32
|
+
|
|
33
|
+
- **`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.
|
|
34
|
+
|
|
35
|
+
## Hands-off token (command input)
|
|
36
|
+
|
|
37
|
+
- **`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).
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
**Invoke:** type `iflow close` in chat, or `/iflow-close` from the slash menu (`iflow-close` also works).
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### MODEL & EXECUTION DIRECTIVE
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
**Profile: economy** — Prioritize speed and token economy over deep reasoning.
|
|
49
|
+
|
|
50
|
+
In Cursor: use **Auto** or a fast model before invoking this step.
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
Keep scope tight to what this step requires.
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
### Resolve project root (multi-root workspaces)
|
|
60
|
+
|
|
61
|
+
Before any `git`, `gh`, or `.issueflows/` path operation in this workflow:
|
|
62
|
+
|
|
63
|
+
**Resolution order** (stop when unambiguous):
|
|
64
|
+
|
|
65
|
+
1. **Explicit hints** in slash input — `root:<path>`, `repo:<folder-basename>` (directory name, e.g. `cellpy-core`), or `repo:owner/name`.
|
|
66
|
+
2. **CLI fast path** — `issue-flow agent resolve [-C <start>] [--from-file <active-file>] [--json]`. Use the returned `project_root` and `repo`; pass `-C <project_root>` to other `issue-flow agent …` subcommands. When the answer came from the workspace registry, the payload sets `resolved_via_workspace_default: true`.
|
|
67
|
+
3. **Branch context** — exactly one workspace repo whose branch matches `^\d+-` → that root.
|
|
68
|
+
4. **Single scaffold** — exactly one `.issueflows/` tree visible in the workspace → that root.
|
|
69
|
+
5. **Workspace default** — an `issueflow-workspace.toml` at the workspace root (created with `issue-flow workspace init`) may name a `default` member repo; use it when no scaffold matched above. Tell the user the default was used.
|
|
70
|
+
6. **Ambiguous** → **stop and ask**; never guess between sibling repos.
|
|
71
|
+
|
|
72
|
+
After resolution, treat the result as `<project_root>` and `<owner/repo>`:
|
|
73
|
+
|
|
74
|
+
- **Git:** `git -C <project_root> …` (or `issue-flow agent … -C <project_root>` for supported ops).
|
|
75
|
+
- **GitHub:** always `gh … --repo <owner/repo>` — never rely on `gh`'s implicit cwd default.
|
|
76
|
+
- **Paths:** all `.issueflows/…` paths are under `<project_root>`.
|
|
77
|
+
|
|
78
|
+
When `.issueflows/04-designs-and-guides/multi-repo-workspaces.md` exists, read it for layout and cross-repo guidance.
|
|
79
|
+
|
|
80
|
+
## Instructions
|
|
81
|
+
|
|
82
|
+
1. **Sanity check** — Run the project test suite (e.g. `uv run pytest`) and any checks the repo relies on. **Ruff (when present):** if the project uses ruff (`[tool.ruff]` in `pyproject.toml`, ruff in dev dependencies, or `.issueflows/04-designs-and-guides/python-quality-tools.md` exists), run auto-fix lint through the documented Python runner before committing — e.g. `uv run ruff check --fix …` then `uv run ruff format …` (match paths to what the project documents). 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.
|
|
83
|
+
|
|
84
|
+
2. **Optional version bump** — If the user asked for a bump (see above), follow `.cursor/skills/iflow-version-bump/SKILL.md` — it resolves the project's **release strategy** first (the "Release & version bump" section of `.issueflows/04-designs-and-guides/this-project.md`, else `pyproject.toml` detection, else the uv default). **Static version:** run `uv version --bump <level>`. **Git-tag derived:** edit nothing — compute and report the **planned tag** (e.g. `v1.0.4a3`), record it in the status file, and defer creating it until after the merge (step 9 with `yolo`, else `/iflow-cleanup`). If neither strategy applies, skip and continue.
|
|
85
|
+
|
|
86
|
+
3. **Update `HISTORY.md`** — Unless the user passed `nohistory`, follow `.cursor/skills/iflow-history-update/SKILL.md`. If step 2 did not bump (or plan) a version, append a bullet to the `## [Unreleased]` section. If step 2 bumped or planned a version, promote `## [Unreleased]` to `## [<new_version>] - <YYYY-MM-DD>` (for tag-derived projects use the planned tag's version) 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.
|
|
87
|
+
|
|
88
|
+
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.
|
|
89
|
+
|
|
90
|
+
5. **Commit** — First check `git status`; if any changes are **not relevant** to this issue, tell the user which ones and ask whether to include them — do not auto-include or drop silently. Then stage intentionally (include `pyproject.toml` and `uv.lock` if changed after a bump, and `HISTORY.md` if step 3 updated it); write a commit message in full sentences describing what changed and why.
|
|
91
|
+
|
|
92
|
+
6. **Branch hygiene before push** — Run `git fetch --prune`, then sync with the default branch using `git pull --ff-only` (rebase or merge per project preference). Use `--ff-only` so unrelated history never gets pulled in silently; if it refuses, stop and ask how to reconcile. Resolve merge conflicts before pushing.
|
|
93
|
+
|
|
94
|
+
7. **Push** — Push to the remote the project uses (typically `origin`).
|
|
95
|
+
|
|
96
|
+
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`).
|
|
97
|
+
|
|
98
|
+
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).
|
|
99
|
+
|
|
100
|
+
9. **Switch back when safe** — 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, after the PR is open or updated:
|
|
101
|
+
- **CLI fast path (preferred).** If the `issue-flow` CLI is on `PATH`, run `issue-flow agent switchback --json`. It performs this whole step deterministically: refuses while the working tree is dirty (listing the paths), else switches to the detected default branch and runs `git pull --ff-only`. On exit 1, report its `notes` to the user and stop — do not force anything.
|
|
102
|
+
- **Manual fallback.** 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`). Run `git status --porcelain`; if 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.
|
|
103
|
+
- 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).
|
|
104
|
+
- **Planned release tag (`yolo` + tag-derived strategy only):** if step 2 planned a tag, create it now — after the pull, standing on the squash commit — with `git tag <planned>` then `git push origin <planned>` (covered by the yolo consolidated confirm). If the merge was only queued via `--auto`, leave the tag to `/iflow-cleanup` and say so.
|
|
105
|
+
|
|
106
|
+
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 — and, for tag-derived projects, the offer to create the release tag planned in step 2).
|
|
107
|
+
|
|
108
|
+
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).
|
|
109
|
+
|
|
110
|
+
## Constraints
|
|
111
|
+
|
|
112
|
+
- Do not skip failing tests without the user's explicit agreement.
|
|
113
|
+
- Prefer focused commits; do not rewrite unrelated history unless asked.
|
|
114
|
+
- Never delete branches from `/iflow-close`. Branch deletion belongs to `/iflow-cleanup`.
|
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: iflow-comments
|
|
3
3
|
description: >-
|
|
4
|
-
Triage a GitHub issue's comment thread into
|
|
5
|
-
|
|
6
|
-
issue<N>_original.md. Invoked by /iflow-init; also reusable when re-triaging
|
|
7
|
-
comments later in an issue's lifecycle.
|
|
4
|
+
Triage a GitHub issue's comment thread into the curated, bucketed summary
|
|
5
|
+
section of issue<N>_original.md.
|
|
8
6
|
disable-model-invocation: true
|
|
7
|
+
issue-flow-version: 0.4.2a4
|
|
9
8
|
---
|
|
10
9
|
|
|
11
10
|
# issue-flow — issue comments triage
|
|
12
11
|
|
|
13
|
-
Follow this skill
|
|
12
|
+
Follow this skill to turn a GitHub issue's comment thread into a short, decision-useful summary that lives next to the original issue body under `.issueflows/01-current-issues/issue<N>_original.md`.
|
|
14
13
|
|
|
15
|
-
It is the playbook that `/iflow-init` (and the `iflow-init` skill) delegate to for anything beyond fetching raw comments.
|
|
14
|
+
It is the playbook that `/iflow-init` (and the `iflow-init` skill) delegate to for anything beyond fetching raw comments. It also covers re-triage of an already-captured issue when new comments arrive (the issue body text stays unchanged; only the curated section is rewritten).
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### MODEL & EXECUTION DIRECTIVE
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
**Profile: economy** — Prioritize speed and token economy over deep reasoning.
|
|
21
|
+
|
|
22
|
+
In Cursor: use **Auto** or a fast model before invoking this step.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Keep scope tight to what this step requires.
|
|
16
27
|
|
|
17
|
-
## When to use
|
|
18
28
|
|
|
19
|
-
- `/iflow-init` just fetched an issue with a non-empty `comments` array and needs to write the `## Comments (curated summary)` section.
|
|
20
|
-
- You are re-running triage on an already-captured issue because new comments have arrived (the issue body text must stay unchanged; only the curated section is rewritten).
|
|
21
|
-
- Any workflow that needs to understand "what does the comment thread actually ask us to do?" without pasting the raw thread into a file.
|
|
22
29
|
|
|
23
30
|
## Inputs
|
|
24
31
|
|
|
@@ -78,7 +85,6 @@ Formatting rules:
|
|
|
78
85
|
- Each bucket's bullet is itself a list if there is more than one item — nest concrete bullets under the bold label.
|
|
79
86
|
- **Drop any bucket that is empty** — do not leave `- **Additional tasks**: ` with no content.
|
|
80
87
|
- **Always keep the `_Note: ..._` footer** when the section exists. Use the total `comments` length for `<count>` and the `author.login` + date of the most recent non-dropped comment for `@<login>` / `<date>`.
|
|
81
|
-
- Use UTF-8 markdown. No leading/trailing blank lines inside the section beyond what's shown.
|
|
82
88
|
|
|
83
89
|
## Edge cases
|
|
84
90
|
|
|
@@ -92,5 +98,4 @@ Formatting rules:
|
|
|
92
98
|
## Constraints
|
|
93
99
|
|
|
94
100
|
- This skill only writes into the `## Comments (curated summary)` section of `issue<N>_original.md`. It never touches the issue body, the status file, or the plan file.
|
|
95
|
-
- It never calls `gh` itself — it expects the caller (`/iflow-init` or similar) to provide the comments JSON.
|
|
96
|
-
- It never talks to the network beyond what the caller has already fetched.
|
|
101
|
+
- It never calls `gh` or the network itself — it expects the caller (`/iflow-init` or similar) to provide the comments JSON.
|