Automatic maintenance
How Vessios keeps a growing wiki accurate — contradiction detection, link audits, and confidence decay.
A wiki that only grows, and never gets checked, eventually accumulates contradictions and stale information. Vessios addresses this with automatic maintenance jobs.
Lint
LintWikiUseCase runs weekly (and should be triggered manually after any large ingest) and performs bias-aware contradiction detection across the wiki:
- Detected contradictions can be automatically flagged for review, or proposed as a resolution (e.g. one page superseding another).
- Orphaned pages (nothing links to them) and stale pages are surfaced.
- Results are available via
GET /wiki/lint, and contradictions can be inspected or resolved viaGET /wiki/contradictionsand the/admin/contradictions/*endpoints.
Link audit
A link audit checks the integrity of wikilinks across your wiki and can attempt automatic fixes:
GET /admin/link-audit— report on broken or low-confidence wikilinks.POST /admin/link-audit/fix— attempt to repair them.
Confidence decay (Ebbinghaus)
Wiki pages don’t stay equally trustworthy forever. Vessios applies an Ebbinghaus-style decay model to page confidence over time, and surfaces pages that are due for reinforcement:
GET /admin/ebbinghaus/due— pages whose confidence has decayed and are due for review.POST /admin/ebbinghaus/pages/{page_id}/reinforce— manually reinforce a page’s confidence.
Wiki health
Overall wiki health is tracked across multiple axes (including contradiction rate, orphan rate, and staleness) and exposed via GET /wiki/health and GET /admin/wiki/metrics.
Page lifecycle
Every wiki page moves through a defined lifecycle (for example: active, contradicted, stale, archived) rather than being silently deleted. Lifecycle transitions can be inspected via a page’s history (GET /pages/{page_id}/history) and reverted (POST /pages/{page_id}/restore), and are protected by optimistic locking to prevent conflicting concurrent edits.
Async Review queue
Contradictions and low-confidence extractions that need a human decision are routed to a review queue rather than being applied automatically:
GET /reviews— list pending reviews.POST /reviews/{review_id}/resolve— resolve a review.