bmalph 2.7.5 → 2.7.7

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.
Files changed (67) hide show
  1. package/README.md +20 -5
  2. package/dist/commands/doctor-runtime-checks.js +104 -86
  3. package/dist/commands/doctor-runtime-checks.js.map +1 -1
  4. package/dist/commands/run.js +11 -2
  5. package/dist/commands/run.js.map +1 -1
  6. package/dist/commands/watch.js +5 -0
  7. package/dist/commands/watch.js.map +1 -1
  8. package/dist/installer/bmad-assets.js +182 -0
  9. package/dist/installer/bmad-assets.js.map +1 -0
  10. package/dist/installer/commands.js +324 -0
  11. package/dist/installer/commands.js.map +1 -0
  12. package/dist/installer/install.js +42 -0
  13. package/dist/installer/install.js.map +1 -0
  14. package/dist/installer/metadata.js +56 -0
  15. package/dist/installer/metadata.js.map +1 -0
  16. package/dist/installer/project-files.js +169 -0
  17. package/dist/installer/project-files.js.map +1 -0
  18. package/dist/installer/ralph-assets.js +91 -0
  19. package/dist/installer/ralph-assets.js.map +1 -0
  20. package/dist/installer/template-files.js +187 -0
  21. package/dist/installer/template-files.js.map +1 -0
  22. package/dist/installer/types.js +2 -0
  23. package/dist/installer/types.js.map +1 -0
  24. package/dist/installer.js +5 -843
  25. package/dist/installer.js.map +1 -1
  26. package/dist/run/run-dashboard.js +20 -6
  27. package/dist/run/run-dashboard.js.map +1 -1
  28. package/dist/transition/artifact-loading.js +91 -0
  29. package/dist/transition/artifact-loading.js.map +1 -0
  30. package/dist/transition/context-output.js +85 -0
  31. package/dist/transition/context-output.js.map +1 -0
  32. package/dist/transition/context.js +11 -3
  33. package/dist/transition/context.js.map +1 -1
  34. package/dist/transition/fix-plan-sync.js +119 -0
  35. package/dist/transition/fix-plan-sync.js.map +1 -0
  36. package/dist/transition/orchestration.js +25 -362
  37. package/dist/transition/orchestration.js.map +1 -1
  38. package/dist/transition/specs-sync.js +78 -2
  39. package/dist/transition/specs-sync.js.map +1 -1
  40. package/dist/utils/ralph-runtime-state.js +222 -0
  41. package/dist/utils/ralph-runtime-state.js.map +1 -0
  42. package/dist/utils/state.js +17 -16
  43. package/dist/utils/state.js.map +1 -1
  44. package/dist/utils/validate.js +16 -0
  45. package/dist/utils/validate.js.map +1 -1
  46. package/dist/watch/dashboard.js +25 -21
  47. package/dist/watch/dashboard.js.map +1 -1
  48. package/dist/watch/frame-writer.js +83 -0
  49. package/dist/watch/frame-writer.js.map +1 -0
  50. package/dist/watch/renderer.js +214 -49
  51. package/dist/watch/renderer.js.map +1 -1
  52. package/dist/watch/state-reader.js +87 -44
  53. package/dist/watch/state-reader.js.map +1 -1
  54. package/package.json +1 -1
  55. package/ralph/RALPH-REFERENCE.md +34 -14
  56. package/ralph/drivers/claude-code.sh +27 -0
  57. package/ralph/drivers/codex.sh +11 -0
  58. package/ralph/drivers/copilot.sh +11 -0
  59. package/ralph/drivers/cursor.sh +11 -0
  60. package/ralph/lib/circuit_breaker.sh +3 -3
  61. package/ralph/lib/date_utils.sh +28 -9
  62. package/ralph/lib/enable_core.sh +10 -2
  63. package/ralph/lib/response_analyzer.sh +252 -40
  64. package/ralph/ralph_import.sh +9 -1
  65. package/ralph/ralph_loop.sh +548 -128
  66. package/ralph/templates/PROMPT.md +20 -5
  67. package/ralph/templates/ralphrc.template +14 -4
@@ -1 +1 @@
1
- {"version":3,"file":"state-reader.js","sourceRoot":"","sources":["../../src/watch/state-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-reader.js","sourceRoot":"","sources":["../../src/watch/state-reader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmalph",
3
- "version": "2.7.5",
3
+ "version": "2.7.7",
4
4
  "description": "Unified AI Development Framework - BMAD phases with Ralph execution loop",
5
5
  "type": "module",
6
6
  "bin": {
@@ -60,7 +60,9 @@ Environment variables > Ralph config file > script defaults
60
60
  | `MAX_CALLS_PER_HOUR` | `100` | Rate limit for API calls |
61
61
  | `CLAUDE_TIMEOUT_MINUTES` | `15` | Timeout per loop driver invocation |
62
62
  | `CLAUDE_OUTPUT_FORMAT` | `json` | Output format (json or text) |
63
- | `ALLOWED_TOOLS` | `Write,Read,Edit,Bash(git *),Bash(npm *),Bash(pytest)` | Comma-separated allowed tools |
63
+ | `ALLOWED_TOOLS` | `Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,EnterPlanMode,ExitPlanMode,NotebookEdit,Bash` | Claude Code only. Ignored by codex, cursor, and copilot |
64
+ | `CLAUDE_PERMISSION_MODE` | `bypassPermissions` | Claude Code only. Prevents interactive approval workflows from blocking unattended loops without relying on beta headers |
65
+ | `PERMISSION_DENIAL_MODE` | `continue` | How Ralph responds to permission denials: continue, halt, or threshold |
64
66
  | `SESSION_CONTINUITY` | `true` | Maintain context across loops |
65
67
  | `SESSION_EXPIRY_HOURS` | `24` | Session expiration time |
66
68
  | `RALPH_VERBOSE` | `false` | Enable verbose logging |
@@ -73,7 +75,7 @@ Environment variables > Ralph config file > script defaults
73
75
 
74
76
  ### Generation
75
77
 
76
- bmalph copies `ralphrc.template` to `.ralph/.ralphrc` during `bmalph init`. Existing `.ralph/.ralphrc` files are preserved during upgrades.
78
+ bmalph copies `ralphrc.template` to `.ralph/.ralphrc` during `bmalph init`. Untouched managed configs are updated on upgrade, while customized `.ralph/.ralphrc` files are preserved.
77
79
 
78
80
  ---
79
81
 
@@ -95,7 +97,7 @@ This applies to every driver that exposes resumable IDs today:
95
97
 
96
98
  | File | Purpose |
97
99
  |------|---------|
98
- | `.ralph/.ralph_session` | Current session ID and timestamps |
100
+ | `.ralph/.ralph_session` | Current Ralph session state (active or reset/inactive) |
99
101
  | `.ralph/.ralph_session_history` | History of last 50 session transitions |
100
102
  | `.ralph/.claude_session_id` | Persisted driver session ID (shared filename for historical reasons; used by Claude Code, Codex, and Cursor) |
101
103
 
@@ -117,13 +119,23 @@ Sessions expire after 24 hours (configurable via `SESSION_EXPIRY_HOURS` in `.ral
117
119
 
118
120
  ### Session State Structure
119
121
 
122
+ Active session payload:
123
+
120
124
  ```json
121
125
  {
122
126
  "session_id": "uuid-string",
123
127
  "created_at": "ISO-timestamp",
124
- "last_used": "ISO-timestamp",
125
- "reset_at": "ISO-timestamp (if reset)",
126
- "reset_reason": "reason string (if reset)"
128
+ "last_used": "ISO-timestamp"
129
+ }
130
+ ```
131
+
132
+ Reset/inactive payload:
133
+
134
+ ```json
135
+ {
136
+ "session_id": "",
137
+ "reset_at": "ISO-timestamp",
138
+ "reset_reason": "reason string"
127
139
  }
128
140
  ```
129
141
 
@@ -156,8 +168,13 @@ The circuit breaker prevents runaway loops by detecting stagnation.
156
168
 
157
169
  When the active driver is denied permission to execute commands, Ralph:
158
170
  1. Detects permission denials from the JSON output
159
- 2. Halts the loop with reason `permission_denied`
160
- 3. Displays guidance to update `ALLOWED_TOOLS` in `.ralph/.ralphrc`
171
+ 2. Applies `PERMISSION_DENIAL_MODE` from `.ralph/.ralphrc`
172
+ 3. Keeps `last_action: permission_denied` visible in the status file and dashboard
173
+
174
+ `PERMISSION_DENIAL_MODE` behavior:
175
+ - `continue` keeps looping and logs the denial
176
+ - `halt` stops immediately with reason `permission_denied`
177
+ - `threshold` keeps looping until `CB_PERMISSION_DENIAL_THRESHOLD` opens the circuit breaker
161
178
 
162
179
  ### Auto-Recovery Cooldown
163
180
 
@@ -225,7 +242,7 @@ The coding agent should include this status block at the end of each response:
225
242
  ```
226
243
  ---RALPH_STATUS---
227
244
  STATUS: IN_PROGRESS | COMPLETE | BLOCKED
228
- TASKS_COMPLETED_THIS_LOOP: <number>
245
+ TASKS_COMPLETED_THIS_LOOP: 0 | 1
229
246
  FILES_MODIFIED: <number>
230
247
  TESTS_STATUS: PASSING | FAILING | NOT_RUN
231
248
  WORK_TYPE: IMPLEMENTATION | TESTING | DOCUMENTATION | REFACTORING
@@ -323,18 +340,21 @@ When using `--monitor` with `--live`, tmux creates a 3-pane layout:
323
340
  2. Fix the underlying issue causing the error
324
341
  3. Reset circuit breaker: `bash .ralph/ralph_loop.sh --reset-circuit`
325
342
 
326
- #### Permission denied halts loop
343
+ #### Permission denied blocks progress
327
344
 
328
345
  **Symptoms:** "OPEN - permission_denied" message
329
346
 
330
347
  **Causes:**
331
348
  - The active driver denied permission to run commands
332
- - `ALLOWED_TOOLS` in `.ralph/.ralphrc` too restrictive
349
+ - `ALLOWED_TOOLS` in `.ralph/.ralphrc` too restrictive for Claude Code
350
+ - The active non-Claude driver rejected a tool under its native permission model
333
351
 
334
352
  **Solutions:**
335
- 1. Update `ALLOWED_TOOLS` in `.ralph/.ralphrc` to include needed tools
336
- 2. Reset circuit breaker: `bash .ralph/ralph_loop.sh --reset-circuit`
337
- 3. Common tools: `Write,Read,Edit,Bash(git *),Bash(npm *),Bash(pytest)`
353
+ 1. For Claude Code, update `ALLOWED_TOOLS` in `.ralph/.ralphrc` to include needed tools
354
+ 2. For Claude Code unattended loops, keep `CLAUDE_PERMISSION_MODE="bypassPermissions"` in `.ralph/.ralphrc`
355
+ 3. For codex, cursor, and copilot, review the driver's native permission settings; `ALLOWED_TOOLS` is ignored
356
+ 4. If you want unattended behavior, keep `PERMISSION_DENIAL_MODE="continue"` in `.ralph/.ralphrc`
357
+ 5. Reset circuit breaker if needed: `bash .ralph/ralph_loop.sh --reset-circuit`
338
358
 
339
359
  #### Session expires mid-project
340
360
 
@@ -38,6 +38,9 @@ driver_valid_tools() {
38
38
  "TodoWrite"
39
39
  "WebFetch"
40
40
  "WebSearch"
41
+ "AskUserQuestion"
42
+ "EnterPlanMode"
43
+ "ExitPlanMode"
41
44
  "Bash"
42
45
  "Bash(git *)"
43
46
  "Bash(npm *)"
@@ -48,6 +51,26 @@ driver_valid_tools() {
48
51
  )
49
52
  }
50
53
 
54
+ driver_supports_tool_allowlist() {
55
+ return 0
56
+ }
57
+
58
+ driver_permission_denial_help() {
59
+ echo " 1. Edit $RALPHRC_FILE and keep CLAUDE_PERMISSION_MODE=bypassPermissions for unattended Claude Code loops"
60
+ echo " 2. If Claude was denied on an interactive approval step, ALLOWED_TOOLS will not fix it"
61
+ echo " 3. If Claude was denied on a normal tool, update ALLOWED_TOOLS to include the required tools"
62
+ echo " 4. Common ALLOWED_TOOLS patterns:"
63
+ echo " - Bash - All shell commands"
64
+ echo " - Bash(node *) - All Node.js commands"
65
+ echo " - Bash(npm *) - All npm commands"
66
+ echo " - Bash(pnpm *) - All pnpm commands"
67
+ echo " - AskUserQuestion - Allow interactive clarification when you want pauses"
68
+ echo ""
69
+ echo "After updating $RALPHRC_FILE:"
70
+ echo " bash .ralph/ralph_loop.sh --reset-session # Clear stale session state"
71
+ echo " bmalph run # Restart the loop"
72
+ }
73
+
51
74
  # Build the CLI command arguments
52
75
  # Populates global CLAUDE_CMD_ARGS array
53
76
  # Parameters:
@@ -58,6 +81,7 @@ driver_build_command() {
58
81
  local prompt_file=$1
59
82
  local loop_context=$2
60
83
  local session_id=$3
84
+ local resolved_permission_mode="${CLAUDE_PERMISSION_MODE:-bypassPermissions}"
61
85
 
62
86
  # Note: We do NOT use --dangerously-skip-permissions here. Tool permissions
63
87
  # are controlled via --allowedTools from CLAUDE_ALLOWED_TOOLS in .ralphrc.
@@ -74,6 +98,9 @@ driver_build_command() {
74
98
  CLAUDE_CMD_ARGS+=("--output-format" "json")
75
99
  fi
76
100
 
101
+ # Prevent interactive approval flows from blocking unattended -p loops.
102
+ CLAUDE_CMD_ARGS+=("--permission-mode" "$resolved_permission_mode")
103
+
77
104
  # Allowed tools
78
105
  if [[ -n "$CLAUDE_ALLOWED_TOOLS" ]]; then
79
106
  CLAUDE_CMD_ARGS+=("--allowedTools")
@@ -34,6 +34,17 @@ driver_valid_tools() {
34
34
  )
35
35
  }
36
36
 
37
+ driver_supports_tool_allowlist() {
38
+ return 1
39
+ }
40
+
41
+ driver_permission_denial_help() {
42
+ echo " - $DRIVER_DISPLAY_NAME uses its native sandbox and approval model."
43
+ echo " - ALLOWED_TOOLS in $RALPHRC_FILE is ignored for this driver."
44
+ echo " - Ralph already runs Codex with --sandbox workspace-write."
45
+ echo " - Review Codex approval settings, then restart the loop."
46
+ }
47
+
37
48
  # Build Codex CLI command
38
49
  # Codex uses: codex exec [--resume <id>] --json "prompt"
39
50
  driver_build_command() {
@@ -38,6 +38,17 @@ driver_valid_tools() {
38
38
  )
39
39
  }
40
40
 
41
+ driver_supports_tool_allowlist() {
42
+ return 1
43
+ }
44
+
45
+ driver_permission_denial_help() {
46
+ echo " - $DRIVER_DISPLAY_NAME uses its own autonomy and approval controls."
47
+ echo " - ALLOWED_TOOLS in $RALPHRC_FILE is ignored for this driver."
48
+ echo " - Ralph already runs Copilot with --no-ask-user for unattended mode."
49
+ echo " - Review Copilot CLI permissions, then restart the loop."
50
+ }
51
+
41
52
  # Build Copilot CLI command
42
53
  # Context is prepended to the prompt (same pattern as Codex driver).
43
54
  # Uses --autopilot --yolo for autonomous mode, -s to strip stats, -p for prompt.
@@ -48,6 +48,17 @@ driver_valid_tools() {
48
48
  )
49
49
  }
50
50
 
51
+ driver_supports_tool_allowlist() {
52
+ return 1
53
+ }
54
+
55
+ driver_permission_denial_help() {
56
+ echo " - $DRIVER_DISPLAY_NAME uses its native permission model."
57
+ echo " - ALLOWED_TOOLS in $RALPHRC_FILE is ignored for this driver."
58
+ echo " - Ralph already runs Cursor with --force."
59
+ echo " - Review Cursor permissions or approval settings, then restart the loop."
60
+ }
61
+
51
62
  driver_build_command() {
52
63
  local prompt_file=$1
53
64
  local loop_context=$2
@@ -203,7 +203,7 @@ record_loop_result() {
203
203
  has_permission_denials=$(jq -r '.analysis.has_permission_denials // false' "$response_analysis_file" 2>/dev/null || echo "false")
204
204
  fi
205
205
 
206
- if [[ "$has_permission_denials" == "true" ]]; then
206
+ if [[ "${PERMISSION_DENIAL_MODE:-halt}" == "threshold" && "$has_permission_denials" == "true" ]]; then
207
207
  consecutive_permission_denials=$((consecutive_permission_denials + 1))
208
208
  else
209
209
  consecutive_permission_denials=0
@@ -248,7 +248,7 @@ record_loop_result() {
248
248
  # Permission denials take highest priority (Issue #101)
249
249
  if [[ $consecutive_permission_denials -ge $CB_PERMISSION_DENIAL_THRESHOLD ]]; then
250
250
  new_state="$CB_STATE_OPEN"
251
- reason="Permission denied in $consecutive_permission_denials consecutive loops - update ALLOWED_TOOLS in .ralphrc"
251
+ reason="Permission denied in $consecutive_permission_denials consecutive loops"
252
252
  elif [[ $consecutive_no_progress -ge $CB_NO_PROGRESS_THRESHOLD ]]; then
253
253
  new_state="$CB_STATE_OPEN"
254
254
  reason="No progress detected in $consecutive_no_progress consecutive loops"
@@ -266,7 +266,7 @@ record_loop_result() {
266
266
  # Permission denials take highest priority (Issue #101)
267
267
  if [[ $consecutive_permission_denials -ge $CB_PERMISSION_DENIAL_THRESHOLD ]]; then
268
268
  new_state="$CB_STATE_OPEN"
269
- reason="Permission denied in $consecutive_permission_denials consecutive loops - update ALLOWED_TOOLS in .ralphrc"
269
+ reason="Permission denied in $consecutive_permission_denials consecutive loops"
270
270
  elif [[ "$has_progress" == "true" ]]; then
271
271
  new_state="$CB_STATE_CLOSED"
272
272
  reason="Progress detected, circuit recovered"
@@ -49,35 +49,37 @@ get_epoch_seconds() {
49
49
  # Convert ISO 8601 timestamp to Unix epoch seconds
50
50
  # Input: ISO timestamp (e.g., "2025-01-15T10:30:00+00:00")
51
51
  # Returns: Unix epoch seconds on stdout
52
- # Falls back to current epoch on parse failure (safe default)
53
- parse_iso_to_epoch() {
52
+ # Returns non-zero on parse failure.
53
+ parse_iso_to_epoch_strict() {
54
54
  local iso_timestamp=$1
55
55
 
56
56
  if [[ -z "$iso_timestamp" || "$iso_timestamp" == "null" ]]; then
57
- date +%s
58
- return
57
+ return 1
59
58
  fi
60
59
 
60
+ local normalized_iso
61
+ normalized_iso=$(printf '%s' "$iso_timestamp" | sed -E 's/\.([0-9]+)(Z|[+-][0-9]{2}:[0-9]{2})$/\2/')
62
+
61
63
  # Try GNU date -d (Linux, macOS with Homebrew coreutils)
62
64
  local result
63
65
  if result=$(date -d "$iso_timestamp" +%s 2>/dev/null) && [[ "$result" =~ ^[0-9]+$ ]]; then
64
66
  echo "$result"
65
- return
67
+ return 0
66
68
  fi
67
69
 
68
70
  # Try BSD date -j (native macOS)
69
71
  # Normalize timezone for BSD parsing (Z → +0000, ±HH:MM → ±HHMM)
70
72
  local tz_fixed
71
- tz_fixed=$(echo "$iso_timestamp" | sed -E 's/Z$/+0000/; s/([+-][0-9]{2}):([0-9]{2})$/\1\2/')
73
+ tz_fixed=$(printf '%s' "$normalized_iso" | sed -E 's/Z$/+0000/; s/([+-][0-9]{2}):([0-9]{2})$/\1\2/')
72
74
  if result=$(date -j -f "%Y-%m-%dT%H:%M:%S%z" "$tz_fixed" +%s 2>/dev/null) && [[ "$result" =~ ^[0-9]+$ ]]; then
73
75
  echo "$result"
74
- return
76
+ return 0
75
77
  fi
76
78
 
77
79
  # Fallback: manual epoch arithmetic from ISO components
78
80
  # Parse: YYYY-MM-DDTHH:MM:SS (ignore timezone, assume UTC)
79
81
  local year month day hour minute second
80
- if [[ "$iso_timestamp" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}) ]]; then
82
+ if [[ "$normalized_iso" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}) ]]; then
81
83
  year="${BASH_REMATCH[1]}"
82
84
  month="${BASH_REMATCH[2]}"
83
85
  day="${BASH_REMATCH[3]}"
@@ -88,10 +90,26 @@ parse_iso_to_epoch() {
88
90
  # Use date with explicit components if available
89
91
  if result=$(date -u -d "${year}-${month}-${day} ${hour}:${minute}:${second}" +%s 2>/dev/null) && [[ "$result" =~ ^[0-9]+$ ]]; then
90
92
  echo "$result"
91
- return
93
+ return 0
92
94
  fi
93
95
  fi
94
96
 
97
+ return 1
98
+ }
99
+
100
+ # Convert ISO 8601 timestamp to Unix epoch seconds
101
+ # Input: ISO timestamp (e.g., "2025-01-15T10:30:00+00:00")
102
+ # Returns: Unix epoch seconds on stdout
103
+ # Falls back to current epoch on parse failure (safe default)
104
+ parse_iso_to_epoch() {
105
+ local iso_timestamp=$1
106
+ local result
107
+
108
+ if result=$(parse_iso_to_epoch_strict "$iso_timestamp"); then
109
+ echo "$result"
110
+ return 0
111
+ fi
112
+
95
113
  # Ultimate fallback: return current epoch (safe default)
96
114
  date +%s
97
115
  }
@@ -101,4 +119,5 @@ export -f get_iso_timestamp
101
119
  export -f get_next_hour_time
102
120
  export -f get_basic_timestamp
103
121
  export -f get_epoch_seconds
122
+ export -f parse_iso_to_epoch_strict
104
123
  export -f parse_iso_to_epoch
@@ -527,9 +527,17 @@ ${objectives_section}
527
527
  - ONE task per loop - focus on the most important thing
528
528
  - Search the codebase before assuming something isn't implemented
529
529
  - Write comprehensive tests with clear documentation
530
- - Update @fix_plan.md with your learnings
530
+ - Toggle completed story checkboxes in @fix_plan.md without rewriting story lines
531
531
  - Commit working changes with descriptive messages
532
532
 
533
+ ## Progress Tracking (CRITICAL)
534
+ - Ralph tracks progress by counting story checkboxes in @fix_plan.md
535
+ - When you complete a story, change \`- [ ]\` to \`- [x]\` on that exact story line
536
+ - Do NOT remove, rewrite, or reorder story lines in @fix_plan.md
537
+ - Update the checkbox before committing so the monitor updates immediately
538
+ - Set \`TASKS_COMPLETED_THIS_LOOP\` to the exact number of story checkboxes toggled this loop
539
+ - Only valid values: 0 or 1
540
+
533
541
  ## Testing Guidelines
534
542
  - LIMIT testing to ~20% of your total effort per loop
535
543
  - PRIORITIZE: Implementation > Documentation > Tests
@@ -545,7 +553,7 @@ At the end of your response, ALWAYS include this status block:
545
553
  \`\`\`
546
554
  ---RALPH_STATUS---
547
555
  STATUS: IN_PROGRESS | COMPLETE | BLOCKED
548
- TASKS_COMPLETED_THIS_LOOP: <number>
556
+ TASKS_COMPLETED_THIS_LOOP: 0 | 1
549
557
  FILES_MODIFIED: <number>
550
558
  TESTS_STATUS: PASSING | FAILING | NOT_RUN
551
559
  WORK_TYPE: IMPLEMENTATION | TESTING | DOCUMENTATION | REFACTORING