Konfigurationsreferenz generieren: erst eine Quelle für die Formen der .wikitool-*.json schaffen #193

Closed
opened 2026-10-06 17:46:16 +00:00 by torben · 3 comments
Owner

Paket F aus #185 (E5 Punkt 5). Der Auslöser (#188 geschlossen, docs/reference/configuration.md aus #190 vorhanden) war eingetreten. Abgeschlossen (2026-10-07): gebaut und publiziert als 893db6e (Version 9.0.0-beta.8), verifiziert durch CI-Lauf 595 (verify inkl. Fresh-Instance, pwsh) und Release-Lauf 596; Doku-Nachtrag der Abschlussphase als 1559f4b, CI-Lauf 597 grün.

Anliegen

Die Formen der instanzbezogenen Konfigurationsdateien – .wikitool-telemetry.json, .wikitool-remotes.json, .wikitool-upload.json, .wikitool-tasks.json (Namen in tools/chemenu/config.py) – waren nur in Prosa beschrieben (docs/reference/configuration.md, für Upload docs/how-to/set-up-the-mcp-server.md § optional submit path, dazu handgeschriebene Expected:-Zeichenketten in den Fehlermeldungen der Lader). Festgelegt waren sie nur im jeweils lesenden Code. Eine generierte Referenz brauchte erst eine Quelle, die Code und Doku beide lesen (Leitplanke 3 in #185).

.wikitool-release.json, .wikitool-kb.json und .wikitool-tools.json sind maschinengeschrieben und nicht Gegenstand der Quelle; die Seite nennt sie im handgeschriebenen Kopf als „nie von Hand“ mit Verweis auf AGENTS.md Invariante 1 (.wikitool-tools.json behält seinen Abschnitt „Tool paths“).

Befund am Baum vor dem Paket (2026-10-07) – die Messlatte für „drop-in“

Datei Lader Haltung bei Fehlern Was durchging und weiter durchgehen musste
telemetry telemetry/policy.py::_read_config, _root_defaults still ignoriert: kaputtes JSON, Nicht-Objekt, nicht-positive/nicht-ganzzahlige Kappe → als fehlend behandelt enabled per bool() (auch "no" → True); Kappen per int() (auch "100"); unbekannte Schlüssel
remotes commands/git_publish.py::read_allowed_push_urls fail() unbekannte Schlüssel; schema wird nie gelesen
upload upload.py::read_config ValidationError int()-Koerzion ("10485760"), str()+lower() auf Endungen, leerer/fehlender identity_header → DEFAULT_IDENTITY_HEADER; unbekannte Schlüssel
tasks tasks/config.py::read_config + tasks/superproductivity.py::from_dict, tasks/caldav.py::from_dict ValidationError int() auf Schwellen, str() auf provider; unbekannte Top-Level-Schlüssel, bewusst: Abschnitte eines gerade nicht gewählten Providers. Provider-Abschnitte lehnen Fremdschlüssel ab; Superproductivity hat je nach access (api/snapshot) zwei disjunkte Feldmengen; caldav.url wird auf / normalisiert, exclude_lists optional

Harte Randbedingung: chemenu.telemetry ist stdlib-only – ein Hook-Handler importiert es bei jedem Tool-Aufruf ohne venv. Die Quelle musste also stdlib-only sein.

Entscheidungen (Betreiber, 2026-10-07)

  1. Form der Quelle: Python-Datensätze (Variante b), nicht JSON Schema. Grund: der Telemetrie-Lader kann jsonschema nicht importieren, und nur eine stdlib-Quelle bedient alle vier Lader; Koerzion und access-abhängige Feldmengen sind direkt ausdrückbar, die maßgeschneiderten Fehlermeldungen bleiben.
  2. Strenge: exakt die bisherige Akzeptanz abbilden – keine Verschärfung. Eine Verschärfung wäre ein eigenes Issue.
  3. Telemetrie: Hot Path bleibt still-tolerant; doctor meldet eine abweichende Datei als WARN.
  4. Upload-Form wandert in die Referenz: docs/how-to/set-up-the-mcp-server.md behält die Auth-Vorbedingungen und verlinkt für die Form auf configuration.md.

Was gebaut wurde

  1. tools/chemenu/config_shapes.py, stdlib-only (importiert nur chemenu.config): Datentypen Field (Name, Typ-Label, JSON-Typ, Pflicht, Default, coerce, check, empty_is_missing, Begründung, Toleranztext, verschachtelte Felder) und Shape (Schlüssel/Dateiname, Zweck, Fehlen, Fehlform, Fremdschlüssel ignore/reject, Felder, Varianten nach Diskriminator, Abschnitte nach section_key, Beispiele). Datensätze TELEMETRY, REMOTES, UPLOAD, TASKS (mit Abschnitten SUPERPRODUCTIVITY – Varianten api/snapshot – und CALDAV), Tupel SHAPES. check(shape, data) wirft nie und liefert Werte, gesetzte Felder, Probleme, nur per Koerzion angenommene Felder und Fremdschlüssel; deviations() ist die strenge Lesart für doctor; render_expected() und render_markdown() rendern.
  2. Die Lader lesen aus dem Datensatz: telemetry/policy.py (Defaults DEFAULT_* aus dem Datensatz), git_publish.read_allowed_push_urls, upload.read_config (DEFAULT_IDENTITY_HEADER aus dem Datensatz), tasks/config.read_config (KNOWN_PROVIDERS aus den Abschnitten), SuperProductivityConfig.from_dict (KNOWN_ACCESS, DEFAULT_API_BASE_URL aus dem Datensatz), CalDAVConfig.from_dict. Kein _EXPECTED_*/expected = ( mehr.
  3. doctor, Check telemetry: WARN mit Feldname und Abhilfe bei unlesbarem JSON, Nicht-Objekt, enabled kein JSON-Boolean, Kappe keine positive Ganzzahl (auch "12"/2.5, die der Hot Path per int() umdeutet), unbekanntem Schlüssel.
  4. Regionen reference-config-telemetry/-remotes/-tasks/-upload in docs/reference/configuration.md, in reference_doc.CONFIG_REGIONS/regions(), nicht origin_only. Kopfsatz ersetzt; handgeschriebene JSON-Beispiele und Feldaufzählungen entfernt; Verhaltensprosa und Umgebungsvariablen-Tabelle bleiben.
  5. How-to MCP: Formbeschreibung raus, Link auf configuration.md#mcp-submissions.
  6. Doku nachgezogen: tools/README.md, Datensätze von doctor und docs reference/docs verify (→ tools/CONTRACT.md, docs/reference/commands/), docs/reference/README.md, instructions/dev/doc-pull-through.md (Zeile Konfigurationsdatei), instructions/setup-instance.md (Telemetrie-Schritt nennt die Defaults nicht mehr selbst, verlinkt die Referenz; INSTALL.md dagegen gelesen, passt), config.py-Kommentare, CHANGES.md-Abschnitt „Generierte Referenz…“. In der Abschlussphase (1559f4b): docs/how-to/troubleshoot.md erklärt doctors telemetry: WARN; docs/explanation/ownership-and-templates.md nennt neben den Kommando-Datensätzen die Konfigurationsformen als Quelle, die in jeder Instanz gleich rendert.

Abweichungen vom Entwurf (im Bau entschieden, keine Design-Änderung)

  • Latenter Fehler in docs reference --apply behoben: reference_command rechnete jede Region aus dem Text auf der Platte; bei mehreren Regionen in einer Datei überlebte nur die letzte. configuration.md ist die erste Seite mit mehreren Regionen. Jetzt wird je Datei nacheinander in denselben Text geschrieben. Dazu hängt reference_doc.refresh einen Zeilenumbruch an, damit nach einer Region mitten auf der Seite die Leerzeile vor der folgenden Prosa bleibt (blocks.replace war für seitenbeendende Regionen gebaut und blieb unverändert, weil kb/ davon abhängt).
  • Fehlermeldungen: ein Lader nennt alle Probleme, mit ; verbunden, jeweils mit gerendertem Expected: (auch bei Positivitätsfehlern, die vorher keins hatten). Ursache und Feldname bleiben.
  • Abgelehntes bleibt abgelehnt, aber sauberer: eine .wikitool-remotes.json, die kein Objekt ist, endete vorher in AttributeError, jetzt in fail(); ein nicht-string backups_dir (truthy) endete später in TypeError, jetzt in ValidationError. In beiden Fällen bleibt die Datei abgelehnt.
  • Bewusst belassen: docs/how-to/trace-and-score-sessions.md zeigt { "enabled": true } als How-to-Schritt, instructions/gates.md ein Remotes-Beispiel im Gate-Verfahren. Das Kriterium nennt ausdrücklich configuration.md und set-up-the-mcp-server.md; beide Stellen sind Handlungsschritte, keine Formbeschreibung.
  • test_reference_doc.py, Fixture tree: legt die echte, aktuelle configuration.md in den Fixture-Baum, weil die Konfigurationsregionen aus den echten Datensätzen rendern; die übrigen Zählungen der Fixture-Tests bleiben so gültig. Die Mehrregionen-Seite selbst prüft test_config_shapes.py.

Version

MINOR, drop-in in beide Richtungen: jede vorher gültige Datei bleibt gültig (Entscheidung 2), hinzu kamen eine WARN, ein Modul und Doku-Regionen, nichts wurde umbenannt oder entfernt. Gebumpt: 9.0.0-beta.7 → 9.0.0-beta.8, publiziert in 893db6e. Der Doku-Nachtrag 1559f4b berührt nur docs/ und braucht keinen Bump.

Akzeptanzkriterien

  • tools/chemenu/config_shapes.py importiert nur die Standardbibliothek und chemenu.config (AST-Test test_the_module_imports_only_the_stdlib_and_chemenu_config), und chemenu.telemetry.policy nutzt es (test_the_telemetry_policy_reads_the_record).
  • Für jede der vier Dateien genau ein Datensatz; jeder Lader liest Feldnamen, Pflichtfelder, Defaults und Koerzionen daraus: Monkeypatch-Tests je Lader (test_*_follows_*) ändern das Verhalten des echten Laders. Kein handgeschriebenes Expected:-Literal (test_no_hand_written_expected_text_is_left_in_a_loader).
  • Drop-in: parametrisierter Test test_every_loader_accepts_and_rejects_exactly_what_it_did_before vergleicht jeden Lader mit einer Kopie des Laders vor dem Paket (Orakel im Test) über die Prosa-Beispiele, jede Toleranz aus der Befund-Tabelle und die Gegenstücke (Fremdschlüssel im Provider-Abschnitt, api_token neben snapshot, nicht-positive Schwelle, Endung ohne Punkt, unbekannter Provider u. a.). Gegenprobe: eine absichtlich gelockerte Toleranz im Datensatz ließ sechs Tests scheitern.
  • Die bestehenden Lader-Tests bleiben grün, unverändert.
  • doctor: konforme oder fehlende Telemetrie-Datei → OK wie bisher; jede der fünf Abweichungen → WARN mit Feldname; die Policy liest in allen Fällen wie vorher (test_telemetry_* in test_doctor.py).
  • configuration.md trägt die vier Regionen; docs reference --apply füllt alle vier, ein zweiter Lauf ändert nichts, handgeschriebener Text außerhalb byte-gleich; ein geänderter Datensatz ohne --apply lässt docs verify mit Datei, Region und docs reference --apply scheitern.
  • Jedes Feld jedes Datensatzes steht in der Region seiner Datei; kein JSON-Beispiel für diese vier Dateien außerhalb einer Region in configuration.md und set-up-the-mcp-server.md.
  • Exportiert (dist export) sind die Regionen unverändert (test_the_reference_pages_survive_dist_export_unchanged läuft über regions()), und docs verify ist im Zielbaum grün (CI-Lauf 595, Schritt „The distribution works as a fresh instance“).
  • pytest (2541 passed, 3 skipped, leere Maschine), docs verify, instructions verify lokal grün; CI auf 893db6e grün (Läufe 595, 596), auf 1559f4b grün (Lauf 597).

Nicht in diesem Paket

  • Verschärfung der Lader (Fremdschlüssel ablehnen, Koerzion abschaffen) – wäre boundary-crossing, eigenes Issue bei Bedarf.
  • Die Umgebungsvariablen-Tabelle in configuration.md aus einer Quelle generieren.
  • Ein schema-Versionsfeld tatsächlich auswerten.
Paket F aus #185 (E5 Punkt 5). Der Auslöser (#188 geschlossen, `docs/reference/configuration.md` aus #190 vorhanden) war eingetreten. **Abgeschlossen (2026-10-07):** gebaut und publiziert als `893db6e` (Version `9.0.0-beta.8`), verifiziert durch CI-Lauf [595](https://gitea.nehmer.net/torben/chemenu/actions/runs/595) (verify inkl. Fresh-Instance, pwsh) und Release-Lauf [596](https://gitea.nehmer.net/torben/chemenu/actions/runs/596); Doku-Nachtrag der Abschlussphase als `1559f4b`, CI-Lauf [597](https://gitea.nehmer.net/torben/chemenu/actions/runs/597) grün. ## Anliegen Die Formen der instanzbezogenen Konfigurationsdateien – `.wikitool-telemetry.json`, `.wikitool-remotes.json`, `.wikitool-upload.json`, `.wikitool-tasks.json` (Namen in `tools/chemenu/config.py`) – waren nur in Prosa beschrieben (`docs/reference/configuration.md`, für Upload `docs/how-to/set-up-the-mcp-server.md` § optional submit path, dazu handgeschriebene `Expected:`-Zeichenketten in den Fehlermeldungen der Lader). Festgelegt waren sie nur im jeweils lesenden Code. Eine generierte Referenz brauchte erst eine Quelle, die Code *und* Doku beide lesen (Leitplanke 3 in #185). `.wikitool-release.json`, `.wikitool-kb.json` und `.wikitool-tools.json` sind maschinengeschrieben und **nicht** Gegenstand der Quelle; die Seite nennt sie im handgeschriebenen Kopf als „nie von Hand“ mit Verweis auf `AGENTS.md` Invariante 1 (`.wikitool-tools.json` behält seinen Abschnitt „Tool paths“). ## Befund am Baum vor dem Paket (2026-10-07) – die Messlatte für „drop-in“ | Datei | Lader | Haltung bei Fehlern | Was durchging und weiter durchgehen musste | |---|---|---|---| | telemetry | `telemetry/policy.py::_read_config`, `_root_defaults` | **still ignoriert**: kaputtes JSON, Nicht-Objekt, nicht-positive/nicht-ganzzahlige Kappe → als fehlend behandelt | `enabled` per `bool()` (auch `"no"` → True); Kappen per `int()` (auch `"100"`); unbekannte Schlüssel | | remotes | `commands/git_publish.py::read_allowed_push_urls` | `fail()` | unbekannte Schlüssel; `schema` wird nie gelesen | | upload | `upload.py::read_config` | `ValidationError` | `int()`-Koerzion (`"10485760"`), `str()`+`lower()` auf Endungen, leerer/fehlender `identity_header` → `DEFAULT_IDENTITY_HEADER`; unbekannte Schlüssel | | tasks | `tasks/config.py::read_config` + `tasks/superproductivity.py::from_dict`, `tasks/caldav.py::from_dict` | `ValidationError` | `int()` auf Schwellen, `str()` auf `provider`; **unbekannte Top-Level-Schlüssel, bewusst: Abschnitte eines gerade nicht gewählten Providers**. Provider-Abschnitte lehnen Fremdschlüssel ab; Superproductivity hat je nach `access` (`api`/`snapshot`) zwei disjunkte Feldmengen; `caldav.url` wird auf `/` normalisiert, `exclude_lists` optional | **Harte Randbedingung:** `chemenu.telemetry` ist *stdlib-only* – ein Hook-Handler importiert es bei jedem Tool-Aufruf ohne venv. Die Quelle musste also stdlib-only sein. ## Entscheidungen (Betreiber, 2026-10-07) 1. **Form der Quelle: Python-Datensätze** (Variante b), nicht JSON Schema. Grund: der Telemetrie-Lader kann `jsonschema` nicht importieren, und nur eine stdlib-Quelle bedient alle vier Lader; Koerzion und `access`-abhängige Feldmengen sind direkt ausdrückbar, die maßgeschneiderten Fehlermeldungen bleiben. 2. **Strenge: exakt die bisherige Akzeptanz abbilden** – keine Verschärfung. Eine Verschärfung wäre ein eigenes Issue. 3. **Telemetrie:** Hot Path bleibt still-tolerant; **`doctor` meldet eine abweichende Datei als WARN**. 4. **Upload-Form wandert in die Referenz:** `docs/how-to/set-up-the-mcp-server.md` behält die Auth-Vorbedingungen und verlinkt für die Form auf `configuration.md`. ## Was gebaut wurde 1. **`tools/chemenu/config_shapes.py`, stdlib-only** (importiert nur `chemenu.config`): Datentypen `Field` (Name, Typ-Label, JSON-Typ, Pflicht, Default, `coerce`, `check`, `empty_is_missing`, Begründung, Toleranztext, verschachtelte Felder) und `Shape` (Schlüssel/Dateiname, Zweck, Fehlen, Fehlform, Fremdschlüssel `ignore`/`reject`, Felder, Varianten nach Diskriminator, Abschnitte nach `section_key`, Beispiele). Datensätze `TELEMETRY`, `REMOTES`, `UPLOAD`, `TASKS` (mit Abschnitten `SUPERPRODUCTIVITY` – Varianten `api`/`snapshot` – und `CALDAV`), Tupel `SHAPES`. `check(shape, data)` wirft nie und liefert Werte, gesetzte Felder, Probleme, nur per Koerzion angenommene Felder und Fremdschlüssel; `deviations()` ist die strenge Lesart für `doctor`; `render_expected()` und `render_markdown()` rendern. 2. **Die Lader lesen aus dem Datensatz:** `telemetry/policy.py` (Defaults `DEFAULT_*` aus dem Datensatz), `git_publish.read_allowed_push_urls`, `upload.read_config` (`DEFAULT_IDENTITY_HEADER` aus dem Datensatz), `tasks/config.read_config` (`KNOWN_PROVIDERS` aus den Abschnitten), `SuperProductivityConfig.from_dict` (`KNOWN_ACCESS`, `DEFAULT_API_BASE_URL` aus dem Datensatz), `CalDAVConfig.from_dict`. Kein `_EXPECTED_*`/`expected = (` mehr. 3. **`doctor`, Check `telemetry`:** WARN mit Feldname und Abhilfe bei unlesbarem JSON, Nicht-Objekt, `enabled` kein JSON-Boolean, Kappe keine positive Ganzzahl (auch `"12"`/`2.5`, die der Hot Path per `int()` umdeutet), unbekanntem Schlüssel. 4. **Regionen** `reference-config-telemetry`/`-remotes`/`-tasks`/`-upload` in `docs/reference/configuration.md`, in `reference_doc.CONFIG_REGIONS`/`regions()`, nicht `origin_only`. Kopfsatz ersetzt; handgeschriebene JSON-Beispiele und Feldaufzählungen entfernt; Verhaltensprosa und Umgebungsvariablen-Tabelle bleiben. 5. **How-to MCP:** Formbeschreibung raus, Link auf `configuration.md#mcp-submissions`. 6. **Doku nachgezogen:** `tools/README.md`, Datensätze von `doctor` und `docs reference`/`docs verify` (→ `tools/CONTRACT.md`, `docs/reference/commands/`), `docs/reference/README.md`, `instructions/dev/doc-pull-through.md` (Zeile Konfigurationsdatei), `instructions/setup-instance.md` (Telemetrie-Schritt nennt die Defaults nicht mehr selbst, verlinkt die Referenz; `INSTALL.md` dagegen gelesen, passt), `config.py`-Kommentare, CHANGES.md-Abschnitt „Generierte Referenz…“. In der Abschlussphase (`1559f4b`): `docs/how-to/troubleshoot.md` erklärt `doctor`s `telemetry: WARN`; `docs/explanation/ownership-and-templates.md` nennt neben den Kommando-Datensätzen die Konfigurationsformen als Quelle, die in jeder Instanz gleich rendert. ### Abweichungen vom Entwurf (im Bau entschieden, keine Design-Änderung) - **Latenter Fehler in `docs reference --apply` behoben:** `reference_command` rechnete jede Region aus dem Text auf der Platte; bei mehreren Regionen in einer Datei überlebte nur die letzte. `configuration.md` ist die erste Seite mit mehreren Regionen. Jetzt wird je Datei nacheinander in denselben Text geschrieben. Dazu hängt `reference_doc.refresh` einen Zeilenumbruch an, damit nach einer Region mitten auf der Seite die Leerzeile vor der folgenden Prosa bleibt (`blocks.replace` war für seitenbeendende Regionen gebaut und blieb unverändert, weil `kb/` davon abhängt). - **Fehlermeldungen:** ein Lader nennt alle Probleme, mit `; ` verbunden, jeweils mit gerendertem `Expected:` (auch bei Positivitätsfehlern, die vorher keins hatten). Ursache und Feldname bleiben. - **Abgelehntes bleibt abgelehnt, aber sauberer:** eine `.wikitool-remotes.json`, die kein Objekt ist, endete vorher in `AttributeError`, jetzt in `fail()`; ein nicht-string `backups_dir` (truthy) endete später in `TypeError`, jetzt in `ValidationError`. In beiden Fällen bleibt die Datei abgelehnt. - **Bewusst belassen:** `docs/how-to/trace-and-score-sessions.md` zeigt `{ "enabled": true }` als How-to-Schritt, `instructions/gates.md` ein Remotes-Beispiel im Gate-Verfahren. Das Kriterium nennt ausdrücklich `configuration.md` und `set-up-the-mcp-server.md`; beide Stellen sind Handlungsschritte, keine Formbeschreibung. - **`test_reference_doc.py`, Fixture `tree`:** legt die echte, aktuelle `configuration.md` in den Fixture-Baum, weil die Konfigurationsregionen aus den echten Datensätzen rendern; die übrigen Zählungen der Fixture-Tests bleiben so gültig. Die Mehrregionen-Seite selbst prüft `test_config_shapes.py`. ## Version **MINOR**, drop-in in beide Richtungen: jede vorher gültige Datei bleibt gültig (Entscheidung 2), hinzu kamen eine WARN, ein Modul und Doku-Regionen, nichts wurde umbenannt oder entfernt. Gebumpt: `9.0.0-beta.7` → `9.0.0-beta.8`, publiziert in `893db6e`. Der Doku-Nachtrag `1559f4b` berührt nur `docs/` und braucht keinen Bump. ## Akzeptanzkriterien - [x] `tools/chemenu/config_shapes.py` importiert nur die Standardbibliothek und `chemenu.config` (AST-Test `test_the_module_imports_only_the_stdlib_and_chemenu_config`), und `chemenu.telemetry.policy` nutzt es (`test_the_telemetry_policy_reads_the_record`). - [x] Für jede der vier Dateien genau ein Datensatz; jeder Lader liest Feldnamen, Pflichtfelder, Defaults und Koerzionen daraus: Monkeypatch-Tests je Lader (`test_*_follows_*`) ändern das Verhalten des echten Laders. Kein handgeschriebenes `Expected:`-Literal (`test_no_hand_written_expected_text_is_left_in_a_loader`). - [x] **Drop-in:** parametrisierter Test `test_every_loader_accepts_and_rejects_exactly_what_it_did_before` vergleicht jeden Lader mit einer Kopie des Laders vor dem Paket (Orakel im Test) über die Prosa-Beispiele, jede Toleranz aus der Befund-Tabelle und die Gegenstücke (Fremdschlüssel im Provider-Abschnitt, `api_token` neben `snapshot`, nicht-positive Schwelle, Endung ohne Punkt, unbekannter Provider u. a.). Gegenprobe: eine absichtlich gelockerte Toleranz im Datensatz ließ sechs Tests scheitern. - [x] Die bestehenden Lader-Tests bleiben grün, unverändert. - [x] `doctor`: konforme oder fehlende Telemetrie-Datei → `OK` wie bisher; jede der fünf Abweichungen → WARN mit Feldname; die Policy liest in allen Fällen wie vorher (`test_telemetry_*` in `test_doctor.py`). - [x] `configuration.md` trägt die vier Regionen; `docs reference --apply` füllt alle vier, ein zweiter Lauf ändert nichts, handgeschriebener Text außerhalb byte-gleich; ein geänderter Datensatz ohne `--apply` lässt `docs verify` mit Datei, Region und `docs reference --apply` scheitern. - [x] Jedes Feld jedes Datensatzes steht in der Region seiner Datei; kein JSON-Beispiel für diese vier Dateien außerhalb einer Region in `configuration.md` und `set-up-the-mcp-server.md`. - [x] Exportiert (`dist export`) sind die Regionen unverändert (`test_the_reference_pages_survive_dist_export_unchanged` läuft über `regions()`), und `docs verify` ist im Zielbaum grün (CI-Lauf 595, Schritt „The distribution works as a fresh instance“). - [x] `pytest` (2541 passed, 3 skipped, leere Maschine), `docs verify`, `instructions verify` lokal grün; CI auf `893db6e` grün (Läufe 595, 596), auf `1559f4b` grün (Lauf 597). ## Nicht in diesem Paket - Verschärfung der Lader (Fremdschlüssel ablehnen, Koerzion abschaffen) – wäre boundary-crossing, eigenes Issue bei Bedarf. - Die Umgebungsvariablen-Tabelle in `configuration.md` aus einer Quelle generieren. - Ein `schema`-Versionsfeld tatsächlich auswerten.
torben added the prio/waitingsize/Marea/distributionkind/decision labels 2026-10-06 17:46:16 +00:00
torben added prio/plannedkind/build and removed prio/waitingkind/decision labels 2026-10-07 06:17:49 +00:00
Author
Owner

Changelog: Auslöser eingetreten (#188 geschlossen, configuration.md aus #190 vorhanden) → prio/waiting → prio/planned. Befund am Baum ergänzt (Toleranz der vier Lader; Telemetrie ist stdlib-only, kann jsonschema nicht importieren). Entscheidungen des Betreibers eingetragen: Python-Datensätze statt JSON Schema (Empfehlung beim Anlegen war (a), durch die stdlib-Grenze gekippt), heutige Akzeptanz exakt abbilden, doctor-WARN für abweichende Telemetrie-Datei, Upload-Form aus dem How-to in die Referenz. Version festgelegt: MINOR. Bauumfang, Dateien und Akzeptanzkriterien geschärft → kind/decision → kind/build.

**Changelog:** Auslöser eingetreten (#188 geschlossen, `configuration.md` aus #190 vorhanden) → `prio/waiting` → `prio/planned`. Befund am Baum ergänzt (Toleranz der vier Lader; Telemetrie ist stdlib-only, kann `jsonschema` nicht importieren). Entscheidungen des Betreibers eingetragen: Python-Datensätze statt JSON Schema (Empfehlung beim Anlegen war (a), durch die stdlib-Grenze gekippt), heutige Akzeptanz exakt abbilden, `doctor`-WARN für abweichende Telemetrie-Datei, Upload-Form aus dem How-to in die Referenz. Version festgelegt: MINOR. Bauumfang, Dateien und Akzeptanzkriterien geschärft → `kind/decision` → `kind/build`.
Author
Owner

Changelog: Gebaut und publiziert als 893db6e (9.0.0-beta.8), CI grün (Läufe 595, 596); alle Kriterien abgehakt. „Was gebaut wird“ ist jetzt „Was gebaut wurde“, mit den tatsächlichen Namen (check/deviations/render_markdown, CONFIG_REGIONS). Neu: Abschnitt „Abweichungen vom Entwurf“ – behobener Mehrregionen-Fehler in docs reference --apply, zusammengefasste Fehlermeldungen, zwei vorher abstürzende Ablehnungen jetzt sauber, zwei bewusst belassene How-to-/Instruktions-Beispiele, angepasste Fixture in test_reference_doc.py. Zusätzlich nachgezogen: instructions/setup-instance.md (Telemetrie-Defaults nur noch in der Referenz).

**Changelog:** Gebaut und publiziert als `893db6e` (`9.0.0-beta.8`), CI grün (Läufe 595, 596); alle Kriterien abgehakt. „Was gebaut wird“ ist jetzt „Was gebaut wurde“, mit den tatsächlichen Namen (`check`/`deviations`/`render_markdown`, `CONFIG_REGIONS`). Neu: Abschnitt „Abweichungen vom Entwurf“ – behobener Mehrregionen-Fehler in `docs reference --apply`, zusammengefasste Fehlermeldungen, zwei vorher abstürzende Ablehnungen jetzt sauber, zwei bewusst belassene How-to-/Instruktions-Beispiele, angepasste Fixture in `test_reference_doc.py`. Zusätzlich nachgezogen: `instructions/setup-instance.md` (Telemetrie-Defaults nur noch in der Referenz).
Author
Owner

Changelog: Abschlussphase. Text in Endfassung (Stand „Abgeschlossen“, Befund als Vorher-Zustand formuliert). Doku-Nachtrag 1559f4b: troubleshoot.md erklärt telemetry: WARN, ownership-and-templates.md nennt die Konfigurationsformen als in Instanzen gleich gerenderte Quelle; CI-Lauf 597 grün. INSTALL.md gegen setup-instance.md gelesen, keine Abweichung. Geschlossen.

**Changelog:** Abschlussphase. Text in Endfassung (Stand „Abgeschlossen“, Befund als Vorher-Zustand formuliert). Doku-Nachtrag `1559f4b`: `troubleshoot.md` erklärt `telemetry: WARN`, `ownership-and-templates.md` nennt die Konfigurationsformen als in Instanzen gleich gerenderte Quelle; CI-Lauf 597 grün. `INSTALL.md` gegen `setup-instance.md` gelesen, keine Abweichung. Geschlossen.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#193