# Plan: link-taxonomy-migration One unit is one session id and one `publish`, sized against the 60-call iteration budget. Per-page cost here is roughly `1 touch` + the edges on it; the corpus-wide commands (`index rebuild`, `sources rebuild-index`, `log append`, `publish` twice for the gate) are per unit, not per page. That puts the ceiling near 45 pages and the target at 40. | # | Unit | Pages | Job | Done when | |---|------|------:|-----|-----------| | u0 | mechanism | 0 | Taxonomy catalogue, `links.py`, `blocks.py`, `outbound:` in every `COLLECTION.md`, `xref` rewritten to one directional edge, lint checks, `links show` for the inbound view, `migrate verify` marker invariant, deletion of `sections.py` and the matching layer | Suite green; `lint` reports the corpus's unlabelled edges as findings rather than crashing | | u1 | `kb/entities/systems`, `tools`, `technologies` | ~45 | Label every edge, drop redundant see-also, wrap markers | `migrate verify --path kb/entities --fail-on-error` clean | | u2 | `kb/entities/projects`, `people`, `kb/comparisons` | ~40 | as u1 | as u1 | | u3 | `kb/concepts` | ~45 | as u1 | `migrate verify --path kb/concepts --fail-on-error` clean | | u4 | `kb/sources` | ~50 | as u1, plus `entities:`/`concepts:` on source pages | `migrate verify --path kb/sources --fail-on-error` clean | | u5 | close-out | 0 | `migrate done 4.0.0`, `version bump --major`, `CHANGES.md` body, promote nothing, close workshop | `docs verify` + `lint --fail-on-error` green, workshop deleted | Unit boundaries are written down here *before* the run so that publishing several units together stays a planned batch rather than a way around a Mass-Update Gate refusal - see `instructions/gates.md`. ## Per-page procedure 1. Read the page's `## Beziehungen` and `## Siehe auch` blocks. 2. For each labelled bullet: say the sentence `[this page]