diff --git a/CHANGELOG.md b/CHANGELOG.md index 3402592..5a1b709 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.8.0] - 2026-07-09 ### Fixed @@ -389,7 +389,8 @@ 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.7.0...HEAD +[Unreleased]: https://github.com/v0ropaev/knowbase/compare/v0.8.0...HEAD +[0.8.0]: https://github.com/v0ropaev/knowbase/compare/v0.7.0...v0.8.0 [0.7.0]: https://github.com/v0ropaev/knowbase/compare/v0.6.0...v0.7.0 [0.6.0]: https://github.com/v0ropaev/knowbase/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/v0ropaev/knowbase/compare/v0.4.0...v0.5.0 diff --git a/DESIGN.md b/DESIGN.md index ba56d43..0e39597 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,6 +1,6 @@ # knowbase — Design -> Status: **agreed MVP design**, implemented through **v0.7**. This document is the source of truth +> Status: **agreed MVP design**, implemented through **v0.8**. 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 + domain-entity + library-surface diff --git a/README.md b/README.md index 814a7b1..18e09be 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ flowchart LR ## Status -**v0.7 — spine (artifact-identity rule v2), six deterministic extractors (cross-file grounding, incl. the library public-API surface, event handlers, and call-graph edges) plus the grounded process-path builder over them, LLM-grounded descriptions up to whole-repo architecture overviews and business-process-path labels, ADR-candidate mining from git history (`kb mine`), live incremental re-index (`kb watch`), MCP serving, the fifteen knowledge gates, and published Docker images.** Everything here grounds what it claims, and nothing it cannot: +**v0.8 — spine (artifact-identity rule v2), six deterministic extractors (cross-file grounding, incl. the library public-API surface, event handlers, and call-graph edges) plus the grounded process-path builder over them, LLM-grounded descriptions up to whole-repo architecture overviews and business-process-path labels, ADR-candidate mining from git history (`kb mine`), live incremental re-index (`kb watch`), MCP serving, the fifteen knowledge 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`); 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); the **library public-API-surface** extractor (what a package exposes from its `__init__.py` — `__all__`-authoritative, with `__init__` re-exports resolved **cross-file** to the defining function/class — validated against an independent **griffe** static oracle); the **event-handler** extractor (pydantic `@field_validator`/`@model_validator`, FastAPI `@app.on_event`, SQLAlchemy `@event.listens_for` **and the module-level call-form `event.listen(Target, "e", fn)`** — one artifact per handler, grounded on the handler span, **cross-file** on the class it listens to, and on the registering file for call-form wiring; function-body/lambda `listen` and dynamic names are documented gaps); and the **call-graph edge** extractor (deterministic caller→callee edges — same-module, imported **cross-file**, and `self.` method calls — one `call_edge` per resolved pair with call-site lines aggregated; `obj.method(...)`, `getattr`, inherited self-calls and decorator/default-arg expressions are documented gaps; the deterministic foundation under the future business-process extractor); and the **process-path builder** (second-order: BFS over the call edges from extracted entrypoints — route/event handlers — to sink-registry matches, one `process_path` grounded on EVERY span of the chain, multi-file provenance; built-in sink registry + per-repo `.kb/sinks.yaml` override). diff --git a/pyproject.toml b/pyproject.toml index e2621cb..84bd552 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "knowbase" -version = "0.7.0" +version = "0.8.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 725aa20..2028df6 100644 --- a/uv.lock +++ b/uv.lock @@ -1042,7 +1042,7 @@ wheels = [ [[package]] name = "knowbase" -version = "0.7.0" +version = "0.8.0" source = { editable = "." } dependencies = [ { name = "alembic" },