Wikantik Development

This cluster documents the development history of the Wikantik platform itself — the architecture decisions, feature implementations, and engineering patterns that have shaped the system over time. The current release is 2.4.57; CHANGELOG.md and README in the repository record the release history and quickstart layout.

Core Engineering Pillars

Module Structure

Wikantik is a Maven multi-module reactor: 24 modules in the root pom.xml <modules> list, plus wikantik-coverage-report (aggregated JaCoCo report, added only under -Pcoverage). wikantik-frontend is not a Maven module: wikantik-war drives the npm build and bundles the output.

ModuleRole
wikantik-bomBill of materials pinning shared dependency versions
wikantik-utilUtility classes and helpers
wikantik-eventEvent system for decoupled component communication
wikantik-jdbcThe one data-access primitive (com.wikantik.jdbc.Jdbc); its test-jar ships PostgresTestDb, @RequiresPostgres and FaultInjectingDataSource
wikantik-apiCore interfaces — manager contracts, provider interfaces, frontmatter types, KG service, Page Graph interfaces
wikantik-cacheEhCache-based caching layer (render caches: 1-hour TTL; page, text and history caches: 60 seconds; about 10K entries each)
wikantik-cache-memcachedOpt-in Memcached adapter for multi-node deployments, not wired into the WAR
wikantik-httpServlet filters — CSRF, CSP, cross-origin and other security headers, session-cookie policy
wikantik-ingestDerived-page document extraction (Apache Tika + flexmark-html2md), isolated from wikantik-main
wikantik-connectorsExternal-source connector runtime — seven connector types (six admin-creatable) syncing into derived pages, with DB-backed configs and an encrypted credential store
wikantik-mainMain implementation — Markdown rendering (Flexmark), providers, auth (JAAS), search, entity extraction, math parser, Obsidian import/export
wikantik-mcp-coreShared MCP substrate — McpTool, endpoint bootstrap, access filter, and the two tools both MCP servers register. Extracted to break the wikantik-knowledge → wikantik-admin-mcp module cycle
wikantik-admin-mcpAdmin MCP server at /wikantik-admin-mcp — 29 tools
wikantik-toolsOpenAPI 3.1 tool server at /tools/* — 2 tools for non-MCP clients
wikantik-scimSCIM 2.0 provisioning at /scim/v2/*
wikantik-knowledgeKnowledge MCP server at /knowledge-mcp — 22 read-only tools when fully wired; also hosts the KG service, hybrid retriever, RAG bundle
wikantik-ontologyRDF/OWL ontology (Apache Jena + TDB2) — T-Box, projectors, SHACL gate, public SPARQL surface
wikantik-observabilityHealth checks, Prometheus metrics, request correlation, and the backpressure and rate-limit filters
wikantik-insightsContent Intelligence — search-visibility facts, opportunity rules, effect measurement; depends only on wikantik-jdbc
wikantik-restREST/JSON API (/api/*, 36 servlets) and admin endpoints (/admin/*, 29 servlets), plus SpaRoutingFilter
wikantik-extract-cliStandalone CLIs — entity extractor, derived-page ingester, corpus-divergence check
wikantik-warWAR packaging; bundles the React build, wires every servlet and filter, and hosts the architecture and config-drift tests
wikantik-wikipagesDefault wiki pages shipped with a fresh install
wikantik-it-testsIntegration tests (Selenide, REST, Cargo-launched Tomcat + PostgreSQL + pgvector)

The module list above matches the root pom.xml; WikantikArchitecture explains the layering and dependency rules.

Test Strategy

Architecture Evolution

Wikantik began as a fork of Apache JSPWiki. Through a sustained modernization effort starting March 2026, the platform was transformed:

Key Design Decisions

  1. ADR-001: Extract Manager Interfaces to API — Moves the manager interfaces into wikantik-api so the MCP modules compile against contracts rather than the engine implementation. The repository's ADR index (docs/adr/) records this as ADR-0000 and continues with 0001–0010.
  2. Frontmatter as Source of Truth — Wiki page YAML frontmatter is the canonical source for cluster membership, tags, type, audience, verification, and SEO metadata. The server-authoritative FrontmatterSchema drives live validation and Save-gating in the editor.
  3. Page Graph vs Knowledge Graph — Two strictly separate subsystems. The Page Graph tracks real wikilink edges; the Knowledge Graph tracks LLM-extracted entities and relations. See PageGraphVsKnowledgeGraph.
  4. Fail-closed retrieval — The hybrid retriever degrades to BM25 when the embedding service (Ollama) is unavailable; the context bundle dense source uses Lucene HNSW in-process (the docker1 production default) so there is no mandatory external network dependency for search.
  5. Cluster taxonomy is a frontmatter projection, not a filesystem hierarchy (ADR-0009) — a path in frontmatter is data: validatable, re-projectable, multi-valued and revertable per page, where a path in the filesystem would bind page identity, slug history, URLs and wikilinks to one axis.
  6. One way to touch the database (ADR-0010) — wikantik-jdbc is the only data-access primitive, enforced by JdbcAccessArchTest.
  7. Late-bound service registration (ADR-0008) — new services register through engine.setManager(...) from the owning wiring helper; WikiEngine accepts no new getManager callers or late-bound fields.

Feature Timeline

DateFeature
2026-03-23Test stub conversion for decoupled testing
2026-03-28JSP → React SPA migration
2026-04-03User profile management, attachment handling
2026-04-04Knowledge Graph core — entity extraction, kg_* tables, pgvector embeddings
2026-04-25Agent-grade content layer — type: runbook, page verification, get_page_for_agent, retrieval-quality CI
2026-05-02Structural spine — canonical_id, cluster:, list_clusters/list_tags/list_pages_by_filter; typed relations: frontmatter removed
2026-05-30Session stability — SameSite=Lax auth cookies, remember-me re-auth filter
2026-06-05SCIM deactivation auth guard; auth lock enforcement per-login-module
2026-06-08RDF/OWL ontology layer — T-Box, SHACL gate, public SPARQL/JSON-LD/dumps, SEO @type re-sourced from ontology
2026-06-09Structured frontmatter editor — live validation, Save-gating, page-scoped KG curation panel
2026-06-14RAG-as-a-Service Phase 1 — context bundle (GET /api/bundle, assemble_bundle MCP), derived pages (Tika ingest), chunker heading-fidelity fix, contextual embeddings
2026-06-19Bundle hybrid source (BM25+dense RRF default-on); admin-MCP reconciled to 26 tools; list_retrieval_queries added
2026-07-05Context briefing — get_briefing MCP tool + GET /api/briefing for session-start agent context
2026-07-15Connector framework + admin UI — seven connector types, DB-backed configs with hot-apply, encrypted credential store, guided add wizard
2026-08-15Cluster declaration (ADR-0009) — the hub page declares its cluster, scalar-or-list multi-membership, segment-aware ClusterPath matching, rename_cluster bulk curation; admin-MCP 26 → 27 tools (2.4.0)
2026-08-17Content Intelligence loop closes (2.4.6) — wikantik-insights opportunity backlog and nightly effect measurement; admin-MCP 27 → 29 tools (list_content_opportunities, snooze_opportunity); scoped /admin/* grants (2.4.8)
2026-08-19Security sweep (2.4.14–2.4.17) — an unauthenticated admin-data disclosure and an attachment-filename file write fixed (2.4.14), public SPARQL SSRF and restricted-metadata leaks (2.4.15), JDBCPlugin disabled by default (2.4.16), connector SSRF egress policy (2.4.17)
2026-08-20MCP API-key scope split into read-only mcp_read and admin (2.4.18; the admin scope is renamed mcp_admin in 2.4.54, 2026-10-06)
2026-09-07wikantik-jdbc — one data-access primitive (ADR-0010); migrations become the only schema definition and database tests run on a real pgvector container; every configuration key declared in ini/wikantik.properties (2.4.20)
2026-09-15SHA-1 password formats removed; per-module JaCoCo coverage floors (2.4.24)
2026-09-18PostgreSQL 18 with pgvector 0.8.6 in production; test containers move to pgvector/pgvector:pg18 (2.4.25)
2026-09-20KG entities extracted from ACL-restricted pages no longer reach the public ontology; connector credentials bound to their endpoint host (2.4.26)
2026-09-22wikantik.search.embedding.profile (cpu or gpu) selects the embedding hardware path (2.4.27)
2026-10-01Editor workspace — quick switcher, command palette, live link completion, paste/drop uploads; GET /api/export Obsidian vault zip (2.4.29)
2026-10-03Obsidian-style Live Preview editor, daily notes, zipped-vault import, native [[wikilinks]] and ![[embeds]] (2.4.50)
2026-10-05Login-only authorization — the bootstrap admin override requires a login session, policy grants match by principal type, ACL user entries resolve by login name; JSPWiki-era default pages removed (2.4.53)
2026-10-12PostgreSQL JDBC driver 42.7.14 (2.4.56)
2026-10-13SCIM refuses every write to the Admin group; /api/users/mentionable needs a sign-in; the audit Actor filter works and admin API-key revocations are audited; KG new-node approval is first-writer-wins and --reset-kg spares human-approved nodes; the standalone mail session applies STARTTLS and 5 s timeouts; privacy policy rewritten (2.4.57, the current release)

See Also

Wikantik Core Internals & Tools

Wikantik Engine Infrastructure & Tools

Compliance & Search Discovery


Cluster Hub: Wikantik Platform Development Hub: Architecture, MCP Protocols, and Agent Briefings (wikantik-development)