Phase 0+1: solution skeleton, ports, adapters, host with parity to the Python wiki-index #1

Merged
k.renner merged 12 commits from feat/skeleton into main 2026-09-24 10:21:28 +00:00
12 Commits
Author SHA1 Message Date
claude-botandClaude Fable 5.1 ded15eb96b ci: registry login as the bot (org-owned repo); allow manual test runs
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 12:18:26 +02:00
claude-botandClaude Fable 5.1 fba535e03a gitea: retry transient read failures, recycle pooled connections
A long sync over one keep-alive connection to Gitea behind Traefik saw a
TLS connection reset after ~1000 documents and aborted the whole run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 11:49:35 +02:00
claude-botandClaude Fable 5.1 14b858bcfc host: endpoint tests; keep status-code pages off API responses; merge the three adapters
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 11:44:12 +02:00
k.renner 8b02986eff Merge branch 'feat/adapter-gitea' into feat/skeleton 2026-09-24 11:41:33 +02:00
claude-botandClaude Sonnet 5 f67cc7b871 feat(gitea): implement the Gitea note-store and fact-sink adapters
INoteStore reads the vault straight from Gitea (branch HEAD, a paged
recursive tree listing, raw file reads); IFactSink appends a new raw/
file via the contents API, numbering around any path collision. Both
verified against the live gitea.renner.uno API for response shape
rather than the swagger doc.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 11:40:57 +02:00
k.renner 4f904f7eb3 Merge branch 'feat/adapter-llamacpp' into feat/skeleton 2026-09-24 11:34:13 +02:00
k.renner 65cf355dc4 Merge branch 'feat/adapter-fileindex' into feat/skeleton 2026-09-24 11:34:02 +02:00
claude-botandClaude Fable 5.1 af58249bc5 host: composition root, health/ready/status, /rank and /webhook, auth handlers, MudBlazor status page, Dockerfile, CI pipelines
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 11:33:56 +02:00
claude-botandClaude Sonnet 5 019f046925 feat(fileindex): file-backed vector index and document catalog adapters
FileVectorIndex persists one binary file per model under index/ with
atomic tmp+rename writes; FileDocumentCatalog persists a single
catalog.json, rebuilding the link graph via WikiLinks.Extract on every
upsert. Both start empty and report health Ok with a reset detail if
their file on disk is corrupt, rather than crashing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 11:32:43 +02:00
claude-botandClaude Sonnet 5 2f6f56c4f0 feat(llamacpp): embeddings adapter over llama-server's /v1/embeddings
Batches requests (default size 2, matching llama-server's limits for long
notes), sorts responses by index, and normalises vectors to unit length.
CheckAsync prefers GET /health, falling back to a one-word embed call when
the server doesn't expose it. Registers as a keyed IEmbeddingModel so
multiple models can be wired up under different names.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 11:31:48 +02:00
claude-botandClaude Fable 5.1 811696da90 application: sync use case (hash diff, per-model embedding, backfill), coordinator, rank, status
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 11:30:45 +02:00
claude-botandClaude Fable 5.1 a26490e5e4 core: domain model, ports, vault parsing; contract suites for note store, vector index, catalog, embeddings
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 11:24:33 +02:00