Skip to content

chore: release v0.9.0#4

Merged
github-actions[bot] merged 3 commits intomainfrom
release-plz-2026-02-24T08-46-59Z
Feb 26, 2026
Merged

chore: release v0.9.0#4
github-actions[bot] merged 3 commits intomainfrom
release-plz-2026-02-24T08-46-59Z

Conversation

@Destynova2
Copy link
Copy Markdown
Contributor

@Destynova2 Destynova2 commented Feb 24, 2026

🤖 New release

  • grob: 0.1.3 -> 0.9.0
Changelog

0.9.0 - 2026-02-26

Added

  • (dx) add nextest, insta, tracing-test, coverage, cargo-chef

Fixed

  • remove invalid release_branch field from release-plz.toml

Other

  • add develop branch workflow and auto-merge release PRs
  • enable auto-merge for release-plz PRs

Added

  • Budget enforcement: global, per-provider, and per-model monthly spend limits ([budget], budget_usd)
  • Spend tracking: persistent monthly spend in ~/.grob/spend.json with auto-reset
  • grob spend command: show current month's spend breakdown by provider and model
  • Spend in grob status: shows spend summary line
  • Dynamic pricing: fetches model prices from OpenRouter API at startup (refreshes every 24h)
  • OAuth cost tracking: OAuth/subscription requests correctly tracked as $0
  • Rate limit visibility: parses and logs Anthropic rate limit headers, warns when low
  • Prometheus metrics: grob_spend_usd, grob_request_cost_usd, grob_ratelimit_hits_total, grob_ratelimit_tokens_remaining, grob_input_tokens_total, grob_output_tokens_total
  • CI: cargo-audit (security advisories), cargo-deny (licenses/bans), cargo-machete (unused deps)

Fixed

  • Security: HTML-escape OAuth callback parameters to prevent reflected XSS
  • Security: Use constant-time comparison for API key authentication (subtle crate)
  • Security: Redact API keys in /api/config JSON response
  • Security: Remove sensitive data from debug logs (OAuth codes, PKCE verifiers, token responses, upstream bodies)
  • Bug: Default port mismatch (serde default was 3456, docs/template was 13456) -- now consistently 13456
  • Bug: auth_type value in default config template used "api_key" instead of correct "apikey"
  • Bug: grob model hid providers without explicit enabled = true (now uses is_enabled())
  • Bug: Parse errors returned HTTP 500 instead of HTTP 400
  • Bug: SIGCONT used for process existence check instead of signal 0 (no side effects)
  • Docs: Removed all stale Admin UI / web UI / RapidSpec references (no admin UI exists)
  • Docs: Fixed OAuth callback HTML: "admin panel" references changed to "terminal"
  • Docs: Fixed default config template: removed non-existent "web UI" references
  • Docs: Rewrote design-principles.md for CLI-only project (removed Admin UI sections)
  • Docs: Removed Admin UI references from gemini-integration.md
  • Docs: Fixed CONFIGURATION.md values: tracing path, omit_system_prompt default, auto_sync default, auth_type value
  • Docs: Added missing project_id/location Vertex AI fields to CONFIGURATION.md
  • Docs: Fixed OAUTH_SETUP.md: "Future" endpoints label (already implemented), added refresh/delete endpoints
  • Docs: Updated stale model names (claude-sonnet-4-5 → 4-6, claude-opus-4-1 → 4-6) across presets, configs, tests
  • Docs: OpenAI streaming and tool calling marked as unsupported but were implemented
  • Docs: Documented [server.tracing], prompt_rules, inject_continuation_prompt, preset sync_interval/auto_sync
  • Docs: Rewrote CLAUDE.md for actual project architecture (was stale RapidSpec template)

Changed

  • License: Switched from Elastic License v2 (ELv2) to AGPL-3.0 with commercial dual licensing
  • Dependency: metrics-exporter-prometheus now uses http-listener feature only (removes OpenSSL-licensed aws-lc-sys)

Removed

  • Unused dependencies: config, dashmap, oauth2, tiktoken-rs, tokio-stream, tower, tower-http


This PR was generated with release-plz.

@Destynova2 Destynova2 changed the title chore: release v0.8.0 chore: release v0.8.1 Feb 24, 2026
@Destynova2 Destynova2 force-pushed the release-plz-2026-02-24T08-46-59Z branch 2 times, most recently from 3c40125 to 6c2abc2 Compare February 24, 2026 18:44
@Destynova2 Destynova2 changed the title chore: release v0.8.1 chore: release v0.8.0 Feb 25, 2026
@Destynova2 Destynova2 force-pushed the release-plz-2026-02-24T08-46-59Z branch 9 times, most recently from 795ad64 to 9c54d26 Compare February 26, 2026 19:22
@Destynova2 Destynova2 changed the title chore: release v0.8.0 chore: release v0.9.1 Feb 26, 2026
@Destynova2 Destynova2 force-pushed the release-plz-2026-02-24T08-46-59Z branch from 9c54d26 to 58fd596 Compare February 26, 2026 19:29
Destynova2 and others added 3 commits February 26, 2026 21:23
- Switch CI tests to cargo-nextest with ci profile (retries, timeouts)
- Add .config/nextest.toml with dev/ci profiles and serial test groups
- Add insta (snapshot testing) and tracing-test to dev-dependencies
- Add cargo-llvm-cov coverage job with Codecov upload
- Optimize Containerfile with cargo-chef for cached dependency builds
- Replace once_cell::Lazy with std::sync::LazyLock (Rust 1.80+)
- Remove once_cell dependency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
release-plz targets the repo's default branch automatically (develop).
The release_branch field does not exist in release-plz config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Destynova2 Destynova2 changed the title chore: release v0.9.1 chore: release v0.9.0 Feb 26, 2026
@Destynova2 Destynova2 force-pushed the release-plz-2026-02-24T08-46-59Z branch from 58fd596 to 0051274 Compare February 26, 2026 20:30
@github-actions github-actions Bot enabled auto-merge (squash) February 26, 2026 20:30
@github-actions github-actions Bot merged commit 1dcc7c7 into main Feb 26, 2026
11 checks passed
Destynova2 added a commit that referenced this pull request Mar 16, 2026
Resolves 5 Dependabot alerts:
- #3 aws-lc-sys PKCS7_verify certificate chain validation bypass (CVE-2026-3338)
- #4 aws-lc-sys AES-CCM timing side-channel (CVE-2026-3337)
- #5 aws-lc-sys PKCS7_verify signature validation bypass (CVE-2026-3336)
- #1 #2 jsonwebtoken type confusion authorization bypass (CVE-2026-25537)

Also updates fuzz/Cargo.lock (quinn-proto + jsonwebtoken).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Destynova2 added a commit that referenced this pull request Mar 16, 2026
Critical:
- #9 #10: Replace hard-coded HMAC key with random session key when
  GROB_DLP_SECRET is unset (unpredictable pseudonyms by default)

High:
- #11 #12: Cap Vec::with_capacity to 1024 in OpenAI transform
  (prevents uncontrolled allocation from malicious input)
- #17 #18 #19: Add path traversal check in token_store persist()
  (reject ".." in file path)
- #6 #7 #8: Stop logging full response bodies in OpenAI provider
  (log length instead, truncate to 200 chars on parse error)
- #13 #14: Warn at construction if OAuth token_url uses plaintext HTTP
- #15 #16: Warn at construction if Gemini base_url uses plaintext HTTP
  (new warn_if_cleartext() helper in providers/mod.rs)
- #20 #21 #22: Annotate benchmark TLS cert bypass with lgtm comment
  (intentional: benchmarks use self-signed certs)
- #3: Avoid flowing API key through format string in preset info
- #4 #5: Remove secret values from test assertion messages

Medium:
- #1: Add explicit permissions block to release-plz workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Destynova2 Destynova2 deleted the release-plz-2026-02-24T08-46-59Z branch March 30, 2026 19:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant