cellpycore 0.1.1__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.1/.aliases +56 -0
- cellpycore-0.1.1/.cursor/rules/cellpy-core-migration.mdc +28 -0
- cellpycore-0.1.1/.cursor/rules/graphify.mdc +10 -0
- cellpycore-0.1.1/.cursor/rules/issueflow-rules.mdc +203 -0
- cellpycore-0.1.1/.cursor/rules/kiss.mdc +101 -0
- cellpycore-0.1.1/.cursor/rules/this-project.mdc +41 -0
- cellpycore-0.1.1/.cursor/skills/caveman/SKILL.md +62 -0
- cellpycore-0.1.1/.cursor/skills/grill-me/SKILL.md +56 -0
- cellpycore-0.1.1/.cursor/skills/iflow/SKILL.md +64 -0
- cellpycore-0.1.1/.cursor/skills/iflow-cleanup/SKILL.md +44 -0
- cellpycore-0.1.1/.cursor/skills/iflow-close/SKILL.md +69 -0
- cellpycore-0.1.1/.cursor/skills/iflow-comments/SKILL.md +96 -0
- cellpycore-0.1.1/.cursor/skills/iflow-fix/SKILL.md +64 -0
- cellpycore-0.1.1/.cursor/skills/iflow-graphify/SKILL.md +67 -0
- cellpycore-0.1.1/.cursor/skills/iflow-history-update/SKILL.md +84 -0
- cellpycore-0.1.1/.cursor/skills/iflow-init/SKILL.md +83 -0
- cellpycore-0.1.1/.cursor/skills/iflow-pause/SKILL.md +44 -0
- cellpycore-0.1.1/.cursor/skills/iflow-pick/SKILL.md +59 -0
- cellpycore-0.1.1/.cursor/skills/iflow-plan/SKILL.md +68 -0
- cellpycore-0.1.1/.cursor/skills/iflow-start/SKILL.md +60 -0
- cellpycore-0.1.1/.cursor/skills/iflow-status/SKILL.md +54 -0
- cellpycore-0.1.1/.cursor/skills/iflow-version-bump/SKILL.md +67 -0
- cellpycore-0.1.1/.cursor/skills/iflow-yolo/SKILL.md +49 -0
- cellpycore-0.1.1/.gitignore +182 -0
- cellpycore-0.1.1/.issueflows/00-tools/.gitkeep +0 -0
- cellpycore-0.1.1/.issueflows/00-tools/README.md +29 -0
- cellpycore-0.1.1/.issueflows/01-current-issues/.gitkeep +0 -0
- cellpycore-0.1.1/.issueflows/02-partly-solved-issues/.gitkeep +0 -0
- cellpycore-0.1.1/.issueflows/02-partly-solved-issues/issue44_original.md +27 -0
- cellpycore-0.1.1/.issueflows/02-partly-solved-issues/issue44_status.md +16 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/.gitkeep +0 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue10_original.md +7 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue10_plan.md +80 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue10_status.md +24 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue12_original.md +50 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue12_plan.md +215 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue12_status.md +57 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue13_original.md +39 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue13_plan.md +146 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue13_status.md +123 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue21_original.md +24 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue21_plan.md +137 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue21_status.md +43 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue22_original.md +20 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue22_plan.md +77 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue22_status.md +36 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue23_original.md +24 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue23_plan.md +154 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue23_status.md +48 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue24_original.md +7 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue24_status.md +47 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue29_original.md +12 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue29_plan.md +118 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue29_status.md +50 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue30_original.md +13 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue30_plan.md +124 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue30_status.md +52 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue32_original.md +75 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue32_plan.md +124 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue32_status.md +60 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue34_original.md +60 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue34_plan.md +58 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue36_original.md +13 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue36_status.md +23 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue39_original.md +11 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue39_plan.md +72 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue39_status.md +23 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue40_original.md +19 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue40_plan.md +111 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue40_status.md +48 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue41_original.md +22 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue41_plan.md +130 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue41_status.md +36 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue42_original.md +19 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue42_plan.md +85 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue42_status.md +28 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue43_original.md +15 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue43_plan.md +104 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue43_status.md +36 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue50_original.md +20 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue50_plan.md +25 -0
- cellpycore-0.1.1/.issueflows/03-solved-issues/issue50_status.md +20 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/.gitkeep +0 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/cellpy-core-integration-into-cellpy.md +132 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/cellpy-core-integration-roadmap.md +351 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/cellpy-core-migration.md +122 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/code-review-2026-07.md +193 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/column-headers-review.md +148 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/metadata-scaffolding.md +58 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/selector-dead-code-deferral.md +39 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/step-table-polars-migration.md +234 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/summary-extractors.md +60 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/test-data-and-fixtures.md +86 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/test-metadata-and-merging.md +67 -0
- cellpycore-0.1.1/.issueflows/04-designs-and-guides/this-project.md +32 -0
- cellpycore-0.1.1/.issueflows/config.toml +12 -0
- cellpycore-0.1.1/.python-version +1 -0
- cellpycore-0.1.1/.vscode/settings.json +7 -0
- cellpycore-0.1.1/AGENTS.md +253 -0
- cellpycore-0.1.1/HISTORY.md +23 -0
- cellpycore-0.1.1/LICENSE +21 -0
- cellpycore-0.1.1/PKG-INFO +90 -0
- cellpycore-0.1.1/README.md +66 -0
- cellpycore-0.1.1/cellpy-core.code-workspace +14 -0
- cellpycore-0.1.1/graphify-out/.graphify_labels.json +63 -0
- cellpycore-0.1.1/graphify-out/.graphify_root +1 -0
- cellpycore-0.1.1/graphify-out/GRAPH_REPORT.md +291 -0
- cellpycore-0.1.1/graphify-out/graph.html +305 -0
- cellpycore-0.1.1/graphify-out/graph.json +18767 -0
- cellpycore-0.1.1/graphify-out/manifest.json +194 -0
- cellpycore-0.1.1/pyproject.toml +79 -0
- cellpycore-0.1.1/scratch.db +0 -0
- cellpycore-0.1.1/src/cellpycore/__init__.py +0 -0
- cellpycore-0.1.1/src/cellpycore/_helpers.py +199 -0
- cellpycore-0.1.1/src/cellpycore/cell_core.py +696 -0
- cellpycore-0.1.1/src/cellpycore/config.py +674 -0
- cellpycore-0.1.1/src/cellpycore/extractors.py +156 -0
- cellpycore-0.1.1/src/cellpycore/header_mapping.py +267 -0
- cellpycore-0.1.1/src/cellpycore/legacy.py +336 -0
- cellpycore-0.1.1/src/cellpycore/metadata/__init__.py +59 -0
- cellpycore-0.1.1/src/cellpycore/metadata/io.py +192 -0
- cellpycore-0.1.1/src/cellpycore/metadata/models.py +238 -0
- cellpycore-0.1.1/src/cellpycore/selectors.py +470 -0
- cellpycore-0.1.1/src/cellpycore/settings_base.py +98 -0
- cellpycore-0.1.1/src/cellpycore/summarizers.py +903 -0
- cellpycore-0.1.1/src/cellpycore/timestamps.py +128 -0
- cellpycore-0.1.1/src/cellpycore/units.py +257 -0
- cellpycore-0.1.1/uv.lock +1144 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# `release [patch|minor|major]`
|
|
2
|
+
#
|
|
3
|
+
# Cuts a GitHub release whose tag matches the *committed* project version, so
|
|
4
|
+
# the git history and the published tags can never drift apart.
|
|
5
|
+
#
|
|
6
|
+
# release # tag the already-committed version (e.g. after `/issue-close patch`)
|
|
7
|
+
# release patch # bump -> commit -> push -> tag, all in one consistent step
|
|
8
|
+
# release minor|major # same, for the other bump levels
|
|
9
|
+
#
|
|
10
|
+
# Guards:
|
|
11
|
+
# - refuses to tag while a version bump is still uncommitted (the old alias
|
|
12
|
+
# silently dropped uncommitted bumps from history -> tag/repo drift);
|
|
13
|
+
# - refuses if the target tag already exists locally or on origin
|
|
14
|
+
# (this is what produced the confusing "tag already exists" error after a
|
|
15
|
+
# double bump from `/issue-close` + the release ritual).
|
|
16
|
+
release() {
|
|
17
|
+
local level="${1:-}"
|
|
18
|
+
|
|
19
|
+
if [ -n "$level" ]; then
|
|
20
|
+
case "$level" in
|
|
21
|
+
patch|minor|major) ;;
|
|
22
|
+
*) echo "release: unknown bump level '$level' (use patch|minor|major)"; return 1 ;;
|
|
23
|
+
esac
|
|
24
|
+
if [ -n "$(git status --porcelain)" ]; then
|
|
25
|
+
echo "release: working tree is not clean; commit or stash before bumping."; return 1
|
|
26
|
+
fi
|
|
27
|
+
uv version --bump "$level" || return 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Derive the version from pyproject AFTER any bump.
|
|
31
|
+
local ver
|
|
32
|
+
ver="$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")" || return 1
|
|
33
|
+
local tag="v$ver"
|
|
34
|
+
|
|
35
|
+
# Commit the bump (if we made one) so the tag points at committed history.
|
|
36
|
+
if [ -n "$(git status --porcelain -- pyproject.toml uv.lock)" ]; then
|
|
37
|
+
if [ -n "$level" ]; then
|
|
38
|
+
git add pyproject.toml uv.lock || return 1
|
|
39
|
+
git commit -m "$tag" || return 1
|
|
40
|
+
else
|
|
41
|
+
echo "release: pyproject.toml/uv.lock has an uncommitted version change."
|
|
42
|
+
echo " commit it first, or run: release patch|minor|major"
|
|
43
|
+
return 1
|
|
44
|
+
fi
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Never re-create an existing tag.
|
|
48
|
+
if git rev-parse -q --verify "refs/tags/$tag" >/dev/null 2>&1 \
|
|
49
|
+
|| git ls-remote --exit-code --tags origin "refs/tags/$tag" >/dev/null 2>&1; then
|
|
50
|
+
echo "release: tag $tag already exists. Bump the version first (release patch|minor|major)."
|
|
51
|
+
return 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
git push || return 1
|
|
55
|
+
gh release create "$tag" --generate-notes
|
|
56
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Required reading before cross-repo cellpy <-> cellpy-core integration/migration work
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# cellpy <-> cellpy-core migration
|
|
7
|
+
|
|
8
|
+
Before doing **any** work that touches the boundary between `cellpy` (jepegit/cellpy)
|
|
9
|
+
and `cellpy-core` (cellpy/cellpy-core) — wiring the dependency, the processing seam,
|
|
10
|
+
shared headers/units, test/cell metadata, or "what belongs in core" — you MUST first
|
|
11
|
+
read:
|
|
12
|
+
|
|
13
|
+
`.issueflows/04-designs-and-guides/cellpy-core-migration.md`
|
|
14
|
+
(and its companion `cellpy-core-integration-into-cellpy.md`).
|
|
15
|
+
|
|
16
|
+
Key invariants from that doc:
|
|
17
|
+
|
|
18
|
+
- **Branch, don't fork.** Integration work goes on a `cellpy` branch (optionally a
|
|
19
|
+
`git worktree`), never a fresh clone of cellpy.
|
|
20
|
+
- **Dev wiring:** cellpy uses a `[tool.uv.sources]` editable path to `../cellpy-core`
|
|
21
|
+
for local dev; the `git+https…@<ref>` reference in `[project.dependencies]` stays the
|
|
22
|
+
release/consumer truth. Pin a tag/commit for releases.
|
|
23
|
+
- **Parity is enforced by tests** (legacy header/unit contract tests + golden parquet
|
|
24
|
+
fixtures), not by vigilance.
|
|
25
|
+
- **Metadata boundary:** core may own metadata *scaffolding and tooling* (schemas,
|
|
26
|
+
`test_id`, helpers) but must NOT require populated metadata on its `Data`; attaching
|
|
27
|
+
real metadata to a data object is the next level's opt-in (e.g. cellpy v2.0). The
|
|
28
|
+
core engine must degrade gracefully when metadata is absent.
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
- Before answering architecture or codebase questions, read graphify-out/GRAPH_REPORT.md for god nodes and community structure
|
|
9
|
+
- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files
|
|
10
|
+
- After modifying code files in this session, run `graphify update .` to keep the graph current (AST-only, no API cost)
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Issue-flow workflow rules for LLMs
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Issue-flow best practices
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## Running python
|
|
12
|
+
|
|
13
|
+
**Respect the project's existing toolchain first.** If this project already
|
|
14
|
+
documents how to run Python and manage dependencies — in its `README`,
|
|
15
|
+
`AGENTS.md`, `CLAUDE.md`, `.cursor/rules`, `environment.yml`, `pyproject.toml`,
|
|
16
|
+
`Makefile`, CI config, etc. — **follow that**, even where it conflicts with the
|
|
17
|
+
defaults below. These rules describe issue-flow's *default* assumptions, not a
|
|
18
|
+
mandate to override a project that has already chosen differently.
|
|
19
|
+
|
|
20
|
+
The one tool-neutral principle: **don't call bare `python ...`** — invoke Python
|
|
21
|
+
through the project's environment (its runner, or an activated virtualenv/conda
|
|
22
|
+
env) so scripts and tests see the right interpreter and dependencies.
|
|
23
|
+
|
|
24
|
+
### If the project uses conda
|
|
25
|
+
|
|
26
|
+
When the project documents a conda environment, run **all** Python commands —
|
|
27
|
+
scripts **and `pytest`** — inside the **activated conda environment**. Do **not**
|
|
28
|
+
substitute `uv run`.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Either activate the environment first…
|
|
32
|
+
conda activate <env-name>
|
|
33
|
+
python run_script.py
|
|
34
|
+
pytest
|
|
35
|
+
|
|
36
|
+
# …or run one-off commands inside it:
|
|
37
|
+
conda run -n <env-name> pytest
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### If the project uses uv (issue-flow's default)
|
|
41
|
+
|
|
42
|
+
For projects scaffolded fresh (and this is the default when nothing else is
|
|
43
|
+
documented), use `uv`:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# ❌ BAD: bare interpreter
|
|
47
|
+
python run_script.py
|
|
48
|
+
|
|
49
|
+
# ✅ GOOD: through uv
|
|
50
|
+
uv run run_script.py
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Package management with `uv`**
|
|
54
|
+
|
|
55
|
+
- Install, synchronize, and lock dependencies with `uv`; don't reach for `pip`,
|
|
56
|
+
`pip-tools`, or `poetry` in a uv-managed project.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Add or upgrade dependencies
|
|
60
|
+
uv add <package>
|
|
61
|
+
|
|
62
|
+
# Remove dependencies
|
|
63
|
+
uv remove <package>
|
|
64
|
+
|
|
65
|
+
# Reinstall all dependencies from the lock file
|
|
66
|
+
uv sync
|
|
67
|
+
|
|
68
|
+
# Run a script with the right environment
|
|
69
|
+
uv run script.py
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Other toolchains (plain venv / pip / poetry)
|
|
73
|
+
|
|
74
|
+
If the project uses something else, use whatever it documents (e.g. activate its
|
|
75
|
+
`.venv` and use `pip`, or run `poetry run`). Match the project; don't force `uv`.
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
## Issue tracking structure
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
cellpycore/
|
|
82
|
+
.issueflows/
|
|
83
|
+
00-tools/
|
|
84
|
+
01-current-issues/
|
|
85
|
+
issueXX_original.md
|
|
86
|
+
issueXX_status.md
|
|
87
|
+
02-partly-solved-issues/
|
|
88
|
+
03-solved-issues/
|
|
89
|
+
04-designs-and-guides/
|
|
90
|
+
pyproject.toml
|
|
91
|
+
readme.md
|
|
92
|
+
...
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
## Development information
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### Working on issues
|
|
100
|
+
|
|
101
|
+
After each iteration, update the documents in `.issueflows/01-current-issues` (should contain one file labelled `_original` with the original issue description, a `_plan` file with the confirmed approach, and supplementary status files describing what has been done, current status, and remaining work).
|
|
102
|
+
Use an explicit status checkbox in the status file:
|
|
103
|
+
- `- [x] Done` when fully resolved
|
|
104
|
+
- `- [ ] Done` when not fully resolved
|
|
105
|
+
|
|
106
|
+
### Command lifecycle
|
|
107
|
+
|
|
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` for you. It is off-path (never auto-dispatched).
|
|
109
|
+
|
|
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.
|
|
111
|
+
|
|
112
|
+
The full slash-command lifecycle is:
|
|
113
|
+
|
|
114
|
+
1. **`/iflow-init`** — capture the GitHub issue as `issue<N>_original.md`.
|
|
115
|
+
2. **`/iflow-plan`** — design the approach in `issue<N>_plan.md` and get explicit confirmation before any code changes.
|
|
116
|
+
3. **`/iflow-start`** — implement the confirmed plan. Asks to run `/iflow-plan` first if the plan file is missing.
|
|
117
|
+
4. **`/iflow-pause`** *(optional)* — park work mid-stream: update status, move the issue group to `02-partly-solved-issues`, optional WIP commit.
|
|
118
|
+
5. **`/iflow-close`** — tests, optional `uv version --bump`, status update, commit, push, PR. Does not delete branches.
|
|
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
|
+
|
|
121
|
+
`/iflow-yolo` chains `init → plan → start → close` for small, low-risk issues with up-front safeguards (clean tree, passing tests, single consolidated confirm).
|
|
122
|
+
|
|
123
|
+
`/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
|
+
|
|
125
|
+
`/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.
|
|
126
|
+
|
|
127
|
+
> 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`).
|
|
128
|
+
|
|
129
|
+
### When finishing an issue
|
|
130
|
+
|
|
131
|
+
If the issue is fully resolved (no additional subtasks present), move the original, plan, and status markdown files to `.issueflows/03-solved-issues`. Else, move them to `.issueflows/02-partly-solved-issues`.
|
|
132
|
+
|
|
133
|
+
### Scripts that can help us when working on issues
|
|
134
|
+
|
|
135
|
+
`.issueflows/00-tools/` is the project's durable toolbox of reusable helper scripts, with a `README.md` index describing each one.
|
|
136
|
+
|
|
137
|
+
- **Check it first.** Before writing a new one-off helper for an issue, skim the `00-tools/README.md` index and the folder — a suitable tool may already exist.
|
|
138
|
+
- **Contribute back.** If you build something during an issue that could help on a future one, save it into `.issueflows/00-tools/` and add a one-line entry to the index (name, what it does, when to use it) so the next agent knows whether to reach for it.
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
### Optional response styles
|
|
143
|
+
|
|
144
|
+
A **caveman** Agent Skill is installed under `.cursor/skills/caveman/` and
|
|
145
|
+
is **on by default for this project**: reply in the terse, "token-greedy" caveman
|
|
146
|
+
style — keep all technical substance, drop filler, articles, and pleasantries —
|
|
147
|
+
from the first message of every session, re-arming each new session. Turn it off
|
|
148
|
+
for the rest of a session with **"stop caveman"** or **"normal mode"**. Code,
|
|
149
|
+
commits, PRs, security warnings, and destructive-action confirmations are always
|
|
150
|
+
written in normal prose, never caveman. (This default comes from
|
|
151
|
+
`caveman_default = true` under `[issueflow]` in `.issueflows/config.toml`;
|
|
152
|
+
set it to `false` and re-run `issue-flow update` to make caveman opt-in per
|
|
153
|
+
session instead.)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
### Planning aids
|
|
159
|
+
|
|
160
|
+
A **grill-me** Agent Skill is installed under `.cursor/skills/grill-me/`.
|
|
161
|
+
It runs a relentless planning interview that stress-tests a plan or design —
|
|
162
|
+
one question at a time, each with a recommended answer — until every branch of
|
|
163
|
+
the decision tree is resolved. It is **off by default** and only kicks in when
|
|
164
|
+
you ask for it (e.g. "grill me", "poke holes in this"). Turn it off with **"stop
|
|
165
|
+
grilling"** or **"normal mode"**. (To make grilling on by default during planning
|
|
166
|
+
for this project, set `grill_me_default = true` under `[issueflow]` in
|
|
167
|
+
`.issueflows/config.toml` and re-run `issue-flow update`.)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
### Designs and guides
|
|
172
|
+
|
|
173
|
+
Long-lived design docs, design decisions, and project "good practices" live under `.issueflows/04-designs-and-guides/`. Unlike the issue folders, content here is **not** tied to a single issue and is **not** archived when an issue closes — it is the project's durable memory.
|
|
174
|
+
|
|
175
|
+
- **Project brief:** if `.issueflows/04-designs-and-guides/this-project.md` exists, read it early for project-specific context (what the repo is, stack/runtime, how to run/test, conventions, entry points, and known limitations).
|
|
176
|
+
- **Before planning or implementing**, skim `.issueflows/04-designs-and-guides/` for existing docs relevant to the current issue and follow them (cite them in the plan when they influence the approach).
|
|
177
|
+
- **When a non-trivial design decision is made** during `/iflow-plan` or `/iflow-start`, add or update a markdown file here. Keep entries terse: context, the decision, alternatives considered, and a link back to the issue.
|
|
178
|
+
- **Never overwritten by `issue-flow update`.** The folder is recreated if missing, but existing files are left alone.
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
### Branch hygiene
|
|
182
|
+
|
|
183
|
+
- Do issue work on an **issue branch** named like `<N>-<short-slug>`, not on the default branch.
|
|
184
|
+
- Before starting or continuing work on an issue branch, run `git fetch --prune` and check where the branch sits relative to `origin/<default>` (ahead/behind). A branch that is "several commits ahead" after a merged PR usually means the PR was squash-merged and the local branch is stale.
|
|
185
|
+
- **Assume squash-merges on GitHub.** After a PR merges: run **`/iflow-cleanup`** — it switches to the default branch, runs `git pull --ff-only`, `git fetch --prune`, and deletes merged local branches with `git branch -d <branch>` under a single consolidated confirm (never `-D` automatically). `/iflow-close` no longer does this step itself.
|
|
186
|
+
- If an issue is already archived under `.issueflows/02-partly-solved-issues` or `.issueflows/03-solved-issues`, the matching local branch is stale; don't resume work on it silently — switch back to the default branch and, if the issue really needs re-opening, do it deliberately through `/iflow-init` (which will ask for a second confirmation).
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
### Folder hygiene for `.issueflows/01-current-issues`
|
|
190
|
+
|
|
191
|
+
- Only the **focus issue** (the one currently being worked on) should live in `.issueflows/01-current-issues`.
|
|
192
|
+
- `/iflow-init` and `/iflow-start` both sweep that folder automatically: every `issue<n>_*` group **other than the focus issue** is moved to `.issueflows/03-solved-issues` if a status file contains `- [x] Done`, otherwise to `.issueflows/02-partly-solved-issues`. Keep status files accurate so the sweep routes them correctly.
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
### Knowledge graph (optional, via [graphify](https://iflow-graphify.net))
|
|
196
|
+
|
|
197
|
+
If a `graphify-out/` folder exists in the project root, the project has the optional [graphify](https://iflow-graphify.net) integration enabled and a knowledge graph is available alongside the source.
|
|
198
|
+
|
|
199
|
+
- **Before grepping**, skim `graphify-out/GRAPH_REPORT.md`. It surfaces god-nodes (most-connected concepts), surprising cross-module connections, and suggested questions the graph can answer — often a faster way to locate the files an issue actually touches than full-text search.
|
|
200
|
+
- **`/iflow-graphify`** (slash command) or **`issue-flow graphify`** (CLI) rebuild the graph. With no extra args this runs `graphify update <project>` — AST-only, **no LLM API key needed**. For richer semantic relationships (cross-file links surfaced by an LLM pass), run `issue-flow graphify extract` after setting `GEMINI_API_KEY` / `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `MOONSHOT_API_KEY` (or pass `--backend ollama` for a local LLM). Other subcommands: `watch` (live), `cluster-only --no-viz` (re-cluster). Trailing flags pass through verbatim. Your agent's own LLM cannot be reused by subprocesses; graphify needs its own backend.
|
|
201
|
+
- `/iflow-graphify` is **off-path**: never auto-dispatched by `/iflow`, `/iflow-start`, or `/iflow-close`. It is the user's call. `/iflow-start` may *suggest* skimming `GRAPH_REPORT.md`; `/iflow-close` may *suggest* a rebuild after large structural changes — neither runs `graphify` automatically.
|
|
202
|
+
- If `graphify-out/` is not present, ignore graph-related guidance entirely. The integration is opt-in (install with `uv tool install graphifyy`, then `issue-flow update` to register the graphify skill).
|
|
203
|
+
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Description: Global KISS development rules to prevent over-engineering and enforce simple, maintainable solutions across all projects.
|
|
9
|
+
Auto-attach: true
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
KISS PRIME DIRECTIVE
|
|
13
|
+
Keep every change simple, evidence-based, and reproducible.
|
|
14
|
+
|
|
15
|
+
Solution Design and Scope Control
|
|
16
|
+
- **Scope-First Principle**: Before coding, ask "What's the simplest thing that could work?"
|
|
17
|
+
- **File Budget**: For tasks <50 lines total, use MAX 1 existing file or create MAX 1 new file
|
|
18
|
+
- **Dependency Budget**: Don't add dependencies for stdlib-solvable operations
|
|
19
|
+
- **Abstraction Budget**: No classes/modules/frameworks for one-time operations
|
|
20
|
+
- **Research Time-Box**: MAX 10 minutes researching before trying obvious solution
|
|
21
|
+
|
|
22
|
+
Complexity Prevention
|
|
23
|
+
- **Start with stdlib**: Can `shutil`, `pathlib`, `os`, `json` solve this? Do that first.
|
|
24
|
+
- **Question every layer**: Do I need a function/class/module? Usually no for <20 line operations.
|
|
25
|
+
- **Match project scale**: Small codebases get small solutions; don't over-architect.
|
|
26
|
+
- **Prototype first**: Write inline/script before creating abstractions.
|
|
27
|
+
|
|
28
|
+
Before Creating Any New File:
|
|
29
|
+
1. Can this be 5-10 lines added to existing file?
|
|
30
|
+
2. Am I solving a problem that doesn't exist yet?
|
|
31
|
+
3. Would a junior developer understand immediately?
|
|
32
|
+
4. Does this match existing codebase complexity?
|
|
33
|
+
|
|
34
|
+
- No invented data or code to mask failures; focus on root cause and add tests.
|
|
35
|
+
- Remove dead or duplicated code promptly.
|
|
36
|
+
- Use Conventional Commits; prefer squash merges for clean history.
|
|
37
|
+
|
|
38
|
+
Dependencies
|
|
39
|
+
- Make dependencies explicit; update requirements.txt or lockfiles immediately on changes.
|
|
40
|
+
- List only third-party packages (exclude standard library).
|
|
41
|
+
- Pin minimum compatible versions for stability; use a lockfile (e.g., pip-tools/uv) when reproducibility is required.
|
|
42
|
+
|
|
43
|
+
Testing
|
|
44
|
+
- Run tests after substantive edits; keep the suite green.
|
|
45
|
+
- Add tests for new behavior and edge cases before or with the change.
|
|
46
|
+
- Use automated testing (unit/integration/e2e as appropriate); prefer CI to enforce.
|
|
47
|
+
|
|
48
|
+
Logging and Error Handling
|
|
49
|
+
- Use project loggers, not prints; include actionable context (counts, paths, IDs).
|
|
50
|
+
- Fail fast on invalid config or inputs; never silently auto-correct.
|
|
51
|
+
- Follow log levels best practices (debug, info, warning, error, critical).
|
|
52
|
+
|
|
53
|
+
IO and Artifacts
|
|
54
|
+
- Treat input data directories as read-only; write derived artifacts to an output/ folder.
|
|
55
|
+
- Avoid committing large generated files or runtime outputs to version control.
|
|
56
|
+
- Project rules may redefine exact paths and modes (dry-run/live, backups).
|
|
57
|
+
|
|
58
|
+
Platform and Paths
|
|
59
|
+
- Avoid hard-coded, user-specific absolute paths; externalize to config.
|
|
60
|
+
- Use cross-platform path APIs for portability.
|
|
61
|
+
|
|
62
|
+
Code Style and Quality
|
|
63
|
+
- Match project style consistently; use automated tools (linters/formatters) when available.
|
|
64
|
+
- Prefer early returns, shallow nesting, and meaningful naming.
|
|
65
|
+
- Avoid bare except; handle exceptions explicitly.
|
|
66
|
+
- Maintain concise docstrings focused on behavior and intent.
|
|
67
|
+
|
|
68
|
+
Operational Safeguards (minimal)
|
|
69
|
+
- Dry-run and backups
|
|
70
|
+
- Do: provide a dry-run that exercises the flow without mutating prod; create and verify a backup before writes; log backup paths and intended changes.
|
|
71
|
+
- Don't: modify prod without a backup/restore path; label runs "dry" if they mutate state.
|
|
72
|
+
- Feature-gated behavior
|
|
73
|
+
- Do: ship new behavior behind a default-off flag; add tests for old/new paths; document enable/disable steps.
|
|
74
|
+
- Don't: change defaults silently; ship behavior that cannot be turned off.
|
|
75
|
+
- Config/schema safety
|
|
76
|
+
- Do: validate config strictly (types, required keys, unknown keys = error); version config/schema when behavior changes; make migrations reversible and tested.
|
|
77
|
+
- Don't: auto-migrate without backups/logs; accept unknown config keys; make irreversible schema changes.
|
|
78
|
+
|
|
79
|
+
Collaboration and Workflow
|
|
80
|
+
- Read project docs and tests before changes; preserve stated invariants.
|
|
81
|
+
- Encourage peer reviews for risky or substantial changes.
|
|
82
|
+
- Propose and document plans for risky IO/DB changes; provide OS-appropriate, non-interactive commands.
|
|
83
|
+
|
|
84
|
+
Security and Scalability
|
|
85
|
+
- Integrate basic security hygiene (e.g., dependency scans like pip-audit/dependabot).
|
|
86
|
+
- Patch vulnerabilities promptly; remove unused deps.
|
|
87
|
+
- Prefer simple, modular designs; avoid microservices or heavy patterns unless clearly justified.
|
|
88
|
+
|
|
89
|
+
Documentation Standards
|
|
90
|
+
1) Project-Level README
|
|
91
|
+
- Include: purpose/scope, setup, example usage, directory structure, and ownership/contact.
|
|
92
|
+
|
|
93
|
+
2) Configuration Reference and Runbook
|
|
94
|
+
- Include: config keys with types/defaults, example configs, dry-run/live procedures, backup/restore steps, and common recovery actions.
|
|
95
|
+
|
|
96
|
+
3) Change Logs and Versioning
|
|
97
|
+
- Maintain a CHANGELOG.md or use tags/releases to track features, fixes, and breaking changes.
|
|
98
|
+
|
|
99
|
+
Conflict Resolution
|
|
100
|
+
- This global rule is the default. Project rules in .cursor/rules may override specifics (paths, workflows, tooling).
|
|
101
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: cellpy-core project overview, environment/tooling (uv, .venv), repo layout, and docstring conventions.
|
|
3
|
+
globs:
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
This is a python project. And it uses a python environment (.venv). Rember to activate it! We
|
|
9
|
+
also have uv installed. Use uv if you want. If not, just do the normal "source .venv/Scripts/activate" (assuming you are in the top directory). The project uses the common structure for python projects, where the main code is in the src/cellpycore folder and tests are in the tests folder. And docs are in the docs folder. Again, assuming you are in the top directory of this repository.
|
|
10
|
+
|
|
11
|
+
This library is to be used as a core part of a larger library (cellpy) that should read cell testing data from battery testers. It implements the core functionallity: finding all the steps and cycles and creating tables containing information pr step or pr cycle. It should run fast. And it should be easy for developers of the full cellpy library to use and extend it. It should be thread safe. It should be understandable.
|
|
12
|
+
|
|
13
|
+
## Docstrings
|
|
14
|
+
|
|
15
|
+
Use **Google-style** docstrings everywhere (this matches both `cellpy-core` and the old `cellpy` codebase). Do not use NumPy-style (underlined section headers) or plain reST field lists (`:param:` / `:return:`).
|
|
16
|
+
|
|
17
|
+
Rules:
|
|
18
|
+
- Start with a one-line summary, then an optional blank line and longer description.
|
|
19
|
+
- Use these section headers (a header line ending in a colon, followed by an indented block): `Args:`, `Returns:`, `Raises:`, `Yields:`, `Attributes:` (for classes / enums), `Example:`, `Note:`.
|
|
20
|
+
- In `Args:`, write each parameter as `name (type): description`. The `(type)` is optional when the signature already has a type hint, but stay consistent within a function.
|
|
21
|
+
- Wrap code-like tokens (types, values, identifiers) in double backticks, e.g. ``` ``pandas.DataFrame`` ```, ``` ``"anode"`` ```.
|
|
22
|
+
- Keep them concise and focused on behavior and intent, not a restatement of the code.
|
|
23
|
+
|
|
24
|
+
Example:
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
def find_steps(data, schema=None):
|
|
28
|
+
"""Find all steps in the raw data and build the step table.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
data (Data): The data object to process.
|
|
32
|
+
schema: The column-header schema to use. Defaults to the native
|
|
33
|
+
cellpy-core schema when not provided.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Data: The data object with the step table added.
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
NoDataFound: If the data object has no raw data.
|
|
40
|
+
"""
|
|
41
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caveman
|
|
3
|
+
description: >-
|
|
4
|
+
Respond in a terse "smart caveman" style that keeps all technical substance
|
|
5
|
+
but drops filler, articles, and pleasantries. Use when the user asks for
|
|
6
|
+
caveman mode, token-greedy / terse answers, or says "be brief" / "stop
|
|
7
|
+
wasting tokens". Stays active across the session once on; off via "stop
|
|
8
|
+
caveman" / "normal mode".
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Be token greedy - as a caveman
|
|
12
|
+
|
|
13
|
+
Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
14
|
+
|
|
15
|
+
## Persistence
|
|
16
|
+
|
|
17
|
+
ACTIVE EVERY RESPONSE once turned on. No revert after many turns. No filler drift. Still active if unsure. Off only: "stop caveman" / "normal mode".
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). No tool-call narration, no decorative tables/emoji, no dumping long raw error logs unless asked — quote shortest decisive line. Standard well-known tech acronyms OK (DB/API/HTTP); never invent new abbreviations reader can't decode. Technical terms exact. Code blocks unchanged. Errors quoted exact.
|
|
22
|
+
|
|
23
|
+
No self-reference. Never name or announce the style. No "caveman mode on", "me caveman think", no third-person caveman tags. Output caveman-only — never normal answer plus "Caveman:" recap. Exception: user explicitly ask what the mode is.
|
|
24
|
+
|
|
25
|
+
Pattern: `[thing] [action] [reason]. [next step].`
|
|
26
|
+
|
|
27
|
+
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
28
|
+
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
|
|
29
|
+
|
|
30
|
+
English only. Caveman applies to English output; do not garble other languages.
|
|
31
|
+
|
|
32
|
+
## Intensity
|
|
33
|
+
|
|
34
|
+
Single level: **full**. Drop articles, fragments OK, short synonyms. Classic caveman. No tool-call narration, no decorative tables/emoji, no long raw error-log dumps unless asked. Standard acronyms OK; no invented abbreviations.
|
|
35
|
+
|
|
36
|
+
Example — "Why React component re-render?"
|
|
37
|
+
- "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
|
|
38
|
+
|
|
39
|
+
Example — "Explain database connection pooling."
|
|
40
|
+
- "Pool reuse open DB connections. No new connection per request. Skip handshake overhead."
|
|
41
|
+
|
|
42
|
+
## Auto-Clarity
|
|
43
|
+
|
|
44
|
+
Drop caveman when:
|
|
45
|
+
- Security warnings
|
|
46
|
+
- Irreversible action confirmations
|
|
47
|
+
- Multi-step sequences where fragment order or omitted conjunctions risk misread
|
|
48
|
+
- Compression itself creates technical ambiguity (e.g., `"migrate table drop column backup first"` — order unclear without articles/conjunctions)
|
|
49
|
+
- User asks to clarify or repeats question
|
|
50
|
+
|
|
51
|
+
Resume caveman after clear part done.
|
|
52
|
+
|
|
53
|
+
Example — destructive op:
|
|
54
|
+
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
|
|
55
|
+
> ```sql
|
|
56
|
+
> DROP TABLE users;
|
|
57
|
+
> ```
|
|
58
|
+
> Caveman resume. Verify backup exist first.
|
|
59
|
+
|
|
60
|
+
## Boundaries
|
|
61
|
+
|
|
62
|
+
Code/commits/PRs: write normal. "stop caveman" or "normal mode": revert. Mode persist until changed or session end.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-me
|
|
3
|
+
description: >-
|
|
4
|
+
Interview the user relentlessly about a plan or design until every branch of
|
|
5
|
+
the decision tree is resolved, then feed the conclusions into the issue plan.
|
|
6
|
+
Use when the user wants to stress-test a plan, asks to "grill me", or during
|
|
7
|
+
/iflow-plan when grilling is turned on. Off via "stop grilling" / "normal mode".
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Grill me — relentless planning interview
|
|
11
|
+
|
|
12
|
+
Interview the user about every aspect of the plan until you reach a shared,
|
|
13
|
+
unambiguous understanding. Walk down each branch of the design tree, resolving
|
|
14
|
+
dependencies between decisions one at a time. The goal is to surface hidden
|
|
15
|
+
assumptions and edge cases **before** they get encoded in code or written into
|
|
16
|
+
`.issueflows/01-current-issues/issue<N>_plan.md`.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- The user asks to be grilled / stress-tested ("grill me", "poke holes in this").
|
|
21
|
+
- During `/iflow-plan`, when grilling is active (see *Activation* below), to
|
|
22
|
+
pressure-test the approach before the plan file is drafted.
|
|
23
|
+
|
|
24
|
+
## How to grill
|
|
25
|
+
|
|
26
|
+
- **One question at a time.** Never batch questions. Wait for the answer before
|
|
27
|
+
moving to the next branch.
|
|
28
|
+
- **Always recommend an answer.** For each question, give your recommended option
|
|
29
|
+
and a one-line rationale, so the user can accept quickly or push back.
|
|
30
|
+
- **Explore before asking.** If a question can be answered by reading the code,
|
|
31
|
+
the issue text, or `.issueflows/04-designs-and-guides/`, explore first
|
|
32
|
+
and confirm what you found instead of asking the user to do your homework.
|
|
33
|
+
- **Follow the decision tree.** Resolve upstream decisions before the ones that
|
|
34
|
+
depend on them; let earlier answers prune later branches.
|
|
35
|
+
- **Stay on scope.** Grill the issue at hand. Park genuinely separate concerns as
|
|
36
|
+
follow-up notes rather than expanding the interview indefinitely.
|
|
37
|
+
- **Know when to stop.** End when every open branch is resolved (or explicitly
|
|
38
|
+
deferred) and you can restate the plan without ambiguity. Summarize the agreed
|
|
39
|
+
decisions so they can flow straight into the plan.
|
|
40
|
+
|
|
41
|
+
## Activation
|
|
42
|
+
|
|
43
|
+
This skill is **dormant by default**: it engages only when the user asks for it
|
|
44
|
+
("grill me") or when a project turns it on for planning.
|
|
45
|
+
|
|
46
|
+
Turn it off again for the rest of a session with **"stop grilling"** or
|
|
47
|
+
**"normal mode"**. (To make grilling on by default during planning for this
|
|
48
|
+
project, set `grill_me_default = true` under `[issueflow]` in
|
|
49
|
+
`.issueflows/config.toml` and re-run `issue-flow update`.)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## Boundaries
|
|
53
|
+
|
|
54
|
+
- Grilling is a **planning** aid: it questions and aligns, it does not write code.
|
|
55
|
+
- Hand the agreed decisions to `/iflow-plan` so they land in `issue<N>_plan.md`;
|
|
56
|
+
implementation still goes through `/iflow-start`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iflow
|
|
3
|
+
description: >-
|
|
4
|
+
Run the /iflow smart dispatcher: detect where the focus issue stands in the
|
|
5
|
+
lifecycle (via files in .issueflows/01-current-issues/ and
|
|
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.
|
|
9
|
+
disable-model-invocation: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# issue-flow — iflow smart dispatcher (`/iflow`)
|
|
13
|
+
|
|
14
|
+
Follow this skill when the user wants to run **the right next step** in the issue-flow lifecycle without remembering which specific command applies.
|
|
15
|
+
|
|
16
|
+
## When to use
|
|
17
|
+
|
|
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
|
+
|
|
21
|
+
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`.)
|
|
22
|
+
|
|
23
|
+
## Instructions
|
|
24
|
+
|
|
25
|
+
> **CLI fast path (optional).** If the `issue-flow` CLI is on `PATH`, run
|
|
26
|
+
> `issue-flow agent state --json` to resolve the focus issue, its lifecycle
|
|
27
|
+
> stage, and the suggested `next_command` in one deterministic step (covers
|
|
28
|
+
> instructions 1–2), then dispatch to that command. The CLI is optional: if it
|
|
29
|
+
> is not installed or it errors, fall back to the manual instructions below.
|
|
30
|
+
> (`issue-flow` is only present when the user installed it, e.g.
|
|
31
|
+
> `uv tool install issue-flow`.)
|
|
32
|
+
|
|
33
|
+
1. **Resolve the focus issue number `N`.**
|
|
34
|
+
- `git branch --show-current`. If it matches `^(\d+)-.+`, the leading digits are the **authoritative** `N`.
|
|
35
|
+
- List `issue<n>_*` groups in `.issueflows/01-current-issues/`, and also check `.issueflows/02-partly-solved-issues/` and `.issueflows/03-solved-issues/` for archived groups matching `N`.
|
|
36
|
+
- Pick `N` by precedence:
|
|
37
|
+
1. **Branch-derived `N` wins**, regardless of whether a group for `N` exists in `01-current-issues/`. State **A** will apply when no `issue<N>_*` files are present yet. If `issue<N>_*` is archived under `02-partly-solved-issues/` or `03-solved-issues/`, warn the user that `/iflow-init`'s archived-issue guard will ask for an explicit confirmation before re-opening.
|
|
38
|
+
2. No branch-derived `N`, exactly one group exists in `01-current-issues/` → use it.
|
|
39
|
+
3. No branch-derived `N`, no groups at all → state **A** (dispatch `/iflow-init`; it will ask for a number).
|
|
40
|
+
4. No branch-derived `N`, multiple groups → **stop and ask**.
|
|
41
|
+
|
|
42
|
+
2. **Detect state and choose the dispatch target** (first match wins):
|
|
43
|
+
|
|
44
|
+
- **A** — no `issue<N>_original.md` (or no focus issue) → dispatch to **`/iflow-init`**. Reason: "no `*_original.md` yet".
|
|
45
|
+
- **B** — original exists, no `issue<N>_plan.md` → dispatch to **`/iflow-plan`**. Reason: "no plan file yet".
|
|
46
|
+
- **C** — plan exists, and status file is missing or its `- [x] Done` is unchecked → dispatch to **`/iflow-start`**. Reason: "plan is confirmed but status is not `- [x] Done`".
|
|
47
|
+
- **D** — status file contains `- [x] Done` (case-insensitive on `done`) → dispatch to **`/iflow-close`**. Reason: "status marks the issue `- [x] Done`".
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
3. **Announce and dispatch.** Print one line like `/iflow -> /iflow-plan (issue #N: no plan file yet)` and then follow the chosen command's playbook. Forward the user's trailing text verbatim.
|
|
51
|
+
|
|
52
|
+
4. **Respect downstream checkpoints.** Never suppress the downstream command's own prompts (plan confirmation, unrelated-changes prompt, etc.). `/iflow` adds no new confirmation layer of its own.
|
|
53
|
+
|
|
54
|
+
5. **Report.** Summarize: focus issue `N` and how it was resolved, which command was dispatched and why, the downstream output, and a one-line hint when an off-path command is the natural next step:
|
|
55
|
+
- state **D** + PR likely merged → "after the PR merges, run `/iflow-cleanup`"
|
|
56
|
+
- mid-stream context switch needed → "to park this work, run `/iflow-pause`"
|
|
57
|
+
- tiny fix that would benefit from a single-shot chain → "consider `/iflow-yolo` next time"
|
|
58
|
+
|
|
59
|
+
## Constraints
|
|
60
|
+
|
|
61
|
+
- Never auto-dispatch to `/iflow-pick`, `/iflow-pause`, `/iflow-cleanup`, `/iflow-yolo`, or `/iflow-fix`.
|
|
62
|
+
- If the focus issue cannot be resolved (multiple groups, branch ambiguous), stop and ask.
|
|
63
|
+
- Do not modify files beyond what the downstream command would normally modify. `/iflow` itself writes nothing — all file changes come from the dispatched command.
|
|
64
|
+
- Dispatch to at most one command per `/iflow` invocation.
|