From efa7a9c84bc4800efba5cae409d2dcb4a3ab260d Mon Sep 17 00:00:00 2001 From: Dmitry Voropaev Date: Sun, 21 Jun 2026 23:18:19 +0300 Subject: [PATCH] chore(release): v0.3.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cut v0.3.0 — the work merged since v0.2.0: - deterministic entities extractor + cross-file related_entity grounding, its Tier-1 gate, and Tier-3 entity questions; - nightly LLM-judged A/B (kb.llm, key-gated, non-gating); - Docker image (slim + -embed) + docker-compose + GHCR build/publish CI; - `kb migrate` CLI. CHANGELOG [Unreleased] -> [0.3.0] (2026-06-21) + a fresh [Unreleased]; pyproject 0.2.0 -> 0.3.0 with uv.lock refreshed (uv sync --frozen passes, so the Docker build on the tag stays green); README Status + DESIGN banner bumped to v0.3. No code changes. ruff + mypy --strict clean; 52 eval tests pass (+1 skipped). --- CHANGELOG.md | 10 ++++++++-- DESIGN.md | 9 +++++---- README.md | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6059090..99f3001 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- (nothing yet) + +## [0.3.0] - 2026-06-21 + +### Added + - **Docker** (`Dockerfile`, `docker-compose.yml`, `.github/workflows/docker.yml`): a multi-stage, uv-based image published to GHCR (`ghcr.io/v0ropaev/knowbase`) — `:edge` from `master`, semver + `:latest` on `v*` tags, multi-arch amd64+arm64. The **slim** default image carries `index` / @@ -16,7 +22,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `docker compose` brings up a `pgvector` Postgres + the CLI for local dev/eval. CI build-validates on PRs (hadolint + build, no push) and publishes on master/tags. - **`kb migrate`** CLI command: applies the Alembic schema to `head` (`--db-url` or `KB_DB_URL`). - - **Deterministic entities extractor** (`kb.extract.deterministic.entities`): a fully static (tree-sitter) extractor that emits one `entity` artifact per domain class — pydantic `BaseModel`, `@dataclass`, and SQLAlchemy declarative model — with its fields, grounded on the class-definition @@ -104,6 +109,7 @@ freshness). import oracle, Tier-4 one-hop invalidation, and the store/provenance invariants — run in CI against a PostgreSQL 17 service. -[Unreleased]: https://github.com/v0ropaev/knowbase/compare/v0.2.0...HEAD +[Unreleased]: https://github.com/v0ropaev/knowbase/compare/v0.3.0...HEAD +[0.3.0]: https://github.com/v0ropaev/knowbase/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/v0ropaev/knowbase/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/v0ropaev/knowbase/releases/tag/v0.1.0 diff --git a/DESIGN.md b/DESIGN.md index 4063dd6..962edde 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,11 +1,12 @@ # knowbase — Design -> Status: **agreed MVP design**, implemented through **v0.2**. This document is the source of truth +> Status: **agreed MVP design**, implemented through **v0.3**. This document is the source of truth > for the architecture. It supersedes the original free-form spec. Load-bearing decisions that are > expensive to change later are marked **[LOCKED]**; everything else is revisable. The MVP vertical -> slice in §8 has shipped (provenance spine, import + FastAPI extractors, the sandboxed openapi oracle, -> the read-only MCP server, pgvector embeddings/search, and the RAG A/B gate); items still labelled -> *deferred* below remain so. +> slice in §8 has shipped (provenance spine, import + FastAPI + domain-entity extractors — the latter +> with cross-file `related_entity` grounding, the sandboxed openapi oracle, the read-only MCP server, +> pgvector embeddings/search, the RAG A/B gate plus a nightly LLM-judged A/B, and published Docker +> images); items still labelled *deferred* below remain so. --- diff --git a/README.md b/README.md index c2af168..923fb96 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ flowchart LR ## Status -**v0.2 — spine + the first knowledge extractors, MCP serving, and the knowledge-vs-RAG gate.** Everything here grounds what it claims, and nothing it cannot: +**v0.3 — spine, deterministic knowledge extractors (with cross-file grounding), MCP serving, the knowledge-vs-RAG gates, and published Docker images.** Everything here grounds what it claims, and nothing it cannot: - **Provenance spine** — content-addressed `span_id` (LOCKED); tree-sitter spans with a normalized S-expression fingerprint and per-SHA location; a single-Postgres, Alembic-managed store with content-addressed idempotent writes; the ≥ 1 `derived_from` anti-hallucination invariant enforced in-app *and* by a deferred DB trigger; pygit2 git ingest (no checkout) with a diff-based invalidation seed. - **Deterministic extractors** — the **import / dependency graph** (grimp resolves the edge, tree-sitter grounds it on the exact import statement, with an honest `approximate` fallback for re-exports / relative / unmappable imports — never a silent loss); the **FastAPI API-contract** extractor, which grounds a single route **across files** (handler in `routes.py` + `response_model` class in `schemas.py`); and the **domain-entity** extractor (pydantic / dataclass / SQLAlchemy classes and their fields, grounded on the class definition **and cross-file on the entities they reference** — purely static, with documented detection limits). diff --git a/pyproject.toml b/pyproject.toml index 27b782e..699a59b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "knowbase" -version = "0.2.0" +version = "0.3.0" description = "Versioned, provenance-grounded knowledge layer over a codebase" readme = "README.md" requires-python = ">=3.12" diff --git a/uv.lock b/uv.lock index 3c44300..09860e5 100644 --- a/uv.lock +++ b/uv.lock @@ -1016,7 +1016,7 @@ wheels = [ [[package]] name = "knowbase" -version = "0.2.0" +version = "0.3.0" source = { editable = "." } dependencies = [ { name = "alembic" },