Conversation
- New CLI: story <pr-or-branch> [--compare branch] [--output file]
- PR mode: fetch PR info, commits, files; LLM narrative + features + changelog
- Branch mode: commit history only (getBranchCommitHistory) for single branch
- Two-branch mode: --compare <branch> (name, owner/repo@branch, or tree URL);
prefer primary branch (URL) as newer ref; story from oldest to newest
- GitHub API: getPRFiles, getDefaultBranch, getBranchComparison,
getBranchCommitHistory, getBranchComparisonEitherDirection,
getBranchComparisonWithFallback; parseBranchSpec + normalizeCompareBranch
- Logging: initOutputLog({ prefix: 'story' }) → story-output.log, story-prompts.log
- buildCommitSummary: fix overlap when total <= maxCommits; add Removed to changelog prompts
- README: document story usage (PR, branch, --compare)
Made-with: Cursor
- tools/story/README.md: full docs, modes table, options, log files, WHYs - Main README: story section updated, link to tools/story/README.md - CHANGELOG: Added (2026-03) story tool with WHYs for design choices - JSDoc/WHY in story cli, index, run; github api/types; shared logger Made-with: Cursor
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…line fix - Gate submitReview on PRR_SUBMIT_REVIEW=true (set only for workflow_dispatch) - Server: add submit_review input and PRR_SUBMIT_REVIEW env - Client: inline server steps so job has runs-on (fix validator) - Dedup: reject GROUP lines that mix line numbers; re-split by line to keep valid same-line merges; add debug log when re-splitting Made-with: Cursor
- run-prr-client: use vars.PRR_REVIEWER_LOGIN in job if (env not available there) - Add lint-workflows.yml: actionlint on push/PR for .github/workflows - npm run lint:workflows for local audit (requires actionlint in PATH) Made-with: Cursor
There was a problem hiding this comment.
Pull request overview
This PR introduces a new CLI tool called story that generates narratives, feature catalogs, and changelogs (Added/Changed/Fixed/Removed) from GitHub PRs or branches using an LLM. It supports three modes: PR analysis (using title/body + commits + files), single-branch analysis (commit history only), and two-branch comparison (--compare). It also includes a bug fix for null-safe access in parseMarkdownReviewIssues and adds prefix support to the shared logger.
Changes:
- Adds the
storytool with CLI parsing, runner logic, and documentation, reusing existingGitHubAPIandLLMClientinfrastructure from theprrtool. - Extends
GitHubAPIwith new methods (getPRFiles,getBranchCommitHistory,getBranchComparison,getBranchComparisonEitherDirection, etc.) and addsparseBranchSpec/normalizeCompareBranchtotypes.ts. - Adds logger prefix support so
storywrites tostory-output.log/story-prompts.loginstead of overwritingprr's log files.
Reviewed changes
Copilot reviewed 15 out of 16 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
tsconfig.json |
Adds tools/story/**/* to TypeScript compilation includes |
tools/story/run.ts |
Main story runner: fetches data, builds prompts, calls LLM |
tools/story/index.ts |
Entry point: CLI wiring, config load, output handling |
tools/story/cli.ts |
CLI definition and argument parsing for the story tool |
tools/story/README.md |
Documentation for the story tool |
tools/prr/github/types.ts |
Adds parseBranchSpec and normalizeCompareBranch parsing functions |
tools/prr/github/api.ts |
Adds GitHub API methods for branch/PR data; fixes null-safe access in parseMarkdownReviewIssues |
shared/logger.ts |
Adds prefix support to initOutputLog for tool-specific log files |
package.json |
Registers story as a CLI binary |
README.md |
Adds story tool documentation to the main README |
CHANGELOG.md |
Documents the story tool addition |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| export function parseBranchSpec(input: string): { owner: string; repo: string; branch: string } | null { | ||
| const trimmed = input.trim(); | ||
| const shorthandAt = trimmed.match(/^([^\/]+)\/([^@:]+)@([^@]+)$/); | ||
| if (shorthandAt) { | ||
| return { owner: shorthandAt[1], repo: shorthandAt[2], branch: shorthandAt[3] }; | ||
| } | ||
| const shorthandColon = trimmed.match(/^([^\/]+)\/([^@:]+):([^@:]+)$/); | ||
| if (shorthandColon) { | ||
| return { owner: shorthandColon[1], repo: shorthandColon[2], branch: shorthandColon[3] }; | ||
| } | ||
| const treeMatch = trimmed.match(/(?:https?:\/\/)?github\.com\/([^\/]+)\/([^\/]+)\/tree\/(.+?)(?:[?#]|$)/); | ||
| if (treeMatch) { | ||
| const branch = treeMatch[3].replace(/\/+$/, '').trim(); | ||
| if (branch) { | ||
| return { owner: treeMatch[1], repo: treeMatch[2], branch }; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
|
|
||
| /** | ||
| * Normalize a --compare value to a branch name for the GitHub API. | ||
| * Accepts: plain branch name (e.g. v1-develop), owner/repo@branch, or tree URL. | ||
| * When currentOwner/currentRepo are set, parsed repo must match (same-repo comparison only). | ||
| * WHY: Compare API expects ref names; passing a tree URL as ref causes 404. We parse and pass only the branch name. | ||
| */ | ||
| export function normalizeCompareBranch( | ||
| value: string, | ||
| currentOwner?: string, | ||
| currentRepo?: string | ||
| ): string { | ||
| const trimmed = value.trim(); | ||
| const parsed = parseBranchSpec(trimmed); | ||
| if (parsed) { | ||
| if (currentOwner != null && currentRepo != null && (parsed.owner !== currentOwner || parsed.repo !== currentRepo)) { | ||
| throw new Error( | ||
| `--compare repo (${parsed.owner}/${parsed.repo}) does not match branch repo (${currentOwner}/${currentRepo}). Use the same repository.` | ||
| ); | ||
| } | ||
| return parsed.branch; | ||
| } | ||
| if (!/github\.com|@|^[^\/]+\/[^\/]+:/.test(trimmed)) { | ||
| return trimmed; | ||
| } | ||
| throw new Error( | ||
| `Invalid --compare value: "${value}". Use a branch name (e.g. v1-develop), owner/repo@branch, or a tree URL.` | ||
| ); | ||
| } |
There was a problem hiding this comment.
No tests were added for the new parseBranchSpec and normalizeCompareBranch functions. Given that parseMarkdownReviewIssues (exported from a nearby module) has tests in tests/github-api-parser.test.ts, these new parsing functions — which contain non-trivial regex logic and multiple input format handling — should also have test coverage for edge cases like branch names with /, tree URLs with query/fragments, mismatched repos in normalizeCompareBranch, and plain branch name pass-through.
Made-with: Cursor
Made-with: Cursor
- Workflows: add Configure Git step (github-actions[bot] name/email) before Run PRR - ensureGitIdentity() in git-merge: set local user.name/email in repo before merge when unset; use bot identity in GITHUB_ACTIONS else PRR/prr@local for local runs Made-with: Cursor
- On setup early exit: run error cleanup so user sees 'Exit: Error' and details - Process exits with code 1 when exitReason is error/init_failed/merge_conflicts/sync_failed - Push: always use one-shot auth URL when githubToken provided (fix CI 'could not read Password') Made-with: Cursor
- git-push: when using auth URL, add -c credential.helper= and GIT_TERMINAL_PROMPT=0 so git uses URL credentials only (fix CI 'could not read Password') - api: handle 422/404 from check-runs and combined-status APIs (assume no checks/success) - workflows: comment that output.log/prompts.log are uploaded as artifacts Made-with: Cursor
… for other repos - git-push: build auth URL as https://x-access-token:TOKEN@... (GitHub convention, fixes CI push) - docs: INSTALL-WORKFLOW-OTHER-REPO.md for developers adding PRR workflow to their repo Made-with: Cursor
…ame-line - utils: single-issue prompt adds explicit 'ONLY file' line when one allowed path (Cycle 21) - llm/client: batch verify BAD example for ## Fix N format; parser accepts ## Fix N: YES|NO (Cycle 22) - issue-analysis: dedup prompt reinforces same-line check before replying - AUDIT-CYCLES: add Cycle 21 (output.log), Cycle 22 (prompts.log) Made-with: Cursor
- workflows: contents: write so GITHUB_TOKEN can push (fix 403) - base-merge: use shared push() with githubToken for merge-commit push (fix 'could not read Password' in CI) - run-setup-phase: pass config.githubToken to checkAndMergeBaseBranch - AUDIT-CYCLES: add Cycle 23 (prr-logs-5 #5) - reporter: when GITHUB_ACTIONS=true, print tip to share logs via gh run download Made-with: Cursor
Iteration 1 prr-fix:prrc_kwdoq_yy5c6txlbj
Iteration 1 prr-fix:prrc_kwdoq_yy5c6txlbq
Iteration 1 prr-fix:prrc_kwdoq_yy5c6txlbz
- run-prr-client: optional pr_number; add branch input, resolve via REST API (head=owner:branch for same-repo and fork PRs) - workflows: add pull-requests: write so PR review submit works (fix 403) - client: pass PRR_PR_NUMBER into Run PRR step; reporter uses it in Actions tip so artifact name shows prr-logs-5 not prr-logs-<PR> Made-with: Cursor
- workflow: require PR number only, remove branch input and resolve step - AUDIT-CYCLES: add Cycle 25 (prompts.log eliza#6562), record cycles 25 - issue-analysis: dedup prompt add same-line verification step before reply - push-iteration-loop: clearer exit when 0 issues and nothing to commit Made-with: Cursor
|
@coderabbitai review |
Iteration 4 prr-fix:prrc_kwdoq_yy5c6txlbj
Changes: - README.md: The story section (lines 209-231) is inserted inside the prr `bash` code bloc...
Avoid duplicate 'PRR run summary' on PR (review + comment). Made-with: Cursor
- run-prr-server.yml: pr_number input type number -> string so callers passing workflow_dispatch input (always string) don't get 'Unexpected value' - README: example uses @Babylon for reusable workflow ref Made-with: Cursor
Docs: - Move PRR docs to tools/prr/: ARCHITECTURE, QUICK_REFERENCE, flowchart, RUNNERS, INSTALL-WORKFLOW-OTHER-REPO, AUDIT-CYCLES - Add tools/split-plan/AUDIT-CYCLES.md; update docs/README and ROADMAP links - AGENTS.md: audit log path -> tools/prr/AUDIT-CYCLES.md Split-plan: - Always set source_pr from prInfo (ignore LLM placeholder) - Strip trailing ``` from plan body; validate unassigned files - Path extractor: allow backtick-wrapped paths in **Files:** - Prompts: dependency direction (A <- B), assign every file, no docs-only split - Remove PR body truncation (send full description) Logger: - Write to prompts.log whenever promptLogStream set (split-plan-prompts.log populated without -v / PRR_DEBUG_PROMPTS) Made-with: Cursor
- node-version: '20' -> '24' in both run-prr-client and run-prr-server - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true to clear Node 20 deprecation warning Made-with: Cursor
- run-prr-server: optional prr_ref input; checkout uses it so npm ci sees in-sync package-lock.json when using @Babylon (or other non-default ref) - README + INSTALL-WORKFLOW-OTHER-REPO: examples pass prr_ref: 'babylon' Made-with: Cursor
- Phase 1: read base via readConflictStage(1), 3-way prompt and getBaseSegmentForChunk
- Phase 2: CONFLICT_PROMPT_OVERHEAD_CHARS, segment cap, oversized branch to resolveOversizedChunk
- Phase 3: findConflictChunkEdges (TS/JS AST, Python, fallback), resolveOversizedChunk with base segments
- Phase 4: validateResolvedFileContent (TS/JS getSyntacticDiagnostics) before write/stage
- Phase 5: per-model cap, large-file warning only for skipped files, tests, CONFLICT-RESOLUTION docs
- Fix validator typecheck: use import('typescript').CompilerHost and explicit param types
- CHANGELOG, README, docs/README, CONFLICT-RESOLUTION-AUDIT.md
Made-with: Cursor
- Replace one-shot auth URL with http.https://github.com/.extraheader (AUTHORIZATION: basic base64(token:)) so push works when token-in-URL triggers 'could not read Password' / terminal prompts disabled in CI - Redact AUTHORIZATION: basic <base64> in logs via redact-url.js Made-with: Cursor
When TS/JS parse validation rejects LLM resolution (e.g. '*/' expected, ',' expected), retry resolution once for that file with the parse error message in the prompt so the model can fix syntax. Thread previousParseError through chunked and single resolution paths; only retry for chunked/single, then re-validate. Keeps validation strict while reducing full-merge failures from transient LLM syntax errors. Made-with: Cursor
- Add --reply-to-threads and --resolve-threads; PRR_REPLY_TO_THREADS, PRR_BOT_LOGIN - Post short reply per review thread when fixing or dismissing (fixed: after push; dismissed: end of run). Reply-eligible dismissals: already-fixed, stale, not-an-issue, false-positive. In-run and cross-run idempotency; batch getThreadComments for latency. - API: replyToReviewThread (REST), resolveReviewThread, getThreadComments; databaseId on GraphQL/types for reply flow. - Docs: docs/THREAD-REPLIES.md, README/AGENTS/DEVELOPMENT/CHANGELOG/ROADMAP updates with WHYs. Code comments (WHY) in thread-replies.ts and api.ts. - Tests: tests/thread-replies.test.ts (14 cases). Made-with: Cursor
…tate fixes Logger & runners: - debugPrompt returns slug; debugResponse/debugPromptError take slug for request-scoped pairing when in-flight - All call sites (prr llm client, llm-api, opencode, gemini, cursor, codex, claude-code, aider, openhands, junie, goose) capture slug and pass to response/error - MAX_FIX_PROMPT_CHARS 200k -> 100k Audit & docs: - AUDIT-CYCLES: add Cycle 41 (output+prompts 2026-03-15), Cycle 42 (prompts 287k slug+cap); fix ROADMAP link to docs/ROADMAP.md - DEVELOPMENT.md: Fix loop items 10-12 (overlap, slug pairing, 100k cap); Pill and log audit limits; fix broken audit-run link - docs/README: What's Where tree corrected (docs/ contents, remove duplicate); Documentation Map add THREAD-REPLIES - Remove four audit stub docs (content in AUDIT-CYCLES and DEVELOPMENT) Pill: 60k audit context budget, no-improvements on api_call_failed, context trim, shared story-read/tokens State: overlap cleanup on load (dismissed minus verifiedFixed); recoveredFromGitCommentIds; single-issue ALREADY_FIXED immediate dismiss; test-path src-level __tests__ Shared: README, story-read, run-with-concurrency, utils/tokens; path-utils; rate-limit Tests: solvability (PR comment), vitest.config; lessons, normalize-lesson-text, thread-replies, github-api-parser Made-with: Cursor
…flicts Use explicit refspec (+refs/heads/<branch>:refs/remotes/origin/<branch>) when fetching the base branch and additionalBranches. On single-branch clones the default fetch config only includes the PR branch, so a plain 'git fetch origin <baseBranch>' did not update origin/<baseBranch>; the merge-base check then saw a stale ref and reported already up-to-date, and the PR stayed 'dirty' on GitHub. - base-merge.ts: pre-merge fetch uses explicit refspec - git-merge.ts: mergeBaseBranch and startMergeForConflictResolution fetch base with explicit refspec - git-clone-core.ts: additionalBranches (existing-workdir and fresh-clone) use explicit refspec Docs: CHANGELOG (Fixed), README (Git Integration + conflict scenarios), AGENTS.md (base-branch merge), DEVELOPMENT.md (key files + troubleshooting), QUICK_REFERENCE (tip #5). Code comments add WHY for explicit refspec. Made-with: Cursor
…p clarity - AUDIT-CYCLES: add cycles 43–46 (output-log audit, improvements review, evening follow-up, prompts.log crash flush + one snippet per file). - DEVELOPMENT.md: document exitReason, CI 0/0, thread reply 422/summary, file-no-longer-exists skip reason, prompts.log cork/uncork and batch one-snippet-per-file (items 8–9, 15–16). - dismissal-comments: clarify 'file no longer exists' skip messages (no place to insert comment) so operators don't confuse with fix-phase. - shared/logger: cork/uncork per prompts.log entry for crash safety. - issue-analysis: batch analysis uses one snippet per file (Cycle 38 Low). - AGENTS.md: note cork/uncork in Crash/truncation; pill/subprocess notes. - Thread replies 422 early bail, attempted/replied summary, tests; startup CI 0/0 message; push-iteration exitReason; pill/config/context/orchestrator; CONFLICT-RESOLUTION and related workflow tweaks. Made-with: Cursor
- Persist partial conflict resolutions in state so next run reuses resolved files and only re-resolves remaining; clear on merge success and on head change - File-overview story: full read of file in consecutive segments (always chunk, no preview/truncation), story built across turns and injected into chunk prompts - Remove CONFLICT_RESOLUTION_ABSOLUTE_MAX_CHARS; always chunk, never skip by size - Use chunked resolution for files > effectiveMaxChars instead of skipping - Constants: FILE_OVERVIEW_SEGMENT_CHARS, partialConflictResolutions in state - Docs: CONFLICT-RESOLUTION.md, workflow/install, audit cycles, README/AGENTS Made-with: Cursor
- Top+tails fallback when main path fails: whole-file story + top/tails or two-pass - Parse validation: location + error-specific retry hint, up to two retries - Clone: user message before fetch (large repos may take several minutes) - Workflow: log PRR version (ref + SHA) after checkout - CONFLICT-RESOLUTION.md: alternative design, WHYs (fallback), audit, constants - README/CHANGELOG: fallback and parse retries, WHYs - Code comments with WHY in git-conflict-chunked.ts and git-conflict-resolve.ts Made-with: Cursor
… disambiguation, docs - State: keep verifiedFixed and dismissedIssues mutually exclusive on load (symmetric cleanup in manager.ts and state-core.ts); warn when overlap cleaned - Reporter: warn when rawVerifiedFixed >= 3x relevantVerified (stale IDs) - Final audit: when audit says UNFIXED for previously verified issue, unmark and re-queue instead of trusting prior verification (safe over sorry) - Solvability: extract path hints without extension (e.g. ../src/providers/context); match ambiguous basename to candidate containing hint + .ts/.tsx - AGENTS.md: document final-audit re-queue; expand empty prompts.log troubleshooting for llm-elizacloud and stderr warning - AUDIT-CYCLES.md: add Cycle 51 (pill-output improvements) - Also includes: verifiedThisSession reuse across push iters (push-iteration-loop), REVIEW_BOTS_PARSE + Copilot/Cursor/greptile-apps (github/api), logger writeToPromptLog empty-body warning, ARCHITECTURE/QUICK_REFERENCE bot docs Made-with: Cursor
PRR & git - Clone/fetch via spawn (stdio inherit); Promise.resolve clone; broken workdir re-clone - PRR_CLONE_TIMEOUT_MS default 900s; PRR_CLONE_DEPTH shallow clone - Quiet cleanupGitState (spawn ignore stdio); base-merge alreadyUpToDate messaging - State: clear verified on head change; prune verified to current PR comments - ElizaCloud: skip claude-3.5-sonnet; fallback to claude-sonnet-4-5-20250929 - PRR_STRICT_FINAL_AUDIT exit 2 on audit overrides; merge_conflicts RESULTS warning - git-conflict-resolve: lastResult scope fix for syntax-fix path Thread replies (--reply-to-threads) - Case-insensitive comment id lookup (prr-fix lowercase vs GraphQL ids) - Final cleanup posts verifiedThisSession when push phase skipped Pill - Tighter audit user message cap + overhead margin (504 avoidance) Split tools - split-exec: rewrite-plan parser and rebuild flow - split-rewrite-plan tool; docs and CHANGELOG entries Model catalog - Generated provider catalog, shared/model-catalog.ts, fetch script, CI workflow Docs: AGENTS, README, THREAD-REPLIES, MODELS, DEVELOPMENT, AUDIT-CYCLES (56–57) Made-with: Cursor
- Dismiss 0a6 in solvability when framing + parseable pair and both ids in catalog - applyCatalogModelAutoHeals: quoted literals in line window, markVerified, saveState - Commit when all resolved but heal dirtied tree (verifiedThisSession + hasChanges) - Tests: outdated-model-advice + solvability + git fixture - Docs: README, DEVELOPMENT, MODELS, AGENTS, CHANGELOG; WHY comments in code Made-with: Cursor
- Add support for 'still have incorrect model name X instead of Y' (CodeRabbit-style) - Add 'incorrect model name' to framing regex - Tests: CodeRabbit-style comment body Fixes comment ic-4079055770-0 that wasn't dismissed/healed because parser only matched 'use X instead of Y' and 'change X to Y', not 'have X instead of Y'. Made-with: Cursor
- CHANGELOG: three-phase pipeline, staleness, rebuild/promote, edge cases - split-exec README: WHY rebuild branches, staleness fail, empty splits, no-entry skip - split-rewrite-plan README: WHY linear history, separate tool, warnings - Code comments: WHY discriminated union, path normalization, first-parent, cherry-pick vs commit-from-sha, rebuild suffix, promote opt-in, staleness check - DEVELOPMENT.md: split tools subsection with audit note Made-with: Cursor
- Log when checking target comments (ic-4079055770-0, ic-4050517082-0) - Show why target comments don't match (framing check, body preview) - Helps diagnose why 'still have incorrect model name X instead of Y' comments aren't caught Made-with: Cursor
- Filter (PR comment) synthetic paths early in solvability to avoid wasted LLM calls - Require code evidence when final audit marks FIXED (validate against code snippets) - Require code contradiction when audit overrides ALREADY_FIXED (line numbers + patterns) - Tighten Rule 6: check git ls-tree before auto-FIXED for file deleted cases - Enhanced approval comment detector (Excellent documentation ✅ patterns) - Auto-verify after N ALREADY_FIXED verdicts to stop oscillation loops - Enforce verified/dismissed mutual exclusivity at write time (remove from verifiedComments) - Bot command dismissal detection (@coderabbitai review) - Enhanced final audit prompt with stricter Rule 6/7 validation instructions - Improved solvability early-exit logic for synthetic paths Addresses improvements from pill-output.md audit cycles (2026-03-20 03:41 and 04:01) Made-with: Cursor
When resolving delete conflicts (file deleted by target branch), resolveDeleteConflict() already handles the deletion with git.rm(). markConflictsResolved() was then trying to git.add() the same file, which fails with 'pathspec did not match any files' because the file no longer exists. Fix: Check if file exists before trying to add it. Skip deleted files since they're already staged for deletion by resolveDeleteConflict(). Fixes error: 'fatal: pathspec did not match any files' when resolving delete conflicts. Made-with: Cursor
When chunking large contexts, the code was trying to access 'response.usage' outside the else block where 'response' is only defined. This caused 'response is not defined' error when chunking was used. Fix: Move token usage logging inside the else block (single-request path only). When chunking, we make multiple requests and don't aggregate token usage. Made-with: Cursor
PRR: - Inject catalog context in verifier (batchCheckIssuesExist) and fixer prompts when outdated model-id advice matches (prevents wrong gpt-5-mini → gpt-4o-mini flips) - Extend parseModelRenameAdvice for CodeRabbit typo-heading + later use/recommended - Dismiss merge-closing meta comments in assessSolvability (0a3b) - pathsWrittenByRunner + reconcile note when runner wrote but git is clean - gitRecoveredVerificationCount for prune log context; trim auto-heal debug noise Pill: - Align chunk budget with shared CHARS_PER_TOKEN; enforce max chunk chars; docs Tests/docs: - outdated-model-advice tests; eval benchmarks and runner; scenarios & test-utils - split-exec / split-rewrite-plan git operation tests - CHANGELOG, AUDIT-CYCLES (cycle 63), MODELS, AGENTS, pill README CI & tooling: - GitHub workflows for test and eval; tools/eval; package.json scripts Made-with: Cursor
…t and pill docs Session model skip (PRR_SESSION_MODEL_SKIP_FAILURES) and diminishing-returns warning (PRR_DIMINISHING_RETURNS_ITERATIONS). Canonical path-unresolved vs missing-file via path-utils + solvability; legacy state normalization. scanCommittedFixes in-process cache (workdir/branch/HEAD); recovery skips redundant markVerified. Clone fetches additionalBranches on preserve path with optional ref verification (split-exec disables). Rate limit restores full concurrency after 429 window. State overlap cleanup on load; markVerified short-circuit; dirty/unmergeable PR warn without --merge-base. pushWithRetry conflict file warnings; runner detect debug; empty LLM body ERROR + PROMPTLOG_EMPTY_BODY; commit subject truncation; catalog/config warnings. Pill chunking and audit caps; nested conflict parsing tests. Documentation: CHANGELOG, DEVELOPMENT pill triage, README env section, AGENTS pill note, ROADMAP follow-ups. Note: pill-output.md is gitignored and was not committed. Made-with: Cursor
- PRR_ELIZACLOUD_EXTRA_SKIP_MODELS: merge extra skip ids with built-in list - recoverVerificationState: markVerified with PRR_GIT_RECOVERY_VERIFIED_MARKER - runFinalAudit: warn on verified∩dismissed overlap - determineScope: fallback to first path segment (e.g. src) vs misc - checkForConflicts: document in-progress-merge limitation; fetch timeout hygiene - AGENTS: Path resolution rules subsection; extra skip env in model blurb - README: operator env quick-reference table; .env.example + CHANGELOG - DEVELOPMENT: clarify generic src/ in example JSON - rotation.ts: mention PRR_ELIZACLOUD_EXTRA_SKIP_MODELS in skip warning Made-with: Cursor
- run-orchestrator: push dismissal-comment commit via git-push.ts auth (credential.helper / extraheader) instead of simple-git push() - cleanup-mode: same for cleanup push — avoids CI 'could not read Password' Made-with: Cursor
Git treats helper values starting with ! as shell-command helpers; credential.helper=! broke CI with 'get: not found' and still prompted. Made-with: Cursor
- model-context-limits: 48k char cap for qwen-3-14b variants; fuzzy model id match; 24576 token table; tighter char estimate for <=32k models - client: detect gateway-wrapped context errors; no 500 backoff; call lowerModelMaxPromptChars for next iteration Made-with: Cursor
- model-context-limits: ELIZACLOUD_MODEL_CONTEXT (maxContextTokens per model), aliases/patterns, unknown default; derive fix char caps from spec - client: on ElizaCloud server-class errors log expectedMaxContextTokens, expectedMaxFixPromptChars, request char totals, canonical id / unknown flag; same on retry backoff and context-overflow path - docs/MODELS.md + re-exports from tools/prr/llm/model-context-limits Made-with: Cursor
- Push: embed githubToken in push URL when origin is HTTPS (git-push-auth-url) - Pill: tool-repo scope filter (tool-repo-scope.ts) + docs - PRR: latent merge probe, fetch/branch safety, state/catalog/conflict UX - Docs: CHANGELOG [Unreleased], DEVELOPMENT, README, AGENTS, ROADMAP - Tests: git-push-auth-url, latent merge, fetch timeout, branch ref, etc. Made-with: Cursor
No description provided.