prizmkit 1.1.20 → 1.1.23
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.
- package/bundled/VERSION.json +3 -3
- package/bundled/dev-pipeline/lib/branch.sh +187 -23
- package/bundled/dev-pipeline/reset-bug.sh +21 -13
- package/bundled/dev-pipeline/reset-feature.sh +21 -13
- package/bundled/dev-pipeline/reset-refactor.sh +21 -13
- package/bundled/dev-pipeline/run-bugfix.sh +113 -26
- package/bundled/dev-pipeline/run-feature.sh +113 -27
- package/bundled/dev-pipeline/run-refactor.sh +113 -26
- package/bundled/dev-pipeline/scripts/detect-stuck.py +25 -14
- package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +32 -0
- package/bundled/dev-pipeline/scripts/init-bugfix-pipeline.py +0 -5
- package/bundled/dev-pipeline/scripts/init-pipeline.py +0 -5
- package/bundled/dev-pipeline/scripts/init-refactor-pipeline.py +0 -5
- package/bundled/dev-pipeline/scripts/update-bug-status.py +40 -31
- package/bundled/dev-pipeline/scripts/update-feature-status.py +54 -60
- package/bundled/dev-pipeline/scripts/update-refactor-status.py +43 -34
- package/bundled/dev-pipeline/templates/bootstrap-tier1.md +22 -7
- package/bundled/dev-pipeline/templates/bootstrap-tier2.md +22 -7
- package/bundled/dev-pipeline/templates/bootstrap-tier3.md +22 -7
- package/bundled/dev-pipeline/templates/sections/phase-browser-verification.md +22 -7
- package/bundled/dev-pipeline/tests/test_auto_skip.py +10 -3
- package/bundled/skills/_metadata.json +1 -1
- package/package.json +1 -1
|
@@ -364,17 +364,32 @@ You MUST execute this phase. Do NOT skip it. Do NOT mark it as completed without
|
|
|
364
364
|
You know this project's tech stack. Detect and start the dev server yourself:
|
|
365
365
|
|
|
366
366
|
1. Identify the dev server start command from project config (`package.json` scripts, `Makefile`, `docker-compose.yml`, etc.)
|
|
367
|
-
2.
|
|
367
|
+
2. **Detect the dev server port** — use the pre-detected port from pipeline if available, otherwise extract from project config. Do NOT hardcode or guess the port:
|
|
368
368
|
```bash
|
|
369
|
-
|
|
369
|
+
# Use pipeline-injected port if available, otherwise extract from package.json
|
|
370
|
+
DEV_PORT={{DEV_PORT}}
|
|
371
|
+
# If DEV_PORT is still a placeholder, detect at runtime:
|
|
372
|
+
if [ "$DEV_PORT" = "{{DEV_PORT}}" ]; then
|
|
373
|
+
DEV_PORT=$(node -e "const s=require('./package.json').scripts.dev; const m=s.match(/-p\s+(\d+)/); console.log(m?m[1]:'')")
|
|
374
|
+
if [ -z "$DEV_PORT" ]; then
|
|
375
|
+
DEV_PORT=$(echo "$NEXT_PUBLIC_SITE_URL" | sed -nE 's|.*:([0-9]+).*|\1|p')
|
|
376
|
+
fi
|
|
377
|
+
DEV_PORT=${DEV_PORT:-3000}
|
|
378
|
+
fi
|
|
379
|
+
echo "Detected DEV_PORT=$DEV_PORT"
|
|
370
380
|
```
|
|
371
|
-
3.
|
|
381
|
+
3. Verify the port is available:
|
|
382
|
+
```bash
|
|
383
|
+
lsof -ti:$DEV_PORT 2>/dev/null && echo "PORT_IN_USE" || echo "PORT_FREE"
|
|
384
|
+
```
|
|
385
|
+
4. Start the dev server in background, capture PID:
|
|
372
386
|
```bash
|
|
373
387
|
<start-command> &
|
|
374
388
|
DEV_SERVER_PID=$!
|
|
375
389
|
```
|
|
376
|
-
|
|
377
|
-
|
|
390
|
+
5. Wait for server to be ready: poll `http://localhost:$DEV_PORT` with `curl -s -o /dev/null -w "%{http_code}"` until it returns 200 or 302 (max 30 seconds, 2s interval)
|
|
391
|
+
6. Open the app in playwright-cli: `playwright-cli open http://localhost:$DEV_PORT`
|
|
392
|
+
7. If the page requires authentication, use playwright-cli to register a test user and log in first
|
|
378
393
|
|
|
379
394
|
**Step 2 — Verification**:
|
|
380
395
|
|
|
@@ -387,14 +402,14 @@ Take a final screenshot for evidence.
|
|
|
387
402
|
**Step 3 — Cleanup (REQUIRED — you started it, you stop it)**:
|
|
388
403
|
|
|
389
404
|
1. Kill the dev server process: `kill $DEV_SERVER_PID 2>/dev/null || true`
|
|
390
|
-
2. Verify port is released: `lsof -ti
|
|
405
|
+
2. Verify port is released: `lsof -ti:$DEV_PORT | xargs kill -9 2>/dev/null || true`
|
|
391
406
|
|
|
392
407
|
**Step 4 — Reporting**:
|
|
393
408
|
|
|
394
409
|
Append results to `context-snapshot.md`:
|
|
395
410
|
```
|
|
396
411
|
## Browser Verification
|
|
397
|
-
URL:
|
|
412
|
+
URL: http://localhost:$DEV_PORT
|
|
398
413
|
Dev Server Command: <actual command used>
|
|
399
414
|
Steps executed: [list]
|
|
400
415
|
Screenshot: [path]
|
|
@@ -7,17 +7,32 @@ You MUST execute this phase. Do NOT skip it. Do NOT mark it as completed without
|
|
|
7
7
|
You know this project's tech stack. Detect and start the dev server yourself:
|
|
8
8
|
|
|
9
9
|
1. Identify the dev server start command from project config (`package.json` scripts, `Makefile`, `docker-compose.yml`, etc.)
|
|
10
|
-
2.
|
|
10
|
+
2. **Detect the dev server port** — use the pre-detected port from pipeline if available, otherwise extract from project config. Do NOT hardcode or guess the port:
|
|
11
11
|
```bash
|
|
12
|
-
|
|
12
|
+
# Use pipeline-injected port if available, otherwise extract from package.json
|
|
13
|
+
DEV_PORT={{DEV_PORT}}
|
|
14
|
+
# If DEV_PORT is still a placeholder, detect at runtime:
|
|
15
|
+
if [ "$DEV_PORT" = "{{DEV_PORT}}" ]; then
|
|
16
|
+
DEV_PORT=$(node -e "const s=require('./package.json').scripts.dev; const m=s.match(/-p\s+(\d+)/); console.log(m?m[1]:'')")
|
|
17
|
+
if [ -z "$DEV_PORT" ]; then
|
|
18
|
+
DEV_PORT=$(echo "$NEXT_PUBLIC_SITE_URL" | sed -nE 's|.*:([0-9]+).*|\1|p')
|
|
19
|
+
fi
|
|
20
|
+
DEV_PORT=${DEV_PORT:-3000}
|
|
21
|
+
fi
|
|
22
|
+
echo "Detected DEV_PORT=$DEV_PORT"
|
|
13
23
|
```
|
|
14
|
-
3.
|
|
24
|
+
3. Verify the port is available:
|
|
25
|
+
```bash
|
|
26
|
+
lsof -ti:$DEV_PORT 2>/dev/null && echo "PORT_IN_USE" || echo "PORT_FREE"
|
|
27
|
+
```
|
|
28
|
+
4. Start the dev server in background, capture PID:
|
|
15
29
|
```bash
|
|
16
30
|
<start-command> &
|
|
17
31
|
DEV_SERVER_PID=$!
|
|
18
32
|
```
|
|
19
|
-
|
|
20
|
-
|
|
33
|
+
5. Wait for server to be ready: poll `http://localhost:$DEV_PORT` with `curl -s -o /dev/null -w "%{http_code}"` until it returns 200 or 302 (max 30 seconds, 2s interval)
|
|
34
|
+
6. Open the app in playwright-cli: `playwright-cli open http://localhost:$DEV_PORT`
|
|
35
|
+
7. If the page requires authentication, use playwright-cli to register a test user and log in first
|
|
21
36
|
|
|
22
37
|
**Step 2 — Verification**:
|
|
23
38
|
|
|
@@ -31,14 +46,14 @@ Take a final screenshot for evidence.
|
|
|
31
46
|
**Step 3 — Cleanup (REQUIRED — you started it, you stop it)**:
|
|
32
47
|
|
|
33
48
|
1. Kill the dev server process: `kill $DEV_SERVER_PID 2>/dev/null || true`
|
|
34
|
-
2. Verify port is released: `lsof -ti
|
|
49
|
+
2. Verify port is released: `lsof -ti:$DEV_PORT | xargs kill -9 2>/dev/null || true`
|
|
35
50
|
|
|
36
51
|
**Step 4 — Reporting**:
|
|
37
52
|
|
|
38
53
|
Append results to `context-snapshot.md`:
|
|
39
54
|
```
|
|
40
55
|
## Browser Verification
|
|
41
|
-
URL:
|
|
56
|
+
URL: http://localhost:$DEV_PORT
|
|
42
57
|
Dev Server Command: <actual command used>
|
|
43
58
|
Steps executed: [list]
|
|
44
59
|
Screenshot: [path]
|
|
@@ -122,8 +122,13 @@ class TestAutoSkipLinearChain:
|
|
|
122
122
|
|
|
123
123
|
auto_skip_blocked_features(fl_path, state_dir, "F-001")
|
|
124
124
|
|
|
125
|
+
# status lives in feature-list.json, not status.json
|
|
126
|
+
statuses = _read_statuses(fl_path)
|
|
127
|
+
assert statuses["F-002"] == "auto_skipped"
|
|
128
|
+
# status.json should have updated_at but no status field
|
|
125
129
|
fs = load_feature_status(state_dir, "F-002")
|
|
126
|
-
assert
|
|
130
|
+
assert "status" not in fs
|
|
131
|
+
assert "updated_at" in fs
|
|
127
132
|
|
|
128
133
|
def test_failing_mid_skips_only_downstream(self, tmp_path):
|
|
129
134
|
features = [
|
|
@@ -434,7 +439,6 @@ class TestAutoSkipIntegration:
|
|
|
434
439
|
with open(fs_path) as f:
|
|
435
440
|
fs = json.load(f)
|
|
436
441
|
fs["retry_count"] = 3
|
|
437
|
-
fs["status"] = "failed"
|
|
438
442
|
with open(fs_path, "w") as f:
|
|
439
443
|
json.dump(fs, f)
|
|
440
444
|
|
|
@@ -443,4 +447,7 @@ class TestAutoSkipIntegration:
|
|
|
443
447
|
with open(fs_path) as f:
|
|
444
448
|
fs = json.load(f)
|
|
445
449
|
assert fs["retry_count"] == 0
|
|
446
|
-
|
|
450
|
+
# status lives in feature-list.json, not status.json
|
|
451
|
+
assert "status" not in fs
|
|
452
|
+
statuses = _read_statuses(fl_path)
|
|
453
|
+
assert statuses["F-001"] == "pending"
|