Skip to content

Release v0.2.0 — API Infrastructure & Suggestion Sessions#1

Open
damienriehl wants to merge 8 commits intomainfrom
release/v0.2.0
Open

Release v0.2.0 — API Infrastructure & Suggestion Sessions#1
damienriehl wants to merge 8 commits intomainfrom
release/v0.2.0

Conversation

@damienriehl
Copy link

Summary

  • API infrastructure — lifespan handlers, JWT role extraction, full-text search, rate limiting, security headers, custom exceptions, input validation
  • Suggestion sessions — full backend for suggester workflow: session CRUD, beacon auth, auto-submit worker, Alembic migration
  • Bug fixes — HttpUrl crash fix in class tree sort, default role changed to suggester
  • 85 passing tests — auth, config, search, linter, ontology service, project routes, end-to-end workflow

Stats

Metric Value
Commits 5
Files changed 31
Insertions +3,070
Deletions −86
Tests added 85

🤖 Generated with Claude Code

damienriehl and others added 8 commits February 22, 2026 12:42
…leware, exceptions, input validation, and comprehensive test suite (85 tests)

- Implement startup/shutdown lifespan: DB verification, Redis pool, MinIO bucket init
- Extract Zitadel project roles from JWT claims with 1-hour JWKS cache TTL
- Implement full-text search via PostgreSQL tsvector/tsquery with pagination
- Implement SPARQL execution via RDFLib (SELECT/ASK/CONSTRUCT)
- Add slowapi rate limiting (100 req/min default)
- Add request ID, access logging, and security headers middleware
- Add custom exception types (NotFoundError, ValidationError, ConflictError, ForbiddenError)
  with global exception handlers returning consistent error schema
- Add IRI format validation and string length limits on schema fields
- Add 85 passing tests covering auth, config, search, linter, ontology service, routes,
  and integration workflows

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the search query is "*", skip the substring match filter and return
all entities of the requested type(s). This enables the frontend Properties
and Individuals tabs to list all entities without a dedicated listing endpoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…h, and auto-submit

Implements Phase C of the suggestion workflow — the FastAPI backend that
powers the frontend suggestion UI. Suggesters get a dedicated branch,
save edits as commits, and submit as PRs. Stale sessions auto-submit
via a cron job every 10 minutes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pydantic v2 HttpUrl is not a plain string, so calling .lower() on
cls.iri fails with AttributeError. Wrap in str() for both
get_root_classes and get_class_children sort_key functions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Join request approval now assigns suggester role instead of editor.
MemberBase schema default changed from viewer to suggester.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Release v0.2.0 — lifespan handlers, JWT roles, search service, rate
limiting, security middleware, suggestion sessions, beacon auth,
auto-submit worker, HttpUrl fix, default suggester role, and 85 tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase A (Quality): Cross-reference service, 12-rule consistency checker,
duplicate detection via label similarity. 4 new endpoints with Redis caching.

Phase B (Analytics): EntityChangeEvent model + migration, graph-diff change
tracking hooked into save_source_content, entity history, project activity,
hot entities, and contributor stats. 4 new endpoints.

Phase C (Vector): pgvector-backed embedding tables + migration, pluggable
embedding providers (local/OpenAI/Voyage), semantic search, similar entities,
rank suggestions, auto-embed on save. 8 new endpoints, 2 ARQ worker tasks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant