agentic-loop 3.12.1 → 3.12.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-loop",
3
- "version": "3.12.1",
3
+ "version": "3.12.3",
4
4
  "description": "Autonomous AI coding loop - PRD-driven development with Claude Code",
5
5
  "author": "Allie Jones <allie@allthrive.ai>",
6
6
  "license": "MIT",
package/ralph/init.sh CHANGED
@@ -593,8 +593,8 @@ auto_configure_project() {
593
593
  if [[ "$require_tests" == "true" ]]; then
594
594
  echo ""
595
595
  print_warning "No test directory or test files found."
596
- echo " Without tests, Ralph can only verify syntax and API responses."
597
- echo " Import errors and integration issues won't be caught."
596
+ echo " Without tests, Ralph relies on lint, type-checking, and PRD test steps."
597
+ echo " Consider adding tests or PRD testCommands for better verification."
598
598
  echo ""
599
599
  echo " To fix: Add tests, or set in .ralph/config.json:"
600
600
  echo " {\"tests\": {\"directory\": \"src\", \"patterns\": \"*.test.ts\"}}"
@@ -174,8 +174,8 @@ validate_prd() {
174
174
  if [[ "$require_tests" == "true" && -z "$test_dir" ]]; then
175
175
  echo ""
176
176
  print_warning "No test directory configured in .ralph/config.json"
177
- echo " Without tests, Ralph can only verify syntax and API responses."
178
- echo " Import errors and integration issues won't be caught."
177
+ echo " Without tests, Ralph relies on lint, type-checking, and PRD test steps."
178
+ echo " Consider adding tests or PRD testCommands for better verification."
179
179
  echo ""
180
180
  echo " To fix: Add tests, or set in .ralph/config.json:"
181
181
  echo " {\"tests\": {\"directory\": \"src\", \"patterns\": \"*.test.ts\"}}"
@@ -284,7 +284,7 @@ _validate_and_fix_stories() {
284
284
  local cnt_no_tests=0 cnt_backend_curl=0 cnt_backend_contract=0
285
285
  local cnt_frontend_tsc=0 cnt_frontend_url=0 cnt_frontend_context=0
286
286
  local cnt_auth_security=0 cnt_list_pagination=0 cnt_prose_steps=0
287
- local cnt_migration_prereq=0 cnt_naming_convention=0
287
+ local cnt_migration_prereq=0 cnt_naming_convention=0 cnt_bare_pytest=0
288
288
 
289
289
  echo " Checking test coverage..."
290
290
 
@@ -331,6 +331,18 @@ _validate_and_fix_stories() {
331
331
  cnt_frontend_tsc=$((cnt_frontend_tsc + 1))
332
332
  fi
333
333
  fi
334
+
335
+ # Check for bare pytest/python in projects using uv/poetry/pipenv
336
+ local py_runner
337
+ py_runner=$(detect_python_runner ".")
338
+ if [[ -n "$py_runner" ]]; then
339
+ # Project uses a Python runner - check for bare pytest/python commands
340
+ # Match: "pytest " at start or after space/semicolon, but not preceded by "run "
341
+ if echo "$test_steps" | grep -qE '(^|[; ])pytest ' && ! echo "$test_steps" | grep -qE "(uv run|poetry run|pipenv run) pytest"; then
342
+ story_issues+="use '$py_runner pytest' not bare 'pytest', "
343
+ cnt_bare_pytest=$((cnt_bare_pytest + 1))
344
+ fi
345
+ fi
334
346
  fi
335
347
 
336
348
  # Check 2: Backend needs apiContract
@@ -434,6 +446,7 @@ _validate_and_fix_stories() {
434
446
  [[ $cnt_list_pagination -gt 0 ]] && echo " ${cnt_list_pagination}x list: add pagination"
435
447
  [[ $cnt_migration_prereq -gt 0 ]] && echo " ${cnt_migration_prereq}x migration: add prerequisites (DB reset)"
436
448
  [[ $cnt_naming_convention -gt 0 ]] && echo " ${cnt_naming_convention}x API consumer: add camelCase transformation note"
449
+ [[ $cnt_bare_pytest -gt 0 ]] && echo " ${cnt_bare_pytest}x use 'uv run pytest' not bare 'pytest'"
437
450
 
438
451
  # Check if Claude is available for auto-fix
439
452
  if command -v claude &>/dev/null; then