Review text was truncated to 500 chars in the chat message body with no
way to access the full content — once a review exceeded that limit it was
lost from the UI. Now the full review body is rendered in the expanded
(Ctrl+O) view like the implementation tool-call tree, and can optionally
be persisted to disk per-loop.
Changes:
- Add saveReviews config flag + reviewsDir path option
- Add loop-start prompt to opt into saving reviews to disk when
auto-review is enabled (skipped when explicitly set in YAML)
- Pass full reviewText via message details instead of inlining a slice
- Extend ralpi-progress renderer to show full review body when expanded,
dim hint to expand when collapsed
- Add saveReviewToFile() writing to .ralpi/reviews/<prdKey>/<taskId>.md,
mirroring the per-loop reflections layout so many loops don't collide
- Cap commit diffs in review/commit prompts at 50KB to prevent
context window overflow on follow-up sessions
- Skip skills catalog (noSkills) in commit/review follow-up sessions
for leaner context
- Wire Pi's SettingsManager into runAgentSession so Pi's built-in
retry (exponential backoff, provider retry) applies to ralpi
sessions — removes ralpi's duplicate manual retry loop
- Remove maxRetries/retryDelayMs from ralpi config; rely on Pi's
retry.* settings (with manual override support)
- Remove retries field from progress.json and incrementRetry() from
ProgressTracker
- Add model failover to follow-up sessions (commit/review cycle
through the model pool on connection errors)
- Namespace reflection files by PRD key under
.ralpi/reflections/<prdKey>/ so task sets don't overwrite each
other
- Skip loop-startup prompts for config fields explicitly set in YAML
- Remove (default) annotations from loop options prompts
- Default commitTimeoutMs/reviewTimeoutMs to 0 (inherit Pi defaults)
- Persist loop-active state for widget re-instantiation after session reload
- Add YAML task file parsing and update support via yaml library
- Auto-update PRD source file checkboxes on task status changes
- Add batchRender callback for real-time parallel widget animation
- Normalize tabs-to-spaces indentation across source files
- Use padStart(2, '0') for ID formatting instead of hardcoded prefix
- Enable parallel execution for single-task DAG batches