relay-workflow 2.0.1 → 2.0.2

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.
@@ -36,20 +36,34 @@ are available:
36
36
  <python> -c "import IPython; v=tuple(int(x) for x in IPython.__version__.split('.')[:2]); assert v>=(7,0), f'IPython 7+ required for top-level await, found {IPython.__version__}'"
37
37
  ```
38
38
  If the IPython check fails, upgrade before proceeding:
39
- `pip install --upgrade ipython ipykernel`
39
+ `<python> -m pip install --upgrade ipython ipykernel`
40
40
 
41
- 2. If all checks pass, proceed to Part A.
41
+ 2. Register the virtual environment as a Jupyter kernel so notebooks
42
+ can find it (both for programmatic execution and IDE use):
43
+ ```
44
+ <python> -m ipykernel install --user --name=<project> --display-name="<project> (.venv)"
45
+ ```
46
+ Where `<project>` is the project directory name (basename of the
47
+ working directory, e.g., `mnemos2`, `my-app`). If no venv exists
48
+ (system Python), skip this step — the default `python3` kernel works.
49
+
50
+ Verify the kernel is registered:
51
+ ```
52
+ <python> -m jupyter kernelspec list
53
+ ```
54
+
55
+ 3. If all checks pass (deps importable + kernel registered), proceed to Part A.
42
56
 
43
- 3. If they are NOT available:
57
+ 4. If deps are NOT available:
44
58
  a. Look for an existing virtual environment (`.venv/`, `venv/`, or
45
59
  check if already running inside one via `sys.prefix != sys.base_prefix`).
46
60
  b. If a venv exists: activate it and run
47
- `pip install nbclient nbformat nbconvert ipython ipykernel`, then proceed to Part A.
61
+ `<python> -m pip install nbclient nbformat nbconvert ipython ipykernel`, then proceed to Part A.
48
62
  c. If no venv exists but Python 3 is available: ask the user before
49
63
  installing globally: "No virtual environment found. Install
50
64
  notebook dependencies into the system Python? (Or create a
51
65
  venv first with `<python> -m venv .venv`)"
52
- If the user approves, run `pip install nbclient nbformat nbconvert ipython ipykernel`,
66
+ If the user approves, run `<python> -m pip install nbclient nbformat nbconvert ipython ipykernel`,
53
67
  then proceed to Part A.
54
68
  d. If Python 3 is not available: tell the user
55
69
  "Python 3 is required for verification notebooks. Install Python 3
@@ -62,6 +76,19 @@ Naming: Use the SAME name as the issue/feature file, but with .ipynb
62
76
  extension instead of .md.
63
77
  e.g., `delete_entity_not_atomic.md` → `delete_entity_not_atomic.ipynb`
64
78
 
79
+ Kernel metadata: Set the notebook's `kernelspec` to the kernel registered
80
+ in Part 0 step 2. In the notebook JSON metadata:
81
+ ```json
82
+ "kernelspec": {
83
+ "name": "<project>",
84
+ "display_name": "<project> (.venv)",
85
+ "language": "python"
86
+ }
87
+ ```
88
+ If no venv was registered (system Python), use `"name": "python3"` instead.
89
+ This ensures both programmatic execution and IDE opening use the correct
90
+ Python environment.
91
+
65
92
  For each issue/feature file in the phase:
66
93
 
67
94
  1. HEADER CELL (markdown):
@@ -169,6 +196,15 @@ For each issue/feature file in the phase:
169
196
 
170
197
  ## Part B — Run, Validate, and Iterate
171
198
 
199
+ **Execution method**: Execute the notebook **in-place** so cell outputs are
200
+ persisted in the source `.ipynb` file. Use one of these approaches:
201
+ - **Preferred**: `<python> -m jupyter nbconvert --to notebook --execute --inplace <notebook>.ipynb`
202
+ - **Alternative**: Use `nbclient` programmatically — load with `nbformat.read()`,
203
+ execute with `nbclient.NotebookClient(...).execute()`, write back with
204
+ `nbformat.write()` to the **same file path**.
205
+ - **NEVER** use `--output-dir` pointing to a temp directory — this discards
206
+ outputs from the source notebook.
207
+
172
208
  After creating the notebook, execute every cell sequentially. For each cell
173
209
  that errors or produces a FAIL:
174
210
 
@@ -29,14 +29,14 @@ Create this file to track the installed Relay version:
29
29
 
30
30
  | Field | Value |
31
31
  |-------|-------|
32
- | **Version** | 2.0.0 |
32
+ | **Version** | 2.0.2 |
33
33
  | **Installed** | [YYYY-MM-DD] |
34
34
  | **Source** | https://github.com/momobits/Relay |
35
35
  | **Format** | skills |
36
36
 
37
37
  ## Changelog
38
38
 
39
- ### 2.0.0 — Skills-based workflow
39
+ ### 2.0.2 — Skills-based workflow
40
40
  - Converted 14 prompts to Claude Code skills plus new `/relay-help` navigation skill (15 total)
41
41
  - Added `/relay-help` navigation skill
42
42
  - Skills are auto-discovered — no more `@file.md` references
@@ -275,12 +275,21 @@ resolved phase). The skills /relay-review, /relay-verify, and
275
275
  `ipykernel` to execute. Set these up now so notebooks work when
276
276
  you reach the code pipeline:
277
277
 
278
- a. Check if Python 3 is available.
279
- b. Check for an existing virtual environment.
280
- c. Install all notebook dependencies:
281
- `pip install nbclient nbformat nbconvert ipython ipykernel`
282
- d. Confirm the install succeeded (import all five packages).
283
- e. Ask if the user wants these added to the project's dev dependencies.
278
+ a. Determine the correct Python command for this platform:
279
+ - If a virtual environment exists (`.venv/`, `venv/`): use its
280
+ Python directly (e.g., `.venv/Scripts/python` on Windows,
281
+ `.venv/bin/python` on Linux/macOS)
282
+ - Otherwise: try `python3` first, fall back to `python`
283
+ Use whichever works for ALL subsequent Python/pip commands.
284
+ b. Check if Python 3 is available using the resolved command.
285
+ c. Check for an existing virtual environment.
286
+ d. Install all notebook dependencies:
287
+ `<python> -m pip install nbclient nbformat nbconvert ipython ipykernel`
288
+ e. Register the venv as a Jupyter kernel (skip if no venv):
289
+ `<python> -m ipykernel install --user --name=<project> --display-name="<project> (.venv)"`
290
+ Where `<project>` is the project directory name.
291
+ f. Confirm the install succeeded (import all five packages).
292
+ g. Ask if the user wants these added to the project's dev dependencies.
284
293
 
285
294
  ## Navigation
286
295
  When setup is complete, tell the user:
package/README.md CHANGED
@@ -48,7 +48,7 @@ Every AI session reads this documentation before acting. Every session writes ba
48
48
  ```bash
49
49
  # Install with npx (recommended)
50
50
  cd your-project
51
- npx relay-workflow install
51
+ npx relay-workflow@latest install
52
52
  ```
53
53
 
54
54
  Or install manually:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "relay-workflow",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "description": "Persistent memory for AI coding workflows — Claude Code skills that give agents memory of what was built, what broke, and what's next",
5
5
  "main": "tools/cli.js",
6
6
  "bin": {
package/tools/cli.js CHANGED
@@ -3,7 +3,7 @@
3
3
  const fs = require("fs");
4
4
  const path = require("path");
5
5
 
6
- const VERSION = "2.0.1";
6
+ const VERSION = "2.0.2";
7
7
  const SKILLS_DIR = ".claude/skills";
8
8
 
9
9
  const RELAY_SKILLS = [