Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,19 @@ 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` /
`migrate` / `serve` / `introspect`; the **`-embed`** tag adds CPU-torch for `kb embed` + search. A
`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
Expand Down Expand Up @@ -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
9 changes: 5 additions & 4 deletions DESIGN.md
Original file line number Diff line number Diff line change
@@ -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.

---

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading