Skip to content

Releases: alfadur7/llm-wiki-newsroom

v0.1.4 — trail framing fix

Choose a tag to compare

@alfadur7 alfadur7 released this 09 Jul 02:30

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 misframe antipattern 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

Choose a tag to compare

@alfadur7 alfadur7 released this 07 Jul 07:24

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 --fix writes, 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=ko with 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.json canary 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

Choose a tag to compare

@alfadur7 alfadur7 released this 01 Jul 04:06

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-grounded becomes 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

Choose a tag to compare

@alfadur7 alfadur7 released this 30 Jun 23:54

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

Choose a tag to compare

@alfadur7 alfadur7 released this 28 Jun 10:03

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.