feat: Link-Taxonomie abgeschlossen - Lint hart ab kb_version 4.0.0, outbound: an Type-Spec gebunden, part-of/composition als Inversenpaar (4.1.0, #40)
Files changed: - CHANGES.md - VERSION - instructions/link-taxonomy.md - instructions/migrations/4.0.0-link-taxonomy.md - kb/comparisons/amd-pstate vs acpi-cpufreq.md - kb/concepts/Episodic Memory.md - kb/concepts/Memory Lifecycle.md - kb/concepts/Mesh Sync.md - kb/concepts/Procedural Memory.md - kb/concepts/Reciprocal Rank Fusion.md - kb/concepts/Semantic Memory.md - kb/concepts/Shared vs Private.md - kb/concepts/Split Threshold.md - kb/concepts/Stub Threshold.md - kb/concepts/Supersession.md - kb/concepts/Typed Relationships.md - kb/concepts/Vector Search.md - kb/concepts/Work Coordination.md - kb/concepts/Working Memory.md - kb/entities/technologies/Wine-Staging.md - kb/entities/tools/pascalandy schema.md - kb/index.md - kb/log.md - kb/sources/COLLECTION.md - tools/CONTRACT.md - tools/chemenu/commands/lint.py - tools/chemenu/kb_collections.py - tools/chemenu/lint_core.py - tools/chemenu/tests/test_conventions.py - tools/chemenu/tests/test_lint.py - tools/chemenu/tests/test_type_resolver.py - types/comparison.md - types/comparison.schema.yaml
This commit is contained in:
@@ -40,9 +40,18 @@ edge merely to mirror the first one.** The inbound view is rendered from the gra
|
||||
`index rebuild` and `search`, so a reader landing on the target sees what points at it whether
|
||||
or not anyone wrote a second edge.
|
||||
|
||||
That is why most labels below have no inverse. Only two pairs do, because in each the reverse
|
||||
That is why most labels below have no inverse. Only three pairs do, because in each the reverse
|
||||
direction is a genuine primary statement someone would write on its own: `depends-on` /
|
||||
`required-by` and `runs-on` / `hosts`.
|
||||
`required-by`, `runs-on` / `hosts`, and `composition` / `part-of`.
|
||||
|
||||
The third was added after the 4.0.0 migration, from measurement rather than from the desk. A
|
||||
parent-child structure - a tier list and its tiers, a spectrum and its levels - produces the
|
||||
question on nearly every page: the parent writes `composition`, and the child then reaches for
|
||||
either `part-of` or `see-also`. The migration run answered `see-also`, on the reading that
|
||||
`part-of` would be a mirror, and left sixteen edges saying "these two are related" about a
|
||||
relationship the catalogue already had a word for. It is not a mirror: the parent's sentence
|
||||
lists its parts, the child's names the whole it belongs to, and a reader landing on the child
|
||||
needs the second one.
|
||||
|
||||
## When to run
|
||||
|
||||
@@ -129,6 +138,13 @@ Inference and comparison between ideas.
|
||||
| `composition` | is composed of the target |
|
||||
| `part-of` | is a component of the target |
|
||||
|
||||
`composition` / `part-of` is the third **inverse pair**, alongside `depends-on` / `required-by`
|
||||
and `runs-on` / `hosts` in the operational register. Being a pair does not make the second edge
|
||||
obligatory - direction is still authored - it settles *which label* the second edge takes when
|
||||
someone does write it. The child of a `composition` writes `part-of`, not `see-also`: what it
|
||||
is a component of is a primary statement about the child, and `see-also` says strictly less
|
||||
about the same fact.
|
||||
|
||||
`grounds` / `rests-on` is a genuine pair and both directions are primary statements; they are
|
||||
listed separately rather than as inverses because either page may legitimately carry only its
|
||||
own side.
|
||||
|
||||
@@ -36,8 +36,9 @@ you know the run is finished.
|
||||
**Nothing breaks while it is outstanding.** Unlabelled edges and undelimited regions are read,
|
||||
not rejected: `links.py` treats a bare title as an edge whose label is not declared yet, and
|
||||
`provenance.split_cite_block` falls back to the pre-marker layout. That is deliberate - a corpus
|
||||
has to stay readable while it is being converted - and it is why the two lint findings are
|
||||
advisory until step 6 promotes them.
|
||||
has to stay readable while it is being converted - and it is why the two lint findings stay
|
||||
advisory for as long as `kb_version` is below 4.0.0, which is exactly as long as this document
|
||||
is outstanding.
|
||||
|
||||
## Steps
|
||||
|
||||
@@ -102,7 +103,7 @@ advisory until step 6 promotes them.
|
||||
is otherwise silent: the region becomes ordinary prose and the next write appends a second
|
||||
one beside it.
|
||||
|
||||
6. **Record it, then tighten the checks:**
|
||||
6. **Record it. The checks tighten themselves:**
|
||||
|
||||
```bash
|
||||
tools/wikitool lint # unlabelled_edges and unauthorised_labels must be 0
|
||||
@@ -110,8 +111,14 @@ advisory until step 6 promotes them.
|
||||
```
|
||||
|
||||
Only once `lint` reports zero of both is the run finished. The two findings are advisory
|
||||
during the window and become hard errors afterwards - the same path
|
||||
`legacy_citation_markers` took after the citation migration.
|
||||
while `kb_version` is below 4.0.0 and hard from the moment `migrate done` records it -
|
||||
nothing to flip by hand, and no window in which a half-converted corpus is refused by the
|
||||
check that is measuring its progress.
|
||||
|
||||
Do not record the migration to silence the findings. The promotion is what makes the run
|
||||
stick: after it, a bare title in `related:` is a hard error rather than a page still
|
||||
waiting, so a corpus recorded early fails its next lint instead of quietly keeping the old
|
||||
shape.
|
||||
|
||||
## How to tell a migrated page from an unmigrated one
|
||||
|
||||
|
||||
Reference in New Issue
Block a user