Commit Graph
23 Commits
Author SHA1 Message Date
claude-botandClaude Fable 5.1 34cf91ebaf ask: wiki_ask.py as a use case and POST /api/v1/ask; judges from configuration
Rank every query, unite the top notes into one context under a per-document
and a total budget, expand context choices over paragraph or document ids
plus NONE, add the covered gate, judge context choices alone and the rest
batched, attach the answering paragraphs' text. A missing TypeSafe key is a
call-time error shown in status, not a startup failure.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 13:57:17 +02:00
claude-botandClaude Sonnet 5 e10208ee2c feat(ask): TypeSafe System One judge adapter
IJudge over TypeSafe's System One API: serialises noul/choice/score
questions and the caller's state, retries 429/529 with Retry-After or
backoff to 30s, rejects Choice past the 255-option cap before sending,
and skips the request entirely for an empty question set.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 13:53:52 +02:00
claude-botandClaude Fable 5.1 2cd171d3c5 read api: notes with links, backlinks and resolved sources; tags; raw queue; reports
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 13:45:55 +02:00
k.renner d718a83f33 Merge pull request 'store port: get and create documents; depositing a fact is a use case' (#3) from fix/adapter-names into main
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/release Pipeline was successful
Reviewed-on: #3
2026-09-24 11:39:39 +00:00
claude-botandClaude Fable 5.1 6ff8d4bce6 store port: get and create documents; depositing a fact is a use case
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
The fact sink was a second adapter over the same backend. INoteStore
gains CreateAsync (DocumentExistsException on a taken path); the raw
note's shape, slug and collision numbering live in DepositFactUseCase;
GiteaRepository only moves text.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 13:37:20 +02:00
claude-botandClaude Fable 5.1 fe6a284c6c gitea: one repository adapter serving both the note-store and the fact-sink port
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
Two classes over the same backend showed as two adapters on the status
page. One GiteaRepository, one HttpClient, one health entry; the host
lists an adapter once even when it serves several ports.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 13:30:17 +02:00
claude-botandClaude Fable 5.1 80c7885dc2 gitea: distinct adapter names for the note store and the fact sink
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
Both reported as "gitea" on the status page.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 13:26:43 +02:00
k.renner c4e193b08d Merge pull request 'ci: lowercase the image path' (#2) from fix/release-image-lowercase into main
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/release Pipeline was successful
Reviewed-on: #2
2026-09-24 10:25:05 +00:00
claude-botandClaude Fable 5.1 8b032bcb1f ci: lowercase the image path; the repository name carries a capital
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 12:24:03 +02:00
k.renner b48dd28b9e Merge pull request 'Phase 0+1: solution skeleton, ports, adapters, host with parity to the Python wiki-index' (#1) from feat/skeleton into main
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/release Pipeline failed
Reviewed-on: #1
2026-09-24 10:21:28 +00:00
claude-botandClaude Fable 5.1 ded15eb96b ci: registry login as the bot (org-owned repo); allow manual test runs
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/pr/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
claude-botandClaude Fable 5.1 30f2dec1f2 chore: solution scaffold (net10.0, ports-and-adapters layout, MudBlazor host, xunit)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 11:19:40 +02:00