docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs+rename: unify naming and reconcile docs (closes #5) - #26

Merged
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation
May 13, 2026
Merged

docs+rename: unify naming and reconcile docs (closes #5)#26
AndresL230 merged 7 commits into
mainfrom
docs/naming-reconciliation

Conversation

@AndresL230

Copy link
Copy Markdown
Contributor

Summary

Closes#5.

  • Renames the Flask extension class ReCostRecostExtension to match the
    convention used by RecostMiddleware (FastAPI). The old ReCost remains
    importable as a thin subclass that emits a DeprecationWarning on
    construction, so external consumers don't break this release.
  • Strips every reference to nonexistent EcoAPI* names from CLAUDE.md
    (EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, EcoAPI).
  • Replaces the stale flush_interval (seconds, deprecated) row in the
    README.md config table with flush_interval_ms (canonical) plus a
    separate deprecated row for flush_interval.
  • Documents previously-undocumented config fields: max_buckets,
    shutdown_flush_timeout_ms. Tightens on_error to
    Callable[[Exception], None].
  • Pins len(BUILTIN_PROVIDERS) == 34 via a regression test so future
    drift trips CI; corrects the stale "21 built-in" docstring.
  • Standardizes on Recost (sentence-case, no inner cap) as the single
    brand spelling across recost/__init__.py, recost/_init.py,
    recost/_transport.py, recost/frameworks/fastapi.py, and CLAUDE.md.
    The only remaining ReCost references are intentional: the deprecated
    Flask alias class itself, its warning text, and the corresponding test +
    deprecation notes in the README/CLAUDE.md.

Tests

  • TestRecostExtension::* — existing Flask tests, updated to the new name.
  • TestReCostDeprecationAlias::test_old_name_still_constructs — proves
    the deprecation alias emits a DeprecationWarning containing
    "RecostExtension" on construction.
  • TestReCostDeprecationAlias::test_old_name_is_subclass_or_alias_of_new
    proves isinstance checks on the old name keep working.
  • test_builtin_providers_count_is_pinned — pins the documented count
    of 34 built-in rules across 14 providers.
  • Full suite: 134 passed.

Test plan

  • python -m pytest — 134 passed
  • python -m ruff check recost/frameworks/flask.py recost/__init__.py tests/test_flask.py tests/test_provider_registry.py — clean
  • python -c "from flask import Flask; from recost.frameworks.flask import ReCost; ReCost(Flask(__name__), enabled=False)" — emits the expected DeprecationWarning

Migration

External consumers using from recost.frameworks.flask import ReCost
will see a DeprecationWarning but no behavioral change. Switch to
from recost.frameworks.flask import RecostExtension before the next
major release.

Notes for reviewers

🤖 Generated with Claude Code

The Flask extension class is renamed to RecostExtension to match the
naming convention of RecostMiddleware (FastAPI) and the rest of the
public surface. The old ReCost class remains importable as a thin
subclass that emits a DeprecationWarning on construction.
Refs #5
Adds a regression assertion so adding/removing built-in rules forces
a corresponding docs update. Also corrects the stale '21 built-in
provider rules' docstring.
Refs #5
CLAUDE.md referenced EcoAPIHandle, EcoAPIConfig, EcoAPIMiddleware, and
EcoAPI — none of which exist in the codebase. Replace with the actual
class names (RecostHandle, RecostConfig, RecostMiddleware,
RecostExtension). Correct the provider-rule count from '21+' to '34'.
Refs #5
- Flask example switches to RecostExtension (with a note about the
deprecated ReCost alias).
- Config table swaps the stale 'flush_interval' (seconds, deprecated)
for the canonical 'flush_interval_ms' (milliseconds), with a separate
row marking the old form deprecated.
- Adds previously-undocumented options: max_buckets,
shutdown_flush_timeout_ms.
Refs #5
Final review found four docstring/comment references to the old
'ReCost' spelling that the planned task list missed. They are all
non-API surface (docstrings + module-level comments), but the PR's
stated goal is a single brand spelling, so clean them up here.
Touched:
- recost/_init.py:83 (init() docstring)
- recost/_transport.py:4 (module docstring)
- recost/frameworks/fastapi.py:25 (RecostMiddleware docstring)
- CLAUDE.md:3 (one-line project description)
Refs #5
@coderabbitai

Copy link
Copy Markdown

Warning

Rate limit exceeded

@AndresL230 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 37 minutes and 7 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26b8b83f-74e1-4ba2-af31-e125368ea027

📥 Commits

Reviewing files that changed from the base of the PR and between 1288f88 and af57b10.

📒 Files selected for processing (9)
  • CLAUDE.md
  • README.md
  • recost/__init__.py
  • recost/_init.py
  • recost/_transport.py
  • recost/frameworks/fastapi.py
  • recost/frameworks/flask.py
  • tests/test_flask.py
  • tests/test_provider_registry.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/naming-reconciliation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@AndresL230
AndresL230 merged commit 39dc6af into mainMay 13, 2026
1 check passed
@AndresL230
AndresL230 deleted the docs/naming-reconciliation branch May 21, 2026 04:17
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Naming chaos and stale docs across README and CLAUDE.md

1 participant

@AndresL230