Konfidenz-Mechanismus ersatzlos entfernen #60

Closed
opened 2026-09-04 19:27:52 +00:00 by torben · 4 comments
Owner

Erledigt. confidence, confidence_base, der Zeit-Decay und die Konfidenz-Rubrik sind ersatzlos aus dem Stack entfernt. Publiziert als 54d9540 auf main, nachgezogen in 11cbb15; CI-Lauf 219 grün über alle neun Schritte, einschließlich dist export → frische Instanz → setup-instance.md-Replay.

Die Studienlage zum Warum steht in #85 (zurückgestellt, nicht verworfen). Die Korpusmigration war #86 und lief im selben Publish.

Was entfernt wurde

Bereich Konkret
Schema confidence, confidence_base aus types/entity.schema.yaml, types/concept.schema.yaml; Feldzeilen in types/entity.md, types/concept.md; Beispielzeilen in types/instruction.md, types/type-spec.md
Kommandos tools/chemenu/commands/confidence_decay.py gelöscht (decay, init-base) samt Registrierung in cli.py; touch --confidence-base und der confidence-Eintrag in touch.UNSETTABLE
Lint confidence_exceeds_source_standing samt _capture_ceiling, den Ceiling-Tabellen und dem Report-Abschnitt in lint_core.py
Suche Konfidenzspalte und Sortierfeld (search/ripgrep.py, search/types.py), Kommentarpfade in search/base.py, search/filters.py, search/service.py, MCP-Beschreibung in mcp/server.py, Beispielzeile in index_build.py
Sonstiger Code confidence_base aus corpus_diff.STRUCTURAL_FIELDS; Kommentarpfade in page.py, api.py, conventions.py, doctor.py, docs_verify.py, new_page.py, search.py
Verträge kb/CONTRACT.md § Confidence inkl. ### Confidence against source standing (–51 Zeilen); Rubrik in kb/CONVENTIONS.md und .template durch ## Hedging ersetzt; Rubrikzeile in instructions/kb-profiles.md; Zeile in instructions/german-terminology.md; Erwähnungen in instructions/capture-session.md, instructions/migrate-corpus.md, instructions/private-instance.md, instructions/setup-instance.md, raw/CONTRACT.md
Skills wiki-lint (Frontmatter-description, Checkliste, Schritt 8, Kommandoliste), wiki-query (Trefferbeschreibung, Beispielprädikat, Hedging-Schritt), wiki-manage (Lesehinweis, Hand-Edit-Verbot)
Menschendoku README.md, tools/README.md, AGENTS.md, tools/CONTRACT.md, INSTALL.md, INSTALL-MCP.md, instructions/dev/issue-tracking.md
Tests test_confidence_decay.py gelöscht; Fixtures in 17 weiteren Testdateien bereinigt

fidelity und authority auf den Source-Seiten blieben unberührt.

Was hinzugekommen ist

version bump --migration-required (version_cmd.py, version.py, sechs Tests). _set_marker_line konnte die **Migration:** none required-Zeile nur ersetzen, nie entfernen — der laufende Kandidat hatte sie aus einem früheren Bump, und dieses Paket machte sie falsch. Das Flag entfernt sie und verlangt vorher ein Migrationsdokument für die neue Basisversion. Nachgezogen in 11cbb15: instructions/dev/version-parts.md Schritt 6 beschreibt den Pfad jetzt selbst, samt der Begründung, warum ihn nichts meldet (maschinengeschriebene Zeile, docs verify genügt ihr Vorhandensein, Eskalationsprüfungen laufen nur auf dem erstüberschreitenden Bump).

Unterwegs gefunden und behoben: beim Entfernen der Zwei-Stellen-Rundung in frontmatter_io._format_scalar fiel der Float-Zweig komplett weg. Ein echter Float landete damit in der String-Quoting-Logik, deren Round-Trip-Probe für Strings gilt — 0.9 wäre als '0.9' geschrieben worden und beim nächsten Lesen ein String gewesen. Vor dem Korpuslauf durch eine Round-Trip-Probe an einer echten Seite aufgefallen, Zweig als isinstance(value, (int, float)) wiederhergestellt (ohne die konfidenzspezifische .2f-Formatierung), Regressionstest in test_frontmatter_io.py.

Was an seine Stelle getreten ist

Nichts Neues. kb/CONVENTIONS.md § Hedging hedged nach Quellenlage statt nach Schwellenwert: provenance: general ohne sources: wird als Allgemeinwissen benannt, eine Aussage trägt die authority ihrer schwächsten tatsächlich herangezogenen Quelle, Uneinigkeit zwischen Quellen wird in Prosa benannt. Die Arbeitsliste läuft über --field '!sources', --field provenance=general, --sort modified und die bestehenden lint-Befunde.

Bewusst hingenommener Verlust

confidence_exceeds_source_standing ist mit dem Feld gestorben — der einzige automatische Abgleich zwischen dem, was eine Seite beanspruchte, und dem, was ihre Quellen trugen. Der Ersatz ohne Zahl (Prosa-Kriterium nach Commonplace-Vorbild, stichprobenweise in wiki-lint) steht als erster Antwortkandidat in #85, Trigger 1, und war bewusst nicht Teil dieses Pakets.

Sequencing (Entscheidung des Operators, 2026-09-10)

Beide Schemas tragen additionalProperties: false: mit dem Wegfall der Properties waren alle 152 Seiten sofort schemainvalide, nicht bloß veraltet, und ci.yml:161 fährt lint --fail-on-error auf main. Ein eigener Publish für dieses Paket hätte main rot gelassen, bis #86 durch ist. Deshalb: kein Fenster, ein Publish für beide.

Geprüft und verworfen: schema_validation_errors über MIGRATION_GATED_KEYS gaten (setzt die gesamte Schemavalidierung für die Fensterdauer aus) und die Properties transient im Schema stehen lassen (die „forbidden middle" aus #85).

Akzeptanzkriterien

  • grep -r "confidence" types/ tools/chemenu/ instructions/ kb/CONTRACT.md kb/CONVENTIONS.md ohne Treffer — mit einer bewusst zugelassenen Ausnahme: tools/chemenu/tests/test_touch.py nennt --confidence-base im Namen, Docstring und in der Assertion des Regressionstests, der beweist, dass das Flag weg ist. Ein Test auf die Abwesenheit einer Sache muss sie benennen; das ursprüngliche Kriterium hatte diesen Fall nicht bedacht. Historische Nennungen in CHANGES.md, instructions/migrations/, instructions/dev/issue-tracking.md (Stub-Fallbeispiel) und instructions/migrate-corpus.md (Vor-1.0.0-Baseline) bleiben ebenfalls stehen.
  • wikitool confidence existiert nicht mehr; docs verify zählt jetzt 51 statt 53 Kommandos
  • wikitool new erzeugt eine schemavalide Seite ohne die Felder
  • wikitool touch --confidence-base schlägt fehl — als unbekannte CLI-Option, mit CliRunner-Test abgedeckt
  • wikitool search --field 'confidence<0.6' schlägt fehl statt still leer zurückzukommen: filters.validate_fields weist jedes Prädikat auf ein Feld ab, das keine Seite trägt, und nennt die vorhandenen Felder. Das brauchte keinen neuen Code, nur den abgeschlossenen Korpuslauf aus #86
  • lint läuft ohne den entfernten Check; schema_validation_errors: 0 (Report reports/Lint Report 2026-09-10.md)
  • version bump --migration-required entfernt die Zeile; sechs Tests decken Rücknahme, fehlendes Migrationsdokument, fehlende Zeile, Konflikt mit --no-migration, fehlenden Kandidaten und den insert_changes_entry-Pfad ab
  • Der 5.0.0-Eintrag trägt keine **Migration:** none required-Zeile mehr; docs verify verlangt stattdessen das Migrationsdokument
  • doctor, docs verify, instructions verify, pytest (1095) grün
  • dist export → frische Instanz, setup-instance.md-Replay in CI grün (Lauf 219, Schritt „The distribution works as a fresh instance")
  • kb/CONVENTIONS.md und .template enthalten die Hedging-Regel ohne Schwellenwerte
  • instructions/migrations/5.0.0-confidence-removal.md beschreibt die Feldentfernung ausführbar (129 Zeilen, migration_kind: mechanical, obligation: required)
  • Ein Publish trägt dieses Paket und #86 (54d9540, 225 Dateien)

Version

--major, grenzüberschreitend, im laufenden Kandidaten 5.0.0 (bei Publish -beta.6). Der Kandidat hatte die Grenze schon überschritten, eine zweite Eskalationsentscheidung entfiel daher. Die **Breaking Change:**-Zeile ist zu einer Aussage zusammengeführt, die beide Brüche des Kandidaten nennt (TOC-Pflicht aus dem früheren Bump und die Konfidenz-Entfernung) und auf das Migrationsdokument zeigt.

Die billigere Alternative — Felder als optional-und-ignoriert stehen lassen, --minor — wurde geprüft und verworfen: zwei Zahlen, die aussehen wie ein Urteil und keines mehr sind. Entscheidung des Operators am 2026-09-10: voller Schnitt.

**Erledigt.** `confidence`, `confidence_base`, der Zeit-Decay und die Konfidenz-Rubrik sind ersatzlos aus dem Stack entfernt. Publiziert als `54d9540` auf `main`, nachgezogen in `11cbb15`; CI-Lauf **219** grün über alle neun Schritte, einschließlich `dist export` → frische Instanz → `setup-instance.md`-Replay. Die Studienlage zum Warum steht in **#85** (zurückgestellt, nicht verworfen). Die Korpusmigration war **#86** und lief im selben Publish. ## Was entfernt wurde | Bereich | Konkret | |---|---| | Schema | `confidence`, `confidence_base` aus `types/entity.schema.yaml`, `types/concept.schema.yaml`; Feldzeilen in `types/entity.md`, `types/concept.md`; Beispielzeilen in `types/instruction.md`, `types/type-spec.md` | | Kommandos | `tools/chemenu/commands/confidence_decay.py` gelöscht (`decay`, `init-base`) samt Registrierung in `cli.py`; `touch --confidence-base` und der `confidence`-Eintrag in `touch.UNSETTABLE` | | Lint | `confidence_exceeds_source_standing` samt `_capture_ceiling`, den Ceiling-Tabellen und dem Report-Abschnitt in `lint_core.py` | | Suche | Konfidenzspalte und Sortierfeld (`search/ripgrep.py`, `search/types.py`), Kommentarpfade in `search/base.py`, `search/filters.py`, `search/service.py`, MCP-Beschreibung in `mcp/server.py`, Beispielzeile in `index_build.py` | | Sonstiger Code | `confidence_base` aus `corpus_diff.STRUCTURAL_FIELDS`; Kommentarpfade in `page.py`, `api.py`, `conventions.py`, `doctor.py`, `docs_verify.py`, `new_page.py`, `search.py` | | Verträge | `kb/CONTRACT.md § Confidence` inkl. `### Confidence against source standing` (–51 Zeilen); Rubrik in `kb/CONVENTIONS.md` und `.template` durch `## Hedging` ersetzt; Rubrikzeile in `instructions/kb-profiles.md`; Zeile in `instructions/german-terminology.md`; Erwähnungen in `instructions/capture-session.md`, `instructions/migrate-corpus.md`, `instructions/private-instance.md`, `instructions/setup-instance.md`, `raw/CONTRACT.md` | | Skills | `wiki-lint` (Frontmatter-`description`, Checkliste, Schritt 8, Kommandoliste), `wiki-query` (Trefferbeschreibung, Beispielprädikat, Hedging-Schritt), `wiki-manage` (Lesehinweis, Hand-Edit-Verbot) | | Menschendoku | `README.md`, `tools/README.md`, `AGENTS.md`, `tools/CONTRACT.md`, `INSTALL.md`, `INSTALL-MCP.md`, `instructions/dev/issue-tracking.md` | | Tests | `test_confidence_decay.py` gelöscht; Fixtures in 17 weiteren Testdateien bereinigt | `fidelity` und `authority` auf den Source-Seiten blieben unberührt. ## Was hinzugekommen ist **`version bump --migration-required`** (`version_cmd.py`, `version.py`, sechs Tests). `_set_marker_line` konnte die `**Migration:** none required`-Zeile nur ersetzen, nie entfernen — der laufende Kandidat hatte sie aus einem früheren Bump, und dieses Paket machte sie falsch. Das Flag entfernt sie und verlangt vorher ein Migrationsdokument für die neue Basisversion. Nachgezogen in `11cbb15`: `instructions/dev/version-parts.md` Schritt 6 beschreibt den Pfad jetzt selbst, samt der Begründung, warum ihn nichts meldet (maschinengeschriebene Zeile, `docs verify` genügt ihr Vorhandensein, Eskalationsprüfungen laufen nur auf dem erstüberschreitenden Bump). **Unterwegs gefunden und behoben:** beim Entfernen der Zwei-Stellen-Rundung in `frontmatter_io._format_scalar` fiel der Float-Zweig komplett weg. Ein echter Float landete damit in der String-Quoting-Logik, deren Round-Trip-Probe für Strings gilt — `0.9` wäre als `'0.9'` geschrieben worden und beim nächsten Lesen ein String gewesen. Vor dem Korpuslauf durch eine Round-Trip-Probe an einer echten Seite aufgefallen, Zweig als `isinstance(value, (int, float))` wiederhergestellt (ohne die konfidenzspezifische `.2f`-Formatierung), Regressionstest in `test_frontmatter_io.py`. ## Was an seine Stelle getreten ist Nichts Neues. `kb/CONVENTIONS.md § Hedging` hedged nach Quellenlage statt nach Schwellenwert: `provenance: general` ohne `sources:` wird als Allgemeinwissen benannt, eine Aussage trägt die `authority` ihrer schwächsten tatsächlich herangezogenen Quelle, Uneinigkeit zwischen Quellen wird in Prosa benannt. Die Arbeitsliste läuft über `--field '!sources'`, `--field provenance=general`, `--sort modified` und die bestehenden `lint`-Befunde. ## Bewusst hingenommener Verlust `confidence_exceeds_source_standing` ist mit dem Feld gestorben — der einzige automatische Abgleich zwischen dem, was eine Seite beanspruchte, und dem, was ihre Quellen trugen. Der Ersatz ohne Zahl (Prosa-Kriterium nach Commonplace-Vorbild, stichprobenweise in `wiki-lint`) steht als erster Antwortkandidat in **#85**, Trigger 1, und war bewusst nicht Teil dieses Pakets. ## Sequencing (Entscheidung des Operators, 2026-09-10) Beide Schemas tragen `additionalProperties: false`: mit dem Wegfall der Properties waren alle 152 Seiten sofort schemainvalide, nicht bloß veraltet, und `ci.yml:161` fährt `lint --fail-on-error` auf `main`. Ein eigener Publish für dieses Paket hätte `main` rot gelassen, bis #86 durch ist. Deshalb: kein Fenster, ein Publish für beide. Geprüft und verworfen: `schema_validation_errors` über `MIGRATION_GATED_KEYS` gaten (setzt die gesamte Schemavalidierung für die Fensterdauer aus) und die Properties transient im Schema stehen lassen (die „forbidden middle" aus #85). ## Akzeptanzkriterien - [x] `grep -r "confidence" types/ tools/chemenu/ instructions/ kb/CONTRACT.md kb/CONVENTIONS.md` ohne Treffer — **mit einer bewusst zugelassenen Ausnahme**: `tools/chemenu/tests/test_touch.py` nennt `--confidence-base` im Namen, Docstring und in der Assertion des Regressionstests, der beweist, dass das Flag weg ist. Ein Test auf die Abwesenheit einer Sache muss sie benennen; das ursprüngliche Kriterium hatte diesen Fall nicht bedacht. Historische Nennungen in `CHANGES.md`, `instructions/migrations/`, `instructions/dev/issue-tracking.md` (Stub-Fallbeispiel) und `instructions/migrate-corpus.md` (Vor-1.0.0-Baseline) bleiben ebenfalls stehen. - [x] `wikitool confidence` existiert nicht mehr; `docs verify` zählt jetzt 51 statt 53 Kommandos - [x] `wikitool new` erzeugt eine schemavalide Seite ohne die Felder - [x] `wikitool touch --confidence-base` schlägt fehl — als unbekannte CLI-Option, mit CliRunner-Test abgedeckt - [x] `wikitool search --field 'confidence<0.6'` schlägt fehl statt still leer zurückzukommen: `filters.validate_fields` weist jedes Prädikat auf ein Feld ab, das keine Seite trägt, und nennt die vorhandenen Felder. Das brauchte keinen neuen Code, nur den abgeschlossenen Korpuslauf aus #86 - [x] `lint` läuft ohne den entfernten Check; `schema_validation_errors`: 0 (Report `reports/Lint Report 2026-09-10.md`) - [x] `version bump --migration-required` entfernt die Zeile; sechs Tests decken Rücknahme, fehlendes Migrationsdokument, fehlende Zeile, Konflikt mit `--no-migration`, fehlenden Kandidaten und den `insert_changes_entry`-Pfad ab - [x] Der `5.0.0`-Eintrag trägt keine `**Migration:** none required`-Zeile mehr; `docs verify` verlangt stattdessen das Migrationsdokument - [x] `doctor`, `docs verify`, `instructions verify`, `pytest` (1095) grün - [x] `dist export` → frische Instanz, `setup-instance.md`-Replay in CI grün (Lauf **219**, Schritt „The distribution works as a fresh instance") - [x] `kb/CONVENTIONS.md` und `.template` enthalten die Hedging-Regel ohne Schwellenwerte - [x] `instructions/migrations/5.0.0-confidence-removal.md` beschreibt die Feldentfernung ausführbar (129 Zeilen, `migration_kind: mechanical`, `obligation: required`) - [x] Ein Publish trägt dieses Paket und #86 (`54d9540`, 225 Dateien) ## Version **`--major`, grenzüberschreitend**, im laufenden Kandidaten `5.0.0` (bei Publish `-beta.6`). Der Kandidat hatte die Grenze schon überschritten, eine zweite Eskalationsentscheidung entfiel daher. Die `**Breaking Change:**`-Zeile ist zu einer Aussage zusammengeführt, die beide Brüche des Kandidaten nennt (TOC-Pflicht aus dem früheren Bump **und** die Konfidenz-Entfernung) und auf das Migrationsdokument zeigt. Die billigere Alternative — Felder als optional-und-ignoriert stehen lassen, `--minor` — wurde geprüft und verworfen: zwei Zahlen, die aussehen wie ein Urteil und keines mehr sind. Entscheidung des Operators am 2026-09-10: voller Schnitt.
torben added the status/incoming label 2026-09-04 19:27:58 +00:00
Author
Owner

Notiz aus #67 — kein Ausarbeitungsversuch, Issue bleibt status/incoming.

Der Backfill von fidelity/authority (#67, Publish 2/3, 00220f8) hat dem Verdacht „fühlen sich zu hoch an" zum ersten Mal eine Messung danebengestellt: der neue beratende lint-Befund confidence_exceeds_source_standing meldet 67 von 152 Seiten mit confidence_base (44 %) — 47 gegen die 0.8-Obergrenze (authority: reporting), 20 gegen die 0.6-Obergrenze (opinion). Betroffene Werte: 21× 0.95, 19× 0.90, 9× 0.85, 15× 0.80.

Der mutmaßliche Mechanismus dahinter, als Stichwort für die spätere Ausarbeitung: die Rubrik in kb/CONVENTIONS.md lässt Quellenzahl (+0.2 je Quelle, max +0.6) und Aktualität (+0.2) allein bis 0.9–0.95 laufen, während der Autoritätsterm (+0.1 offizielle Doku) der kleinste Summand ist. Ein Korpus, der zu ~55 % aus Gesprächstranskripten kompiliert ist, sammelt damit hohe Werte aus Menge und Frische, ohne dass die Quellenlage das trägt.

Damit stehen sich zwei Lesarten gegenüber, und welche stimmt, ist genau die Frage, die dieses Issue stellt:

  1. Die Defaults/Rubrik sind zu großzügig — dann sind die 67 Seiten echt überbewertet und #60 ist bestätigt.
  2. Die 0.8-Grenze für reporting ist für einen selbstdokumentierenden Korpus zu eng, weil eine Design-Session, in der der Operator etwas entscheidet, für diesen Gegenstand mehr ist als ein Bericht — dann wandert die Korrektur in die Schwellentabelle (kb/CONTRACT.md), nicht in die Rubrik.

Der Decay-Teil des Stubs ist davon unberührt und weiterhin ungemessen.

Nicht getan und bewusst offen gelassen: Triage, Labels, Body-Rewrite. Die Zahlen sind reproduzierbar über tools/wikitool lint, Abschnitt „Confidence Above Source Standing".

**Notiz aus #67 — kein Ausarbeitungsversuch, Issue bleibt `status/incoming`.** Der Backfill von `fidelity`/`authority` (#67, Publish 2/3, `00220f8`) hat dem Verdacht „fühlen sich zu hoch an" zum ersten Mal eine Messung danebengestellt: der neue beratende `lint`-Befund `confidence_exceeds_source_standing` meldet **67 von 152 Seiten** mit `confidence_base` (44 %) — 47 gegen die 0.8-Obergrenze (`authority: reporting`), 20 gegen die 0.6-Obergrenze (`opinion`). Betroffene Werte: 21× 0.95, 19× 0.90, 9× 0.85, 15× 0.80. Der mutmaßliche Mechanismus dahinter, als Stichwort für die spätere Ausarbeitung: die Rubrik in `kb/CONVENTIONS.md` lässt **Quellenzahl (+0.2 je Quelle, max +0.6) und Aktualität (+0.2)** allein bis 0.9–0.95 laufen, während der **Autoritätsterm** (+0.1 offizielle Doku) der kleinste Summand ist. Ein Korpus, der zu ~55 % aus Gesprächstranskripten kompiliert ist, sammelt damit hohe Werte aus Menge und Frische, ohne dass die Quellenlage das trägt. Damit stehen sich zwei Lesarten gegenüber, und **welche stimmt, ist genau die Frage, die dieses Issue stellt**: 1. Die Defaults/Rubrik sind zu großzügig — dann sind die 67 Seiten echt überbewertet und #60 ist bestätigt. 2. Die 0.8-Grenze für `reporting` ist für einen selbstdokumentierenden Korpus zu eng, weil eine Design-Session, in der der Operator etwas entscheidet, für *diesen* Gegenstand mehr ist als ein Bericht — dann wandert die Korrektur in die Schwellentabelle (`kb/CONTRACT.md`), nicht in die Rubrik. Der Decay-Teil des Stubs ist davon unberührt und weiterhin ungemessen. Nicht getan und bewusst offen gelassen: Triage, Labels, Body-Rewrite. Die Zahlen sind reproduzierbar über `tools/wikitool lint`, Abschnitt „Confidence Above Source Standing".
torben changed title from Confidence Level und Decay justieren to Konfidenz-Mechanismus ersatzlos entfernen 2026-09-10 15:12:35 +00:00
torben added prio/plannedsize/Marea/kbkind/build and removed status/incoming labels 2026-09-10 15:12:40 +00:00
Author
Owner

Ausarbeitung des Stubs, status/incoming entfernt.

Der ursprüngliche Text dieses Issues, wörtlich — der Body ist damit überschrieben, und dies ist die einzige verbleibende Aufzeichnung der Anforderung:

Wir müssen unsere standard Konfidenz-Werte mal hinterfragen, sie fühlen sich tendenziell zu hoch an.
Der Decay wiederrum ist im Verhältnis vielleicht zu klein.

Muss durchgedacht und bewertet werden.

Changelog: Stub gegen den Baum geprüft und ausgearbeitet. Beide Vermutungen bestätigten sich nicht in der Form, in der sie gestellt waren: die zu hohen Werte sind fast vollständig PoC-Altbestand (alle 47 Rubrikverletzungen und 66 von 67 Obergrenzen-Befunden liegen in der Kohorte created <= 2026-08-13, die 21 Seiten der aktuellen Praxis sind sauber), und der Decay ist nicht zu klein, sondern hat noch nie gewirkt. Die Untersuchung führte über vier Entwürfe — Rubrik nachjustieren, Quellenautorität anheben, Wert aus authority × fidelity berechnen, zwei Schubladen für Reifegrad und Volatilität — die alle an konkreten Messwerten scheiterten. Ergebnis: der Mechanismus wird ersatzlos entfernt, --major. Titel entsprechend geändert, alle vier Pflichtlabels gesetzt, status/incoming entfernt.

Neu abgezweigt: #85 hält die vollständige Studienlage, den Lösungskonflikt, die Commonplace-Referenz (ADR 044 — dasselbe Feld, dieselbe Diagnose, dort 2026-07-11 gelöscht) und fünf benannte Wiederaufnahme-Trigger — das Thema ist zurückgestellt, nicht vom Tisch. #86 trägt die Korpusmigration über die 152 Seiten und ist auf dieses Issue geblockt.

Nicht in diesem Paket und bewusst offen: der Ersatz für den wegfallenden confidence_exceeds_source_standing-Check. Kandidat und Begründung stehen in #85, Trigger 1.

**Ausarbeitung des Stubs, `status/incoming` entfernt.** Der ursprüngliche Text dieses Issues, wörtlich — der Body ist damit überschrieben, und dies ist die einzige verbleibende Aufzeichnung der Anforderung: > Wir müssen unsere standard Konfidenz-Werte mal hinterfragen, sie fühlen sich tendenziell zu hoch an. > Der Decay wiederrum ist im Verhältnis vielleicht zu klein. > > Muss durchgedacht und bewertet werden. **Changelog:** Stub gegen den Baum geprüft und ausgearbeitet. Beide Vermutungen bestätigten sich nicht in der Form, in der sie gestellt waren: die zu hohen Werte sind fast vollständig PoC-Altbestand (alle 47 Rubrikverletzungen und 66 von 67 Obergrenzen-Befunden liegen in der Kohorte `created <= 2026-08-13`, die 21 Seiten der aktuellen Praxis sind sauber), und der Decay ist nicht zu klein, sondern hat noch nie gewirkt. Die Untersuchung führte über vier Entwürfe — Rubrik nachjustieren, Quellenautorität anheben, Wert aus `authority × fidelity` berechnen, zwei Schubladen für Reifegrad und Volatilität — die alle an konkreten Messwerten scheiterten. Ergebnis: der Mechanismus wird ersatzlos entfernt, `--major`. Titel entsprechend geändert, alle vier Pflichtlabels gesetzt, `status/incoming` entfernt. Neu abgezweigt: **#85** hält die vollständige Studienlage, den Lösungskonflikt, die Commonplace-Referenz (ADR 044 — dasselbe Feld, dieselbe Diagnose, dort 2026-07-11 gelöscht) und fünf benannte Wiederaufnahme-Trigger — das Thema ist zurückgestellt, nicht vom Tisch. **#86** trägt die Korpusmigration über die 152 Seiten und ist auf dieses Issue geblockt. Nicht in diesem Paket und bewusst offen: der Ersatz für den wegfallenden `confidence_exceeds_source_standing`-Check. Kandidat und Begründung stehen in #85, Trigger 1.
Author
Owner

Changelog: Umsetzung vorbereitet, Body gegen den Baum geprüft. Drei Korrekturen und zwei Ergänzungen.

Neu und blockierend war das Sequencing: beide Schemas tragen additionalProperties: false, also fallen mit den Properties alle 152 Seiten als schema_validation_errors aus — überzählige Felder, nicht fehlende. Das alte Akzeptanzkriterium („keine Fehler wegen fehlender Felder") zielte in die falsche Richtung und ist korrigiert. Da ci.yml:161 lint --fail-on-error auf main fährt, wäre main bis zum Abschluss von #86 rot. Entscheidung des Operators: kein Fenster, #86 landet im selben Publish. Zwei Alternativen geprüft und im Body als verworfen festgehalten (MIGRATION_GATED_KEYS auf schema_validation_errors; Properties transient stehen lassen).

Neu ist ein § Was hinzukommt: version bump bekommt ein Rücknahme-Flag für die **Migration:** none required-Zeile. _set_marker_line kann sie nur ersetzen, und der laufende Kandidat 5.0.0-beta.3 trägt sie aus einem früheren Bump — dieses Paket macht sie falsch, und weder version bump (was_already_crossing) noch docs verify (Marker genügt) würde das melden. Handedit scheidet nach Invariante 1 aus.

§ Version umgeschrieben: der Kandidat steht bereits jenseits der Grenze und trägt die **Breaking Change:**-Zeile, also entfällt die zweite Eskalationsentscheidung nach version-parts.md Schritt 4. Offen ist nur die Migrationsseite.

Streichliste ergänzt um INSTALL-MCP.md, instructions/capture-session.md, types/instruction.md, types/type-spec.md und die Kommentarpfade in search/base.py, search/filters.py, search/service.py, conventions.py, doctor.py, docs_verify.py. Zwei Entwarnungen aufgenommen: conventions.py verlangt keine „Confidence rubric"-Überschrift, und docs/ erwähnt den Mechanismus nirgends — kein Staleness-Nachlauf.

**Changelog:** Umsetzung vorbereitet, Body gegen den Baum geprüft. Drei Korrekturen und zwei Ergänzungen. Neu und blockierend war das **Sequencing**: beide Schemas tragen `additionalProperties: false`, also fallen mit den Properties alle 152 Seiten als `schema_validation_errors` aus — überzählige Felder, nicht fehlende. Das alte Akzeptanzkriterium („keine Fehler wegen fehlender Felder") zielte in die falsche Richtung und ist korrigiert. Da `ci.yml:161` `lint --fail-on-error` auf `main` fährt, wäre `main` bis zum Abschluss von #86 rot. Entscheidung des Operators: kein Fenster, #86 landet im selben Publish. Zwei Alternativen geprüft und im Body als verworfen festgehalten (`MIGRATION_GATED_KEYS` auf `schema_validation_errors`; Properties transient stehen lassen). Neu ist ein **§ Was hinzukommt**: `version bump` bekommt ein Rücknahme-Flag für die `**Migration:** none required`-Zeile. `_set_marker_line` kann sie nur ersetzen, und der laufende Kandidat `5.0.0-beta.3` trägt sie aus einem früheren Bump — dieses Paket macht sie falsch, und weder `version bump` (`was_already_crossing`) noch `docs verify` (Marker genügt) würde das melden. Handedit scheidet nach Invariante 1 aus. § Version umgeschrieben: der Kandidat steht bereits jenseits der Grenze und trägt die `**Breaking Change:**`-Zeile, also entfällt die zweite Eskalationsentscheidung nach `version-parts.md` Schritt 4. Offen ist nur die Migrationsseite. Streichliste ergänzt um `INSTALL-MCP.md`, `instructions/capture-session.md`, `types/instruction.md`, `types/type-spec.md` und die Kommentarpfade in `search/base.py`, `search/filters.py`, `search/service.py`, `conventions.py`, `doctor.py`, `docs_verify.py`. Zwei Entwarnungen aufgenommen: `conventions.py` verlangt keine „Confidence rubric"-Überschrift, und `docs/` erwähnt den Mechanismus nirgends — kein Staleness-Nachlauf.
Author
Owner

Changelog: Umsetzung abgeschlossen, Body auf Endstand. Alle Akzeptanzkriterien abgehakt; verifiziert benannt: pytest 1095, doctor/docs verify/instructions verify/lint --fail-on-error lokal grün, CI-Lauf 219 grün über alle neun Schritte inkl. Export-Replay als frische Instanz.

Zwei Punkte gegenüber dem Planungsstand:

Das grep-Kriterium ist mit einer benannten Ausnahme abgehakt statt buchstäblich erfüllt — der Regressionstest, der beweist, dass --confidence-base weg ist, muss das Flag benennen. Das Kriterium hatte den Fall nicht bedacht; die Ausnahme steht jetzt mit Begründung im Body statt als stiller Verstoß.

Unterwegs ein selbst eingeschleppter Defekt: das Entfernen der Zwei-Stellen-Rundung in frontmatter_io._format_scalar nahm den ganzen Float-Zweig mit, wodurch echte Floats in die String-Quoting-Logik fielen und als '0.9' — also als String — geschrieben worden wären. Vor dem Korpuslauf durch eine Round-Trip-Probe an einer echten Seite aufgefallen, behoben, Regressionstest ergänzt. Der Korpus war davon nie betroffen, weil die einzigen Float-Felder genau die entfernten waren.

Nachgezogen in 11cbb15: instructions/dev/version-parts.md Schritt 6 beschreibt den --migration-required-Rücknahmepfad. tools/CONTRACT.md führte das Flag schon, aber die Instruction, die eine Sitzung vor einem Bump liest, kannte den Fall nicht — dieselbe Sitzung ist genau darüber gestolpert.

**Changelog:** Umsetzung abgeschlossen, Body auf Endstand. Alle Akzeptanzkriterien abgehakt; verifiziert benannt: `pytest` 1095, `doctor`/`docs verify`/`instructions verify`/`lint --fail-on-error` lokal grün, CI-Lauf **219** grün über alle neun Schritte inkl. Export-Replay als frische Instanz. Zwei Punkte gegenüber dem Planungsstand: Das grep-Kriterium ist mit einer benannten Ausnahme abgehakt statt buchstäblich erfüllt — der Regressionstest, der beweist, dass `--confidence-base` weg ist, muss das Flag benennen. Das Kriterium hatte den Fall nicht bedacht; die Ausnahme steht jetzt mit Begründung im Body statt als stiller Verstoß. Unterwegs ein selbst eingeschleppter Defekt: das Entfernen der Zwei-Stellen-Rundung in `frontmatter_io._format_scalar` nahm den ganzen Float-Zweig mit, wodurch echte Floats in die String-Quoting-Logik fielen und als `'0.9'` — also als String — geschrieben worden wären. Vor dem Korpuslauf durch eine Round-Trip-Probe an einer echten Seite aufgefallen, behoben, Regressionstest ergänzt. Der Korpus war davon nie betroffen, weil die einzigen Float-Felder genau die entfernten waren. Nachgezogen in `11cbb15`: `instructions/dev/version-parts.md` Schritt 6 beschreibt den `--migration-required`-Rücknahmepfad. `tools/CONTRACT.md` führte das Flag schon, aber die Instruction, die eine Sitzung *vor* einem Bump liest, kannte den Fall nicht — dieselbe Sitzung ist genau darüber gestolpert.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#60