Skip to content

Release 0.83.0 — free-tier reasoning cap (W3) + scheduler contract (R6) - #246

Merged
harishquantamix merged 1 commit into
masterfrom
release-0830-public-v2
Jul 31, 2026
Merged

harishquantamix merged 1 commit into
masterfrom
release-0830-public-v2

Conversation

@quantamixsol

Copy link
Copy Markdown
Owner

Release 0.83.0 — free-tier reasoning cap (W3) + scheduler contract (R6)

Public port of private #326 (28398970), merged 2026-07-31. Version files are
byte-identical to private/master. 3 files: pyproject.toml, graqle/__version__.py,
CHANGELOG.md. No code changes — the code already landed in #245.

⚠️ Contains a BREAKING CHANGE for the free tier

Reasoning on the free tier is now capped per calendar month; over the cap, calls that
previously succeeded raise ReasoningQuotaExceeded. Paid tiers are unaffected. The
CHANGELOG leads with the notice, names the exception and its import path, and gives the
upgrade path — this is the first release where a previously-working call can fail, so it
is called out at the top rather than buried in a feature list.

What ships

W3 reasoning-quota wall (ADR-245 Decision 8) free monthly cap; gate at the SDK primitive so CLI, MCP, chat and server API are all covered; areason_stream and graq debate carry their own gates (they never reach areason)
CR-010.R6 scheduler contract --headless / --json, normative exit codes, content-hash incremental rebuild

Verified from the built wheel — not source

Built graqle-0.83.0-py3-none-any.whl, installed it into a clean venv, and exercised
the wall end-to-end:

1) free user at cap, enforcement default ON   → BLOCKED  (quota reached: 30/30)
2) old bypass: GRAQLE_QUOTA_DIR repointed to a
   fresh dir + PYTEST_CURRENT_TEST forged      → STILL BLOCKED, resolves .graqle
3) internal=True (sanctioned tooling)          → ALLOWED

Wheel contents confirmed: reasoning_gate.py + reasoning_quota.py ship; the
sys.modules guard is present; the unconditional GRAQLE_QUOTA_DIR override is
gone; month-pruning is in; graqle/cloud/* and graqle/server/* are stripped
(0 entries each).

This closes the one verification gap I had flagged as outstanding: previously only the
wheel's contents were checked, never an actual install.

Ordering

private #325 (back-port of the paywall-bypass fix) was merged before #326, so the
release is cut from a private master that no longer contains the vulnerable
resolve_quota_dir(). Confirmed on private/master: unconditional override gone,
sys.modules guard present, version 0.83.0.

Rule #0

git remote -v run before push. Public cherry-pick authorised only because private
#326 is merged (2026-07-31T12:28:52, base advanced to 9fee93ac). Sequential gate
satisfied.

After merge

Tag v0.83.0 → PyPI publishes → MCP Registry auto-follows.

Known red: Release Gate (PyPI) — documented repo-wide infra flake (FileNotFoundError,
exit 2) that also failed on #243, #244 and #245, all of which merged. Needs an
owner-approved infra fix (empty GRAQLE_LICENSE secret); unrelated to this diff.

🤖 Generated with Claude Code

Version bump only — no source changes. Ships six commits already merged
on public master b79c63d:

  eedc417  CR-010.R6 scheduler contract (graqle/cli/)
  ffeafb7  W3 reasoning-quota wall (ADR-245 Decision 8)
  0d2fc51  W3 move the reasoning wall to the SDK primitive
  4cc7963  W3 test isolation
  888d1e7  W3 review fixes: close the GRAQLE_QUOTA_DIR bypass
  78af189  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 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🛡️ GraQle PR Guardian

💥 Blast Radius: 3 modules affected

Module Files Changed Risk Level Impact Radius
CHANGELOG.md 1 🟡 T2 1
graqle 1 🟡 T2 1
pyproject.toml 1 🟡 T2 1

Total blast radius: 3


🏛️ Governance Verdict

⚠️ WARN

  • T2: Advisory warnings detected. Review recommended.

🔍 SHACL Violations

No SHACL violations detected.


🔐 Approval Requirements

This PR requires approval from: T2

  • A Senior Engineer or above must approve.

Approval requirement NOT yet satisfied.


Metric Value
Blast Radius 3
Files Analyzed 3
Blocked 0
SHACL Violations 0
Verdict WARN

🔬 Powered by GraQle PR Guardian v0.1.0 · Scan completed 2026-07-31T12:34:33.041543+00:00

@harishquantamix
harishquantamix merged commit 16f3f31 into master Jul 31, 2026
19 of 20 checks passed
Sign up for free to 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.

2 participants