Erledigt. Version 8.0.0-beta.40 (Bump --minor, Impact medium), Commit 862bc04.
Entscheidungen 1–4 sind so umgesetzt, wie sie unten stehen, ohne Abweichung.
CI auf 862bc04: Run 539 (Jobs verify und pwsh) und Run 540, beide grün
Im Abschluss (stack-close) wurden geprüft: docs/, README.md § Provenance, die Typ-Guidance, kb/CONTRACT.md, wiki-ingest und die Befehls-Records. Veraltet war nur ein Satz im CHANGES.md-Eintrag. Er behauptete, bis zu den Handgriffen melde lintjede zitierende
source-Seite als Schema-Fehler. Seit Entscheidung 3 gilt das für das Selbstzitat nicht mehr, denn
das kommt allein mit dem Code-Upgrade. Korrigiert in 8ff22ad, nur CHANGES.md, daher kein
Bump. CI-Run 541 grün.
Befund
wikitool cite add legte auf jeder Seite per setdefault das Frontmatter-Feld sources: an und
trug die zitierte Quelle ein (tools/chemenu/commands/cite_cmd.py, upsert_citation).
Zwei der fünf root: kb-Seitentypen deklarierten sources weder im Schema noch in page_ref_fields:. Ihr Schema steht zudem auf additionalProperties: false, sodass wikitool lint die Seite danach als Schema-Fehler meldete:
Seitentyp
sources im Schema / in page_ref_fields (vorher)
Betroffen
entity, concept, project
ja / ja
nein
comparison
nein / nein ([entities, related])
ja: jede Zitation
source
nein / nein ([entities, concepts])
ja: jede Zitation, auch das Selbstzitat mit --file
Am 2026-10-04 gegen main (662a844) reproduziert, mit einem Wegwerf-Test auf den kb_dir/raw_dir-Fixtures und run_lint():
comparison: Additional properties are not allowed ('sources' was unexpected)
source, Selbstzitat mit --file notes.md: ('source', 'sources' were unexpected). Das source ist ein Fixture-Artefakt, sources kam neu durch cite add dazu.
Andere Typen (instruction, type-spec, …) sind keine kb/-Seiten, cite add erreicht sie
nicht.
Derselbe Defekt steckte in xref link-source, wenn ein Ziel in --entities selbst eine
source-Seite war. Der Befehl schrieb dann sources: auf das Ziel, was wieder gegen das
source-Schema verstieß. Den Rückverweis ließ er als „unrouted“ liegen.
Der Widerspruch: kb/comparisons/COLLECTION.md:38 (wird als .template ausgeliefert) verlangt
„Cite hard facts the same way any other page does.“ Und lint selbst behandelt das Selbstzitat
einer source-Seite als legitim (tools/chemenu/lint_core.py, citation_frontmatter_drift). Eine
regelkonform belegte Seite konnte lint nicht bestehen.
page_ref_fields: gehört zum Fix, nicht nur das Schema. Was dort nicht deklariert ist,
zieht rename/rm nicht mit (page_ops.retarget_frontmatter), prüft lint nicht auf
Auflösbarkeit (dangling_frontmatter_refs) und leert xref remove nicht. Ein Schema-Fix allein,
wie ihn die private Instanz lokal gemacht hat, lässt nach dem Umbenennen einer Quelle tote sources:-Einträge auf comparison-Seiten zurück, und niemand meldet sie.
Entscheidungen
comparison: sources wird optionales, deklariertes Referenzfeld. Das Schema bekommt sources (array of string, wie types/concept.schema.yaml), nicht required, damit
Bestandsseiten weiter validieren. page_ref_fields: [entities, related, sources]. Verworfen:cite add auf comparison ohne sources: schreiben lassen, denn dann zeigt eine
Fußnote auf eine Quelle, die kb/provenance.md und sources coverage nicht kennen, und lint meldet citation_frontmatter_drift.
source-Seiten dürfen andere source-Seiten zitieren (Entscheidung des Betreibers,
2026-10-04: „nicht ungewöhnlich“). Gleiche Form wie bei comparison: Das Schema bekommt sources (optional) und page_ref_fields: [entities, concepts, sources]. cite add --page "Source - A" --source "Source - B" schreibt sources: [Source - B] auf A.
B bleibt unverändert, und citing_pages(B) führt A dann als Zitierer.
Selbstzitat: cite add schreibt den eigenen Titel nie in sources:. Wenn source_title == page.title, rührt upsert_citation das Frontmatter nicht an: kein
Eintrag, auch kein durch setdefault angelegtes leeres sources: []. Die
Fußnotendefinition wird wie bisher geschrieben. Mit Entscheidung 2 wäre der Eintrag kein
Schema-Fehler mehr, aber eine Kante auf sich selbst ohne Information. lint und provenance.citing_pages() ignorieren sie ohnehin. Das zieht cite add auf deren Linie.
xref link-source lehnt ein Ziel ab, das selbst eine source-Seite ist
(page.kind == "source"). Grund: link-source heißt „Quelle A erwähnt X“ und schreibt X.sources += A. Bei X = Quelle B behauptet das „B zitiert A“, also die falsche Richtung.
Mit Entscheidung 2 käme über _back_reference_field noch A.sources += B dazu, die
Zitation stünde dann symmetrisch auf beiden Seiten. Eine Zitation zwischen Quellen hat eine
Richtung, und die drückt nur cite add aus. Verhalten: Das Ziel wird nicht geschrieben und
in einer eigenen Ausgabezeile Refused (a source page - …) benannt, mit dem Hinweis auf wikitool cite add --page "<A>" --source "<B>" (oder umgekehrt, denn welche Richtung gilt,
weiß das Werkzeug nicht). Die übrigen Ziele werden verlinkt, der Lauf endet wie bei „page not
found“ mit exit 1. Verworfen: still überspringen mit exit 0, denn dann bemerkt wiki-ingest nicht, dass eine gewollte Verbindung fehlt.
Nicht Teil dieses Pakets
Ob comparison zusätzlich provenance:/modified: bekommen sollte (entity/concept haben
beides), ist nicht gefragt und nicht nötig, um diesen Defekt zu beheben.
sources trace --page "Source - A" listet nach Entscheidung 2 die zitierten Quellen und deren
Rohdateien, nicht A's eigene raw_files:. Das stimmt mit der Bedeutung „was belegt diese
Seite per Zitat“ überein und braucht keine Änderung.
kb/sources/COLLECTION.md § Outbound linking bleibt unverändert: Die Aussage dort („Pages
elsewhere cite this one …“) ist weiter wahr, und die neue Regel steht einmal, in kb/CONTRACT.md (Invariante 8).
Betroffene Dateien (so geändert in 862bc04, CHANGES.md nachgebessert in 8ff22ad)
types/comparison.schema.yaml: Property sources
types/comparison.md: page_ref_fields: [entities, related, sources], Zeile sources in der
Frontmatter-Tabelle
types/source.schema.yaml: Property sources
types/source.md: page_ref_fields: [entities, concepts, sources], Zeile sources in der
Frontmatter-Tabelle
Alle vier Dateien werden als .template ausgeliefert (dist_cmd._owned_type_stem).
tools/chemenu/commands/cite_cmd.py: upsert_citation (Entscheidung 3). Notes von cite add nennen die Selbstzitat-Ausnahme und dass cite add die Zitation zwischen Quellen
festhält.
tools/chemenu/commands/xref.py: xref_link_source (Entscheidung 4), dazu im CommandRecord eine Note und eine Failure für das abgelehnte source-Ziel
tools/CONTRACT.md: per docs contract --apply neu erzeugt
kb/CONTRACT.md § Provenance and citation: Selbstzitat-Ausnahme bei cite add und bei
„A source cited inline must also appear …“, neuer Punkt „A source page may cite another
source page“, link-source-Punkt nennt: nie eine andere source-Seite als Ziel.
instructions/wiki-ingest/SKILL.md Schritt 9: Absatz für eine ältere Quelle, die die neue
zitiert, mit cite add, verlinkt die Regel in kb/CONTRACT.md.
CHANGES.md: Eintrag mit den Handgriffen für bestehende Instanzen
Tests: test_cite_cmd.py (comparison, source zitiert source, Selbstzitat drei Fälle), test_xref.py (test_xref_link_source_refuses_a_target_that_is_itself_a_source), test_page_ops.py (test_rename_carries_sources_on_comparison_and_source_pages), test_type_resolver.py (die dort festgeschriebenen page_ref_fields nachgezogen). Jeder neue
Test scheitert gegen den Stand vor dem Fix.
Akzeptanzkriterien
Nach cite add --page "<comparison>" --source "Source - X" auf einer sonst
schema-gültigen comparison-Seite steht die Seite nicht in run_lint(kb_dir)["schema_validation_errors"], und ihr sources: enthält Source - X.
Nach cite add --page "Source - A" --source "Source - B" auf einer sonst schema-gültigen
source-Seite A steht A nicht in schema_validation_errors, A.sources == ["Source - B"],
B's Datei ist byte-gleich, und citing_pages(pages, "Source - B") enthält Source - A.
Nach cite add --page "Source - A" --source "Source - A" --file <f> hat A keinen
Schlüssel sources (wenn es vorher keinen hatte) bzw. ein unverändertes sources:, und
die Definition [[Source - A|<f>]] steht im Footnotes-Bereich. Die Wiederholung liefert changed is False.
Ein Rename von Source - X schreibt den neuen Titel in das sources: einer
comparison-Seite und einer source-Seite, die X zitieren. Danach meldet lint keinen dangling_frontmatter_refs-Eintrag für diese Seiten.
xref link-source --source "Source - A" --entities "<entity>,Source - B": Die Entity ist
verlinkt. Das Frontmatter von A und B enthält danach keinen Eintrag, der die jeweils
andere Quelle nennt. Die Ausgabe nennt Source - B mit dem cite add-Hinweis. Der exit
code ist 1.
Zitationen auf entity/concept/project verhalten sich unverändert (bestehende Tests grün).
kb/CONTRACT.md, wiki-ingest Schritt 9 sowie die Notes von cite add und xref link-source beschreiben das neue Verhalten. tools/CONTRACT.md ist neu erzeugt.
Der CHANGES.md-Eintrag sagt Betreibern einer bestehenden Instanz, was sie tun müssen,
und welcher Fall auch ohne die Handgriffe funktioniert (siehe unten).
CI grün auf 862bc04: Runs 539 und 540. Auf 8ff22ad Run 541.
Bestehende Instanzen
Schema und Type-Spec von comparison und source gehören nach der Adoption der Instanz. dist upgrade erneuert nur die .template-Dateien daneben und meldet nicht, dass sich das
Template unter einer adoptierten Datei geändert hat (instructions/upgrade-instance.md Schritt
6/9). Der Typ-Teil (Entscheidungen 1 und 2) erreicht eine bestehende Instanz also nur von
Hand. Der CHANGES.md-Eintrag sagt das explizit, je Typ (comparison, source) drei Handgriffe:
Property sources aus types/<typ>.schema.yaml.template in das eigene Schema übernehmen
sources in page_ref_fields: der eigenen types/<typ>.md ergänzen (ohne das zieht ein
Rename die Einträge nicht mit)
Tabellenzeile sources in derselben Datei übernehmen
Eine Instanz, die nur das Schema angepasst hat (wie die meldende), braucht noch den zweiten
Punkt. Die Code-Teile (Entscheidungen 3 und 4) liegen unter tools/ und kommen mit dem
normalen Upgrade. Das Selbstzitat einer source-Seite validiert damit auch ohne die Handgriffe.
Versionsteil
--minor, gebumpt auf 8.0.0-beta.40. Drop-in-Test (instructions/dev/version-parts.md):
Vorwärts: Nichts, was vorher funktionierte, bricht. Schemas werden nur gelockert, und cite add schreibt in einem Fall weniger. link-source mit source-Ziel endet jetzt mit
exit 1. Vorher endete es mit exit 0, aber mit einer Seite, die lint als Schema-Fehler
meldet: Das funktionierte also schon vorher nicht. Die Handarbeit oben ist nötig, um die
neue Fähigkeit zu bekommen, nicht, um weiterzuarbeiten.
Rückwärts: Ein Downgrade ersetzt nur die .template-Dateien. Die adoptierten
Schemas/Type-Specs der Instanz bleiben, also validiert eine source-Seite mit sources:
weiter.
Neue Fähigkeit (Quellen zitieren Quellen), drop-in in beide Richtungen, daher --minor, nicht --patch. Der laufende Kandidat stand bei 8.0.0-beta.39 (schon MAJOR-Stufe). Der Bump hat
dort nur die Bump-Zählung erhöht. Kein Boundary-Crossing, also kein --breaking und kein --no-migration. Impact: medium.
Herkunft
Aufgefallen beim Anlegen der ersten comparison-Seite einer privaten Instanz (v7.0.0). Die
Instanz hat das Schema lokal schon angepasst. Ursprünglicher Stub wörtlich im ersten Kommentar.
## Stand
**Erledigt.** Version `8.0.0-beta.40` (Bump `--minor`, Impact `medium`), Commit `862bc04`.
Entscheidungen 1–4 sind so umgesetzt, wie sie unten stehen, ohne Abweichung.
Verifiziert durch:
- lokal: `pytest` hermetisch (2218 passed, 3 skipped), `docs verify`, `instructions verify`
- CI auf `862bc04`: Run 539 (Jobs `verify` und `pwsh`) und Run 540, beide grün
Im Abschluss (`stack-close`) wurden geprüft: `docs/`, `README.md` § Provenance, die Typ-Guidance,
`kb/CONTRACT.md`, `wiki-ingest` und die Befehls-Records. Veraltet war nur ein Satz im
`CHANGES.md`-Eintrag. Er behauptete, bis zu den Handgriffen melde `lint` *jede* zitierende
source-Seite als Schema-Fehler. Seit Entscheidung 3 gilt das für das Selbstzitat nicht mehr, denn
das kommt allein mit dem Code-Upgrade. Korrigiert in `8ff22ad`, nur `CHANGES.md`, daher kein
Bump. CI-Run 541 grün.
## Befund
`wikitool cite add` legte auf jeder Seite per `setdefault` das Frontmatter-Feld `sources:` an und
trug die zitierte Quelle ein (`tools/chemenu/commands/cite_cmd.py`, `upsert_citation`).
Zwei der fünf `root: kb`-Seitentypen deklarierten `sources` weder im Schema noch in
`page_ref_fields:`. Ihr Schema steht zudem auf `additionalProperties: false`, sodass
`wikitool lint` die Seite danach als Schema-Fehler meldete:
| Seitentyp | `sources` im Schema / in `page_ref_fields` (vorher) | Betroffen |
|---|---|---|
| entity, concept, project | ja / ja | nein |
| **comparison** | nein / nein (`[entities, related]`) | **ja**: jede Zitation |
| **source** | nein / nein (`[entities, concepts]`) | **ja**: jede Zitation, auch das Selbstzitat mit `--file` |
Am 2026-10-04 gegen `main` (662a844) reproduziert, mit einem Wegwerf-Test auf den
`kb_dir`/`raw_dir`-Fixtures und `run_lint()`:
- comparison: `Additional properties are not allowed ('sources' was unexpected)`
- source, Selbstzitat mit `--file notes.md`: `('source', 'sources' were unexpected)`. Das
`source` ist ein Fixture-Artefakt, `sources` kam neu durch `cite add` dazu.
Andere Typen (`instruction`, `type-spec`, …) sind keine `kb/`-Seiten, `cite add` erreicht sie
nicht.
Derselbe Defekt steckte in `xref link-source`, wenn ein Ziel in `--entities` selbst eine
source-Seite war. Der Befehl schrieb dann `sources:` auf das Ziel, was wieder gegen das
source-Schema verstieß. Den Rückverweis ließ er als „unrouted“ liegen.
Der Widerspruch: `kb/comparisons/COLLECTION.md:38` (wird als `.template` ausgeliefert) verlangt
„Cite hard facts the same way any other page does.“ Und `lint` selbst behandelt das Selbstzitat
einer source-Seite als legitim (`tools/chemenu/lint_core.py`, `citation_frontmatter_drift`). Eine
regelkonform belegte Seite konnte `lint` nicht bestehen.
**`page_ref_fields:` gehört zum Fix, nicht nur das Schema.** Was dort nicht deklariert ist,
zieht `rename`/`rm` nicht mit (`page_ops.retarget_frontmatter`), prüft `lint` nicht auf
Auflösbarkeit (`dangling_frontmatter_refs`) und leert `xref remove` nicht. Ein Schema-Fix allein,
wie ihn die private Instanz lokal gemacht hat, lässt nach dem Umbenennen einer Quelle tote
`sources:`-Einträge auf comparison-Seiten zurück, und niemand meldet sie.
## Entscheidungen
1. **comparison: `sources` wird optionales, deklariertes Referenzfeld.** Das Schema bekommt
`sources` (array of string, wie `types/concept.schema.yaml`), nicht required, damit
Bestandsseiten weiter validieren. `page_ref_fields: [entities, related, sources]`.
*Verworfen:* `cite add` auf comparison ohne `sources:` schreiben lassen, denn dann zeigt eine
Fußnote auf eine Quelle, die `kb/provenance.md` und `sources coverage` nicht kennen, und
`lint` meldet `citation_frontmatter_drift`.
2. **source-Seiten dürfen andere source-Seiten zitieren** (Entscheidung des Betreibers,
2026-10-04: „nicht ungewöhnlich“). Gleiche Form wie bei comparison: Das Schema bekommt
`sources` (optional) und `page_ref_fields: [entities, concepts, sources]`.
`cite add --page "Source - A" --source "Source - B"` schreibt `sources: [Source - B]` auf A.
B bleibt unverändert, und `citing_pages(B)` führt A dann als Zitierer.
3. **Selbstzitat: `cite add` schreibt den eigenen Titel nie in `sources:`.** Wenn
`source_title == page.title`, rührt `upsert_citation` das Frontmatter nicht an: kein
Eintrag, auch kein durch `setdefault` angelegtes leeres `sources: []`. Die
Fußnotendefinition wird wie bisher geschrieben. Mit Entscheidung 2 wäre der Eintrag kein
Schema-Fehler mehr, aber eine Kante auf sich selbst ohne Information. `lint` und
`provenance.citing_pages()` ignorieren sie ohnehin. Das zieht `cite add` auf deren Linie.
4. **`xref link-source` lehnt ein Ziel ab, das selbst eine source-Seite ist**
(`page.kind == "source"`). Grund: `link-source` heißt „Quelle A erwähnt X“ und schreibt
`X.sources += A`. Bei X = Quelle B behauptet das „B zitiert A“, also die falsche Richtung.
Mit Entscheidung 2 käme über `_back_reference_field` noch `A.sources += B` dazu, die
Zitation stünde dann symmetrisch auf beiden Seiten. Eine Zitation zwischen Quellen hat eine
Richtung, und die drückt nur `cite add` aus. Verhalten: Das Ziel wird nicht geschrieben und
in einer eigenen Ausgabezeile `Refused (a source page - …)` benannt, mit dem Hinweis auf
`wikitool cite add --page "<A>" --source "<B>"` (oder umgekehrt, denn welche Richtung gilt,
weiß das Werkzeug nicht). Die übrigen Ziele werden verlinkt, der Lauf endet wie bei „page not
found“ mit exit 1. *Verworfen:* still überspringen mit exit 0, denn dann bemerkt
`wiki-ingest` nicht, dass eine gewollte Verbindung fehlt.
## Nicht Teil dieses Pakets
- Ob comparison zusätzlich `provenance:`/`modified:` bekommen sollte (entity/concept haben
beides), ist nicht gefragt und nicht nötig, um diesen Defekt zu beheben.
- `sources trace --page "Source - A"` listet nach Entscheidung 2 die zitierten Quellen und deren
Rohdateien, nicht A's eigene `raw_files:`. Das stimmt mit der Bedeutung „was belegt diese
Seite per Zitat“ überein und braucht keine Änderung.
- `kb/sources/COLLECTION.md` § Outbound linking bleibt unverändert: Die Aussage dort („Pages
elsewhere cite this one …“) ist weiter wahr, und die neue Regel steht einmal, in
`kb/CONTRACT.md` (Invariante 8).
## Betroffene Dateien (so geändert in `862bc04`, `CHANGES.md` nachgebessert in `8ff22ad`)
- `types/comparison.schema.yaml`: Property `sources`
- `types/comparison.md`: `page_ref_fields: [entities, related, sources]`, Zeile `sources` in der
Frontmatter-Tabelle
- `types/source.schema.yaml`: Property `sources`
- `types/source.md`: `page_ref_fields: [entities, concepts, sources]`, Zeile `sources` in der
Frontmatter-Tabelle
Alle vier Dateien werden als `.template` ausgeliefert (`dist_cmd._owned_type_stem`).
- `tools/chemenu/commands/cite_cmd.py`: `upsert_citation` (Entscheidung 3). Notes von
`cite add` nennen die Selbstzitat-Ausnahme und dass `cite add` die Zitation zwischen Quellen
festhält.
- `tools/chemenu/commands/xref.py`: `xref_link_source` (Entscheidung 4), dazu im
`CommandRecord` eine Note und eine `Failure` für das abgelehnte source-Ziel
- `tools/CONTRACT.md`: per `docs contract --apply` neu erzeugt
- `kb/CONTRACT.md` § Provenance and citation: Selbstzitat-Ausnahme bei `cite add` und bei
„A source cited inline must also appear …“, neuer Punkt „A source page may cite another
source page“, `link-source`-Punkt nennt: nie eine andere source-Seite als Ziel.
- `instructions/wiki-ingest/SKILL.md` Schritt 9: Absatz für eine ältere Quelle, die die neue
zitiert, mit `cite add`, verlinkt die Regel in `kb/CONTRACT.md`.
- `CHANGES.md`: Eintrag mit den Handgriffen für bestehende Instanzen
- Tests: `test_cite_cmd.py` (comparison, source zitiert source, Selbstzitat drei Fälle),
`test_xref.py` (`test_xref_link_source_refuses_a_target_that_is_itself_a_source`),
`test_page_ops.py` (`test_rename_carries_sources_on_comparison_and_source_pages`),
`test_type_resolver.py` (die dort festgeschriebenen `page_ref_fields` nachgezogen). Jeder neue
Test scheitert gegen den Stand vor dem Fix.
## Akzeptanzkriterien
- [x] Nach `cite add --page "<comparison>" --source "Source - X"` auf einer sonst
schema-gültigen comparison-Seite steht die Seite nicht in
`run_lint(kb_dir)["schema_validation_errors"]`, und ihr `sources:` enthält `Source - X`.
- [x] Nach `cite add --page "Source - A" --source "Source - B"` auf einer sonst schema-gültigen
source-Seite A steht A nicht in `schema_validation_errors`, `A.sources == ["Source - B"]`,
B's Datei ist byte-gleich, und `citing_pages(pages, "Source - B")` enthält
`Source - A`.
- [x] Nach `cite add --page "Source - A" --source "Source - A" --file <f>` hat A keinen
Schlüssel `sources` (wenn es vorher keinen hatte) bzw. ein unverändertes `sources:`, und
die Definition `[[Source - A|<f>]]` steht im Footnotes-Bereich. Die Wiederholung liefert
`changed is False`.
- [x] Ein Rename von `Source - X` schreibt den neuen Titel in das `sources:` einer
comparison-Seite und einer source-Seite, die X zitieren. Danach meldet `lint` keinen
`dangling_frontmatter_refs`-Eintrag für diese Seiten.
- [x] `xref link-source --source "Source - A" --entities "<entity>,Source - B"`: Die Entity ist
verlinkt. Das Frontmatter von A und B enthält danach keinen Eintrag, der die jeweils
andere Quelle nennt. Die Ausgabe nennt `Source - B` mit dem `cite add`-Hinweis. Der exit
code ist 1.
- [x] Zitationen auf entity/concept/project verhalten sich unverändert (bestehende Tests grün).
- [x] `kb/CONTRACT.md`, `wiki-ingest` Schritt 9 sowie die Notes von `cite add` und
`xref link-source` beschreiben das neue Verhalten. `tools/CONTRACT.md` ist neu erzeugt.
- [x] Der `CHANGES.md`-Eintrag sagt Betreibern einer bestehenden Instanz, was sie tun müssen,
und welcher Fall auch ohne die Handgriffe funktioniert (siehe unten).
- [x] `pytest` (hermetisch: 2218 passed, 3 skipped), `docs verify`, `instructions verify`
sauber.
- [x] CI grün auf `862bc04`: Runs 539 und 540. Auf `8ff22ad` Run 541.
## Bestehende Instanzen
Schema und Type-Spec von comparison und source gehören nach der Adoption der Instanz.
`dist upgrade` erneuert nur die `.template`-Dateien daneben und meldet nicht, dass sich das
Template unter einer adoptierten Datei geändert hat (`instructions/upgrade-instance.md` Schritt
6/9). Der Typ-Teil (Entscheidungen 1 und 2) erreicht eine bestehende Instanz also **nur von
Hand**. Der `CHANGES.md`-Eintrag sagt das explizit, je Typ (comparison, source) drei Handgriffe:
- Property `sources` aus `types/<typ>.schema.yaml.template` in das eigene Schema übernehmen
- `sources` in `page_ref_fields:` der eigenen `types/<typ>.md` ergänzen (ohne das zieht ein
Rename die Einträge nicht mit)
- Tabellenzeile `sources` in derselben Datei übernehmen
Eine Instanz, die nur das Schema angepasst hat (wie die meldende), braucht noch den zweiten
Punkt. Die Code-Teile (Entscheidungen 3 und 4) liegen unter `tools/` und kommen mit dem
normalen Upgrade. Das Selbstzitat einer source-Seite validiert damit auch ohne die Handgriffe.
## Versionsteil
**`--minor`**, gebumpt auf `8.0.0-beta.40`. Drop-in-Test (`instructions/dev/version-parts.md`):
- *Vorwärts:* Nichts, was vorher funktionierte, bricht. Schemas werden nur gelockert, und
`cite add` schreibt in einem Fall weniger. `link-source` mit source-Ziel endet jetzt mit
exit 1. Vorher endete es mit exit 0, aber mit einer Seite, die `lint` als Schema-Fehler
meldet: Das funktionierte also schon vorher nicht. Die Handarbeit oben ist nötig, um die
neue Fähigkeit zu *bekommen*, nicht, um weiterzuarbeiten.
- *Rückwärts:* Ein Downgrade ersetzt nur die `.template`-Dateien. Die adoptierten
Schemas/Type-Specs der Instanz bleiben, also validiert eine source-Seite mit `sources:`
weiter.
Neue Fähigkeit (Quellen zitieren Quellen), drop-in in beide Richtungen, daher `--minor`, nicht
`--patch`. Der laufende Kandidat stand bei `8.0.0-beta.39` (schon MAJOR-Stufe). Der Bump hat
dort nur die Bump-Zählung erhöht. Kein Boundary-Crossing, also kein `--breaking` und kein
`--no-migration`. Impact: `medium`.
## Herkunft
Aufgefallen beim Anlegen der ersten comparison-Seite einer privaten Instanz (v7.0.0). Die
Instanz hat das Schema lokal schon angepasst. Ursprünglicher Stub wörtlich im ersten Kommentar.
Ausarbeitung des Stubs (status/incoming). Der ursprüngliche Body, wörtlich, vor der Neufassung:
Befund
Auf einer comparison-Seite schreibt wikitool cite add wie auf jeder anderen Seite die Quelle in
das Frontmatter-Feld sources:. Das ausgelieferte Schema types/comparison.schema.yaml
(identisch mit dem Template einer Instanz) kennt dieses Feld nicht und steht auf additionalProperties: false (Zeile 50). wikitool lint meldet die Seite danach als
Schema-Fehler:
## Schema Validation Errors
- [[A vs B]] type: `types/comparison.md` - Frontmatter validation failed for type
types/comparison.md: Additional properties are not allowed ('sources' was unexpected)
(Ausgabe aus einer privaten Instanz, Seitentitel durch A vs B ersetzt.)
Gleichzeitig verlangt kb/comparisons/COLLECTION.md.template:38: "Cite hard facts the same way
any other page does." Werkzeug, Collection-Vertrag und Schema widersprechen sich; eine
regelkonform belegte comparison-Seite kann lint nicht bestehen.
Ursache
tools/chemenu/commands/cite_cmd.py:78-81 legt sources unabhaengig vom Seitentyp per setdefault an. types/comparison.schema.yaml deklariert sources nicht (entity und concept
tun es, z. B. types/concept.schema.yaml:45-49). Gemessen: v7.0.0 und aktueller main
(Datei unveraendert). Angenommen, nicht geprueft: weitere Seitentypen ohne sources-Feld
waeren gleich betroffen.
Reproduktion
Zwei beliebige Seiten anlegen, z. B. zwei Entities A und B.
tools/wikitool new comparison --name "A vs B" --set entities=A,B
tools/wikitool cite add --page "A vs B" --source "Source - <beliebige Quelle>"
tools/wikitool lint -> Schema Validation Error wie oben.
Loesungsvorschlag
sources als optionales Feld (array of string) in types/comparison.schema.yaml aufnehmen und
im Feld-Table von types/comparison.md dokumentieren - wie bei concept. Eine Instanz hat das
lokal so geloest.
Verworfen: cite add auf comparison-Seiten ohne sources: schreiben lassen - dann zeigt eine
Fussnote auf eine Quelle, die kb/provenance.md und sources coverage nicht kennen.
Akzeptanzkriterien
types/comparison.schema.yaml (und das ausgelieferte Template) erlaubt sources
types/comparison.md fuehrt das Feld in der Frontmatter-Tabelle
Test: cite add auf einer comparison-Seite, danach lint ohne Schema-Fehler
Hinweis fuer bestehende Instanzen (Template-Datei gehoert der Instanz): CHANGES.md bzw.
Upgrade-Hinweis
pytest, docs verify, instructions verify sauber
Herkunft
Aufgefallen beim Anlegen der ersten comparison-Seite einer privaten Instanz (v7.0.0).
**Ausarbeitung des Stubs (status/incoming).** Der ursprüngliche Body, wörtlich, vor der Neufassung:
> ## Befund
>
> Auf einer comparison-Seite schreibt `wikitool cite add` wie auf jeder anderen Seite die Quelle in
> das Frontmatter-Feld `sources:`. Das ausgelieferte Schema `types/comparison.schema.yaml`
> (identisch mit dem Template einer Instanz) kennt dieses Feld nicht und steht auf
> `additionalProperties: false` (Zeile 50). `wikitool lint` meldet die Seite danach als
> Schema-Fehler:
>
> ## Schema Validation Errors
> - [[A vs B]] type: `types/comparison.md` - Frontmatter validation failed for type
> types/comparison.md: Additional properties are not allowed ('sources' was unexpected)
>
> (Ausgabe aus einer privaten Instanz, Seitentitel durch `A vs B` ersetzt.)
>
> Gleichzeitig verlangt `kb/comparisons/COLLECTION.md.template:38`: "Cite hard facts the same way
> any other page does." Werkzeug, Collection-Vertrag und Schema widersprechen sich; eine
> regelkonform belegte comparison-Seite kann `lint` nicht bestehen.
>
> ## Ursache
>
> `tools/chemenu/commands/cite_cmd.py:78-81` legt `sources` unabhaengig vom Seitentyp per
> `setdefault` an. `types/comparison.schema.yaml` deklariert `sources` nicht (entity und concept
> tun es, z. B. `types/concept.schema.yaml:45-49`). Gemessen: v7.0.0 und aktueller `main`
> (Datei unveraendert). Angenommen, nicht geprueft: weitere Seitentypen ohne `sources`-Feld
> waeren gleich betroffen.
>
> ## Reproduktion
>
> 1. Zwei beliebige Seiten anlegen, z. B. zwei Entities `A` und `B`.
> 2. `tools/wikitool new comparison --name "A vs B" --set entities=A,B`
> 3. `tools/wikitool cite add --page "A vs B" --source "Source - <beliebige Quelle>"`
> 4. `tools/wikitool lint` -> Schema Validation Error wie oben.
>
> ## Loesungsvorschlag
>
> `sources` als optionales Feld (array of string) in `types/comparison.schema.yaml` aufnehmen und
> im Feld-Table von `types/comparison.md` dokumentieren - wie bei concept. Eine Instanz hat das
> lokal so geloest.
>
> Verworfen: `cite add` auf comparison-Seiten ohne `sources:` schreiben lassen - dann zeigt eine
> Fussnote auf eine Quelle, die `kb/provenance.md` und `sources coverage` nicht kennen.
>
> ## Akzeptanzkriterien
>
> - [ ] `types/comparison.schema.yaml` (und das ausgelieferte Template) erlaubt `sources`
> - [ ] `types/comparison.md` fuehrt das Feld in der Frontmatter-Tabelle
> - [ ] Test: `cite add` auf einer comparison-Seite, danach `lint` ohne Schema-Fehler
> - [ ] Hinweis fuer bestehende Instanzen (Template-Datei gehoert der Instanz): CHANGES.md bzw.
> Upgrade-Hinweis
> - [ ] `pytest`, `docs verify`, `instructions verify` sauber
>
> ## Herkunft
>
> Aufgefallen beim Anlegen der ersten comparison-Seite einer privaten Instanz (v7.0.0).
torben
changed title from cite add schreibt sources: auf comparison-Seiten, deren Schema das Feld verbietet to cite add schreibt sources: in Seiten, deren Schema das Feld verbietet (comparison; source-Selbstzitat)2026-10-04 18:48:19 +00:00
Changelog: Stub ausgearbeitet und gegen main (662a844) reproduziert. Die Annahme „weitere Typen betroffen“ ist geprüft: Zusätzlich betroffen ist nur das Selbstzitat einer source-Seite. Das bekommt einen eigenen Fix in cite add (Entscheidung 2), weil lint und provenance es schon ausnehmen. Dateipfad korrigiert: im Origin-Repo kb/comparisons/COLLECTION.md, nicht .template. Neu: Abschnitt „Bestehende Instanzen“, weil dist upgrade geänderte Templates unter adoptierten Dateien nicht meldet. Ausgegrenzt: Zitat einer anderen Quelle auf einer source-Seite, nicht blockierend. Versionsteil --patch. Labels: kind/defect → kind/build, prio/planned gesetzt, status/incoming entfernt.
**Changelog:** Stub ausgearbeitet und gegen `main` (662a844) reproduziert. Die Annahme „weitere Typen betroffen“ ist geprüft: Zusätzlich betroffen ist nur das Selbstzitat einer source-Seite. Das bekommt einen eigenen Fix in `cite add` (Entscheidung 2), weil `lint` und `provenance` es schon ausnehmen. Dateipfad korrigiert: im Origin-Repo `kb/comparisons/COLLECTION.md`, nicht `.template`. Neu: Abschnitt „Bestehende Instanzen“, weil `dist upgrade` geänderte Templates unter adoptierten Dateien nicht meldet. Ausgegrenzt: Zitat einer *anderen* Quelle auf einer source-Seite, nicht blockierend. Versionsteil `--patch`. Labels: `kind/defect` → `kind/build`, `prio/planned` gesetzt, `status/incoming` entfernt.
torben
changed title from cite add schreibt sources: in Seiten, deren Schema das Feld verbietet (comparison; source-Selbstzitat) to sources: auf comparison- und source-Seiten: Schema verbietet, was cite add schreibt; Quellen dürfen Quellen zitieren2026-10-04 18:58:40 +00:00
torben
added size/M and removed size/S labels 2026-10-04 18:59:36 +00:00
Changelog: Betreiber-Entscheidung eingearbeitet: source-Seiten dürfen andere Quellen zitieren, im selben Paket (neue Entscheidung 2). Neu gefunden: sources muss auch in page_ref_fields: stehen, nicht nur im Schema, sonst ziehen rename/rm, lint und xref remove die Einträge nicht mit. Gilt für comparison und source, der Abschnitt „Bestehende Instanzen“ ist entsprechend erweitert. Neue Entscheidung 4: xref link-source lehnt source-Ziele mit exit 1 ab (schrieb vorher in die falsche Richtung, mit Schema-Fehler). wiki-ingest Schritt 9 bekommt den cite add-Hinweis. Der Punkt „Quelle zitiert andere Quelle“ unter „Nicht Teil dieses Pakets“ ist gestrichen. Versionsteil --patch → --minor (neue Fähigkeit), Impact low → medium. size/S → size/M (Contract-, Instruction- und Type-Spec-Änderungen, eigener Testaufwand).
**Changelog:** Betreiber-Entscheidung eingearbeitet: source-Seiten dürfen andere Quellen zitieren, im selben Paket (neue Entscheidung 2). Neu gefunden: `sources` muss auch in `page_ref_fields:` stehen, nicht nur im Schema, sonst ziehen `rename`/`rm`, `lint` und `xref remove` die Einträge nicht mit. Gilt für comparison und source, der Abschnitt „Bestehende Instanzen“ ist entsprechend erweitert. Neue Entscheidung 4: `xref link-source` lehnt source-Ziele mit exit 1 ab (schrieb vorher in die falsche Richtung, mit Schema-Fehler). `wiki-ingest` Schritt 9 bekommt den `cite add`-Hinweis. Der Punkt „Quelle zitiert andere Quelle“ unter „Nicht Teil dieses Pakets“ ist gestrichen. Versionsteil `--patch` → `--minor` (neue Fähigkeit), Impact `low` → `medium`. `size/S` → `size/M` (Contract-, Instruction- und Type-Spec-Änderungen, eigener Testaufwand).
Changelog: Gebaut und veröffentlicht als 8.0.0-beta.40, Commit 862bc04. CI ist grün (Runs 539, 540). Neu im Body: der Abschnitt „Stand“, alle Akzeptanzkriterien abgehakt, „Betroffene Dateien“ auf den tatsächlichen Änderungsstand gebracht (dazu der Test in test_type_resolver.py, der die alten page_ref_fields festschrieb). Unter „Nicht Teil dieses Pakets“ steht jetzt, warum kb/sources/COLLECTION.md unverändert bleibt. Der Befund ist in der Vergangenheitsform. An den Entscheidungen hat sich nichts geändert.
**Changelog:** Gebaut und veröffentlicht als `8.0.0-beta.40`, Commit `862bc04`. CI ist grün (Runs 539, 540). Neu im Body: der Abschnitt „Stand“, alle Akzeptanzkriterien abgehakt, „Betroffene Dateien“ auf den tatsächlichen Änderungsstand gebracht (dazu der Test in `test_type_resolver.py`, der die alten `page_ref_fields` festschrieb). Unter „Nicht Teil dieses Pakets“ steht jetzt, warum `kb/sources/COLLECTION.md` unverändert bleibt. Der Befund ist in der Vergangenheitsform. An den Entscheidungen hat sich nichts geändert.
Changelog: Abschluss. Ein Satz im CHANGES.md-Eintrag war zu weit gefasst und ist in 8ff22ad korrigiert (CI-Run 541 grün): Das Selbstzitat einer source-Seite validiert auch ohne die Handgriffe am Typ. „Stand“ nennt jetzt alles, was verifiziert ist, und dass im Abschluss außer diesem Satz nichts veraltet war (docs/, README.md, die Typ-Guidance, kb/CONTRACT.md, wiki-ingest, die Befehls-Records). Geschlossen.
**Changelog:** Abschluss. Ein Satz im `CHANGES.md`-Eintrag war zu weit gefasst und ist in `8ff22ad` korrigiert (CI-Run 541 grün): Das Selbstzitat einer source-Seite validiert auch ohne die Handgriffe am Typ. „Stand“ nennt jetzt alles, was verifiziert ist, und dass im Abschluss außer diesem Satz nichts veraltet war (`docs/`, `README.md`, die Typ-Guidance, `kb/CONTRACT.md`, `wiki-ingest`, die Befehls-Records). Geschlossen.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Stand
Erledigt. Version
8.0.0-beta.40(Bump--minor, Impactmedium), Commit862bc04.Entscheidungen 1–4 sind so umgesetzt, wie sie unten stehen, ohne Abweichung.
Verifiziert durch:
pytesthermetisch (2218 passed, 3 skipped),docs verify,instructions verify862bc04: Run 539 (Jobsverifyundpwsh) und Run 540, beide grünIm Abschluss (
stack-close) wurden geprüft:docs/,README.md§ Provenance, die Typ-Guidance,kb/CONTRACT.md,wiki-ingestund die Befehls-Records. Veraltet war nur ein Satz imCHANGES.md-Eintrag. Er behauptete, bis zu den Handgriffen meldelintjede zitierendesource-Seite als Schema-Fehler. Seit Entscheidung 3 gilt das für das Selbstzitat nicht mehr, denn
das kommt allein mit dem Code-Upgrade. Korrigiert in
8ff22ad, nurCHANGES.md, daher keinBump. CI-Run 541 grün.
Befund
wikitool cite addlegte auf jeder Seite persetdefaultdas Frontmatter-Feldsources:an undtrug die zitierte Quelle ein (
tools/chemenu/commands/cite_cmd.py,upsert_citation).Zwei der fünf
root: kb-Seitentypen deklariertensourcesweder im Schema noch inpage_ref_fields:. Ihr Schema steht zudem aufadditionalProperties: false, sodasswikitool lintdie Seite danach als Schema-Fehler meldete:sourcesim Schema / inpage_ref_fields(vorher)[entities, related])[entities, concepts])--fileAm 2026-10-04 gegen
main(662a844) reproduziert, mit einem Wegwerf-Test auf denkb_dir/raw_dir-Fixtures undrun_lint():Additional properties are not allowed ('sources' was unexpected)--file notes.md:('source', 'sources' were unexpected). Dassourceist ein Fixture-Artefakt,sourceskam neu durchcite adddazu.Andere Typen (
instruction,type-spec, …) sind keinekb/-Seiten,cite adderreicht sienicht.
Derselbe Defekt steckte in
xref link-source, wenn ein Ziel in--entitiesselbst einesource-Seite war. Der Befehl schrieb dann
sources:auf das Ziel, was wieder gegen dassource-Schema verstieß. Den Rückverweis ließ er als „unrouted“ liegen.
Der Widerspruch:
kb/comparisons/COLLECTION.md:38(wird als.templateausgeliefert) verlangt„Cite hard facts the same way any other page does.“ Und
lintselbst behandelt das Selbstzitateiner source-Seite als legitim (
tools/chemenu/lint_core.py,citation_frontmatter_drift). Eineregelkonform belegte Seite konnte
lintnicht bestehen.page_ref_fields:gehört zum Fix, nicht nur das Schema. Was dort nicht deklariert ist,zieht
rename/rmnicht mit (page_ops.retarget_frontmatter), prüftlintnicht aufAuflösbarkeit (
dangling_frontmatter_refs) und leertxref removenicht. Ein Schema-Fix allein,wie ihn die private Instanz lokal gemacht hat, lässt nach dem Umbenennen einer Quelle tote
sources:-Einträge auf comparison-Seiten zurück, und niemand meldet sie.Entscheidungen
sourceswird optionales, deklariertes Referenzfeld. Das Schema bekommtsources(array of string, wietypes/concept.schema.yaml), nicht required, damitBestandsseiten weiter validieren.
page_ref_fields: [entities, related, sources].Verworfen:
cite addauf comparison ohnesources:schreiben lassen, denn dann zeigt eineFußnote auf eine Quelle, die
kb/provenance.mdundsources coveragenicht kennen, undlintmeldetcitation_frontmatter_drift.2026-10-04: „nicht ungewöhnlich“). Gleiche Form wie bei comparison: Das Schema bekommt
sources(optional) undpage_ref_fields: [entities, concepts, sources].cite add --page "Source - A" --source "Source - B"schreibtsources: [Source - B]auf A.B bleibt unverändert, und
citing_pages(B)führt A dann als Zitierer.cite addschreibt den eigenen Titel nie insources:. Wennsource_title == page.title, rührtupsert_citationdas Frontmatter nicht an: keinEintrag, auch kein durch
setdefaultangelegtes leeressources: []. DieFußnotendefinition wird wie bisher geschrieben. Mit Entscheidung 2 wäre der Eintrag kein
Schema-Fehler mehr, aber eine Kante auf sich selbst ohne Information.
lintundprovenance.citing_pages()ignorieren sie ohnehin. Das ziehtcite addauf deren Linie.xref link-sourcelehnt ein Ziel ab, das selbst eine source-Seite ist(
page.kind == "source"). Grund:link-sourceheißt „Quelle A erwähnt X“ und schreibtX.sources += A. Bei X = Quelle B behauptet das „B zitiert A“, also die falsche Richtung.Mit Entscheidung 2 käme über
_back_reference_fieldnochA.sources += Bdazu, dieZitation stünde dann symmetrisch auf beiden Seiten. Eine Zitation zwischen Quellen hat eine
Richtung, und die drückt nur
cite addaus. Verhalten: Das Ziel wird nicht geschrieben undin einer eigenen Ausgabezeile
Refused (a source page - …)benannt, mit dem Hinweis aufwikitool cite add --page "<A>" --source "<B>"(oder umgekehrt, denn welche Richtung gilt,weiß das Werkzeug nicht). Die übrigen Ziele werden verlinkt, der Lauf endet wie bei „page not
found“ mit exit 1. Verworfen: still überspringen mit exit 0, denn dann bemerkt
wiki-ingestnicht, dass eine gewollte Verbindung fehlt.Nicht Teil dieses Pakets
provenance:/modified:bekommen sollte (entity/concept habenbeides), ist nicht gefragt und nicht nötig, um diesen Defekt zu beheben.
sources trace --page "Source - A"listet nach Entscheidung 2 die zitierten Quellen und derenRohdateien, nicht A's eigene
raw_files:. Das stimmt mit der Bedeutung „was belegt dieseSeite per Zitat“ überein und braucht keine Änderung.
kb/sources/COLLECTION.md§ Outbound linking bleibt unverändert: Die Aussage dort („Pageselsewhere cite this one …“) ist weiter wahr, und die neue Regel steht einmal, in
kb/CONTRACT.md(Invariante 8).Betroffene Dateien (so geändert in
862bc04,CHANGES.mdnachgebessert in8ff22ad)types/comparison.schema.yaml: Propertysourcestypes/comparison.md:page_ref_fields: [entities, related, sources], Zeilesourcesin derFrontmatter-Tabelle
types/source.schema.yaml: Propertysourcestypes/source.md:page_ref_fields: [entities, concepts, sources], Zeilesourcesin derFrontmatter-Tabelle
Alle vier Dateien werden als
.templateausgeliefert (dist_cmd._owned_type_stem).tools/chemenu/commands/cite_cmd.py:upsert_citation(Entscheidung 3). Notes voncite addnennen die Selbstzitat-Ausnahme und dasscite adddie Zitation zwischen Quellenfesthält.
tools/chemenu/commands/xref.py:xref_link_source(Entscheidung 4), dazu imCommandRecordeine Note und eineFailurefür das abgelehnte source-Zieltools/CONTRACT.md: perdocs contract --applyneu erzeugtkb/CONTRACT.md§ Provenance and citation: Selbstzitat-Ausnahme beicite addund bei„A source cited inline must also appear …“, neuer Punkt „A source page may cite another
source page“,
link-source-Punkt nennt: nie eine andere source-Seite als Ziel.instructions/wiki-ingest/SKILL.mdSchritt 9: Absatz für eine ältere Quelle, die die neuezitiert, mit
cite add, verlinkt die Regel inkb/CONTRACT.md.CHANGES.md: Eintrag mit den Handgriffen für bestehende InstanzenTests:
test_cite_cmd.py(comparison, source zitiert source, Selbstzitat drei Fälle),test_xref.py(test_xref_link_source_refuses_a_target_that_is_itself_a_source),test_page_ops.py(test_rename_carries_sources_on_comparison_and_source_pages),test_type_resolver.py(die dort festgeschriebenenpage_ref_fieldsnachgezogen). Jeder neueTest scheitert gegen den Stand vor dem Fix.
Akzeptanzkriterien
cite add --page "<comparison>" --source "Source - X"auf einer sonstschema-gültigen comparison-Seite steht die Seite nicht in
run_lint(kb_dir)["schema_validation_errors"], und ihrsources:enthältSource - X.cite add --page "Source - A" --source "Source - B"auf einer sonst schema-gültigensource-Seite A steht A nicht in
schema_validation_errors,A.sources == ["Source - B"],B's Datei ist byte-gleich, und
citing_pages(pages, "Source - B")enthältSource - A.cite add --page "Source - A" --source "Source - A" --file <f>hat A keinenSchlüssel
sources(wenn es vorher keinen hatte) bzw. ein unverändertessources:, unddie Definition
[[Source - A|<f>]]steht im Footnotes-Bereich. Die Wiederholung liefertchanged is False.Source - Xschreibt den neuen Titel in dassources:einercomparison-Seite und einer source-Seite, die X zitieren. Danach meldet
lintkeinendangling_frontmatter_refs-Eintrag für diese Seiten.xref link-source --source "Source - A" --entities "<entity>,Source - B": Die Entity istverlinkt. Das Frontmatter von A und B enthält danach keinen Eintrag, der die jeweils
andere Quelle nennt. Die Ausgabe nennt
Source - Bmit demcite add-Hinweis. Der exitcode ist 1.
kb/CONTRACT.md,wiki-ingestSchritt 9 sowie die Notes voncite addundxref link-sourcebeschreiben das neue Verhalten.tools/CONTRACT.mdist neu erzeugt.CHANGES.md-Eintrag sagt Betreibern einer bestehenden Instanz, was sie tun müssen,und welcher Fall auch ohne die Handgriffe funktioniert (siehe unten).
pytest(hermetisch: 2218 passed, 3 skipped),docs verify,instructions verifysauber.
862bc04: Runs 539 und 540. Auf8ff22adRun 541.Bestehende Instanzen
Schema und Type-Spec von comparison und source gehören nach der Adoption der Instanz.
dist upgradeerneuert nur die.template-Dateien daneben und meldet nicht, dass sich dasTemplate unter einer adoptierten Datei geändert hat (
instructions/upgrade-instance.mdSchritt6/9). Der Typ-Teil (Entscheidungen 1 und 2) erreicht eine bestehende Instanz also nur von
Hand. Der
CHANGES.md-Eintrag sagt das explizit, je Typ (comparison, source) drei Handgriffe:sourcesaustypes/<typ>.schema.yaml.templatein das eigene Schema übernehmensourcesinpage_ref_fields:der eigenentypes/<typ>.mdergänzen (ohne das zieht einRename die Einträge nicht mit)
sourcesin derselben Datei übernehmenEine Instanz, die nur das Schema angepasst hat (wie die meldende), braucht noch den zweiten
Punkt. Die Code-Teile (Entscheidungen 3 und 4) liegen unter
tools/und kommen mit demnormalen Upgrade. Das Selbstzitat einer source-Seite validiert damit auch ohne die Handgriffe.
Versionsteil
--minor, gebumpt auf8.0.0-beta.40. Drop-in-Test (instructions/dev/version-parts.md):cite addschreibt in einem Fall weniger.link-sourcemit source-Ziel endet jetzt mitexit 1. Vorher endete es mit exit 0, aber mit einer Seite, die
lintals Schema-Fehlermeldet: Das funktionierte also schon vorher nicht. Die Handarbeit oben ist nötig, um die
neue Fähigkeit zu bekommen, nicht, um weiterzuarbeiten.
.template-Dateien. Die adoptiertenSchemas/Type-Specs der Instanz bleiben, also validiert eine source-Seite mit
sources:weiter.
Neue Fähigkeit (Quellen zitieren Quellen), drop-in in beide Richtungen, daher
--minor, nicht--patch. Der laufende Kandidat stand bei8.0.0-beta.39(schon MAJOR-Stufe). Der Bump hatdort nur die Bump-Zählung erhöht. Kein Boundary-Crossing, also kein
--breakingund kein--no-migration. Impact:medium.Herkunft
Aufgefallen beim Anlegen der ersten comparison-Seite einer privaten Instanz (v7.0.0). Die
Instanz hat das Schema lokal schon angepasst. Ursprünglicher Stub wörtlich im ersten Kommentar.
Ausarbeitung des Stubs (status/incoming). Der ursprüngliche Body, wörtlich, vor der Neufassung:
cite add schreibt sources: auf comparison-Seiten, deren Schema das Feld verbietetto cite add schreibt sources: in Seiten, deren Schema das Feld verbietet (comparison; source-Selbstzitat)Changelog: Stub ausgearbeitet und gegen
main(662a844) reproduziert. Die Annahme „weitere Typen betroffen“ ist geprüft: Zusätzlich betroffen ist nur das Selbstzitat einer source-Seite. Das bekommt einen eigenen Fix incite add(Entscheidung 2), weillintundprovenancees schon ausnehmen. Dateipfad korrigiert: im Origin-Repokb/comparisons/COLLECTION.md, nicht.template. Neu: Abschnitt „Bestehende Instanzen“, weildist upgradegeänderte Templates unter adoptierten Dateien nicht meldet. Ausgegrenzt: Zitat einer anderen Quelle auf einer source-Seite, nicht blockierend. Versionsteil--patch. Labels:kind/defect→kind/build,prio/plannedgesetzt,status/incomingentfernt.cite add schreibt sources: in Seiten, deren Schema das Feld verbietet (comparison; source-Selbstzitat)to sources: auf comparison- und source-Seiten: Schema verbietet, was cite add schreibt; Quellen dürfen Quellen zitierenChangelog: Betreiber-Entscheidung eingearbeitet: source-Seiten dürfen andere Quellen zitieren, im selben Paket (neue Entscheidung 2). Neu gefunden:
sourcesmuss auch inpage_ref_fields:stehen, nicht nur im Schema, sonst ziehenrename/rm,lintundxref removedie Einträge nicht mit. Gilt für comparison und source, der Abschnitt „Bestehende Instanzen“ ist entsprechend erweitert. Neue Entscheidung 4:xref link-sourcelehnt source-Ziele mit exit 1 ab (schrieb vorher in die falsche Richtung, mit Schema-Fehler).wiki-ingestSchritt 9 bekommt dencite add-Hinweis. Der Punkt „Quelle zitiert andere Quelle“ unter „Nicht Teil dieses Pakets“ ist gestrichen. Versionsteil--patch→--minor(neue Fähigkeit), Impactlow→medium.size/S→size/M(Contract-, Instruction- und Type-Spec-Änderungen, eigener Testaufwand).Changelog: Gebaut und veröffentlicht als
8.0.0-beta.40, Commit862bc04. CI ist grün (Runs 539, 540). Neu im Body: der Abschnitt „Stand“, alle Akzeptanzkriterien abgehakt, „Betroffene Dateien“ auf den tatsächlichen Änderungsstand gebracht (dazu der Test intest_type_resolver.py, der die altenpage_ref_fieldsfestschrieb). Unter „Nicht Teil dieses Pakets“ steht jetzt, warumkb/sources/COLLECTION.mdunverändert bleibt. Der Befund ist in der Vergangenheitsform. An den Entscheidungen hat sich nichts geändert.Changelog: Abschluss. Ein Satz im
CHANGES.md-Eintrag war zu weit gefasst und ist in8ff22adkorrigiert (CI-Run 541 grün): Das Selbstzitat einer source-Seite validiert auch ohne die Handgriffe am Typ. „Stand“ nennt jetzt alles, was verifiziert ist, und dass im Abschluss außer diesem Satz nichts veraltet war (docs/,README.md, die Typ-Guidance,kb/CONTRACT.md,wiki-ingest, die Befehls-Records). Geschlossen.