Skip to content

Commit aa17843

Browse files
authored
chore: release v0.5.0 (#25)
Cut the accumulated [Unreleased] into 0.5.0: the artifact-identity v2 fix (logical_key folded into artifact_id — repairs the silent collision of same-evidence artifacts such as mutually referencing entities; all artifact ids change, existing databases should be re-indexed), the `kb watch` incremental re-index daemon (closes the roadmap item), and the event-handler extractor with its Tier-1 gate (HARD gates 11 -> 12). pyproject 0.4.0 -> 0.5.0 (+ uv.lock); README Status headline -> v0.5; DESIGN status banner -> v0.5.
1 parent ada19df commit aa17843

5 files changed

Lines changed: 8 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.5.0] - 2026-07-07
11+
1012
### Fixed
1113

1214
- **Silent artifact_id collision for same-evidence artifacts**: `artifact_id` (identity rule v1)
@@ -233,7 +235,8 @@ freshness).
233235
import oracle, Tier-4 one-hop invalidation, and the store/provenance invariants — run in CI
234236
against a PostgreSQL 17 service.
235237

236-
[Unreleased]: https://github.com/v0ropaev/knowbase/compare/v0.4.0...HEAD
238+
[Unreleased]: https://github.com/v0ropaev/knowbase/compare/v0.5.0...HEAD
239+
[0.5.0]: https://github.com/v0ropaev/knowbase/compare/v0.4.0...v0.5.0
237240
[0.4.0]: https://github.com/v0ropaev/knowbase/compare/v0.3.0...v0.4.0
238241
[0.3.0]: https://github.com/v0ropaev/knowbase/compare/v0.2.0...v0.3.0
239242
[0.2.0]: https://github.com/v0ropaev/knowbase/compare/v0.1.0...v0.2.0

DESIGN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# knowbase — Design
22

3-
> Status: **agreed MVP design**, implemented through **v0.4**. This document is the source of truth
3+
> Status: **agreed MVP design**, implemented through **v0.5**. This document is the source of truth
44
> for the architecture. It supersedes the original free-form spec. Load-bearing decisions that are
55
> expensive to change later are marked **[LOCKED]**; everything else is revisable. The MVP vertical
66
> slice in §8 has shipped (provenance spine, import + FastAPI + domain-entity + library-surface

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ flowchart LR
8484

8585
## Status
8686

87-
**v0.4 — spine, four deterministic extractors (cross-file grounding, incl. the library public-API surface), LLM-grounded descriptions up to per-package architecture overviews, incremental re-index, MCP serving, the knowledge-vs-RAG gates, and published Docker images.** Everything here grounds what it claims, and nothing it cannot:
87+
**v0.5 — spine (artifact-identity rule v2), five deterministic extractors (cross-file grounding, incl. the library public-API surface and event handlers), LLM-grounded descriptions up to per-package architecture overviews, live incremental re-index (`kb watch`), MCP serving, the twelve knowledge gates, and published Docker images.** Everything here grounds what it claims, and nothing it cannot:
8888

8989
- **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.
9090
- **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); and the **event-handler** extractor (pydantic `@field_validator`/`@model_validator`, FastAPI `@app.on_event`, SQLAlchemy `@event.listens_for` — one artifact per handler, grounded on the handler span and **cross-file** on the class it listens to; the call-form `event.listen(...)` and dynamic names are documented gaps).

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "knowbase"
3-
version = "0.4.0"
3+
version = "0.5.0"
44
description = "Versioned, provenance-grounded knowledge layer over a codebase"
55
readme = "README.md"
66
requires-python = ">=3.12"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)