feat: Prosa ist kein Identifier - Link-Taxonomie als Enum, generierte Regionen mit Markern (4.0.0)
CI / verify (push) Successful in 55s
Release / release (push) Successful in 38s

Files changed:
- .gitea/workflows/ci.yml
- AGENTS.md
- CHANGES.md
- VERSION
- instructions/CONTRACT.md
- instructions/link-taxonomy.md
- instructions/migrations/4.0.0-link-taxonomy.md
- instructions/setup-instance.md
- kb/CONTRACT.md
- kb/CONVENTIONS.md
- kb/CONVENTIONS.md.template
- kb/comparisons/COLLECTION.md
- kb/concepts/COLLECTION.md
- kb/entities/COLLECTION.md
- kb/sources/COLLECTION.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/blocks.py
- tools/chemenu/cli.py
- tools/chemenu/commands/cite_cmd.py
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/commands/docs_verify.py
- tools/chemenu/commands/doctor.py
- tools/chemenu/commands/links_cmd.py
- tools/chemenu/commands/migrate_cmd.py
- tools/chemenu/commands/new_page.py
- tools/chemenu/commands/page_ops.py
- tools/chemenu/commands/run_budget.py
- tools/chemenu/commands/xref.py
- tools/chemenu/conventions.py
- tools/chemenu/corpus_diff.py
- tools/chemenu/frontmatter_io.py
- tools/chemenu/kb_collections.py
- tools/chemenu/kb_state.py
- tools/chemenu/links.py
- tools/chemenu/lint_core.py
- tools/chemenu/provenance.py
- tools/chemenu/sections.py
- tools/chemenu/tests/conftest.py
- tools/chemenu/tests/test_blocks.py
- tools/chemenu/tests/test_cite_cmd.py
- tools/chemenu/tests/test_conventions.py
- tools/chemenu/tests/test_dist_cmd.py
- tools/chemenu/tests/test_doctor.py
- tools/chemenu/tests/test_migrate_cmd.py
- tools/chemenu/tests/test_new_page.py
- tools/chemenu/tests/test_pipeline_l0.py
- tools/chemenu/tests/test_types_cmd.py
- tools/chemenu/tests/test_xref.py
- types/concept.schema.yaml
- types/entity.md
- types/entity.schema.yaml
- types/instruction.schema.yaml
- types/type-spec.md
- work/link-taxonomy-migration/README.md
- work/link-taxonomy-migration/plan.md
This commit is contained in:
2026-09-02 18:39:22 +02:00
parent 502971d147
commit 177c7e9ce8
56 changed files with 2692 additions and 750 deletions
+22 -29
View File
@@ -2,8 +2,7 @@
language: de
profile: german
sections:
relationships: Beziehungen
see_also: Siehe auch
links: Beziehungen
footnotes: Fußnoten
---
@@ -21,13 +20,11 @@ Adopted from the `german` profile in
[instructions/kb-profiles.md](../instructions/kb-profiles.md). That catalogue is a palette, not
an enum - what is written here is what holds, whether or not a profile says the same thing.
The frontmatter above is the one machine-read part. `sections:` names the three headings
`wikitool xref` and `wikitool cite` write into; `tools/chemenu/conventions.py` reads them and
`tools/chemenu/sections.py` is what the rest of the compiler asks. Renaming one here changes
what the tool *writes*; what it still *recognizes* is the union of that name, any
`section_aliases:` declared beside it, and the names this stack wrote before this file existed.
That asymmetry is the translation path: a page keeps working under its old heading until it is
itself translated.
The frontmatter above is the one machine-read part. `sections:` names the headings the two
**generated regions** render under - the links region `wikitool xref` owns and the footnotes
region `wikitool cite` owns. Each sits between a marker pair, and the marker is what the tool
locates it by, so the heading here is a display value: changing it re-renders the words above
those regions and nothing else. Nothing matches on this text.
## Language
@@ -52,12 +49,13 @@ material, not a second rule - every entry in it is a decision that was made wron
### Section headings
The canonical names are the frontmatter's: `## Beziehungen`, `## Siehe auch`, `## Fußnoten`.
The English forms this stack wrote before the corpus was translated are still recognized, so a
page carrying `## Relationships` is found and appended to correctly and `cite sync` leaves an
untranslated `## Footnotes` alone. Renaming such a heading is the translation pass's job, never
a side effect of another command. Any *other* heading an author adds is ordinary prose and is
translated with the rest.
The two generated regions render under `## Beziehungen` and `## Fußnoten`. An author never
writes inside them - they are rebuilt from frontmatter on every write, exactly like
`kb/index.md` - and never has to write the heading either. Any *other* heading on a page is
ordinary prose and is translated with the rest.
There is no `## Siehe auch` region any more. It was the reciprocal half of a bidirectional
`xref add`; under authored directional edges, `see-also` is a *label* inside the links region.
## Naming
@@ -92,15 +90,11 @@ The blockquote cap is not here: `wikitool lint` reports it, so it is the contrac
## Relationship labels
`tools/wikitool xref add --rel-a/--rel-b` takes a free-text label. This instance uses a typed
one rather than a generic one:
`hängt ab von` · `verwendet` · `implementiert` · `erweitert` · `ersetzt` · `steht in Konflikt mit`
· `benötigt` · `erzeugt` · `konsumiert` · `besitzt` · `pflegt` · `läuft auf` · `verwandt mit`
(last resort)
The labels are prose written into a `- **label:** [[Title]]` bullet; no code matches on them, so
an untranslated page's English label is stale wording, not a broken reference.
**Not this file's to list, and not localized.** A label is a machine value in `related:`, drawn
from [instructions/link-taxonomy.md](../instructions/link-taxonomy.md) and authorised per
destination in each `kb/<name>/COLLECTION.md`'s `outbound:` block. `- **depends-on:** [[Hermes]]`
is what a German page carries, and that is deliberate: the label is an identifier, so translating
it would make the graph's semantics depend on the prose again.
## Confidence rubric
@@ -119,8 +113,7 @@ write "unsicher"/"unbestätigt".
## Keeping this file honest
Change it when a convention actually changes, and treat a change to `sections:` as a corpus
migration rather than an edit: existing pages keep their old headings until something translates
them, and the alias list is what carries them in the meantime. `wikitool doctor` FAILs on a
missing or unfilled file, and `wikitool docs verify` refuses a `sections:` block that does not
name all three slots.
Change it when a convention actually changes. `sections:` is safe to change at any time - the
regions are located by their markers and re-rendered under the new words on the next write.
`wikitool doctor` FAILs on a missing or unfilled file, and `wikitool docs verify` refuses a
`sections:` block that does not name both regions.