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
8 changes: 3 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.6.0] - 2026-07-07

### Added

Expand Down Expand Up @@ -38,9 +38,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
across **three files**, cycle no-hang, `.kb/sinks.yaml` override proven end-to-end, no-sink route
yields nothing, depth caps honored, re-index determinism. Headline HARD gates: thirteen →
**fourteen**.

### Added

- **Call-graph edge extractor** (`kb.extract.deterministic.calls`): the sixth deterministic
extractor — one `call_edge` artifact per RESOLVED caller→callee pair (`call:{caller}->{callee}`,
call-site lines aggregated in the payload, the import-edge precedent). Three deterministic
Expand Down Expand Up @@ -288,7 +285,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.5.0...HEAD
[Unreleased]: https://github.com/v0ropaev/knowbase/compare/v0.6.0...HEAD
[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
[0.4.0]: https://github.com/v0ropaev/knowbase/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/v0ropaev/knowbase/compare/v0.2.0...v0.3.0
Expand Down
11 changes: 6 additions & 5 deletions DESIGN.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# knowbase — Design

> Status: **agreed MVP design**, implemented through **v0.5**. This document is the source of truth
> Status: **agreed MVP design**, implemented through **v0.6**. 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
> + event-handler extractors — with cross-file grounding, the sandboxed openapi and griffe oracles, the read-only MCP
> server, pgvector embeddings/search, the RAG A/B gate plus a nightly LLM-judged A/B, LLM-grounded
> descriptions through per-package overviews, incremental re-index, and published Docker images);
> items still labelled *deferred* below remain so.
> + event-handler + call-graph extractors plus the grounded process-path builder over them — with
> cross-file grounding, the sandboxed openapi and griffe oracles, the read-only MCP server, pgvector
> embeddings/search, the RAG A/B gate plus a nightly LLM-judged A/B, LLM-grounded descriptions
> through per-package overviews and process-path labels, incremental re-index, 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 @@ -84,7 +84,7 @@ flowchart LR

## Status

**v0.5 — 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 per-package architecture overviews, live incremental re-index (`kb watch`), MCP serving, the fourteen knowledge gates, and published Docker images.** Everything here grounds what it claims, and nothing it cannot:
**v0.6 — 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 per-package architecture overviews and business-process-path labels, live incremental re-index (`kb watch`), MCP serving, the fourteen 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` — 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); 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).
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.5.0"
version = "0.6.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