From 47be53243af091635a12e776f117538e8323ecc7 Mon Sep 17 00:00:00 2001 From: Jurij Skornik Date: Thu, 30 Jul 2026 15:05:39 +0200 Subject: [PATCH] chore(release): bump version set to 10.0.11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the root package and all 20 packages/* workspaces to 10.0.11 in lockstep, per the single-version release set rule in RELEASE_PROCESS.md §3, and add the 10.0.11 CHANGELOG entry. Version-only bump: pnpm-lock.yaml records third-party versions only and is untouched, so `pnpm install --frozen-lockfile` stays valid. `pnpm release:verify-versions --version 10.0.11` passes (21/21). The engines.node ranges added in 10.0.10 on packages/cli and packages/agent are preserved unchanged. CHANGELOG carries an `### Upgrading from 10.0.10` matrix, required by §10 because this release changes the default admission behaviour and error contract of a public HTTP API. Verified in the shipped code: - POST /api/query now defaults to the background store lane (api-query-priority.ts:8,12), reversible via DKG_API_QUERY_PRIORITY (lifecycle.ts:1175, README.md:60). - Under stock tuning that lowers API-read concurrency from 2 to 1: MAX_CONCURRENT=4 less ACK=1 and HEALTH=1 gives totalLimit=2, normalFloor=1, backgroundLimit=max(1, 2-1)=1 (store-priority-scheduler.ts:97-100,177-181). - A shed query now answers 503 + Retry-After: 1 where it previously fell through to a generic 500. No Solidity source, ABI, or deployment-registry changes since v10.0.10, so this release requires no contract deployment. Dashboard SQLite stays at SCHEMA_VERSION 31 — no migration, no rollback question. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 38 ++++++++++++++++++++++++++ package.json | 2 +- packages/adapter-elizaos/package.json | 2 +- packages/adapter-hermes/package.json | 2 +- packages/adapter-openclaw/package.json | 2 +- packages/agent/package.json | 2 +- packages/chain/package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/epcis/package.json | 2 +- packages/evm-module/package.json | 2 +- packages/graph-viz/package.json | 2 +- packages/kafka-plugin/package.json | 2 +- packages/mcp-dkg/package.json | 2 +- packages/network-sim/package.json | 2 +- packages/node-ui/package.json | 2 +- packages/okf/package.json | 2 +- packages/publisher/package.json | 2 +- packages/query/package.json | 2 +- packages/random-sampling/package.json | 2 +- packages/rdf-utils/package.json | 2 +- packages/storage/package.json | 2 +- 22 files changed, 59 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5984d2171..2e6100881 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,44 @@ All notable changes to the DKG V10 node are documented here. The format is based ## [Unreleased] +## [10.0.11] - 2026-07-30 + +A focused stability release on two paths a busy node exercises constantly. One external `/api/query` read could amplify into a planner-stalling query that starved every other subsystem: a caller that had already constrained `GRAPH ?g` to a handful of verified partitions was rewritten with a second `VALUES ?g` carrying the entire allow-list, expanding a 3 KB query to roughly 24 KB and occupying the store for minutes, cascading into queue-wait timeouts across promotion, gossip validation, SWM catch-up, and durable sync. External reads now run on the store scheduler's background lane, a disconnected caller's store work is cancelled instead of orphaned, and the redundant graph rewrite is elided. Separately, the `dkg integration` CLI is brought back into line with the registry's published JSON Schema, which its parser had drifted *stricter* than — so no `manual` entry was readable at all, in either the CLI or the node dashboard's integrations sidebar. The dashboard database stays at 31 — no migration. **No smart-contract changes — no deployment required** (no Solidity source, ABI, or deployment-registry changes since 10.0.10). + +### Upgrading from 10.0.10 + +| Change | Impact | Action | +| --- | --- | --- | +| `POST /api/query` is admitted on the store scheduler's `background` lane | external reads no longer compete for the capacity normal node work depends on. Under stock tuning the background lane admits **one** concurrent store operation where the normal lane admitted two, and API reads now queue behind background node work, so concurrent callers can see higher latency | none for correctness. Set `DKG_API_QUERY_PRIORITY=normal` before starting the daemon to restore 10.0.10 admission. The daemon logs the effective lane once at boot; an invalid value warns and falls back to `background` | +| A query shed before execution returns **503**, previously **500** | the body carries `code: "STORE_SCHEDULER_BUSY"`, `reason`, `priority` and `retryable: true`, with a `Retry-After: 1` header. Shedding is governed by `DKG_STORE_BACKGROUND_QUEUE_LIMIT` and `DKG_STORE_QUEUE_WAIT_TIMEOUT_MS`. Read paths only; write routes are untouched | treat `503` on `/api/query` as retryable and honour `Retry-After`. Clients keying on exactly `500` for overload must be updated | +| A disconnected `/api/query` caller now cancels its store work | the queued or in-flight SPARQL request is aborted instead of running to completion. The operation is recorded as `cancelled`, not `error` | none. A client that times out and retries no longer leaves orphan store work behind it | +| Dashboard operation health excludes cancelled and in-progress rows | `successRate` is now `success / (success + error)` instead of `success / total`, in the summary, the time series and the per-operation breakdown. A new `cancelled` status appears in operation rows and in the Operations page filter | none. Historical rates shift upward where in-progress rows were previously counted as non-successes. No schema migration — the dashboard database stays at 31 | +| `dkg integration` now parses every entry the published registry schema permits | entries the CLI wrongly reported as unreadable appear in `dkg integration list`/`info` and in the dashboard integrations sidebar. `dkg integration install ` prints the entry's `docsUrl` and exits **0**, where 10.0.10 exited 1 | none for the public registry; `list` output and its `--json` shape are unchanged. An operator pointing `DKG_REGISTRY_RAW_BASE` at a private or staging registry must bring entries into line with the published schema: `manual` carries `docsUrl` (not `steps`), and `docker`/`npmGlobal` payloads require `version` | + +### Added + +- **`dkg integration search` and `dkg integration installed`, plus automated `npm-global` service installs** (#1988): `search [keyword]` filters the registry case-insensitively over slug, name, description and category; `installed` reports what is present on this machine, derived from the real install targets (`npm ls -g`, and the MCP client configs `dkg mcp setup` writes) rather than from a ledger that could claim installs that never happened — an entry whose kind cannot be probed reports `unknown` with its own reason, never "not installed". `dkg integration install` now performs `service` entries with `runtime: npm-global` under the same npm provenance gate as `cli` entries; `docker` and `binary` runtimes still exit cleanly pointing at the integration's own instructions. + +### Fixed + +- **One scoped API query no longer stalls the store for every other subsystem** (#1991, #1994): a caller that had already constrained `GRAPH ?g` to a handful of verified Verifiable Memory partitions was rewritten with a second `VALUES ?g` carrying the entire allow-list, expanding the query roughly eightfold and occupying the store until the client deadline, cascading into queue-wait timeouts across promotion, gossip validation, SWM catch-up and durable sync. The redundant injection is now skipped when a simple top-level static `VALUES` names only graphs already inside the allow-list. Scoping stays fail-closed: tuple `VALUES`, variables, literals, `UNDEF`, nested groups, unresolvable prefixes, or any out-of-scope graph all keep the previous intersection rewrite, and result sets are unchanged because a subset intersected with the allow-list is that same subset. +- **A disconnected caller no longer leaves orphan store work, and shutdown drains what is in flight** (#1991, #1994): cancellation, admission priority and a store-work label now travel from the daemon route through the agent and the query engine to the SPARQL adapter, so an HTTP timeout or client disconnect aborts the queued or in-flight request instead of letting it hold a scheduler slot. `SparqlHttpStore.close()` was a no-op — it now aborts and awaits its outstanding work, which is why slow-query completions could previously surface after the daemon had logged `Stopped.` +- **Registry entries the CLI declared unreadable are readable again** (#1988): the integration validator was stricter than the registry's published JSON Schema in three places — `manual` required a `steps` array the schema forbids, `mcp` required the schema-optional `args`, and `service` rejected the schema's `binary` runtime — so no `manual` entry could ever parse. The same parser backs both `dkg integration` and the dashboard integrations sidebar, so both dropped them. Installing a `manual` entry is now the documented success path: print its `docsUrl`, one-liner and security declaration, and exit 0. `info` renders `manual` entries and the `service` `binary` runtime, which previously printed nothing. The invariant is now recorded in code — this validator must never be stricter than the published schema, only more lenient, so an older CLI can still read a newer registry. + +### Changed + +- **`POST /api/query` is admitted as background store work labelled `api.query`** (#1991, #1994): external reads are untrusted and potentially planner-heavy, so they no longer compete for the slots normal node work depends on. `DKG_API_QUERY_PRIORITY=normal` reverts the lane, and pre-dispatch shedding returns `503` with `Retry-After: 1` on the read paths only. Slow-query telemetry now classifies through the canonical SPARQL classifier, so a query behind a `PREFIX`/`BASE` prologue or a comment is attributed as `source=api.query operation=select` instead of `source=unknown operation=unknown`. +- **A cancelled operation is its own dashboard state, not a failure** (#1991, #1994): a request the caller abandoned is recorded as `cancelled` on both the operation and its active phases, the Operations page gains a `cancelled` status filter and colour, and operation health becomes `success / (success + error)` so neither cancelled nor in-progress work counts against the success rate. Additive at the SQL level — the dashboard schema stays at 31, so no migration and no rollback risk. +- **Release version set:** all workspace packages move together to 10.0.11. + +### Deployment + +- **No contract changes in this release.** No Solidity source, ABI, or mainnet/testnet deployment-registry files changed since 10.0.10; nodes can upgrade through the normal npm release path. + +### Known issues + +- The Node runtime floor introduced in 10.0.10 is unchanged and still applies: `@origintrail-official/dkg` and `@origintrail-official/dkg-agent` require a runtime where `node:sqlite` is available unflagged (Node >= 22.13, or >= 23.4 on the 23.x line), `engines` stays advisory under npm and pnpm, and blue-green auto-update does not prove the new slot boots. Check `node --version` before upgrading. + ## [10.0.10] - 2026-07-28 This release lands OT-RFC-64, the public author catalog: a node-local subsystem that announces, discovers, fetches, and verifies another author's finalized Knowledge Assets over five new `/dkg/catalog/1/*` libp2p protocols. It is active by default on every node with a data directory, while authoring, auto-publish, and bootstrap targets stay opt-in. Because its persistence opens before networking, such a node now requires a Node runtime where `node:sqlite` is available unflagged — Node 22.13 or newer, or 23.4 or newer on the 23.x line. The rest is durability hardening on paths that could strand, mis-report, or lose verified work. Two changes are operator-visible: one encoded SWM share or promotion is capped at 4 MiB instead of 10 MB, and the dashboard database migrates 30 → 31. **No smart-contract changes — no deployment required** (no Solidity source, ABI, or deployment-registry changes since 10.0.9). diff --git a/package.json b/package.json index e2143e8ef..82b85289d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dkg-v10", - "version": "10.0.10", + "version": "10.0.11", "private": true, "packageManager": "pnpm@10.28.1", "dkgBuild": { diff --git a/packages/adapter-elizaos/package.json b/packages/adapter-elizaos/package.json index 7147f5696..f353abf10 100644 --- a/packages/adapter-elizaos/package.json +++ b/packages/adapter-elizaos/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-adapter-elizaos", - "version": "10.0.10", + "version": "10.0.11", "description": "ElizaOS plugin adapter — turns any ElizaOS agent into a DKG V10 node", "type": "module", "main": "dist/index.js", diff --git a/packages/adapter-hermes/package.json b/packages/adapter-hermes/package.json index f4ae412d4..40df45a5e 100644 --- a/packages/adapter-hermes/package.json +++ b/packages/adapter-hermes/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-adapter-hermes", - "version": "10.0.10", + "version": "10.0.11", "description": "Hermes Agent adapter — connects Hermes AI agents to a DKG V10 node for verifiable shared memory", "type": "module", "main": "dist/index.js", diff --git a/packages/adapter-openclaw/package.json b/packages/adapter-openclaw/package.json index bbae8c961..86c5630f9 100644 --- a/packages/adapter-openclaw/package.json +++ b/packages/adapter-openclaw/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-adapter-openclaw", - "version": "10.0.10", + "version": "10.0.11", "description": "OpenClaw plugin adapter for connecting a DKG V10 node and chat bridge to an OpenClaw agent", "type": "module", "main": "dist/index.js", diff --git a/packages/agent/package.json b/packages/agent/package.json index 65b39be3f..eda8ae2af 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-agent", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "engines": { "node": ">=22.13.0 <23.0.0 || >=23.4.0" diff --git a/packages/chain/package.json b/packages/chain/package.json index 4cd6a9767..18c3e940a 100644 --- a/packages/chain/package.json +++ b/packages/chain/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-chain", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/cli/package.json b/packages/cli/package.json index c92f80eda..b10920646 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "engines": { "node": ">=22.13.0 <23.0.0 || >=23.4.0" diff --git a/packages/core/package.json b/packages/core/package.json index 23236feeb..8f721f106 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-core", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/epcis/package.json b/packages/epcis/package.json index 342cf12b1..96c5bca1a 100644 --- a/packages/epcis/package.json +++ b/packages/epcis/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-epcis", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/evm-module/package.json b/packages/evm-module/package.json index 5beb94fc1..2015cb607 100644 --- a/packages/evm-module/package.json +++ b/packages/evm-module/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-evm-module", - "version": "10.0.10", + "version": "10.0.11", "description": "DKG V10 smart contracts (forked from V8 dkg-evm-module)", "license": "Apache-2.0", "private": true, diff --git a/packages/graph-viz/package.json b/packages/graph-viz/package.json index dfdaa2757..ae8d078d9 100644 --- a/packages/graph-viz/package.json +++ b/packages/graph-viz/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-graph-viz", - "version": "10.0.10", + "version": "10.0.11", "description": "RDF Knowledge Graph Visualizer — force-directed graph rendering with hexagonal nodes, declarative view configs, RDF-native data loading, and SPARQL-driven views", "type": "module", "main": "./dist/index.cjs", diff --git a/packages/kafka-plugin/package.json b/packages/kafka-plugin/package.json index 116dc074a..e4ec78050 100644 --- a/packages/kafka-plugin/package.json +++ b/packages/kafka-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/kafka-plugin", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/mcp-dkg/package.json b/packages/mcp-dkg/package.json index 9faed3f83..b01341597 100644 --- a/packages/mcp-dkg/package.json +++ b/packages/mcp-dkg/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-mcp", - "version": "10.0.10", + "version": "10.0.11", "description": "MCP server that exposes the local DKG daemon (projects, sub-graphs, activity, chat) to Cursor, Claude Code, and any other MCP-aware coding assistant.", "type": "module", "main": "dist/index.js", diff --git a/packages/network-sim/package.json b/packages/network-sim/package.json index 47daef2d5..9b36ce552 100644 --- a/packages/network-sim/package.json +++ b/packages/network-sim/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-network-sim", - "version": "10.0.10", + "version": "10.0.11", "private": true, "type": "module", "scripts": { diff --git a/packages/node-ui/package.json b/packages/node-ui/package.json index 3cd31b63f..96c7539b2 100644 --- a/packages/node-ui/package.json +++ b/packages/node-ui/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-node-ui", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/okf/package.json b/packages/okf/package.json index 2d64c6da7..b9b088a84 100644 --- a/packages/okf/package.json +++ b/packages/okf/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-okf", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/publisher/package.json b/packages/publisher/package.json index a23b92f16..6a777c241 100644 --- a/packages/publisher/package.json +++ b/packages/publisher/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-publisher", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/query/package.json b/packages/query/package.json index c45494e4a..221e663ff 100644 --- a/packages/query/package.json +++ b/packages/query/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-query", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/random-sampling/package.json b/packages/random-sampling/package.json index 9600c0005..636f4312d 100644 --- a/packages/random-sampling/package.json +++ b/packages/random-sampling/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-random-sampling", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/rdf-utils/package.json b/packages/rdf-utils/package.json index 93bc89dc4..d73387179 100644 --- a/packages/rdf-utils/package.json +++ b/packages/rdf-utils/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-rdf-utils", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/storage/package.json b/packages/storage/package.json index f84a4fb21..c4f574915 100644 --- a/packages/storage/package.json +++ b/packages/storage/package.json @@ -1,6 +1,6 @@ { "name": "@origintrail-official/dkg-storage", - "version": "10.0.10", + "version": "10.0.11", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts",