Releases: quantamixsol/graqle
v0.56.0 — EU AI Act Wave 1 [CR-009]
First developer reasoning SDK with EU AI Act–aligned compliance surface.
Seven articles documented (4, 12, 13, 14, 15, 25, 50) + explicit out-of-scope (5, 53, 55, 16–22, Annex VII).
New CLI surfaces
graq compliance status [--include-robustness --format json]
graq compliance export --since YYYY-MM-DD -o evidence.jsonl --sha256-sidecar
New runtime
GRAQLE_EU_AI_ACT_MODE=onarms Article 50(1) banner + machine-readableai_disclosureenvelope field.GRAQLE_AI_DISCLOSURE=offsuppresses banner only (machine field still emits for M2M pipelines).
Positioning discipline (enforced in code)
- GraQle is NOT itself a high-risk AI system (no Annex III).
- GraQle is NOT a GPAI provider under Article 51 (third-party LLMs).
- We provide signals + audit primitives. We never say compliant or certified.
TestNonClaimsInvariantsblocks any release that introduces those strings.
Compatibility
- Zero behaviour change when
GRAQLE_EU_AI_ACT_MODEis off (default). - Additive contract: existing consumers see bit-for-bit unchanged envelopes.
- No breaking changes from v0.55.0.
Tests
- 218 new compliance-specific tests across 6 files.
- 5,500+ total tests passing on Python 3.10 / 3.11 / 3.12.
Documentation
docs/compliance/eu-ai-act/— 9 articles + out-of-scope, every claim cited against Regulation (EU) 2024/1689.
Provenance
Public rollup of CR-009 private PRs #102/#103/#104/#105/#106. Public PR #140. Private rollup PR #107.
Install
pip install graqle==0.56.0v0.55.0 — Reasoning Honesty + Cross-Project Reliability
GraQle v0.55.0 — Reasoning Honesty + Cross-Project Reliability
Five CRs roll up into one release. Graph-health surfacing on every reasoning envelope (CR-004), the cross-project
WRITE_COLLISIONphantom-error fix that affected every Neo4j-backedgraq_learncall (CR-008), the unified config resolver promoted to default-ON with 13 internal call sites migrated (CR-002), defensive guards against silent edge-loss regressions (CR-003), and a TOCTOU-safestdout_pathparameter ongraq_bashthat closes the long-standingcmd > file.logsilent-failure ergonomics class (CR-005a). All shipped under the new BAU CR process.
Install
pip install --upgrade "graqle==0.55.0"Breaking change
GRAQLE_USE_RESOLVER default flipped from OFF to ON (CR-002 PR-002c-2b). The resolver is now the canonical config-loading path; submodule-aware ancestor walk for graqle.yaml works automatically.
Soft revert: set GRAQLE_USE_RESOLVER=0 (or false / no, case-insensitive) to opt OUT and fall through to the legacy GraqleConfig.from_yaml() path. The resolver-compat helper has a try/except resolver→legacy fallback, so this flip is safe even in environments with a misconfigured resolver — worst case is silent fall-through to the prior behaviour.
Highlights
🩺 Reasoning Honesty — CR-004
Every graq_reason / graq_predict / graq_safety_check envelope now carries an explicit graph_health snapshot:
{
"answer": "...",
"confidence": 0.92,
"graph_health": {
"node_count": 1234, "edge_count": 8901,
"chunks_unembedded": 0, "percent_stale": 0.0,
"activation_mode": "semantic",
"degraded": false, "reason": null,
"schema_version": "1"
}
}When the graph is degraded, the CLI prints a yellow ⚠ degraded reasoning: … banner before the answer. Probe is contractually never-raises (3-deep defence), adds < 5 ms p95 to envelope build (CI fail-gate). Configurable thresholds: graph_health.stale_chunks_threshold (500), graph_health.edge_node_ratio_threshold (0.5), graph_health.zero_edges_is_degraded (true).
🛠️ Cross-Project WRITE_COLLISION Fix — CR-008
Every graq_learn call on a Neo4j-backed session was returning phantom WRITE_COLLISION even though no write was ever attempted. Replaced ambiguous tuple[bool, int] return with SaveGraphResult + SaveStatus enum (OK / NO_GRAPH_FILE / SHRINK_REFUSED / COLLISION / SAVE_FAILED). NO_GRAPH_FILE folds into recorded=True because the in-memory + backend write already happened. Every project using bolt://... in graqle.yaml benefits — no client migration needed.
🔧 Unified Config Resolver — CR-002
load_via_resolver_or_legacy helper introduced; 13 internal --config typer call sites migrated. GraqleConfig.from_yaml deprecation-warning block delegates to is_resolver_enabled() so both entry points stay in lock-step.
🛡️ Defensive Edge-Loss Guards — CR-003
Hardened guards against the silent edge-loss regression that affected installs between v0.46 and v0.53. Graqle.to_json refuses to shrink edge count by > 10% on graphs with > 100 baseline edges. Neo4j schema parity restored. New scripts/bisect_edge_loss.py utility.
📝 graq_bash stdout_path — CR-005a
graq_bash("cmd > file.log") used to produce empty files because the subprocess shell is sandboxed. New optional stdout_path parameter writes the FULL untruncated stdout to disk atomically. TOCTOU-safe validation (canonicalise → relative_to project_root → defence-in-depth dotdot check). Parent dirs auto-created. Failure isolation — file I/O OSError never masks the subprocess result.
Test count
5,500+ tests across Python 3.10 / 3.11 / 3.12. ~100 new tests this release.
Rollback
Every CR is independently revertable:
| CR | Soft revert (no code change) |
|---|---|
| CR-002 | GRAQLE_USE_RESOLVER=0 |
| CR-003 | GRAQLE_ALLOW_EDGE_SHRINK=1 |
| CR-004 | graph_health.zero_edges_is_degraded: false |
| CR-005a | Omit stdout_path from graq_bash calls |
| CR-008 | Additive — back-compat shim accepts legacy (bool, int) tuples |
What's next
- EU AI Act Wave 1 kicks off immediately following this release — reasoning-honesty foundations from CR-004 will plug directly into Article 13 transparency obligations and Article 12 audit trail requirements.
- Full release notes: CHANGELOG.md § 0.55.0
🤖 Built on the new BAU Change Request process.
v0.54.0 — Defensive Edge Guard + Config Resolver [bau-edge-guard-resolver]
0.54.0 (2026-05-12) - [bau-edge-guard-resolver]
Defensive guards stop silent edge-loss + a unified config resolver lands behind a feature flag. First release under the new BAU (Business As Usual) Change Request process. Two surgical, additive changes from third-party sister-team feedback (BHG epic, 2026-05-09): a
to_jsonguard that refuses to silently drop edges (the v0.46→v0.53 regression mode), and the foundation module for unifying 14+ scatteredgraqle.yamlresolution sites.
Added
-
EdgeShrinkError,GraphSchemaError,GraphFileTooLargeErroringraqle/core/exceptions.py. Inherit fromGraqleError.EdgeShrinkErrorcarriesold_edges,new_edges,threshold, andallow_flagattributes; division-by-zero-safe message formatting. -
Symmetric
linksvalidation in_validate_graph_data(graqle/core/graph.py). Previously the validator checkednodesexistence/type but ignoredlinksentirely — the structural asymmetry that allowed the v0.46→v0.53 silent edge-loss regression to ship undetected. Nowlinks(or itsedgesalias) must be a list, validated symmetrically with nodes. Refuses{"nodes": [N>0], "links": []}unless explicitmetadata: {single_node: true}marker. -
Edge-shrink guard on the
Graqle.to_jsonwrite path. When the existing on-disk graph has more than 100 edges AND the new graph would drop edges by more than 10%,EdgeShrinkErroris raised with a clear remediation message. The 100-edge floor avoids spurious raises on small graphs and legitimate sparse-graph workflows. -
GRAQLE_ALLOW_EDGE_SHRINKenvironment variable as the audit-logged override. Strict allow-list: only1,true,yes(case-insensitive). Invalid values log a warning and are treated as not-allowed. The override path emits a singlelogger.warningaudit line (EDGE_SHRINK_ALLOWED file=<basename> old=<N> new=<N> user_hash=<sha256[:8]> pid=<N>) for SOC2 § 6.3 change tracking. OWASP A09:2021-safe: no rawUSER/USERNAMEin logs, no full filesystem path — onlybasename(path)and a SHA-256-truncated user hash. -
graqle/config/resolver.py— new unified config resolver module behind theGRAQLE_USE_RESOLVERfeature flag (defaultFalse— inert until callers migrate in a follow-up release). Provides:resolve_config(start, max_depth=10)— ancestor walk forgraqle.yamlwith submodule fallback (when nested.graqle/directory has no yaml, falls through to a parent's yaml and records bothproject_rootandparent_root).resolve_neo4j(cfg, **explicit)— explicit auditable priority chain:explicit > env > yaml > defaultwith asourcefield on the returnedNeo4jParamsrecording which layer won.resolve_project_root(start, max_depth=10)— first ancestor withgraqle.yamlor.graqle/.is_resolver_enabled()— reads the feature flag.ALLOWED_URI_SCHEMES = {bolt, neo4j, https, file}— positive allow-list (not deny-list) closing the case/encoding/Unicode-bypass class.SecretStr— constant-time__eq__viahmac.compare_digest, repr/str never reveal contents,__slots__blocks accidental attribute assignment.- Frozen dataclasses
ResolvedConfig+Neo4jParams.
-
graqle/config/exceptions.py— new file. 6 subclasses ofGraqleConfigError:ConfigNotFoundError,ConfigPathError,ConfigYamlError,ConfigPermissionError,ConfigLockError,ConfigSchemeError. -
_assert_not_uri_pathin the resolver — detects bothscheme://...and thescheme:opaque-dataform (javascript:alert(1),data:text/html;base64,...) whichurlparsecorrectly recognises as having a scheme even without//. Includes a Windows-drive-letter guard soC:\\Users\\...is not mis-parsed as a URI. -
Ancestor walk safety —
max_depth=10bound, symlink-cycle detection via aseen: set[Path]of resolved paths, halt atPath.home()boundary, all paths canonicalised viaPath.resolve(strict=False)before any disk access. -
Round-trip property test suite (
tests/test_core/test_persistence_round_trip.py) — 8 tests, parametrized across 5 graph fixture sizes (5, 50, 100, 500, 1000 nodes) verifyingGraqle.from_json(p).to_json(p2)preserves node count, edge count, and entity-type distribution exactly. -
Edge-shrink boundary tests (
tests/test_core/test_validate_graph_data_edge_shrink.py) — 27 tests covering: symmetric validation, threshold boundary (exactly 10% loss = allowed, 10.1% = blocked), small-graph grace period, env-var allow-list (case-insensitive, whitespace-stripped, invalid-value warning), division-by-zero defence, OWASP A09 audit-log PII regression test (raw USER/USERNAME and full path must NOT appear in audit lines). -
Resolver test suite (
tests/test_config/test_resolver.py) — 71 tests across 14 classes coveringSecretStr(masking, constant-time eq,__slots__),ResolvedConfigvalidation,Neo4jParamsmasking, URI safety (allow-list + bypass class withjavascript:/data:/vbscript:/mailto:/ftp:without slashes),resolve_project_rootancestor walk,resolve_configincluding submodule fallback,resolve_neo4jfull priority chain, feature-flag toggling, home-redaction helper, end-to-end integration.
Fixed
- Silent edge-loss regression introduced between v0.46 and v0.53. Symptom (BHG epic 2026-05-09, feedback #10): a
graqle.jsonwith 22,516 nodes and 0 edges. Root cause is being bisected separately (PR-003b); this release adds the defensive guard that makes the failure mode loud rather than silent. A graph that legitimately needs to drop edges by more than 10% (e.g.graq scan --fullon a dramatically-trimmed source tree) now requiresGRAQLE_ALLOW_EDGE_SHRINK=1and audit-logs the override.
Changed
Graqle.to_jsonwrite path now refuses silent edge loss. This is a behaviour change but only for the failure-mode CR-003 fixes. Existing healthy callers (where edge counts are stable or growing) see no behavioural difference.
Notes — BAU process
This is the first release shipped under the BAU (Business As Usual) Change Request process launched 2026-05-09. Every non-trivial change is now documented as a CR with explicit scope, evidence, PR strategy, test strategy, rollback procedure, and acceptance criteria. The full CR set for this release:
CR-001-bau-charter— the BAU process charter itselfCR-002-unified-config-resolution— the resolver work (PR-002a here; PR-002b follow-up migrates the 14 call sites)CR-003-kg-persistence-schema-parity— the persistence guards (PR-003a here; PR-003b bisect, PR-003c root-cause fix, PR-003d schema parity inneo4j-importare follow-ups)CR-004-reasoning-honesty— graph-health surfacing (next release)CR-005-tool-ergonomics—graq_bashimprovements (next release)
Migration notes
If graq scan --full or graq grow returns EdgeShrinkError, run with GRAQLE_ALLOW_EDGE_SHRINK=1 once to record an audit line and proceed. If you see this on a graph you believed was healthy, run graq audit --fail-on-zero-edges to confirm whether you've been silently hit by the v0.46→v0.53 regression.
graqle v0.53.1 — Codex MCP Installer
graqle v0.53.1 — Codex MCP Installer
One command installs GraQle into Codex. Plus a full Neo4j import pipeline and a fix for the invisible permission dialog stalling VS Code sessions.
Install / Upgrade
pip install "graqle==0.53.1"New: Codex One-Command Setup
graq mcp install codex
graq mcp doctor codexgraq mcp install codex auto-detects Codex CLI, resolves absolute graqle.yaml path (relative paths silently fail in global MCP entries), and runs codex mcp add graqle -- graq mcp serve --config <abs_path>. Supports --mode read-only for safe parallel Claude + Codex sessions. Env vars preserved with JSON-safe serialization.
graq mcp doctor codex runs an 8-point health checklist: Codex on PATH → version → graqle listed → graq binary → yaml exists → env JSON valid → server importable → serve responds.
New: MCP Management Commands
| Command | What it does |
|---|---|
graq mcp tools [--json] |
Lists all 80+ MCP tools; queries live server or falls back to static registry |
graq mcp sessions |
Running MCP server PIDs + versions |
graq mcp locks |
KG write locks currently held |
New: Neo4j Full Import
graq neo4j-import # full KG → Neo4j with embeddings
graq neo4j-import --dry-run # preview without writingBulk-transfers the KG in configurable batches: nodes with 1024-dim embeddings, edges, uniqueness constraint, cosine vector index. Validates counts and runs a live vector search after import.
Required env vars: NEO4J_URI, NEO4J_USERNAME, NEO4J_PASSWORD, NEO4J_DATABASE.
Fixed: VS Code Permission Dialog
The governance gate template now ships with permissions.allow pre-populated for all graq_* / kogni_* MCP tools. Previously Claude Code would silently wait for a permission dialog that never rendered in the VS Code extension, causing sessions to appear stuck.
Existing gate installations: run graq gate-install --force once to apply.
Full changelog: https://github.com/quantamixsol/graqle/blob/master/CHANGELOG.md
v0.52.0a3 - HOTFIX: restore missing graq_route schema (CG-19)
graqle 0.52.0a3 — HOTFIX for 0.52.0a2
--pre pre-release. Normal pip install graqle continues to install 0.51.6 stable. To pull this alpha: pip install --pre graqle==0.52.0a3.
What's fixed
0.52.0a2 shipped CG-19 half-implemented. The _handle_route handler contained the new validation + filter logic, but the graq_route tool schema in TOOL_DEFINITIONS was never updated — so MCP clients could not invoke the new available_tools / permission_tier parameters. This hotfix restores the schema so CG-19 is fully usable.
Changes
- Restored the CG-19 schema additions on
graq_route:available_tools— array of string (optional, advisory-only)permission_tier— enumADVISORY/ENFORCED(optional)
- Added 4 schema-shape regression tests in
test_cg19_routing_gate.pythat assertTOOL_DEFINITIONS["graq_route"]["inputSchema"]["properties"]has the new params with correct types — would have caught the original bug - Version bump
0.52.0a2→0.52.0a3 - Build fix: re-removed the duplicate
claude_gateforce-includeinpyproject.toml(private branch had still had it; causes PyPI wheel-dupe 400 otherwise)
Verification
- Fresh
pip install --pre graqle==0.52.0a3in clean venv TOOL_DEFINITIONS["graq_route"]["inputSchema"]["properties"]now =['available_tools', 'permission_tier', 'question']permission_tier.enum=['ADVISORY', 'ENFORCED']- 21/21 scoped regression tests pass (17 original CG-19 + 4 new schema-shape)
- Wheel build: 446 entries / 446 unique / 0 duplicates
Supersedes
graqle 0.52.0a2 is superseded by this release. Users on --pre should upgrade to 0.52.0a3 to use the CG-19 graq_route capability filter.
Root cause (captured as cross-session lesson)
graq_edit(strategy=literal) returned success: true on the original schema edit but silently did not persist to disk. Handler-only tests passed because they bypassed the schema entirely. Going-forward rule: every graq_edit is disk-verified before the next step; every MCP feature ships two tests (handler-behavior + schema-shape).
🤖 Generated with Claude Code
v0.52.0a1 - Wave 1 alpha (Pre-Reason Activation, Fast-Path, Release Gate, Memory/Bash/Read/Git gates, VSCE Check, Worktree GRAQ.md, Init CLI)
graqle 0.52.0a1 — Wave 1 alpha
First alpha pre-release for the v0.52.0 series. Invisible to default pip install graqle — this release requires --pre:
pip install --pre graqle==0.52.0a1Users on the stable channel stay on 0.51.6.
What's new
Pre-reason activation layer
SemanticChunk scoring + safety gate + predictive subgraph activation runs before the LLM planner on every chat turn. ADVISORY tier emits an upgrade chip; ENFORCED tier hard-blocks low-safety turns. Flag pre_reason_activation_enabled defaults ON with a CI regression guard; env override GRAQLE_PRE_REASON_ACTIVATION=0 forces OFF.
Impact-radius fast-path
Chat intents classified as zero-impact file creates bypass the full reason/generate/review pipeline and dispatch directly through graq_write, dropping round-trip time from ~75 s to ~0.3 s. Flag fast_path_enabled defaults ON.
graq_release_gate MCP tool + CLI + GitHub Action
Composes review + reason into a single {CLEAR, WARN, BLOCK} verdict on diffs or target versions. Ships as a reusable GitHub Action in action/release-gate/.
graq_memory MCP tool
Governed read / write / update-index for memory-path files. Closes the native-Write bypass vector into ~/.claude/projects/*/memory/.
Bash gate (CG-09), Read gate (CG-10 global-scope), Git gate (CG-11)
Native Bash / Read / git calls are now routed through governed graq_* equivalents instead of bypassing the gate chain.
graq_vsce_check MCP tool
Queries the VS Code Marketplace API to prevent duplicate-tag CI failures before git push v*.
Worktree GRAQ.md inheritance
GraqMdLoader now walks the main-repo chain when invoked from a git worktree (detects .git as a file with a gitdir: pointer). Fail-closed on malformed inputs. Worktree-local GRAQ.md still wins by most-specific-rule precedence.
graq init CLI + auto-scaffold
Detects project type (Python, TS, JS, Rust, Go) and writes a project-local GRAQ.md policy file. Auto-fires from graq scan repo . when missing.
Wave-1 BLOCKER hardening
7 post-implementation review fixes spanning mcp_dev_server import fixes, tool-inventory version, engine threshold lookup, target normalization, activation contract, fast-path containment.
Alpha validation harness
tests/test_alpha_validation/ — 13 binary gates, one per Wave 1 feature. Each gate is independently verifiable using the public API only.
Release discipline
- PEP 740 trusted-publisher OIDC (no
PYPI_API_TOKENsecret) - Sigstore-signed wheel + sdist, CycloneDX SBOM, attached below
skip-existing: trueon upload keeps the tag idempotent
Verification
- Installed from PyPI in a fresh venv:
graqle.__version__→0.52.0a1 - All Wave 1 import paths work:
graqle.activation,graqle.release_gate,graqle.chat.fast_path - Fresh-venv Wave 1 scoped pytest: 319 passed, 4 skipped, 0 failures (12.12 s)
- CI full test matrix on Python 3.10 / 3.11 / 3.12 + Ubuntu/Windows smoke: all green
- MCP Registry auto-refresh: success
🤖 Generated with Claude Code
v0.51.6 - Neo4j first-class + chat MCP registration + KG-write self-race fix
v0.51.6 — Neo4j first-class + chat MCP registration + KG-write self-race fix
Grep-tag: unblocks-vscode-pivot
Correctness
Graqle.from_neo4jis read-only by default. Pre-v0.51.6 silently mirrored the loaded graph tocwd/graqle.jsonon every call — under some parity-testing setups this wrote over the live graph file. New default:mirror_to=None. Explicit opt-in withmirror_to=<path>+ newmirror_overwrite=Falseguard raisesFileExistsErrorrather than clobbering. Latent bug fixed:graph.save()(non-existent) →graph.to_json().WRITE_COLLISIONself-race eliminated. v0.51.5 retry envelope blamed "another MCP client" even on single-client sessions — the server was racing itself. Fix: module-levelthreading.RLockper absolute graph path acquired before the OS file lock; re-entrant sograq_predict → auto_grow → graq_learnchains no longer deadlock. Retry backoff jittered to random uniform [50, 250] ms. Error message rewritten to name the actual caller.- Neo4j migrator handles arbitrary node/edge properties (JSON-encodes nested values) and routes
chunksto:Chunknodes via[:HAS_CHUNK]edges instead of crashing.
New capabilities
graq_chat_turn/graq_chat_poll/graq_chat_resume/graq_chat_cancelMCP tools registered. Handlers shipped ingraqle/chat/mcp_handlers.pysince v0.51.4 but were dormant due to missing MCP registration. Unblocks VS Code extension v0.4.9 pivot. +4kogni_chat_*aliases.graq_kg_diagMCP tool. Returns recent KG-write latencies, attempts, caller stacks, and current lock holders. CG-01 exempt so it works beforesession_start. Read-only, no I/O.ChatConfigdataclass inGraqleConfig. Optionalchat:block ingraqle.yaml. Backward-compat.
Build / docs
- MCP tool inventory at build time.
scripts/generate_mcp_inventory.pyemitsgraqle/docs/mcp-tool-inventory-v0.51.6.md, shipped in the wheel.--checkflag for CI drift gate. - Tool count 138 → 148 (+8 chat, +2 diag).
Testing
- 693/693 passing on the scoped regression matrix (
test_core + test_connectors + test_config + test_kg_writes + test_plugins + tests/integration). 30+ new tests added: self-race regression (100-call no-collision gate), read-onlyfrom_neo4jcontract, ChatConfig defaults + YAML, migrator property-sanitization, backend parity harness.
Install
pip install graqle==0.51.6
Signed wheel + sdist + SBOM attached. Verify with graq trustctl verify or standard Sigstore tooling.
Hotfix included
hotfix(v0.51.6):TestMigrateJsonToNeo4jclass now gated onneo4jdriver availability so CI matrix entries without thegraqle[api]extra skip cleanly instead of failing withModuleNotFoundError.
v0.51.0 - governance hardening + systematic sanitization + 6 CLI commands
Complete SDK closure for VS Code extension team. See CHANGELOG.md for full details. Install: pip install --upgrade graqle
v0.50.1 - scrub-and-gate hotfix
v0.50.1 — scrub-and-gate hotfix
Hotfix release closing every CRITICAL + HIGH finding from the v0.50.0 public-disclosure audit, plus the 3.11-CI jsonschema regression and PyPI packaging regression surfaced during the public merge.
Install
pip install --upgrade graqleFixes
| Area | Description |
|---|---|
| Governance module | Sanitize graqle/core/governance.py pattern references. Internal helper renames (_check_ts_leakage → _check_pattern_leakage, etc.) with backward-compat aliases so existing tests still import cleanly. 120/120 governance tests pass. |
| Chat floor template | Scrub the ChatAgentLoop v4 built-in floor template and the TCG seed of internal-IP disclosures and internal tracker IDs. Structural invariants preserved (67 tools / 20 intents / 8 workflows / 20 lessons / 171 edges). Add a repo-root /GRAQ.md walk-up extension for SDK-local developer rules (not shipped in the wheel). |
| Star import | Fix from graqle import * raising AttributeError. __all__ previously listed "GraQle" (mixed case) while the real class is Graqle. |
| Windows gate installer | graq gate-install now probes for a working Python 3 interpreter (sys.executable → python3 → python → py -3), skips the Windows Store Python stub, and substitutes the resolved interpreter into the generated settings.json. New --fix-interpreter flag rewrites only the hook command on existing installs. |
| Gate install self-test | After installing, the installer runs the hook with a synthetic Bash payload and requires exit 2 + "GATE BLOCKED" on stderr. Broken installs now fail loudly with a remediation hint instead of silently succeeding. |
| Gate hook fail-closed | The shipped governance gate hook now fails closed on unknown write-class tools via a regex heuristic `^(Write |
| graq init auto-gate | graq init now auto-installs the Claude Code governance gate when Claude Code is detected (.claude/ in project or home directory). Opt out with --no-gate or GRAQLE_SKIP_GATE_INSTALL=1. |
| Distribution lint | New tests/test_distribution/test_no_internal_strings.py regression guard with a hard assertion on the four v0.50.1-sanitized files and a package-wide advisory baseline for the remaining pre-existing internal references, scheduled for systematic sanitization in v0.51.0. |
Verification
- CI green on
ba383280across Python 3.10 / 3.11 / 3.12, pip-audit, and smoke-test matrix - Post-publish dogfood smoke from a clean
pip install graqle==0.50.1venv: 12/12 checks green from graqle import *→ worksgraq gate-install /tmp --force→ installs + self-testexit=2 GATE BLOCKED- Installed hook on unknown
DeleteDatabase→ exit 2 (fail-closed)
See CHANGELOG.md for full details.
Published via OIDC Trusted Publishing on tag push.
v0.40.2 — Research Backlog + CI Fixes
v0.40.2
Complete research backlog (R2–R11) + CI fixes.
What's New (since v0.39.1)
- R2 Cross-KG Bridge Edges
- R3 MCP Protocol Domain
- R5 Cross-Language MCP Linker
- R6 Learned Intent Classification (2 patent claims)
- R9 Federated Activation (2 patent claims)
- R10 Embedding Space Alignment (2 patent claims)
- R11 Confidence Calibration — 200-question benchmark (2 patent claims)
Fixes in v0.40.2
- AGREEMENT_THRESHOLD: added missing
import os, fixed default 0.0→1.0 - TS-2: redacted proprietary values from test files
- IP gate: workflow triggers on master + main branches
- Repo: removed non-core content (marketing, docs, social-media)
Install
```bash
pip install graqle==0.40.2
```