Releases: alfadur7/llm-wiki-newsroom
Release list
v0.1.4 — trail framing fix
A small maintenance release on top of v0.1.3 — behavior-preserving, no breaking changes, no migration. The full test + lint suites pass (pytest 123, lint clean).
Fix
- Trail framing — two guideline docs had drifted to describe a Memex trail as a graded curriculum: the Desk trail-review persona was "a learning-course designer — difficulty curve," and a timeline cross-reference called a trail a "learning path." A trail is an ordered associative path (Memex trail-blazing), not a course. Both are corrected to the canonical framing — the Desk persona is now "a documentary editor" that audits whether each hop earns its cut and the through-line names a tension.
Guard
- A
trail curriculum misframeantipattern now fails the guideline voice lint (tools/lint.py meta) if a.claude/guide calls a trail a learning path/course, difficulty curve, or curriculum. It is bilingual, so it fires on English and Korean corpora; benign "learner" / "learning order" are excluded.
Notes
- Documentation and lint-guard change only — existing wikis and workflows are unaffected.
v0.1.3 — full-codebase audit & hardening
A maintenance release on top of v0.1.2 — behavior-preserving, no breaking changes, no new commands, no migration. The graph artifacts rebuild byte-identical and the full test + lint suites pass.
Full-codebase audit
Every tools/ Python module, the .claude/ guideline set, the hooks, and the skill checks were reviewed end-to-end with the Claude Fable 5 model. Each finding was adversarially verified before applying and re-verified after — 243 confirmed findings, all resolved and independently re-checked.
Bug fixes
- Path anchoring — build/lint modules used cwd-relative graph paths and broke when run outside the repo root; they now anchor on shared repo-root constants, so the toolchain runs from any directory.
- Encoding & write safety (Windows) — missing
encoding=, CRLF-corrupting and non-atomic--fixwrites, and strict reads that crashed on non-UTF-8 input, all routed through atomic / encoding-safe helpers. - Hook guards — an unanchored path match, a deletion-Edit bypass, and PowerShell (the primary shell) not covered by the lint-chain guard.
- Assorted logic, regex, and exit-code defects.
Refactoring
- Duplicated (and drifted) regex, parser, and constant families consolidated into single shared definitions — graph-path constants, the wikilink and timeline regex families, section extraction, the number-token lexicon, and slug/source normalizers.
- Port-regression cleanup: Korean-only heuristics gated behind
WIKI_LANG=kowith English-native counterparts; stale references and comments removed.
Docs & policy
- Guideline docs realigned with the code and cross-file contradictions resolved (Desk review scope, timeline review strength, trail length).
- Self-evolution history (defect log + review watermarks) is now gitignored operator-local state; only the
regression_set.jsoncanary ships.
Also since v0.1.2
- The example corpus is now published as a GitHub Wiki, with the README pointing to it.
- A proposal-validation reflex wires the self-evolution loop's guideline-strengthening measurements into the governance flow.
Notes
- Behavior-preserving hardening pass, not a feature change — existing wikis and workflows are unaffected.
v0.1.2 — synthesis conflation guard
A small release on top of v0.1.1 — no breaking changes, no new commands, no migration.
Synthesis conflation guard
A synthesis page is the one page type that fuses two or more sources into a single claim — which is exactly where a fabricated "seam" can hide: a fact present in neither source that is nonetheless half-true on each side, so it slips past a per-source spot check. This release wires a three-layer guard against it:
- Lint (J1) surfaces where a claim joins ≥2 declared sources, so the review targets those seams instead of spot-checking one or two citations. It flags locations only — never gates the exit code.
- Desk review switches, for synthesis attribution, from sampling to an exhaustive span-by-span comparison of every surfaced join.
struct.join-groundedbecomes a required roster criterion, so a page cannot complete without the seams being verified.
The example corpus now ships its first synthesis page, authored to exercise the guard end-to-end — the lint surfaced two joins, the desk verified both and caught one real provenance defect, which was fixed before publish.
Notes
- The guard is a review discipline plus a locator, not an automated verdict — whether a join holds stays a human/desk judgment.
- All 9 slash commands are unchanged from v0.1.1.
Full changelog: v0.1.1...v0.1.2
v0.1.1 — self-evolution overfit guard
A small maintenance release on top of v0.1.0 — no breaking changes, no new commands, no migration.
Self-evolution overfit guard
The self-improving-guidelines loop no longer measures only against a frozen regression set. Each validation cycle now adds an audit-logged fresh sample — an already-treated defect of the same mechanism on the held-in side, stable pages of the edit type on the held-out side — on top of the fixed set, so the rules can't quietly drift toward passing only the frozen canary (eval rot). Acceptance is tightened to ≥1 improvement on the motivating defect ∧ non-regression across every slice.
The loop stays human-gated — measurement is automated, adoption is not.
Also in this release: feature-facing operations runbooks and fixes carried over from the English port.
Full changelog: v0.1.0...v0.1.1
v0.1.0 — first public release
First public release of LLM Wiki Newsroom — an open-source, local-first framework where an AI agent like Claude Code reads the documents you collect and maintains a cross-referenced knowledge wiki out of them. A structured, persistent alternative to RAG. Built on Andrej Karpathy's LLM Wiki concept and the SamurAIGPT/llm-wiki-agent original.
What it does
Drop articles, documents, and PDFs into raw/, run one command, and the agent extracts entities, concepts, and relationships and organizes them into a fully cross-linked wiki. Adding one document cascades edits into ~10–15 related existing pages.
The "newsroom" design
The framework runs not as one do-everything assistant but as five specialized subagents:
- reporter — drafts source pages and entity/concept stubs
- columnist — writes the deep cross-source analysis
- desk — re-reads that prose with fresh eyes and returns a defect list
- copy editor — runs the deterministic Python lint (links, citations, structure)
- editor-in-chief — routes the work and gates publishing
Authoring and review are different instances, which curbs the self-bias of a model grading its own work. A two-sided publish gate requires both the deterministic lint and the qualitative review to pass.
Highlights
- 9 slash commands — ingest, query, lint, graph, news, export, discover, trail, timeline
- Leiden-clustered knowledge graph with an interactive browser (
graph/graph.html) - Contradiction tracking flagged at ingest time, not query time
- Memex-style associative trails for serendipitous discovery
- Self-improving guidelines — recurring review failures draft a fix to the authoring rules themselves, adopted only after a blind, regression-gated comparison
- Local Python tooling (graph build, lint, semantic search via QMD) runs entirely on your machine
Requirements & honesty notes
- The Python tooling runs locally with no API keys; the agent driving it is Claude Code (full feature set). It degrades to a basic workflow with Codex/Gemini.
- Output is plain markdown — an Obsidian vault, version-controlled with Git, no vendor lock-in.
What ships
A deliberately small 15-node example corpus (the debate over what "open source" means for AI) so the whole thing is readable end-to-end. The framework itself is domain-agnostic.
See the README to get started.