From 82b26a224ac9456e81b66a1510cdd2028e6e9cda Mon Sep 17 00:00:00 2001 From: quantamixsol Date: Thu, 30 Jul 2026 21:57:47 +0200 Subject: [PATCH] Release 0.83.0: R6 scheduler contract + W3 free-tier reasoning cap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Version bump only — no source changes. Ships six commits already merged on public master b79c63dd: eedc4175 CR-010.R6 scheduler contract (graqle/cli/) ffeafb73 W3 reasoning-quota wall (ADR-245 Decision 8) 0d2fc516 W3 move the reasoning wall to the SDK primitive 4cc79637 W3 test isolation 888d1e7b W3 review fixes: close the GRAQLE_QUOTA_DIR bypass 78af189c W3 harden the quota-dir guard: sys.modules, not an env var The CHANGELOG entry LEADS with a BREAKING CHANGE block. W3 caps free-tier graph reasoning per month, so calls that previously succeeded now raise ReasoningQuotaExceeded. Paid tiers unaffected. Every API name in that block was verified against source: ReasoningQuotaExceeded is defined in reasoning_quota.py:61 (an earlier draft wrongly said reasoning_gate.py), peek() is a ReasoningQuota method at :166 returning QuotaReading. Sentinel: pass 1 BLOCK (3 blockers) -> pass 2 APPROVE, 0 blockers, 92%. BLOCKER-1/2 breaking-change signalling: REAL, fixed. BLOCKER-3 server.json stale version: REFUTED — publish-mcp-registry.yml rewrites server.json from the tag at publish; the job is gated on a v* tag push, so "skipped" on a branch merge is correct-by-design. Advisory "other 0.82.0 refs": REFUTED — git grep returns only the two bumped files. TS-screen: 0. plan_faa050ba. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 46 +++++++++++++++++++++++++++++++++++++++++++ graqle/__version__.py | 2 +- pyproject.toml | 6 ++++-- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4563fbd..e4d0374 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,52 @@ All notable changes to GraQle are documented in this file. --- +## 0.83.0 (2026-07-30) — [Enterprise: scheduler contract + free-tier reasoning cap] + +> ### ⚠️ BREAKING CHANGE — free tier only +> +> **Graph reasoning on the FREE tier is now capped per calendar month.** Once the cap is reached, +> calls that previously succeeded raise **`ReasoningQuotaExceeded`** +> (`from graqle.licensing.reasoning_quota import ReasoningQuotaExceeded`). This affects +> `graph.reason()` / `areason()` and every CLI path built on them. +> **Paid tiers are unaffected and see no behaviour change.** +> +> **If you are on the free tier, before upgrading:** either handle the exception at your reasoning +> call sites, or move to a paid tier. To inspect usage without consuming quota, +> `ReasoningQuota(graqle_dir).peek()` returns a `QuotaReading(used, limit, month, allowed)` +> (`limit == -1` means unlimited). Unattended jobs are the exposed case — an uncaught +> `ReasoningQuotaExceeded` will fail the run rather than degrade quietly. + +> The other half of this release is additive: it makes the CLI drivable by a scheduler rather than +> only by a human. That part is **opt-in** — bare `graq rebuild` is unchanged from 0.82.0. + +### Enterprise (CR-010 Enterprise Enhancement Program) + +- **Scheduler-grade pipeline contract (R6)** — `graq rebuild` and `graq govern serve --once` can now be + driven unattended by cron, Airflow or GitHub Actions. New `--headless`, `--json`, `--report-json` and + `--incremental` flags on `graq rebuild`, and `--json` / `--report-json` on `govern serve --once`. + Runs are idempotent, non-interactive and exit-coded: `0` success, `1` failure, `2` usage error, + `3` empty delta (nothing to rebuild). `--report-json` writes a frozen `RunReport` atomically, so a + scheduler never observes a half-written report. Incremental rebuilds skip unchanged content by hash. +- **Root defect fixed (opt-in)** — `graq rebuild` previously exited `0` even when the graph file was not + found, because Typer discards command return values. The corrected exit codes apply on the **machine + paths only** (`--headless` / `--json` / `--report-json`). Bare `graq rebuild` keeps its existing exit + behaviour and emits a stderr `DeprecationWarning`; whether it adopts the corrected codes is deferred + to a future release. + +### Monetisation + +- **⚠️ Reasoning-quota wall (ADR-245 Decision 8)** — the **free tier now has a monthly cap on graph + reasoning**. Existing free-tier users who exceed the cap will see `ReasoningQuotaExceeded` where calls + previously succeeded. Paid tiers are unaffected. The counter is per-month and self-pruning (13 months + retained). +- The quota meter is deliberately **not** relocatable from the environment. `GRAQLE_QUOTA_DIR` is honoured + only inside a real pytest process (detected via `sys.modules`, not a self-attested environment + variable), so it cannot be used as a paywall bypass. This follows the same rule that makes + `quota_exempt()` refuse `CI=true`: self-attested environment exemptions are not entitlement. + +--- + ## 0.82.0 (2026-07-28) — [Enterprise: frozen proof spec + conformance suite] > Publishes GraQle's tamper-evidence proof format as an independently versioned, third-party-implementable diff --git a/graqle/__version__.py b/graqle/__version__.py index 6be85ff..0491251 100644 --- a/graqle/__version__.py +++ b/graqle/__version__.py @@ -5,4 +5,4 @@ # constraints: none # ── /graqle:intelligence ── -__version__ = "0.82.0" +__version__ = "0.83.0" diff --git a/pyproject.toml b/pyproject.toml index 08e6560..c9553d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,14 +5,16 @@ build-backend = "hatchling.build" [project] name = "graqle" # V-ADR240-DELTA: native version bump (G4 config, CG-14 native-edit precedent). -# 0.79.0 = ADR-242-A1 CR-SEED-02: graqle.workflow.seed — seed a project graph +# 0.83.0 = CR-010 R6 scheduler contract (--headless/--json/--report-json, +# exit codes 0/1/2/3) + ADR-245 W3 reasoning-quota wall (free monthly cap on +# graph reasoning). 0.79.0 = ADR-242-A1 CR-SEED-02: graqle.workflow.seed — seed a project graph # from goal + build profile + source chunks before any code exists, and the # flat-scanner-shape serializer for raw-dict graph consumers; additive, # backward-compatible, no IP concern. 0.78.0 = ADR-240 D1+D2: BackendRaceChain # (first-to-finish/best-of-N) + CostAwareRouter (auto cost/latency selection) — # dual-provider autonomy. 0.77.0 = ADR-239 Stage 2 # (CheckpointProtocol + run_tests). 0.76.0 = ADR-225 G1 multi-tenant memory. -version = "0.82.0" +version = "0.83.0" description = "Give your AI tools architecture-aware reasoning. Build a knowledge graph from any codebase — dependency analysis, impact analysis, governed AI answers with confidence scores. Works with Claude Code, Cursor, VS Code Copilot. 14 LLM backends, fully offline capable." readme = "README.md" license = {text = "Apache-2.0"}