• v10.0.0
    CI / verify (push) Successful in 8m40s
    CI / pwsh (push) Successful in 2m47s
    Release / release (push) Successful in 40s
    Release / wiki-mirror (push) Successful in 27s
    Stable

    torben released this 2026-10-13 06:20:55 +00:00 | 30 commits to main since this release

    10.0.0 - 2026-10-13 - Einstellungen in drei Stufen, Eingangskanäle, raw fetch mit Site-Handlern und Login, Backup und Exporte

    Author: Torben Nehmer

    Breaking Change:

    • Die vier Dateien .wikitool-remotes.json, .wikitool-telemetry.json, .wikitool-upload.json und .wikitool-tasks.json werden nicht mehr gelesen; ein Kommando, das die Einstellung braucht, endet mit Exit 42, bis 'tools/wikitool config migrate' sie in wikitool.json, .wikitool-local.json und die Secrets-Referenzen übernommen hat
    • Die Quarantäne heißt quarantine/ statt mcp-upload/. Eine Instanz mit wartenden Einreichungen verschiebt das Verzeichnis einmal von Hand (Migrationsschritt); bis dahin enden die upload-Kommandos mit Exit 1.

    Migration: required - instructions/migrations/10.0.0-settings-tiers.md

    High impact

    • Die Einzeldateien .wikitool-remotes/-telemetry/-upload/-tasks.json sind in den drei Einstellungsstufen aufgegangen; neues Kommando config migrate
    • Eingangskanäle: der intake-Abschnitt kennt mehrere Kanäle (mcp, folder, command), alle enden in quarantine/; neues Kommando upload collect zieht Sync-Ordner und Programme in die Quarantäne

    Medium impact

    • Einstellungen in drei Stufen: wikitool.json (Instanz), .wikitool-local.json (Checkout), Secrets nur per Verweis - auch über die 1Password-CLI; neues Kommando config set
    • Site-Handler für raw fetch: Standardform der URL, Bereinigung und Hinweise pro Website als Code-Registry (learn.microsoft.com zuerst); Abschnitt sites in den Einstellungen
    • Site-Handler der Instanz als JSON-Dateien in sites/, nach denselben Bausteinen wie die des Stacks - die nun ebenfalls Datendateien sind
    • raw fetch --scope: eine Seite und die Unterseiten, die ihr Site-Handler anbietet, als ein Bündel in incoming/
    • raw fetch hinter einem Login: raw login speichert die Session des Nutzers als Secret, raw fetch holt damit; gerenderte Seiten über die optionale Browser-Komponente, externe Abrufer pro Host
    • Gesprächssprache: AGENTS.md § Conversation language legt fest, dass der Agent im Chat die KB-Sprache spricht; instructions sync schreibt den Sprachwert als generierte Zeile in jedes veröffentlichte SKILL.md, instructions verify und doctor melden eine geänderte Sprache als Drift
    • Backup in einen Sync-Ordner (OneDrive): backup init legt ein Bare-Repo unter /git als origin an, backup run und publish spiegeln die Maschinendaten nach //, doctor warnt vor .git im Sync-Ordner
    • Exporte als konfigurierte Ziele: export run schreibt eine abgeleitete, schreibgeschützte Lesefassung von kb/ je Zielordner (Markdown oder über ein Konvertierprogramm), auf Wunsch nach jedem publish; raw accept lehnt auch Dateien ab, die in einem Export-Manifest stehen

    Low impact

    • Ketten von Paketen: stack-dev schreibt ## Kette, stack-close nennt das nächste Glied
    • raw_cmd.py in ein Paket zerlegt: ein Modul je Unterkommando, Ausgabe unverändert
    • Testkorrektur: die Live-Tracker-Suite importiert, was ihr CalDAV-Anleger braucht
    • doctor: die Beschreibung der Strukturprüfung nennt sites/CONTRACT.md, die doctor seit den Site-Handlern der Instanz verlangt
    • raw fetch --scope ist die Entscheidung des Nutzers: raw/CONTRACT.md und wiki-ingest sagen, wer es anstößt und warum es kein Folgen von Links ist
    • AGENTS.md § Gates and mcp-read-server name every intake channel behind the Upload Review Gate, not only submit (#213 close)
    • publish-cycle: what a WARN or ERROR from the page export after publish means; architecture names the page export as the way out for a reader that cannot ask (#214 close)

    Dieses Release ordnet die Konfiguration neu und öffnet die Instanz nach außen. Einstellungen liegen in drei Stufen - wikitool.json für die Instanz, .wikitool-local.json für den Checkout, Secrets nur als Verweis, auch über 1Password -, und die vier alten .wikitool-*.json-Dateien sind darin aufgegangen; der Pflicht-Migrationsschritt führt config migrate aus und verschiebt mcp-upload/ nach quarantine/. raw fetch kennt Site-Handler je Website, auch als Dateien der Instanz in sites/, holt mit --scope eine Seite samt Unterseiten als Bündel und arbeitet hinter einem Login. Neue Wege hinein und hinaus: mehrere Eingangskanäle (MCP, Sync-Ordner, Programm) enden alle in der Quarantäne vor dem Upload Review Gate, backup sichert eine Instanz ohne Git-Server in einen Sync-Ordner, und export run schreibt eine schreibgeschützte Lesefassung von kb/ in konfigurierte Zielordner. Dazu spricht der Agent im Chat die KB-Sprache.

    Einstellungen in drei Stufen, Secrets nur per Verweis (#207)

    Neue Einstellungen liegen in wikitool.json (eingecheckt, gleich in jedem Klon) oder .wikitool-local.json (gitignoriert, nur dieser Checkout); jedes Feld deklariert seine Stufe, ein Wert in der falschen Datei ist ein Fehler, keine Überschreibung. Ein Feld, das ein Programm benennt oder ein Gate betrifft, ist nie instance. Secrets stehen nur als Verweis in den Dateien: {"ref": "<name>"} über WIKITOOL_SECRET_<NAME> oder eine Secret-Datei im Nutzerverzeichnis, {"ref": "op://..."} über die 1Password-CLI, die der Preflight als optionales Werkzeug erfasst; gesperrtes 1Password ergibt exit 42. config set schreibt dorthin, wo die Stufe es verlangt, und verweigert Secret-Werte; doctor zeigt eine Zeile pro Stufe, docs verify prüft wikitool.json auf Klartext-Secrets. Noch liest kein Feature seine Einstellungen so.

    Site-Handler für raw fetch (#200, #210)

    Für URLs einer bekannten Website holt raw fetch die Seite in Standardform, leitet den Text ohne Seitenbedienung ab und gibt Hinweise als CHECK-Zeilen aus, nur wenn sie zutreffen. Handler sind JSON-Dateien nach tools/chemenu/sites/site.schema.json: die des Stacks unter tools/chemenu/sites/handlers/ (zuerst learn-microsoft und learn-microsoft-powershell-module), die der Instanz unter sites/; ein Handler der Instanz mit demselben Host und Pfad ersetzt den des Stacks. doctor meldet eine unbrauchbare Datei als FAIL, und raw fetch bricht für deren Host mit Exit 1 ab, bevor etwas geholt wird. Der Header nennt site: (<name> (instance) bei der Instanz) und requested_url; das .html bleibt byte-genau. Der Abschnitt sites der Einstellungen schaltet Handler ab, wählt das Gebietsschema und nimmt Hinweiszeilen je Host-Muster auf. Regeln: sites/CONTRACT.md.

    raw fetch --scope: ein Bündel aus Index und Unterseiten

    Bietet der Site-Handler einer Seite Unterseiten an (Baustein subpages in der Handler-Datei; der Modulindex von learn.microsoft.com bietet seine Cmdlet-Seiten an), nennt raw fetch das als eine CHECK-Zeile, und raw fetch <url> --scope holt Index und Unterseiten als einen Ordner incoming/<name>/ mit einem Paar je Seite und dem Manifest _scope.json; raw accept incoming/<name> nimmt ihn unverändert an. Geholt wird nur, was der Handler benennt, nie von einem anderen Host. Vorher prüft der Befehl robots.txt und die Obergrenze sites.max_pages (Standard 200); jeder Fehler bricht ab, bevor etwas in incoming/ liegt. Zwischen den Unterseiten wartet er sites.pause_seconds (Standard 1). Ob --scope läuft, entscheidet der Nutzer: wiki-ingest fragt ihn, wenn die CHECK-Zeile es anbietet.

    raw fetch hinter einem Login (#169)

    Der Abschnitt fetch der Einstellungen ordnet einem Host einen Abrufweg zu. Bei session holt raw fetch mit der Session, die der Nutzer einmal mit raw login <host> im Browserfenster hinterlassen hat. Sie liegt als Secret außerhalb des Baums, ein Passwort wird nie gespeichert. Der Site-Handler nennt die Login-Seite und das Zeichen einer eingeloggten Seite. Fehlt die Session oder ist sie abgelaufen, endet der Abruf mit Exit 42 ohne Teaser. render: true holt über einen Browser (rendered: true). Ein anderer Weg nennt einen externen Abrufer aus .wikitool-local.json. Playwright ist optional (preflight --with browser), und doctor meldet es in der Zeile browser.

    Altlasten der Konfiguration bereinigt (#208)

    Die vier Einzeldateien .wikitool-remotes.json, .wikitool-telemetry.json, .wikitool-upload.json und .wikitool-tasks.json gibt es nicht mehr; ihre Felder sind die Abschnitte remotes, telemetry, upload, tasks, superproductivity und caldav der drei Stufen. Zugangsdaten sind dort nur noch Verweise. Der Code liest die alten Dateien nicht mehr: ein Kommando, das die Einstellung braucht, endet mit Exit 42 und nennt tools/wikitool config migrate, doctor meldet FAIL, der Telemetrie-Hook bleibt still. config migrate läuft einmal je Checkout, ist wiederholbar und lässt bei jedem Abbruch die alten Dateien unverändert. WIKITOOL_TASKS_CONFIG zeigt auf ein Profil im Format von .wikitool-local.json. Nur .wikitool-tools.json bleibt eine eigene Datei.

    Eingangskanäle: mehrere Wege in dieselbe Quarantäne (#213)

    Der Abschnitt intake in .wikitool-local.json ersetzt upload und führt benannte Kanäle mit einem Handler: mcp (das submit-Werkzeug, höchstens einer), folder (ein Ordner außerhalb der Instanz, den ein Sync-Client füllt) und command (ein Programm aus commands). Alle enden in quarantine/ (vorher mcp-upload/), jede Einreichung trägt channel, handler und origin, und upload accept bleibt das Gate. Neu ist upload collect [<kanal>...]: es zieht Ordner und Programme in die Quarantäne, entfernt eine Quelle erst, wenn die Kopie fertig ist und die Quelle noch Größe und sha256 hat, und lässt alles andere liegen. config migrate macht aus .wikitool-upload.json den Kanal mcp; wartende Einreichungen in mcp-upload/ verschiebt der Migrationsschritt von Hand, bis dahin enden die upload-Kommandos mit Exit 1.

    Backup in einen Sync-Ordner (#186)

    Ohne Git-Server bleibt der Arbeitsbaum außerhalb des Sync-Ordners; gesichert wird in das Ziel, das die Sektion backup von .wikitool-local.json nennt. backup init legt <ziel>/git als Bare-Repo an und macht es zu origin, wenn keins existiert. Mit machine_data: true spiegelt jedes publish nach dem Push .wikitool-local.json, ENVIRONMENT.md, incoming/ und die extra-Pfade nach <ziel>/<maschine>/ samt Manifest; backup run tut dasselbe von Hand. Geschrieben wird nur dort und atomar, gelesen nur innerhalb der Instanz, Secrets nie. Eine gescheiterte Sicherung nach dem Push ist eine WARN-Zeile mit Exit 0, eine fehlerhafte Sektion stoppt publish vor dem Commit. doctor meldet sync-folder und backup. Ablauf und Wiederherstellung: docs/how-to/back-up-to-a-synced-folder.md.


    This note is a snapshot of the CHANGES.md entry as it stood when the tag was cut, and
    is never edited afterwards. The maintained version of this text - including any later
    correction - is the entry for this version in CHANGES.md in the repository.

    Downloads