Files changed: - work/link-taxonomy-migration/README.md - work/link-taxonomy-migration/glossary.md
Workshop: link-taxonomy-migration
- Run key:
link-taxonomy-migration(this directory's name - there is no other identifier) - Input: none - this run is not an ingest
- Started: 2026-09-02
- Session id form:
WIKITOOL_SESSION_ID="link-taxonomy-migration/u<N>", one per unit - Issue: Gitea #40, sections Label werden Enum and Toolgeführte Blöcke
Goal
Move every relationship in kb/ from free-text German prose in a body bullet to a machine
value in related:, and every tool-owned body region from heading-matching to a marker pair.
Afterwards the compiler contains no heading text and no relationship label, and lint can
enforce the vocabulary because there is one.
Why this is assisted and not mechanical
Measured on 2026-09-02, against the corpus rather than against the documentation:
| Pages | 180 |
| Distinct relationship labels in body bullets | 152 |
| Labelled bullets | 337 |
| Labels occurring exactly once | 102 |
| Top 20 labels cover | 167 of 337 |
Bare - [[X]] bullets under ## Siehe auch |
555 |
| ...of those, provably redundant (a labelled edge already exists) | 353 |
| ...of those, the only connection between the two pages | 202, across 63 target pages |
kb/CONVENTIONS.md documents thirteen labels. Nothing ever checked that, and the corpus does
not follow it - so there is no mapping table to apply, and roughly 539 edges need a judgment
call each. A large minority are reverse directions (Verwendet von 20x, implementiert durch,
Ersetzt durch), which under authored directional edges are exactly the edges that stop being
stored and start being rendered.
Rejected alternative, recorded so it is not re-proposed: map the top 20 mechanically and set
everything else to see-also. That would start the new taxonomy with ~370 of ~539 edges on its
weakest label - the verwandt mit sediment this whole change exists to end, re-created as the
documented initial state.
Closes when
Every unit in plan.md is published, and:
wikitool lintreports zero unlabelled edges and zero labels outside the authorising collection'soutbound:blockwikitool migrate verify --from <pre-migration rev>reports no wikilink or citation count change, and no unbalanced markerwikitool migrate done 4.0.0 --pages <N>has run
Checklist
- u0 mechanism - taxonomy,
links.py,blocks.py,xrefrewrite, lint checks,links showfor the inbound view, deletion of the matching layer. No page touched. - u1
kb/entities/(systems, tools, technologies) - 57 pages, 199 edges, run as five sub-sessions (u1,u1-technologies,u1-technologies-2,u1-tools-1,u1-tools-2,u1-close) against one 60-call-per-session ceiling; published together as commitb137359. Deferred cross-collection edges recorded inglossary.mdfor u2/u3. - u2
kb/entities/(projects, people) +kb/comparisons/- 16 pages, ~45 edges, single session (link-taxonomy-migration/u2, closed asu2-close). Discovered comparisons pages carry norelated:field at all (onlyentities:, unlabelled by the type spec); labelled the prose by hand instead. Confirmed taxonomy gap for person-authored/extended relationships, resolved assee-alsothroughout - seeglossary.md. - u3
kb/concepts/- 80 pages, ~250 edges, run as seven sub-sessions (u3,u3-b2..u3-b7, closeu3-close) against the 60-call ceiling, including one gate-forced pause mid-batch resumed with explicit user approval. Two self-caught defects: 14 pages left unlabelled after a wrong "already covered elsewhere" call (fixed vialint --full's unlabelled-edges report), and one real content loss - a cited, substantiveVerwandte Conceptsline deleted alongside a bare wikilink during prose cleanup, caught bymigrate verify'scite-refsdiff and restored. Published as commita35c94e. Seeglossary.mdfor the add-is-safe/remove-is-risky mechanism note this unit established. - u4
kb/sources/- zero page edits needed.types/source.mddeclares norelated:field (onlyentities:/concepts:, same structural gap as comparisons), and all 27 source pages already had those fields correctly populated viaxref link-sourceat ingest time - there was never an unlabelled edge here to fix.migrate verify --from 177c7e9 --path kb/sources: 0 findings. No commit, no session id spent beyond the check itself. Seeglossary.md. - u5 close-out -
migrate done, version bump,CHANGES.md, workshop close
Measured after u0
lint against the corpus, with the machinery in place and no page touched:
| Finding | Count |
|---|---|
unlabelled_edges |
480 - every related: entry, since none carries a label yet |
unauthorised_labels |
0 - nothing declares a label at all, so nothing can be unauthorised |
malformed_edges |
0 |
unbalanced_markers |
0 |
orphan_pages |
1 (GRUB, pre-existing) |
broken_links, dangling_frontmatter_refs, schema_validation_errors |
0 |
480 is the number u1-u4 have to bring to zero. It is larger than the 337 labelled body bullets
because related: also holds entries whose bullet was lost or never written - which is itself a
finding: the frontmatter and the body had already drifted apart under the old model, and nothing
could see it while the label lived only in the prose.
Open decisions
- Settled 2026-09-02: edges are directional; the reverse edge is authored only when it is a primary statement on its own page. The inbound view is rendered, not stored.
- Settled 2026-09-02: the 353 provably-redundant
## Siehe auchedges are dropped mechanically. The 202 that are the only connection get a real label each, or are dropped with a reason - never converted tosee-alsoin bulk. - Settled 2026-09-02: labels are not localized.
- **depends-on:** [[Hermes]]is what a German page carries.