devforgeai 1.0.7 → 1.0.9

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.
@@ -0,0 +1,631 @@
1
+ # DevForgeAI Troubleshooting Guide
2
+
3
+ **Last Updated:** 2026-03-03
4
+ **Applies To:** DevForgeAI Framework v4.x
5
+
6
+ ---
7
+
8
+ ## Table of Contents
9
+
10
+ - [Quick Fixes](#quick-fixes)
11
+ - [Development Issues](#development-issues)
12
+ - [QA Issues](#qa-issues)
13
+ - [Git Issues](#git-issues)
14
+ - [WSL Issues](#wsl-issues)
15
+ - [Hook Issues](#hook-issues)
16
+
17
+ ---
18
+
19
+ ## Quick Fixes
20
+
21
+ | Symptom | Cause | Fix |
22
+ |---------|-------|-----|
23
+ | `COMMIT BLOCKED` | DoD items under `###` subsection | Move items directly under `## Implementation Notes` |
24
+ | `ModuleNotFoundError` | PYTHONPATH not set | `export PYTHONPATH=".:$PYTHONPATH"` |
25
+ | `Permission denied: script.sh` | WSL file permissions | `chmod +x script.sh` or `bash script.sh` |
26
+ | `$'\r': command not found` | CRLF line endings | `dos2unix script.sh` |
27
+ | `Context files missing` | Setup not run | Run `/create-context` before `/dev` or `/qa` |
28
+ | `Phase skipping error` | Attempted to skip a phase | Execute all phases in order; no exceptions |
29
+ | `Technology not in tech-stack.md` | HALT trigger fired | Create an ADR before introducing the technology |
30
+ | `Coverage below threshold` | Tests insufficient | Coverage gaps are CRITICAL blockers (ADR-010) |
31
+ | `3+ fix attempts failed` | Shotgun debugging | Invoke root-cause-diagnosis skill before attempt 4 |
32
+
33
+ ---
34
+
35
+ ## Development Issues
36
+
37
+ ### 1. Context Files Missing
38
+
39
+ **Symptoms:**
40
+ - Skill invocation fails with references to missing context files
41
+ - `/dev` or `/qa` commands fail at Phase 01 pre-flight
42
+
43
+ **Cause:** The six immutable context files in `devforgeai/specs/context/` have not been generated for the project.
44
+
45
+ **Required files:**
46
+ 1. `tech-stack.md`
47
+ 2. `source-tree.md`
48
+ 3. `dependencies.md`
49
+ 4. `coding-standards.md`
50
+ 5. `architecture-constraints.md`
51
+ 6. `anti-patterns.md`
52
+
53
+ **Solution:**
54
+ Run the `/create-context` command before starting any development or QA workflow. This generates all six context files from the project's architecture specification.
55
+
56
+ ---
57
+
58
+ ### 2. Phase Skipping Errors
59
+
60
+ **Symptoms:**
61
+ - Phase validation fails because a previous phase was not completed
62
+ - Pre-flight checks at the start of a phase report missing artifacts from prior phases
63
+
64
+ **Cause:** All phases in the implementing-stories workflow are mandatory. The framework enforces sequential execution of every phase.
65
+
66
+ **Solution:**
67
+ Execute every phase in documented order. The following rationalizations are explicitly forbidden:
68
+ - "This phase is simple enough to skip"
69
+ - "I already know the answer, no need to verify"
70
+ - "Skipping this saves tokens/time"
71
+
72
+ Only the user can authorize phase skipping via explicit instruction.
73
+
74
+ (Source: `.claude/rules/workflow/tdd-workflow.md` and CLAUDE.md `no_token_optimization_of_phases` section)
75
+
76
+ ---
77
+
78
+ ### 3. Technology Not in tech-stack.md
79
+
80
+ **Symptoms:**
81
+ - HALT trigger fires when a technology, library, or tool is referenced that does not appear in `devforgeai/specs/context/tech-stack.md`
82
+
83
+ **Cause:** Context files are immutable. Any technology not listed in `tech-stack.md` cannot be used without an Architecture Decision Record.
84
+
85
+ **Solution:**
86
+ 1. HALT immediately
87
+ 2. Use AskUserQuestion to get user approval for the new technology
88
+ 3. Create an ADR in `devforgeai/specs/adrs/` documenting the decision
89
+ 4. Update `tech-stack.md` through the `/create-context` workflow (not direct edit)
90
+ 5. Resume development
91
+
92
+ (Source: `.claude/rules/core/critical-rules.md`, Rule 1 and Rule 7)
93
+
94
+ ---
95
+
96
+ ### 4. Module Not Found (Python CLI)
97
+
98
+ **Symptoms:**
99
+ ```
100
+ ModuleNotFoundError: No module named 'devforgeai_cli'
101
+ ```
102
+
103
+ **Cause:** The Python CLI package is not installed or `PYTHONPATH` does not include the project root.
104
+
105
+ **Solution:**
106
+
107
+ Option A -- Install the CLI in development mode:
108
+ ```bash
109
+ pip install -e .claude/scripts/
110
+ devforgeai-validate --help
111
+ ```
112
+
113
+ Option B -- Set PYTHONPATH:
114
+ ```bash
115
+ export PYTHONPATH=".:$PYTHONPATH"
116
+ ```
117
+
118
+ ---
119
+
120
+ ### 5. 3+ Consecutive Fix Attempts Failing
121
+
122
+ **Symptoms:**
123
+ - The same test or error persists after three or more fix attempts
124
+ - Different code changes keep producing the same failure
125
+
126
+ **Cause:** Iterative fixes without root cause analysis (shotgun debugging).
127
+
128
+ **Solution:**
129
+ After the third failed attempt, you MUST invoke the root-cause-diagnosis skill before making any further changes:
130
+
131
+ ```
132
+ Skill: .claude/skills/root-cause-diagnosis/SKILL.md
133
+ ```
134
+
135
+ The skill enforces a 4-phase methodology:
136
+ 1. **CAPTURE** -- Collect failure artifacts (error messages, stack traces, test output)
137
+ 2. **INVESTIGATE** -- Cross-reference against context files using the diagnostic-analyst subagent
138
+ 3. **HYPOTHESIZE** -- Generate ranked hypotheses with confidence scores
139
+ 4. **PRESCRIBE** -- Recommend targeted fixes with specific file paths
140
+
141
+ If the prescribed fix also fails, try the next hypothesis. After 5 total attempts, escalate to the user via AskUserQuestion.
142
+
143
+ (Source: `.claude/rules/workflow/diagnosis-before-fix.md`)
144
+
145
+ ---
146
+
147
+ ## QA Issues
148
+
149
+ ### 6. Coverage Below Thresholds
150
+
151
+ **Symptoms:**
152
+ - QA validation returns FAILED
153
+ - Coverage report shows percentages below required minimums
154
+
155
+ **Cause:** Test coverage does not meet the mandatory thresholds defined in ADR-010.
156
+
157
+ **Thresholds (CRITICAL blockers, not warnings):**
158
+
159
+ | Layer | Minimum Coverage |
160
+ |-------|-----------------|
161
+ | Business Logic | 95% |
162
+ | Application | 85% |
163
+ | Infrastructure | 80% |
164
+
165
+ **Solution:**
166
+ Coverage gaps cannot be deferred. If coverage is below threshold, the QA result MUST be FAILED. You must:
167
+
168
+ 1. Identify uncovered code paths using coverage reports
169
+ 2. Write additional tests to cover the gaps
170
+ 3. Re-run the test suite to verify thresholds are met
171
+ 4. Only then proceed through the QA gate
172
+
173
+ There is no "PASS WITH WARNINGS" path for coverage gaps.
174
+
175
+ (Source: `.claude/rules/workflow/qa-validation.md`, Coverage Threshold Enforcement section)
176
+
177
+ ---
178
+
179
+ ## Git Issues
180
+
181
+ ### 7. Commit Blocked by Pre-Commit Hook (DoD Validation)
182
+
183
+ **Symptoms:**
184
+ ```
185
+ VALIDATION FAILED
186
+ DoD item marked [x] but missing from Implementation Notes
187
+ COMMIT BLOCKED
188
+ ```
189
+
190
+ **Cause:** The `devforgeai-validate validate-dod` pre-commit hook checks that all Definition of Done items marked `[x]` also appear in the `## Implementation Notes` section. The most common failure is placing DoD items under a `###` subsection header instead of directly under `## Implementation Notes`.
191
+
192
+ The validator's `extract_section()` function stops at the first `###` header. Any items below a `###` header are invisible to the validator.
193
+
194
+ **Wrong format (validator FAILS):**
195
+ ```markdown
196
+ ## Implementation Notes
197
+
198
+ **Developer:** DevForgeAI AI Agent
199
+
200
+ ### Definition of Done Status
201
+ - [x] Item 1 - Completed: description
202
+ - [x] Item 2 - Completed: description
203
+ ```
204
+
205
+ The parser stops at `### Definition of Done Status` and never sees the items below it.
206
+
207
+ **Correct format (validator PASSES):**
208
+ ```markdown
209
+ ## Implementation Notes
210
+
211
+ **Developer:** DevForgeAI AI Agent
212
+ **Implemented:** 2026-03-03
213
+
214
+ - [x] Item 1 - Completed: description
215
+ - [x] Item 2 - Completed: description
216
+
217
+ ### TDD Workflow Summary
218
+ ...
219
+ ```
220
+
221
+ Items must be a flat list directly under `## Implementation Notes`, after developer metadata and before any `###` subsections.
222
+
223
+ **Recovery steps:**
224
+ 1. Read the fix guide: `.claude/skills/implementing-stories/references/dod-update-workflow.md`
225
+ 2. Read the failing story file (path shown in validator output)
226
+ 3. Move DoD items above any `###` headers
227
+ 4. Ensure item text matches exactly between the DoD section and Implementation Notes (including backticks and special characters)
228
+ 5. Validate before retrying:
229
+ ```bash
230
+ devforgeai-validate validate-dod <STORY_FILE>
231
+ ```
232
+ 6. Only commit after exit code 0
233
+
234
+ **Never use `git commit --no-verify` to bypass validation.**
235
+
236
+ (Source: `.claude/rules/workflow/commit-failure-recovery.md` and `.claude/skills/implementing-stories/references/dod-update-workflow.md`)
237
+
238
+ ---
239
+
240
+ ### 8. Autonomous Deferral Detected
241
+
242
+ **Symptoms:**
243
+ ```
244
+ AUTONOMOUS DEFERRAL DETECTED
245
+ COMMIT BLOCKED
246
+ ```
247
+
248
+ **Cause:** A DoD item was marked `[x]` in the Definition of Done section but shows `[ ]` in Implementation Notes without user approval. The framework prohibits autonomous deferrals.
249
+
250
+ **Solution:**
251
+ 1. Identify the mismatched item
252
+ 2. Either complete the implementation or get explicit user approval to defer
253
+ 3. If deferring with approval, document the justification in the story file
254
+ 4. Re-validate with `devforgeai-validate validate-dod`
255
+
256
+ ---
257
+
258
+ ## WSL Issues
259
+
260
+ ### 9. Permission Denied on Shell Scripts
261
+
262
+ **Symptoms:**
263
+ ```
264
+ bash: ./script.sh: Permission denied
265
+ ```
266
+
267
+ **Cause:** WSL file permission handling differs from native Linux. Scripts cloned from Git on Windows may lack execute permission.
268
+
269
+ **Solution:**
270
+
271
+ Option A -- Add execute permission:
272
+ ```bash
273
+ chmod +x script.sh
274
+ ```
275
+
276
+ Option B -- Run with explicit bash invocation:
277
+ ```bash
278
+ bash script.sh
279
+ ```
280
+
281
+ ---
282
+
283
+ ### 10. Line Ending Errors (`$'\r'`)
284
+
285
+ **Symptoms:**
286
+ ```
287
+ /bin/bash^M: bad interpreter: No such file or directory
288
+ ```
289
+ or
290
+ ```
291
+ $'\r': command not found
292
+ ```
293
+
294
+ **Cause:** Shell scripts have Windows-style CRLF line endings (`\r\n`) instead of Unix-style LF (`\n`). This happens when files are created or edited on Windows and run in WSL.
295
+
296
+ **Solution:**
297
+
298
+ Convert the file:
299
+ ```bash
300
+ dos2unix script.sh
301
+ ```
302
+
303
+ If `dos2unix` is not installed:
304
+ ```bash
305
+ sudo apt install dos2unix
306
+ ```
307
+
308
+ Alternatively, use sed:
309
+ ```bash
310
+ sed -i 's/\r$//' script.sh
311
+ ```
312
+
313
+ **Prevention:** Configure Git to handle line endings:
314
+ ```bash
315
+ git config --global core.autocrlf input
316
+ ```
317
+
318
+ This converts CRLF to LF on commit while leaving the working directory as-is.
319
+
320
+ ---
321
+
322
+ ### 11. Tests Failing Against Operational Folders
323
+
324
+ **Symptoms:**
325
+ - Corrupt or missing file errors when running tests
326
+ - Intermittent test failures that cannot be reproduced
327
+
328
+ **Cause:** WSL has historically generated corrupt or missing file errors when tests run against operational folders (`.claude/`, `devforgeai/`).
329
+
330
+ **Solution:**
331
+ Always run tests against the `src/` tree, not operational folders:
332
+
333
+ ```bash
334
+ # Correct
335
+ pytest src/tests/
336
+
337
+ # Wrong -- may produce WSL file errors
338
+ pytest .claude/scripts/tests/
339
+ ```
340
+
341
+ (Source: CLAUDE.md, "test against src/ tree not operational folders")
342
+
343
+ ---
344
+
345
+ ### 12. Temporary Files in /tmp/ Not Found
346
+
347
+ **Symptoms:**
348
+ - Files written to `/tmp/` are not accessible from other tools or sessions
349
+ - Cross-platform path resolution failures
350
+
351
+ **Cause:** The `/tmp/` directory is not reliably shared between WSL, Windows, and Linux environments.
352
+
353
+ **Solution:**
354
+ Use project-scoped temporary files instead:
355
+
356
+ ```bash
357
+ # Wrong
358
+ /tmp/STORY-505/output.txt
359
+
360
+ # Correct
361
+ {project-root}/tmp/STORY-505/output.txt
362
+ ```
363
+
364
+ (Source: `.claude/rules/workflow/operational-safety.md`, Rule 2)
365
+
366
+ ---
367
+
368
+ ## Hook Issues
369
+
370
+ ### 13. SubagentStop Hook Failures
371
+
372
+ **Symptoms:**
373
+ - Hook validation fails silently
374
+ - Phase transitions blocked without clear error message
375
+
376
+ **Cause:** Hook scripts may return non-zero exit codes or write errors to stderr that are not surfaced clearly.
377
+
378
+ **Diagnostic steps:**
379
+ 1. Check the hook script's exit code:
380
+ ```bash
381
+ devforgeai-validate check-hooks
382
+ echo $?
383
+ ```
384
+ 2. Review stderr output -- hook errors are logged there, not stdout
385
+ 3. Verify the hook script exists and is executable
386
+ 4. Check that required environment variables are set
387
+
388
+ ---
389
+
390
+ ### 14. TaskCompleted Hook Validation Gate
391
+
392
+ **Symptoms:**
393
+ - Task completion is not recognized by the framework
394
+ - Phase state does not advance after task completion
395
+
396
+ **Cause:** The TaskCompleted hook performs step validation. If the validation gate fails, the phase state is not updated.
397
+
398
+ **Diagnostic steps:**
399
+ 1. Check phase state:
400
+ ```bash
401
+ python -m devforgeai_cli.commands.phase_commands phase-status STORY-XXX --project-root=.
402
+ ```
403
+ 2. Review the phase state JSON file:
404
+ ```
405
+ devforgeai/workflows/STORY-XXX-qa-phase-state.json
406
+ ```
407
+ 3. Look for validation errors in the hook output
408
+ 4. Verify all acceptance criteria for the current phase are met before the hook fires
409
+
410
+ ---
411
+
412
+ ### 15. Pre-Commit Hook Modification Attempts
413
+
414
+ **Symptoms:**
415
+ - HALT trigger fires when attempting to modify `.git/hooks/`
416
+
417
+ **Cause:** Modifying Git hooks is a forbidden operation in DevForgeAI. This is a safety measure to preserve commit validation integrity.
418
+
419
+ **Solution:**
420
+ Never modify `.git/hooks/` directly. If the pre-commit hook has a bug or incorrect behavior:
421
+ 1. Report the issue
422
+ 2. Fix the validation logic in the source (not the hook)
423
+ 3. Rebuild the hook through the proper workflow
424
+
425
+ (Source: CLAUDE.md, HALT Triggers section)
426
+
427
+ ---
428
+
429
+ <!-- SECTION: assessing-entrepreneur START -->
430
+
431
+ ### 16. Profile not generated after running /assess-me
432
+
433
+ **Symptoms:**
434
+ - The `/assess-me` command completes all 9 phases but no `user-profile.yaml` file appears at `devforgeai/specs/business/user-profile.yaml`
435
+ - Phase 9 (Results Summary) displays recommendations but the profile data is not persisted
436
+
437
+ **Cause:** The `entrepreneur-assessor` subagent (Phase 8) is responsible for writing the profile file. If the subagent was not invoked, or its Task() prompt did not include the collected responses from Phases 2-7, the profile is never written.
438
+
439
+ **Solution:**
440
+ 1. Verify the subagent file exists at `src/claude/agents/entrepreneur-assessor.md`
441
+ 2. Confirm Phase 8 invokes the subagent with a Task() call that includes all 6 dimension responses
442
+ 3. Check that the subagent's output targets `devforgeai/specs/business/user-profile.yaml`
443
+ 4. If the file was generated but is empty or malformed, verify the schema contains required fields:
444
+ ```yaml
445
+ schema_version: "1.0"
446
+ adaptive_profile:
447
+ task_chunk_size: micro | standard | extended
448
+ session_length: short | medium | long
449
+ check_in_frequency: frequent | moderate | minimal
450
+ ```
451
+ 5. Re-run `/assess-me` if the profile is missing entirely
452
+
453
+ ---
454
+
455
+ ### 17. Assessment reference files not found during Phase 8-9
456
+
457
+ **Symptoms:**
458
+ - Phase 8 (Profile Generation) or Phase 9 (Results Summary) fails with a file-not-found error
459
+ - Error references one of the adaptation or calibration reference files
460
+
461
+ **Cause:** The skill loads 4 reference files on demand from `src/claude/skills/assessing-entrepreneur/references/`. If any file is missing or the path has changed, the phase cannot proceed.
462
+
463
+ **Required files:**
464
+ ```
465
+ src/claude/skills/assessing-entrepreneur/references/work-style-questionnaire.md
466
+ src/claude/skills/assessing-entrepreneur/references/plan-calibration-engine.md
467
+ src/claude/skills/assessing-entrepreneur/references/adhd-adaptation-framework.md
468
+ src/claude/skills/assessing-entrepreneur/references/confidence-assessment-workflow.md
469
+ ```
470
+
471
+ **Solution:**
472
+ 1. Verify all 4 files exist at the paths above
473
+ 2. If a file is missing, restore it from source control:
474
+ ```bash
475
+ git checkout main -- src/claude/skills/assessing-entrepreneur/references/
476
+ ```
477
+ 3. Confirm the skill file references use relative paths matching the actual directory layout
478
+
479
+ ---
480
+
481
+ ### 18. Assessment dimension skipped or missing from profile
482
+
483
+ **Symptoms:**
484
+ - The generated `user-profile.yaml` is missing one or more of the 6 dimensions
485
+ - The `entrepreneur-assessor` subagent reports incomplete input
486
+
487
+ **Cause:** One of Phases 2-7 was skipped, or the user's response to a dimension question was not captured and passed to the subagent in the Phase 8 Task() prompt.
488
+
489
+ **Solution:**
490
+ 1. The subagent uses AskUserQuestion to request any missing dimension -- check if this prompt appeared and was answered
491
+ 2. If the prompt did not appear, verify the Phase 8 Task() prompt includes all 6 dimension responses collected during Phases 2-7
492
+ 3. Re-run `/assess-me` to complete the missing dimension. The skill does not support partial re-assessment; a full run is required
493
+
494
+ ---
495
+
496
+ ### 19. /assess-me command not found or fails to start
497
+
498
+ **Symptoms:**
499
+ - Running `/assess-me` produces no response or a "command not found" error
500
+ - The command appears in listings but does not execute
501
+
502
+ **Cause:** Either the command file is missing or its YAML frontmatter is malformed.
503
+
504
+ **Solution:**
505
+ 1. Verify the command file exists at `src/claude/commands/assess-me.md`
506
+ 2. Verify the skill file exists at `.claude/skills/assessing-entrepreneur/SKILL.md` (operational) or `src/claude/skills/assessing-entrepreneur/SKILL.md` (source)
507
+ 3. Open the command file and confirm valid YAML frontmatter with `name: assess-me`
508
+ 4. If the file is missing, restore from source control or re-run the story that created it (STORY-465)
509
+
510
+ ---
511
+
512
+ ### 20. entrepreneur-assessor subagent not found
513
+
514
+ **Symptoms:**
515
+ - Phase 8 fails with a subagent resolution error
516
+ - Error message references `entrepreneur-assessor` not being found
517
+
518
+ **Cause:** The subagent definition file is missing from the agents directory.
519
+
520
+ **Solution:**
521
+ 1. Verify the subagent file exists at `src/claude/agents/entrepreneur-assessor.md`
522
+ 2. Confirm the operational copy also exists at `.claude/agents/entrepreneur-assessor.md`
523
+ 3. If missing, restore from source control:
524
+ ```bash
525
+ git checkout main -- src/claude/agents/entrepreneur-assessor.md
526
+ ```
527
+ 4. Verify the file contains valid YAML frontmatter with `name: entrepreneur-assessor` and a `tools:` field
528
+
529
+ <!-- SECTION: assessing-entrepreneur END -->
530
+
531
+ ---
532
+
533
+ <!-- SECTION: coaching-entrepreneur START -->
534
+
535
+ ### 21. Session log not created after coaching session completes
536
+
537
+ **Symptoms:**
538
+ - The coaching session completes normally but no `session-log.yaml` file exists at `devforgeai/specs/business/coaching/session-log.yaml`
539
+ - Subsequent sessions open without any tone adaptation
540
+
541
+ **Cause:** The session log is written at session close. If the coaching skill did not execute its session-close phase — for example, because the session ended abruptly — the file is never created. If the target directory `devforgeai/specs/business/coaching/` does not exist, the write fails silently.
542
+
543
+ **Solution:**
544
+ 1. Verify the target directory exists: `devforgeai/specs/business/coaching/`
545
+ 2. If the directory is missing, create it and re-run the coaching session
546
+ 3. After a successful session, the file should contain at minimum:
547
+ ```yaml
548
+ sessions:
549
+ - date: "2026-03-04T00:00:00Z"
550
+ emotional_state: neutral
551
+ ```
552
+ 4. If the file is still not created, restore the coaching skill from source control:
553
+ ```bash
554
+ git checkout main -- src/claude/skills/coaching-entrepreneur/
555
+ ```
556
+
557
+ ---
558
+
559
+ ### 22. Tone adaptation not applied at session start despite existing session log
560
+
561
+ **Symptoms:**
562
+ - `session-log.yaml` exists and contains a prior entry with an emotional state value
563
+ - The coaching session opens with neutral, generic tone rather than adapted tone
564
+
565
+ **Cause:** The coaching skill reads `session-log.yaml` during session initialization. If the file is present but the initialization step does not read it, or the file is malformed (missing `emotional_state` key), adaptation is skipped.
566
+
567
+ **Solution:**
568
+ 1. Open `session-log.yaml` and confirm each entry has a valid `emotional_state` value:
569
+ ```yaml
570
+ emotional_state: frustrated # valid: energized|focused|neutral|tired|frustrated|anxious|overwhelmed
571
+ ```
572
+ 2. Verify the skill's session-initialization step reads the log and extracts the most recent entry's `emotional_state`
573
+ 3. If the key is present but adaptation still does not apply, trace the flow from the Read() call through to the opening message
574
+
575
+ ---
576
+
577
+ ### 23. User override of emotional state not persisted in session log
578
+
579
+ **Symptoms:**
580
+ - During a session, the user states a different emotional state
581
+ - The coaching skill acknowledges and adapts tone for the remainder of the session
582
+ - At session close, `session-log.yaml` still shows the original state
583
+
584
+ **Cause:** The session-close write step may use the session-open value rather than the current (overridden) value.
585
+
586
+ **Solution:**
587
+ 1. Verify the skill tracks the active emotional state in a mutable variable, updating it on override
588
+ 2. Confirm the session-close write step reads the current (post-override) state
589
+ 3. After a session with an override, `session-log.yaml` should reflect:
590
+ ```yaml
591
+ - date: "2026-03-04T12:00:00Z"
592
+ emotional_state: tired
593
+ override: "Actually feeling great, let's push hard"
594
+ ```
595
+
596
+ ---
597
+
598
+ ### 24. Emotional state enum validation fails on session-log.yaml load
599
+
600
+ **Symptoms:**
601
+ - Session initialization fails with a validation error referencing `session-log.yaml`
602
+ - Error indicates an unrecognized value for `emotional_state`
603
+
604
+ **Cause:** The `emotional_state` field holds a value outside the defined enum. This occurs if the file was edited manually or a typo was introduced.
605
+
606
+ **Valid enum values:**
607
+ ```
608
+ energized | focused | neutral | tired | frustrated | anxious | overwhelmed
609
+ ```
610
+
611
+ **Solution:**
612
+ 1. Open `session-log.yaml` and locate the invalid value
613
+ 2. Replace with the closest valid enum member or the safe default:
614
+ ```yaml
615
+ emotional_state: neutral
616
+ ```
617
+ 3. If the user declined to provide a state, the log must record `neutral` — verify the decline path writes `neutral` rather than an empty string
618
+
619
+ <!-- SECTION: coaching-entrepreneur END -->
620
+
621
+ ---
622
+
623
+ ## Getting Help
624
+
625
+ If none of the above solutions resolve your issue:
626
+
627
+ 1. **Check the RCA archive:** `devforgeai/RCA/` contains root cause analyses for previously encountered issues
628
+ 2. **Review ADRs:** `devforgeai/specs/adrs/` documents architectural decisions that may affect behavior
629
+ 3. **Run alignment audit:** The `/audit-alignment` command detects configuration drift between layers
630
+ 4. **Invoke diagnosis:** Use the root-cause-diagnosis skill at `.claude/skills/root-cause-diagnosis/SKILL.md`
631
+ 5. **Escalate:** Use AskUserQuestion to surface the issue for manual investigation