Files changed: - .wikitool-kb.json - AGENTS.md - CHANGES.md - INSTALL-MCP.md - INSTALL.md - README.md - VERSION - instructions/capture-session.md - instructions/dev/issue-tracking.md - instructions/german-terminology.md - instructions/kb-profiles.md - instructions/migrate-corpus.md - instructions/migrations/5.0.0-confidence-removal.md - instructions/private-instance.md - instructions/setup-instance.md - instructions/wiki-lint/SKILL.md - instructions/wiki-manage/SKILL.md - instructions/wiki-query/SKILL.md - kb/CONTRACT.md - kb/CONVENTIONS.md - kb/CONVENTIONS.md.template - kb/concepts/architectures/Consolidation Tiers.md - kb/concepts/architectures/Context Isolation.md - kb/concepts/architectures/Cross-platform Agent Skills.md - kb/concepts/architectures/Episodic Memory.md - kb/concepts/architectures/Hybrid Search.md - kb/concepts/architectures/Implementation Spectrum.md - kb/concepts/architectures/Knowledge Graph.md - kb/concepts/architectures/LLM Wiki Pattern.md - kb/concepts/architectures/MCP-Leseserver.md - kb/concepts/architectures/Memory Lifecycle.md - kb/concepts/architectures/OKF Compatibility.md - kb/concepts/architectures/Optional Instance Context File.md - kb/concepts/architectures/Personalization Plane.md - kb/concepts/architectures/Procedural Memory.md - kb/concepts/architectures/RAG.md - kb/concepts/architectures/Scale Ceiling.md - kb/concepts/architectures/Semantic Memory.md - kb/concepts/architectures/Three-Layer Architecture.md - kb/concepts/architectures/Token Economics.md - kb/concepts/architectures/Working Memory.md - kb/concepts/decisions/Delete Rather Than Anonymize.md - kb/concepts/decisions/Denylist over Allowlist.md - kb/concepts/decisions/Diff-Reviewable Agent Edits.md - kb/concepts/decisions/Dual Licensing by File Plan.md - kb/concepts/decisions/Issue Label Scheme.md - kb/concepts/decisions/KB Stack Versioning.md - kb/concepts/decisions/Structural Enforcement over Documented Rule.md - kb/concepts/patterns/Audit Trail.md - kb/concepts/patterns/BM25.md - kb/concepts/patterns/Command Round-Trip Integrity.md - kb/concepts/patterns/Confidence Scoring.md - kb/concepts/patterns/Contradiction Resolution.md - kb/concepts/patterns/Entity Extraction.md - kb/concepts/patterns/Filter on Ingest.md - kb/concepts/patterns/Forgetting.md - kb/concepts/patterns/Graph Traversal.md - kb/concepts/patterns/Mesh Sync.md - kb/concepts/patterns/Quality Scoring.md - kb/concepts/patterns/Reciprocal Rank Fusion.md - kb/concepts/patterns/Self-Healing.md - kb/concepts/patterns/Shared vs Private.md - kb/concepts/patterns/Typed Relationships.md - kb/concepts/patterns/Vector Search.md - kb/concepts/patterns/Work Coordination.md - kb/concepts/problems/Ambient Environment Dependency.md - kb/concepts/problems/Detect-Repair Asymmetry.md - kb/concepts/problems/Green Suite Blind Spot.md - kb/concepts/problems/Naming Convention Conflict.md - kb/concepts/problems/Write-Once Frontmatter Fields.md - kb/concepts/protocols/CPPC.md - kb/concepts/protocols/Modbus.md - kb/concepts/protocols/SSD TRIM.md - kb/concepts/workflows/Anti-Cramming Heuristic.md - kb/concepts/workflows/Bulk Operations.md - kb/concepts/workflows/CI Integration.md - kb/concepts/workflows/Checkpoint Audit.md - kb/concepts/workflows/Claude Code Auto Mode.md - kb/concepts/workflows/Content Quality Control.md - kb/concepts/workflows/Crystallization.md - kb/concepts/workflows/Event-Driven Automation.md - kb/concepts/workflows/Hooks.md - kb/concepts/workflows/Index Scaling.md - kb/concepts/workflows/Iteration and Cost Limits.md - kb/concepts/workflows/KB Migration.md - kb/concepts/workflows/Knowledge Compounding.md - kb/concepts/workflows/Lint Workflow.md - kb/concepts/workflows/Mass-Update Gate.md - kb/concepts/workflows/Multi-Agent Collaboration.md - kb/concepts/workflows/Privacy and Governance.md - kb/concepts/workflows/Publish-Remote Gate.md - kb/concepts/workflows/Quality and Self-Correction.md - kb/concepts/workflows/Semantic Lint Automation.md - kb/concepts/workflows/Session Orientation.md - kb/concepts/workflows/Split Merge Reclassify.md - kb/concepts/workflows/Split Threshold.md - kb/concepts/workflows/Stub Threshold.md - kb/concepts/workflows/Supersession.md - kb/concepts/workflows/User Management.md - kb/concepts/workflows/Workflow Extraction.md - kb/concepts/workflows/Workflow Orchestration.md - kb/entities/people/Andrej Karpathy.md - kb/entities/people/E3DC GmbH.md - kb/entities/people/Rohit Gupta.md - kb/entities/people/Vannevar Bush.md - kb/entities/projects/BCDModule.md - kb/entities/projects/Chemenu.md - kb/entities/projects/andybalholm-edl.md - kb/entities/projects/goresponsiveness.md - kb/entities/projects/ha-core.md - kb/entities/projects/hacs-e3dc.md - kb/entities/projects/hacs-integration-blueprint.md - kb/entities/projects/llm-wiki-skills.md - kb/entities/projects/plugnburn-edl.md - kb/entities/projects/wiki-skills-vanillaflava.md - kb/entities/projects/wiki-skills.md - kb/entities/systems/AGENTS.md.md - kb/entities/systems/CLAUDE.md.md - kb/entities/systems/E3DC.md - kb/entities/systems/ENVIRONMENT.md.md - kb/entities/systems/Memex.md - kb/entities/systems/Tolkien Gateway.md - kb/entities/technologies/Arch Linux.md - kb/entities/technologies/Disk Encryption.md - kb/entities/technologies/Docker.md - kb/entities/technologies/GRUB.md - kb/entities/technologies/Gitea Actions.md - kb/entities/technologies/Gitea.md - kb/entities/technologies/Go.md - kb/entities/technologies/Home Assistant.md - kb/entities/technologies/Kernel PM Governors.md - kb/entities/technologies/LVM.md - kb/entities/technologies/Linux Kernel.md - kb/entities/technologies/MQTT.md - kb/entities/technologies/OPC UA.md - kb/entities/technologies/Python.md - kb/entities/technologies/Rust.md - kb/entities/technologies/Wine GE.md - kb/entities/technologies/Wine-Staging.md - kb/entities/technologies/acpi-cpufreq.md - kb/entities/technologies/amd-pstate.md - kb/entities/technologies/iii Engine.md - kb/entities/tools/AUR.md - kb/entities/tools/Act Runner.md - kb/entities/tools/Agent Memory.md - kb/entities/tools/Aura.md - kb/entities/tools/Bottles.md - kb/entities/tools/ChatGPT.md - kb/entities/tools/Claude Code.md - kb/entities/tools/Codex CLI.md - kb/entities/tools/Dataview.md - kb/entities/tools/GPG.md - kb/entities/tools/GitHub Copilot.md - kb/entities/tools/Gitea MCP Server.md - kb/entities/tools/Lutris.md - kb/entities/tools/Marp.md - kb/entities/tools/Mistral Vibe.md - kb/entities/tools/NotebookLM.md - kb/entities/tools/Obsidian Web Clipper.md - kb/entities/tools/Obsidian.md - kb/entities/tools/OpenAI Codex.md - kb/entities/tools/OpenCode.md - kb/entities/tools/Pi.md - kb/entities/tools/Proton.md - kb/entities/tools/Steam.md - kb/entities/tools/Wine.md - kb/entities/tools/awesome-llm-wiki.md - kb/entities/tools/farzaa gist.md - kb/entities/tools/gdeploy.md - kb/entities/tools/makepkg.md - kb/entities/tools/pascalandy schema.md - kb/entities/tools/qmd.md - kb/entities/tools/wikitool.md - kb/index.md - kb/log.md - raw/CONTRACT.md - tools/CONTRACT.md - tools/README.md - tools/chemenu/api.py - tools/chemenu/cli.py - tools/chemenu/commands/confidence_decay.py - tools/chemenu/commands/docs_verify.py - tools/chemenu/commands/doctor.py - tools/chemenu/commands/index_build.py - tools/chemenu/commands/new_page.py - tools/chemenu/commands/search.py - tools/chemenu/commands/touch.py - tools/chemenu/commands/version_cmd.py - tools/chemenu/conventions.py - tools/chemenu/corpus_diff.py - tools/chemenu/frontmatter_io.py - tools/chemenu/lint_core.py - tools/chemenu/mcp/server.py - tools/chemenu/page.py - tools/chemenu/search/base.py - tools/chemenu/search/filters.py - tools/chemenu/search/ripgrep.py - tools/chemenu/search/service.py - tools/chemenu/search/types.py - tools/chemenu/tests/conftest.py - tools/chemenu/tests/test_api.py - tools/chemenu/tests/test_confidence_decay.py - tools/chemenu/tests/test_corpus_diff.py - tools/chemenu/tests/test_docs_verify.py - tools/chemenu/tests/test_frontmatter_io.py - tools/chemenu/tests/test_index_build.py - tools/chemenu/tests/test_kb_scan.py - tools/chemenu/tests/test_lint.py - tools/chemenu/tests/test_mcp_server.py - tools/chemenu/tests/test_new_page.py - tools/chemenu/tests/test_page_ops.py - tools/chemenu/tests/test_provenance.py - tools/chemenu/tests/test_raw_cmd.py - tools/chemenu/tests/test_search.py - tools/chemenu/tests/test_touch.py - tools/chemenu/tests/test_type_resolver.py - tools/chemenu/tests/test_version_cmd.py - tools/chemenu/tests/test_xref.py - tools/chemenu/version.py - types/concept.md - types/concept.schema.yaml - types/entity.md - types/entity.schema.yaml - types/instruction.md - types/type-spec.md
33 KiB
type, entity_type, tags, created, modified, related, sources, provenance, summary
| type | entity_type | tags | created | modified | related | sources | provenance | summary | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| types/entity.md | tool |
|
2026-08-03 | 2026-09-02 |
|
|
sourced | Deterministisches CLI fuer alle mechanischen Wiki-Operationen; seit 2.0.0 im Paket chemenu, seit 2.4.0 zusaetzlich als MCP-Leseserver erreichbar, seit 2.5.0 mit Breaking-Change-Pflichtmarker |
wikitool
Typ: tool
Beschreibung
wikitool ist ein deterministisches CLI-Tool, das alle mechanischen Operationen für Chemenu verwaltet. Es erzwingt Konsistenz über Gerüstbau, Cross-References, Index-Neuerstellung, Log-Einträge, Confidence-Decay-Berechnungen und Git-Publishing. Das Tool ist so ausgelegt, dass es manuelle Fehler verhindert und strukturelle Aspekte des Wikis (Frontmatter, Linking, Indizierung) immer korrekt sind, sodass sich das LLM auf semantische Inhalte konzentrieren kann.
Wie in der Codex-Analyse vermerkt, bietet wikitool die deterministische Grundlage, die vielen öffentlichen LLM-Wiki-Skills fehlt. Es implementiert die Trennung von "mechanisch vs. semantisch", die in AGENTS.md definiert ist, wobei wikitool alles handhabt, das präzise automatisiert werden kann, während das LLM Urteile und Prosa handhabt.
Kerndaten
- Zweck: Deterministische mechanische Wiki-Operationen
- Status: Aktiv, in aktiver Entwicklung
- Version: Teil des tools/chemenu-Pakets
- Sprache/Technik: Python 3, Typer CLI Framework
- Repository: Lokal unter
tools/chemenu/ - Einstiegspunkt:
tools/wikitool(Bash-Wrapper)
Beziehungen
- Teil von: AGENTS.md-Workflow-Implementierung
- Verwendet: Python
- Verwandt mit: LLM Wiki Pattern, Three-Layer Architecture , Mass-Update Gate
- implementiert: Semantic Lint Automation
- würde implementieren: Session Orientation
- Analyse: Source - LLM Improvements Codex Analysis, Source - LLM Improvements Sonnet Analysis
- implementiert: Iteration and Cost Limits
- implementiert: KB Stack Versioning
- implementiert: KB Migration
- implementiert: Personalization Plane
- zeigt: Detect-Repair Asymmetry
- behebt: Write-Once Frontmatter Fields
- implementiert: Denylist over Allowlist
- zeigt: Command Round-Trip Integrity
- zeigt: Green Suite Blind Spot
- zeigte: Ambient Environment Dependency
- setzt um: Structural Enforcement over Documented Rule
- setzt um: Optional Instance Context File
- implementiert: MCP-Leseserver
Befehle
wikitool bietet die folgenden Befehlskategorien:
- Gerüstbau:
new entity,new concept,new source,new comparison,new instruction. Ein--set-Wert für ein Array-Feld wird auf Kommas gesplittet; seit1.2.0ist ein literales Komma als\,ausdrückbar (Lookbehind(?<!\\),plus Unescape je Element), und ein für dasselbe Array-Feld wiederholtes--sethängt an statt zu ersetzen. Skalare behalten „last one wins". Derselbe Helper bedient auchxref add --entities1 - Seiten-Mutation:
touch(eines Seiten-modified/summary/provenance/confidence_base, seit1.4.0zusätzlich--set/--add/--removefür jedes Feld, das das Schema des Seitentyps deklariert, abzüglich der Sperrlistetype,confidenceund der Referenz-Arrays;--add/--removearbeiten auf einzelnen Elementen eines Listenfelds,--removegelingt und meldet es, wenn das Element nicht vorhanden ist, und ein pertouchgeschriebenesraw_files:wird gegen das Dateisystem geprüft wie beim Anlegen2 . Siehe Write-Once Frontmatter Fields und Denylist over Allowlist),rename(Seite umtiteln und jeden Verweis neu ausrichten, oder Verweise auf eine bestehende Seite neu ausrichten),rm(Löschen und Entfernen von Verknüpfungen) - Cross-References:
xref add,xref remove,xref link-source- seit1.6.0schreibtlink-sourcebeide Richtungen: das Ziel bekommtsources:und einen Siehe-auch-Eintrag, die Source-Seite trägt das Ziel in ihr eigenesentities:oderconcepts:ein. Welches der beiden Felder es wird, folgt der Collection des Ziels (kb/entities/→entities:), sodass eine neue Collection hier keine Codeänderung braucht.xref addlehnt eine Seite ab, deren Typrelated:nicht deklariert, und prüft beide Seiten, bevor es eine schreibt;xref removefegt auch ein undeklariertes Feld weg und löscht den Schlüssel, sobald er leer ist3 . Siehe Command Round-Trip Integrity - Zitate:
cite id,cite add,cite sync- der Fußnotenblock endet seit1.5.1an der nächsten Überschrift statt am Dateiende. Zuvor löschtecite addjeden Inhalt dahinter, weilsplit_cite_block()alles bis Dateiende als Block nahm und nur die Zitatdefinitionszeilen behielt;cite syncundrenamebenutzten denselben Pfad. Loser Text im Block wird auf den Seitenkopf zurückgefaltet statt abgelehnt, und weil der Block immer zuletzt gerendert wird, richtet die erste Zitatoperation eine verrutschte Seite von selbst wieder ein3 - Abfrage:
search- Textsuche überkb/durch ein austauschbares Backend (rgheute), plus--field-Prädikate, die auf Frontmatter evaluiert werden (entity_type=system,confidence>=0.8,tags=k8s,!source_url). Ohne Text ist es eine reine strukturierte Abfrage. Schreibgeschützt und ausgenommen von der Iteration-Budget-Gate, da Abfrage das Lesen statt das Iterieren ist - MCP-Server:
python -m chemenu.mcp(--transport stdio|streamable-http) - keinwikitool-Unterbefehl, sondern ein zweiter Einstiegspunkt überchemenu.api.Corpus, derselbe Kern wiesearch/types/lint. Siehe MCP-Leseserver - Indizierung:
index rebuild- regeneriert diekb/index.md-Map plus eine pro-SammlungINDEX.md, wobei ein Bereich bei 50 Zeilen in seine eigene Shard aufgeteilt wird - Herkunft:
sources coverage,sources trace,sources rebuild-index - Protokollierung:
log append,log status - Linting:
lint- schreibt den vollen Report seit1.2.0immer, standardmäßig nachreports/Lint Report <datum>.md, und gibt den Pfad aus; gedruckt werden nur Abschnitte mit Befunden,--fulldruckt alles,--jsonschreibt nichts1 - Typen:
types list,types describe - Konfidenz:
confidence decay,confidence init-base - Veröffentlichung:
publish- zählt seit1.5.0nur noch Dateien, die eine Entscheidung tragen: Pfade unterwork/und generierte Dateien (kb/index.md,kb/log.md,kb/provenance.md, jedeINDEX.md) werden committet und gepusht, aber nicht gegen die Schwelle gezählt; die Weigerungszeile weist beide Gründe getrennt aus4 . Siehe Mass-Update Gate - Budget:
budget status,budget reset- Obergrenze seit1.2.060 Aufrufe je Sitzung; ein Aufruf, der über_util.fail()abgelehnt wurde, bekommt seinen Slot zurück und bleibt trotzdem inrecent, damit der Loop-Breaker ihn sieht1 . Siehe Iteration and Cost Limits - Versionierung:
version bump,version check-bumpschreibt die Stack-Version in die WurzeldateiVERSION. Kompatibilität (ist die neue Version ein Drop-in-Ersatz - vorwärts ohne Handarbeit, rückwärts noch downgradebar) und Inhaltsmigration sind seit2.5.0zwei getrennte Fragen: ein Grenzübertritt verlangt zwingend--breaking "<was aufhört zu funktionieren>", verweigert auf jedem anderen Bump, und zusätzlich entweder ein Migrationsdokument oder--no-migration "<Begründung>", wennkb/unangetastet bleibt. Beide Marker landen als eigene Zeile imCHANGES.md-Eintrag (**Breaking Change:**vor**Migration:**) und werden vondocs verifyunabhängig voneinander geprüft5 . Siehe KB Stack Versioning.checkist der einzige Befehl, der einen Netzaufruf machen darf - ohne Schlüssel, mit Timeout und injizierbarem Fetch, damit Tests nie ein Netz berühren6 - Migration:
migrate list,migrate status,migrate verify,migrate done,migrate baseline-statusbildet das Intervall(kb_version, VERSION]aufsteigend,doneverweigert jede Version, die nicht das nächste Glied ist,verifyvergleicht zwei Revisionen des Korpus übercorpus_diffmit Zählungen statt Mengen,baselinesetzt einer Instanz ohne.wikitool-kb.jsonihren Startwert6 . Siehe KB Migration - Distribution:
dist export- erzeugt das Release-Artefakt und legt den Stempel.wikitool-release.jsonhinein6 - Diagnose:
doctor- enthält einenkb-version-Check6 sowie seit1.1.0einenpersonalization-Check:FAIL, wennUSER.mdoderSOUL.mdfehlen, und ebenso, wenn eine der beiden noch die Sentinel-Zeile des Templates trägt - ein umbenanntes Template ist kein ausgefülltes. Siehe Personalization Plane sowie seit1.8.0einenenvironment-Check für ENVIRONMENT.md:OKbei fehlender wie bei ausgefüllter Datei,WARNallein bei einem umbenannten, nie ausgefüllten Template. NieFAIL- die Datei ist optional, und einFAILmachte sie durch die Hintertür verpflichtend7 . Siehe Optional Instance Context File - Coverage: CI führt die Tests seit
1.8.1mitpytest --covaus (Konfigurationtools/.coveragerc, nichtpytest.ini- coverage.py liest Letzteres nicht) und lädt den Bericht als Artefakt hoch, ohne Abbruchschwelle - siehe Messen vor Schwelle - Dokumentation:
docs verify- überprüft, dass jeder CLI-Befehl intools/CONTRACT.mddokumentiert ist und umgekehrt, dass jedes Verzeichnis unterkb/eineCOLLECTION.mdhat und kein Verzeichnis außerhalb hat, dass jeder Stage-Contract existiert, und dass keine Ignorierungsregel Inhalte unterraw/oderkb/stille ausschließen würde (oder stille generierte Ausgabe unterreports/committen würde) - Anweisungen:
instructions sync,instructions verify,instructions list- publiziert jedeinstructions/<name>/SKILL.mdals Kopie in.agents/skills/(nativ gelesen von GitHub Copilot, Codex CLI und Mistral Vibe) und.claude/skills/(erforderlich für Claude Code, das nichts anderes liest), und überprüft die Schicht: Anweisungen gegen ihre Schema, Skill-Frontmatter gegen das, das der Harness liest, jede veröffentlichte Kopie Byte-für-Byte gegen ihre Quelle, und alle Anweisungen, auf die nichts verweist
Details
Das Tool verwendet eine Python-Paketstruktur mit einer Typer-basierten CLI. Wichtige Module sind:
cli.py- Haupteinstiegspunkt des Befehlscommands/new_page.py- Seiten-Gerüstbaucommands/xref.py- Cross-Reference-Verwaltungcommands/search.py+search/- Abfrage, aufgeteilt in einen Backend-agnostischen Kern (SearchBackend-Protokoll, Frontmatter-Prädikate, Reciprocal Rank Fusion) und ein Backend (ripgrep.py), sodass ein Vektor-Backend ein neues Modul statt einer Umschrift istcommands/index_build.py- Katalog-Map und Shard-Neuerstellungcommands/instructions_cmd.py- Anweisungs-Schicht: publish, verify, listcommands/provenance_cmd.py- Herkunfts-Verfolgungcommands/log_append.py- Log-Eintrag-Formatierungcommands/lint.py- Strukturvalidierungcommands/git_publish.py- Git-Operationencommands/skills_sync.py-.agents/skills/<->.claude/skills/-Spiegelung und Verifikation8
Die Provenance-Remediation-Session fügte drei wichtige operative Verbesserungen hinzu:
- Neue Provenance-Befehlsgruppe (
sources coverage,sources trace,sources rebuild-index) für Raw-zu-Source- und Source-zu-Page-Nachverfolgbarkeit. - Erweiterte Lint-Überprüfungen für nicht abgedeckte Raw-Dateien, beschädigte Raw-Verweise, fehlende Provenance-Marker und Citation/Frontmatter-Drift.
- Wrapper-Verhaltensbehebung, sodass relative Pfadargumente vom Arbeitsverzeichnis des Aufrufers (Repository-Root-Verwendung) statt von
tools/aufgelöst werden.
Der Bash-Wrapper unter tools/wikitool aktiviert die Python venv und exportiert PYTHONPATH, um chemenu importierbar zu halten, ohne cwd zu ändern.
Für die Migrationsprüfung kamen zwei Module dazu: corpus_diff.py vergleicht zwei Revisionen
des Korpus und kb_state.py liest und schreibt .wikitool-kb.json. Beide Seiten des Vergleichs
müssen dieselbe Vorstellung von „Seite" haben: Ein erster Lauf meldete 13 entfernte Seiten, die
keine waren, weil die historische Seite jede .md unter kb/ zählte und die
Arbeitsbaum-Seite iter_kb_pages benutzte. Ein gemeinsames kb_scan.is_page_path löst das
auf6 .
kb_scan.extract_wikilinks() liefert bewusst ein Set. Das ist die richtige Form für lint, das
fragt, ob ein Verweis auflöst - und die falsche für eine Migrationsprüfung, die fragt, ob einer
verschwunden
ist6 .
Historie
- 2026-09-02 -
2.5.0(Commit31662dc, 806 Tests grün, 6 neu): Gitea-Issue #26 geschlossen.instructions/dev/version-parts.md(neu,instructions/dev/- kein Verweis aus einem ausgelieferten Artefakt,instructions verifyhätte einen dangelnden Verweis nachdist exportgemeldet) trennt die Kompatibilitäts- von der Migrationsfrage: Drop-in-Test in beiden Richtungen, Katalog der Brüche mit unangetastetemkb/(Update-Pfad, Artefaktname, Import-Name, Flag/Envvar, Shape einer maschinengelesenen Datei),2.0.0als Fallbeispiel.version bumpbekommt--breaking "<was aufhört zu funktionieren>", bei jedem Grenzübertritt Pflicht und auf jedem anderen Bump verweigert;docs verifyprüft das über eine zweite, von der Migrationsprüfung unabhängige Regel.stack-devbekommt einen Entscheidungspunkt: kein Grenzübertritt aus eigener Initiative, erst Bruch, Handarbeit je Instanz und Alternativen (Shim, aufschieben/bündeln, kompatibel/brechend mit Deprecation-Fenster aufspalten) vorlegen, dann Freigabe5 . - 2026-09-02 -
2.2.3-2.4.1: die vierstufige Sequenz aus Issue #36 (Publish-Remote-Gate scharf, Lesepfad gehärtet, Root-Auflösung und Bibliotheksgrenze, MCP-Leseserver) plus Menschendoku..wikitool-remotes.jsonwar trotz gegenteiliger Dokumentation nicht gesetzt - angelegt und gegen ein erfundenes Ziel gegengeprüft (Exit 42). Sechs Lesepfad-Härtungen: gelöschter ReDoS-Zweig in der Ranking-Funktion, ein 30-Sekunden-rg-Timeout, ein YAML-Alias-Refusal (267 B → 672.603 Knoten reproduziert),CSafeLoader(265 ms → 54 ms), gemeldetes statt geschlucktes kaputtes Frontmatter, ein Korpus-Cache, der nie einen schmutzigen Arbeitsbaum cacht.config.ROOTund alle abgeleiteten Pfade waren zur Importzeit gebunden - jetzt lazy aufgelöst ($CHEMENU_ROOT→ Walk-up), mit einem eigenenconfig.reset()gegen eine Falle, in diemonkeypatchs eigener Teardown sonst zurückläuft. Neuer typerloser Lesekern (search/service.py,lint_core.py,types_core.py) hinterchemenu.api.Corpus, darüber der MCP-Server:search/types/describe_type/lint/status, strukturell ohne Schreibpfad, jede Antwort mit Commit-Stempel.wikitool searchend-to-end 593 ms → 347 ms. MenschendokuINSTALL-MCP.md, ausgeliefert überdist_cmd.ROOT_FILES. Siehe Publish-Remote Gate, Mass-Update Gate, MCP-Leseserver9 - 2026-09-01 -
2.1.0-2.2.2: Vorbereitung und Durchführung der Veröffentlichung.dist exportbekommtREQUIRED_ROOT_FILES(fehlende Lizenzdateien lassen den Export scheitern statt still weiterzulaufen) undfind_leaks()(strukturelle Prüfung des fertigen Export-Plans gegen Personalisierungsdateien,instructions/dev/,kb/- undraw/-Inhalte - bewusst kein Text-Muster-Scan, weil der eigene Hostname legitim inINSTALL.md/version.pysteht).publishbekommt ein drittes Gate: das Publish-Remote-Gate prüft die aufgelöste Push-URL (nicht den Remote-Namen) gegen eine optionale, gitignorete.wikitool-remotes.jsonund hat als einziges der drei Gates keinen--confirm-Token - der Weg daran vorbei ist ein bewusster Edit der Datei durch den Nutzer, nie durch einen Agenten.doctorbekommt denpublish-remotes-Check. Einraw_dir-Testfixture lösteconfig.ROOTgegen das echte Repo-Root statt die Fixture auf und bestand nur, weil zufällig ein Verzeichnis existierte, das der Korpus-Schnitt entfernte - in der Fixture geschlossen, nicht im einzelnen Test, aus demselben Grund wie Gitea #8. Siehe Chemenu, Mass-Update Gate, Publish-Remote Gate, Delete Rather Than Anonymize, Dual Licensing by File Plan10 11 - 2026-09-01 -
2.0.0(Commit9a7abe6, 730 Tests grün): das Python-Paket heißtchemenustattwiki_tools, das Kommando bleibtwikitool. Der Import-Name eines Pakets ist ein flacher globaler Namensraum ohne Kollisionsschutz,wiki_toolswar dafür zu generisch; Distributionsname, Import-Name und Kommandoname sind drei unabhängige Dinge, und ein abweichender Kommandoname ist verbreitete Praxis. Unverändert bleiben damit auch.wikitool-release.json,.wikitool-kb.jsonund dieWIKITOOL_*-Variablen - sie gehören zum Kommando, nicht zum Paket. Verzeichnet inCHANGES.md(2.0.0), Kontext in Chemenu. - 2026-08-31 -
1.8.0(Commita243a4a):doctorbekommt denenvironment-Check,dist exportliefertENVIRONMENT.md.templateüber die Root-Allowlist aus, unddocs verifyprüft das zugehörige Ignore-Muster in beide Richtungen - die Datei muss ignoriert sein, ihr Template darf es nicht7 - 2026-08-31 -
1.7.1(Commit31c9b81, Tagv1.7.1, 702 Tests grün, 7 neue): die Testsuite läuft seither gegen eine absichtlich leere Maschine, Gitea-Issue #8 (prio/1). Eine autouse-Fixture inconftest.pysetztHOMEje Test in dessentmp_path, git-Konfiguration auf/dev/nullund löscht die Tool- sowie die git-Identitätsvariablen;WIKI_TRACE_DIRbleibt als einziges gesetzt, weil zwei Telemetrie-Tests einen geschriebenen Trace behaupten. Anlass wardefault_author(), das pergit config user.namedie globale Konfiguration des Aufrufers las - vier Tests hingen nacheinander daran, zwei davon geschrieben, nachdem das Issue offen war. Die Wirkung ist nicht am grünen Lauf belegt (die Suite war unter der gehärteten Umgebung schon vorher grün), sondern an der Gegenprobe: dieselbe Funktion antwortet ohne Isolierung mit dem globalen git-Namen, mit IsolierungNone. 702 Tests in vier Umgebungen - Entwickler-Shell, vergiftet,env -i, CI12 . Siehe Ambient Environment Dependency und Structural Enforcement over Documented Rule - 2026-08-31 -
1.6.0(Commitce03749, 689 Tests grün, 11 neue): drei Symptome mit einer Ursache, Gitea-Issue #18 (prio/1).xref_link_sourceschrieb nur die Zielseiten, nie die eigenen Arrays der Source-Seite - die waren nachnew sourceunerreichbar. Das vonxref adddort geschriebenerelated:deklarierttypes/source.mdnicht, undstrip_frontmatter_ref()räumte nur deklarierte Felder, also konntexref removees nicht entfernen. Seither schreibtlink-sourcebeide Richtungen,xref addprüft beide Seiten vorab und lehnt ein undeklariertes Feld ab,xref removefegt Reste. Der Beleg für die Inversenbeziehung war eine Concept-Seite, die byteidentisch ausxref removeplusxref link-sourcezurückkam3 . Siehe Command Round-Trip Integrity - 2026-08-31 -
1.5.1(Commitbb4123b):cite addlöschte jeden Inhalt hinter dem Fußnotenblock, weilsplit_cite_block()alles von der Überschrift bis Dateiende als Block nahm und daraus nur die Zitatdefinitionen behielt;cite syncundrenameteilten den Pfad, und eine nur hinter dem Block referenzierte Fußnote wäre voncite syncals verwaist gelöscht worden. Daxref addam Dateiende anhängt, entschied allein die Reihenfolge beider Kommandos über den Bestand der Querverweise. 8 Seiten mit 74 Zeilen standen in dieser Position;cite sync --allnormalisierte elf Seiten auf 0 (Gitea-Issue #17,prio/1)3 . Siehe Command Round-Trip Integrity und Green Suite Blind Spot - 2026-08-31 -
1.5.0(Commit3166c31, 9 Dateien, 678 Tests grün): zwei Kalibrierungen aus einer Beobachtung, nicht aus einem Issue.publishnimmt generierte Dateien aus der Gate-Zählung heraus -is_generated()kannte die Liste undGATE_EXEMPT_PREFIXES/counted_files()boten den Mechanismus, verbunden waren beide nie -, und das Kalibrierungsband für einen komplexen Multi-Tool-Workflow steigt inrun_budget.pyvon 15-25 auf 20-35 Aufrufe. Beides ist an realen Läufen gemessen: drei Ingest-Changesets (14 → 9, 16 → 9, 11 → 5 gezählte Dateien) und vier Sitzungszähler austools/.wikitool_session/budget.json(30, 29, 26, 24 Aufrufe). Schwelle 10 und Budget-Obergrenze 60 blieben unverändert4 - 2026-08-31 - Gitea-Issues #12 und #13 behoben (
1.2.0, Commit40adbb7): Komma-Escape und Append-Semantik inparse_list(), Budget-Erstattung für abgelehnte Aufrufe, Obergrenze 60 und der immer geschriebene Lint-Report. Der End-to-End-Test deckte einen zweiten Defekt auf:dump_frontmatterschreibt Listen im Flow-Stil,_format_scalarentschied das Quoting aber über eine Round-Trip-Probe auf Dokumentebene, wo ein Komma gewöhnlich ist - innerhalb von[...]ist es ein Indikator. Behoben infrontmatter_io.pyüber_round_trips_as_string(text, flow=True)und einen_quote()-Helper, der sich vom Dumper eine einelementige Flow-Sequenz geben lässt und die Klammern abstreift, weil ein blanker Plain-Scalar aussafe_dumpeinen...-Dokumentende-Marker mitbringt. Bestehende Ausgabe blieb unverändert. 658 Tests grün, auch in der gehärteten Umgebung, nachdem zwei neue TestsWIKI_AUTHORselbst setzen1 - 2026-08-31 - Gitea-Issue #14 geschlossen (
1.4.0, Commitdbe2f73, 9 Dateien, 674 Tests grün):touchbekommt--set/--add/--remove. Der Schnitt blieb bewusst eng - die Dateiverschiebung bleibt zweistufig (git mv, danntouch --set raw_files=…),raw renamewurde als Issue #16 (prio/2,size/S) abgespalten._coerce_set_value,_parse_set_fieldsund_check_raw_files_existwanderten ausnew_page.pynachcommands/_util.py, damittouch --setden Komma-Defekt aus Issue #12 nicht am ersten Tag erbt. Als Nebenbefund fiel eine Testfalle: ein direkt aufgerufener Typer-Callback bekommt für jedes ausgelassene Argument einOptionInfo-Objekt, worauf drei neue Optionen sieben Aufrufstellen intest_touch.pybrachen; die Tests laufen jetzt über einen_touch(**overrides)-Helper2 - 2026-08-31 - Zuvor offene Lücke (Gitea-Issue #14): kein Befehl schreibt
raw_files:auf einer bestehenden Seite.touchdeckt die Felder ab, die die Seite beschreiben,xrefdie Seiten-Referenz-Arrays;raw_files:zeigt auf einen Pfad und ist keines von beidem. Vorgeschlagen sindsources relinkoder einraw rename, dasgit mvund jede referenzierende Source-Seite in einem Schritt erledigt. Siehe Detect-Repair Asymmetry1 - 2026-08-30 - Befehlsgruppen
versionundmigratesowiedist exportergänzt; Stack- und KB-Version werden seither in getrennten Dateien geführt. Zwei Tests, die die Autor-Ermittlung übergit config user.nameprüfen sollten, hingen unbemerkt an der globalen git-Konfiguration der ausführenden Maschine und fielen im ersten CI-Lauf; behoben in den Tests, nicht durch eine git-Identität für CI6 - 2026-08-05 - Wechsel von
skills sync/verifyvom Kopieren von Skill-Verzeichnissen zu relativen Symlinks (Claude Codes eigene Dokumentation bestätigt, dass es symlinked Skill-Ordner folgt) - ein Symlink kann niemals veralten, im Gegensatz zu einer Kopie. - 2026-08-04 - Befehle
skills sync/skills verifyhinzugefügt, um.agents/skills/in.claude/skills/für Claude-Code-Kompatibilität zu spiegeln, als Teil des Aufteilens von AGENTS.md-Workflows in diskrete Skills8 . - 2026-08-03 - Deterministische Provenance-Befehlsgruppe hinzugefügt und Wrapper-Pfadverhalten während der Conversation-Ingest/Provenance-Remediation-Arbeit gehärtet.
- 2026-08-03 - Seite während der Einspeisung der Codex-Analyse erstellt
- 2026-08-02 - Tool referenziert in wikitool-Lint-Verbesserungen (Log-Eintrag)
- 2026-07-26 - Anfängliche Implementierung als Teil der Wiki-Infrastruktur
Siehe auch
- AGENTS.md
- LLM Wiki Pattern
- Source - LLM Improvements Codex Analysis13
- Semantic Lint Automation
- Session Orientation
- Source - LLM Improvements Sonnet Analysis
- Source - Copilot Skill Restructure Instructions
- Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04
- Iteration and Cost Limits
- Source - LLM Improvements Production Agent Gaps 2026
- KB Stack Versioning
- KB Migration
- Personalization Plane
- Detect-Repair Asymmetry
- Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31
- Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31
- Write-Once Frontmatter Fields
- Denylist over Allowlist
- Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31
- Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31
- Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31
- Command Round-Trip Integrity
- Green Suite Blind Spot
- Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31
- Ambient Environment Dependency
- Structural Enforcement over Documented Rule
- Optional Instance Context File
- Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31
- Source - Public Release, Corpus Purge and History Squash Session 2026-09-01
- Source - Publish-Remote Gate and Issue Triage Session 2026-09-01
- Source - Private-Instance Merge Correction and Issue 30 Session 2026-09-01
- MCP-Leseserver
Fußnoten
Beziehungen
- implements: Semantic Lint Automation
- see-also: Session Orientation
- implements: Iteration and Cost Limits
- implements: KB Stack Versioning
- implements: KB Migration
- implements: Personalization Plane
- exemplifies: Detect-Repair Asymmetry
- implements: Write-Once Frontmatter Fields
- implements: Denylist over Allowlist
- exemplifies: Command Round-Trip Integrity
- exemplifies: Green Suite Blind Spot
- exemplifies: Ambient Environment Dependency
- implements: Structural Enforcement over Documented Rule
- implements: Optional Instance Context File
- implements: MCP-Leseserver
- part-of: AGENTS.md
- uses: Python
- implements: LLM Wiki Pattern
- implements: Three-Layer Architecture
- implements: Mass-Update Gate
- evidenced-by: Source - LLM Improvements Codex Analysis
- evidenced-by: Source - LLM Improvements Sonnet Analysis
-
Source - Conversation - Comma Bug Budget Refund and Lint Report Path Session 2026-08-31 ↩︎
-
Source - Conversation - Write-Once Frontmatter Fields and touch --set Session 2026-08-31 ↩︎
-
Source - Conversation - Two Round-Trip Defects Found by an Ingest Session 2026-08-31 ↩︎
-
Source - Conversation - Gate Counting and Measured Calibration Session 2026-08-31 ↩︎
-
Source - Version Part Nomenclature and Breaking Change Gate Session 2026-09-02 ↩︎
-
Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30 ↩︎
-
Source - Conversation - ENVIRONMENT.md as an Optional Third Session-Level File Session 2026-08-31 ↩︎
-
Source - Conversation - AGENTS.md Skill Restructuring Session 2026-08-04 ↩︎
-
Source - MCP Read Server Implementation Session 2026-09-02 ↩︎
-
Source - Public Release, Corpus Purge and History Squash Session 2026-09-01 ↩︎
-
Source - Publish-Remote Gate and Issue Triage Session 2026-09-01 ↩︎
-
Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31 ↩︎