diff --git a/.roo/rules-release-notes-writer/1_main_workflow.xml b/.roo/rules-release-notes-writer/1_main_workflow.xml
index efba26cc..6b09948c 100644
--- a/.roo/rules-release-notes-writer/1_main_workflow.xml
+++ b/.roo/rules-release-notes-writer/1_main_workflow.xml
@@ -294,9 +294,25 @@ fi
Detect PR references as: /#(\d{1,7})/g
- - If a bullet has no explicit PR number, attempt fuzzy matching to PR titles
- - If ambiguous, mark as "unlinked" and exclude by default pending user choice
-
+ Purpose: Count changelog bullets without explicit PR numbers as "referenced" when they confidently map to a PR.
+ Matching algorithm:
+ - Normalize both bullet text and PR titles:
+ - lowercase; remove punctuation; strip prefixes like "fix:", "feat:", "add:", "improve:", "chore:", "refactor:"
+ - remove parentheticals such as "(thanks @user!)", "(PR by @user)", "(#1234 ...)"
+ - collapse whitespace
+ - Tokenize and compute token-overlap score = |intersection(tokens)| / |union(tokens)|
+ - Author signal: if bullet contains "thanks @user", "by @user", or "PR by @user" and that user equals the PR author or credited issue reporter, add +0.20 to score
+ - Keyword boost: +0.05 when provider/model/domain keywords (e.g., OpenAI, Claude, Grok, Chutes, Qwen, LongCat, etc.) appear in both
+ Confidence thresholds:
+ - score ≥ 0.65 (after boosts) → linked (confident). Treat as changelog-referenced.
+ - 0.45 ≤ score < 0.65 OR multiple candidates within 0.05 → ambiguous (needs review)
+ - score < 0.45 → unlinked
+ Tie-breakers: higher score; if within 0.02 then same author; then closer merge date to release date; then lowest PR number
+ Edge case: If bullet credits exactly one username and exactly one PR in the window has that author, accept with score ≥ 0.50 (confidence="author-boost")
+ Implementation notes:
+ - Match only against PRs fetched for the version's date window
+ - Persist mapping bullet_text → { prNumber, confidenceScore, rationaleSignals[] } and use it to compute linked/ambiguous/unlinked counts
+
@@ -649,9 +665,25 @@ fi
Detect PR references as: /#(\d{1,7})/g
- - If a bullet has no explicit PR number, attempt fuzzy matching to PR titles
- - If ambiguous, mark as "unlinked" and exclude by default pending user choice
-
+ Purpose: Count changelog bullets without explicit PR numbers as "referenced" when they confidently map to a PR.
+ Matching algorithm:
+ - Normalize both bullet text and PR titles:
+ - lowercase; remove punctuation; strip prefixes like "fix:", "feat:", "add:", "improve:", "chore:", "refactor:"
+ - remove parentheticals such as "(thanks @user!)", "(PR by @user)", "(#1234 ...)"
+ - collapse whitespace
+ - Tokenize and compute token-overlap score = |intersection(tokens)| / |union(tokens)|
+ - Author signal: if bullet contains "thanks @user", "by @user", or "PR by @user" and that user equals the PR author or credited issue reporter, add +0.20 to score
+ - Keyword boost: +0.05 when provider/model/domain keywords (e.g., OpenAI, Claude, Grok, Chutes, Qwen, LongCat, etc.) appear in both
+ Confidence thresholds:
+ - score ≥ 0.65 (after boosts) → linked (confident). Treat as changelog-referenced.
+ - 0.45 ≤ score < 0.65 OR multiple candidates within 0.05 → ambiguous (needs review)
+ - score < 0.45 → unlinked
+ Tie-breakers: higher score; if within 0.02 then same author; then closer merge date to release date; then lowest PR number
+ Edge case: If bullet credits exactly one username and exactly one PR in the window has that author, accept with score ≥ 0.50 (confidence="author-boost")
+ Implementation notes:
+ - Match only against PRs fetched for the version's date window
+ - Persist mapping bullet_text → { prNumber, confidenceScore, rationaleSignals[] } and use it to compute linked/ambiguous/unlinked counts
+
@@ -993,9 +1025,25 @@ fi
Detect PR references as: /#(\d{1,7})/g
- - If a bullet has no explicit PR number, attempt fuzzy matching to PR titles
- - If ambiguous, mark as "unlinked" and exclude by default pending user choice
-
+ Purpose: Count changelog bullets without explicit PR numbers as "referenced" when they confidently map to a PR.
+ Matching algorithm:
+ - Normalize both bullet text and PR titles:
+ - lowercase; remove punctuation; strip prefixes like "fix:", "feat:", "add:", "improve:", "chore:", "refactor:"
+ - remove parentheticals such as "(thanks @user!)", "(PR by @user)", "(#1234 ...)"
+ - collapse whitespace
+ - Tokenize and compute token-overlap score = |intersection(tokens)| / |union(tokens)|
+ - Author signal: if bullet contains "thanks @user", "by @user", or "PR by @user" and that user equals the PR author or credited issue reporter, add +0.20 to score
+ - Keyword boost: +0.05 when provider/model/domain keywords (e.g., OpenAI, Claude, Grok, Chutes, Qwen, LongCat, etc.) appear in both
+ Confidence thresholds:
+ - score ≥ 0.65 (after boosts) → linked (confident). Treat as changelog-referenced.
+ - 0.45 ≤ score < 0.65 OR multiple candidates within 0.05 → ambiguous (needs review)
+ - score < 0.45 → unlinked
+ Tie-breakers: higher score; if within 0.02 then same author; then closer merge date to release date; then lowest PR number
+ Edge case: If bullet credits exactly one username and exactly one PR in the window has that author, accept with score ≥ 0.50 (confidence="author-boost")
+ Implementation notes:
+ - Match only against PRs fetched for the version's date window
+ - Persist mapping bullet_text → { prNumber, confidenceScore, rationaleSignals[] } and use it to compute linked/ambiguous/unlinked counts
+
@@ -1335,9 +1383,25 @@ fi
Detect PR references as: /#(\d{1,7})/g
- - If a bullet has no explicit PR number, attempt fuzzy matching to PR titles
- - If ambiguous, mark as "unlinked" and exclude by default pending user choice
-
+ Purpose: Count changelog bullets without explicit PR numbers as "referenced" when they confidently map to a PR.
+ Matching algorithm:
+ - Normalize both bullet text and PR titles:
+ - lowercase; remove punctuation; strip prefixes like "fix:", "feat:", "add:", "improve:", "chore:", "refactor:"
+ - remove parentheticals such as "(thanks @user!)", "(PR by @user)", "(#1234 ...)"
+ - collapse whitespace
+ - Tokenize and compute token-overlap score = |intersection(tokens)| / |union(tokens)|
+ - Author signal: if bullet contains "thanks @user", "by @user", or "PR by @user" and that user equals the PR author or credited issue reporter, add +0.20 to score
+ - Keyword boost: +0.05 when provider/model/domain keywords (e.g., OpenAI, Claude, Grok, Chutes, Qwen, LongCat, etc.) appear in both
+ Confidence thresholds:
+ - score ≥ 0.65 (after boosts) → linked (confident). Treat as changelog-referenced.
+ - 0.45 ≤ score < 0.65 OR multiple candidates within 0.05 → ambiguous (needs review)
+ - score < 0.45 → unlinked
+ Tie-breakers: higher score; if within 0.02 then same author; then closer merge date to release date; then lowest PR number
+ Edge case: If bullet credits exactly one username and exactly one PR in the window has that author, accept with score ≥ 0.50 (confidence="author-boost")
+ Implementation notes:
+ - Match only against PRs fetched for the version's date window
+ - Persist mapping bullet_text → { prNumber, confidenceScore, rationaleSignals[] } and use it to compute linked/ambiguous/unlinked counts
+
@@ -1687,9 +1751,25 @@ fi
Detect PR references as: /#(\d{1,7})/g
- - If a bullet has no explicit PR number, attempt fuzzy matching to PR titles
- - If ambiguous, mark as "unlinked" and exclude by default pending user choice
-
+ Purpose: Count changelog bullets without explicit PR numbers as "referenced" when they confidently map to a PR.
+ Matching algorithm:
+ - Normalize both bullet text and PR titles:
+ - lowercase; remove punctuation; strip prefixes like "fix:", "feat:", "add:", "improve:", "chore:", "refactor:"
+ - remove parentheticals such as "(thanks @user!)", "(PR by @user)", "(#1234 ...)"
+ - collapse whitespace
+ - Tokenize and compute token-overlap score = |intersection(tokens)| / |union(tokens)|
+ - Author signal: if bullet contains "thanks @user", "by @user", or "PR by @user" and that user equals the PR author or credited issue reporter, add +0.20 to score
+ - Keyword boost: +0.05 when provider/model/domain keywords (e.g., OpenAI, Claude, Grok, Chutes, Qwen, LongCat, etc.) appear in both
+ Confidence thresholds:
+ - score ≥ 0.65 (after boosts) → linked (confident). Treat as changelog-referenced.
+ - 0.45 ≤ score < 0.65 OR multiple candidates within 0.05 → ambiguous (needs review)
+ - score < 0.45 → unlinked
+ Tie-breakers: higher score; if within 0.02 then same author; then closer merge date to release date; then lowest PR number
+ Edge case: If bullet credits exactly one username and exactly one PR in the window has that author, accept with score ≥ 0.50 (confidence="author-boost")
+ Implementation notes:
+ - Match only against PRs fetched for the version's date window
+ - Persist mapping bullet_text → { prNumber, confidenceScore, rationaleSignals[] } and use it to compute linked/ambiguous/unlinked counts
+
diff --git a/docs/update-notes/index.md b/docs/update-notes/index.md
index 04520e1e..912dc1a2 100644
--- a/docs/update-notes/index.md
+++ b/docs/update-notes/index.md
@@ -19,6 +19,7 @@ image: /img/social-share.jpg
### Version 3.29
+* [3.29.2](/update-notes/v3.29.2) (2025-10-27)
* [3.29.1](/update-notes/v3.29.1) (2025-10-27)
* [3.29.0](/update-notes/v3.29.0) (2025-10-24)
diff --git a/docs/update-notes/v3.29.2.mdx b/docs/update-notes/v3.29.2.mdx
new file mode 100644
index 00000000..85b0bdf4
--- /dev/null
+++ b/docs/update-notes/v3.29.2.mdx
@@ -0,0 +1,30 @@
+---
+description: Roo Code 3.29.2 adds higher-context Chutes AI models, improves settings text, and fixes provider caching and free-model pricing display.
+keywords:
+ - roo code 3.29.2
+ - chutes ai
+ - longcat
+ - provider update
+ - bug fixes
+ - free models
+ - pricing display
+image: /img/social-share.jpg
+---
+
+# Roo Code 3.29.2 Release Notes (2025-10-27)
+
+This patch adds higher-context Chutes AI models, cleans up settings text, and fixes provider caching and free‑model pricing display.
+
+
+## Provider Updates
+
+* Chutes AI: Add LongCat‑Flash‑Thinking‑FP8 models (200K, 128K) for longer coding sessions with faster, cost‑effective performance (thanks leakless21!) ([#8426](https://github.com/RooCodeInc/Roo-Code/pull/8426))
+
+## QOL Improvements
+
+* Settings descriptions: Remove specific "Claude 3.7 Sonnet" version across locales to keep guidance current (thanks rwydaegh!) ([#8437](https://github.com/RooCodeInc/Roo-Code/pull/8437))
+
+## Bug Fixes
+
+* Roo provider: Fix caching logic to emit correct usage data and apply proper protocol ([#8860](https://github.com/RooCodeInc/Roo-Code/pull/8860))
+* Free models: Hide pricing info and show zero cost to avoid confusion ([#8864](https://github.com/RooCodeInc/Roo-Code/pull/8864))
\ No newline at end of file
diff --git a/sidebars.ts b/sidebars.ts
index 421abc10..76443056 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -222,6 +222,7 @@ const sidebars: SidebarsConfig = {
type: 'category',
label: '3.29',
items: [
+ { type: 'doc', id: 'update-notes/v3.29.2', label: '3.29.2' },
{ type: 'doc', id: 'update-notes/v3.29.1', label: '3.29.1' },
{ type: 'doc', id: 'update-notes/v3.29.0', label: '3.29.0' },
],