Emit a ### Changed Files Markdown table (| File | +/− | Type | rows plus
total added/removed) ahead of the raw diff in both committed and
uncommitted review prompts, parsed from the diff via the shared
parseDiff engine. Add an ### Excluded Files (n) section listing filtered
noise (path, +/− counts, reason), and replace byte-truncation of oversized
diffs with a file-list + read instruction when the cleaned diff exceeds
50KB or touches more than 20 files.
Also: distinguish diff-computation failure from genuinely no changes in the
review loop (tri-state result, never treats a broken base ref as a clean
verified task), map critical→blocker in finding severity parsing, inject a
per-review custom focus/instructions section from config, and make the
noise-filter ignore rules project-configurable via review.extraIgnorePatterns
and review.ignorePaths. Add same-model retry before cycling to the next
model in task/follow-up/fix sessions.
- 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)