Skip to content

D307 — A duplicated "See also" link goes, and lint stops raising non-questions

Decision. Every duplicate_link carries a mechanical fix. The link leaves its "See also" item together with its words. An item that holds other links keeps them (rewrite_link_item), one left empty is dropped, and an empty section loses its heading. Three other checks stop raising questions that have no answer: - map_misfit neither flags nor counts a retired concept; - glossary_gap ignores universal technical acronyms and all-caps emphasis of ordinary words; - open_marker ignores markers in struck-through text, which is closed or cancelled; - the Atlas no longer colours nodes by lint severity, so its legend has no Health mode.

Why. The operator's rule, once asked: a link already in the text does not need repeating in "See also". The 137 duplicates on a real KB were all of that kind. Before this, only link-only items were fixable, because "the words may be the reason". The text that links the target already says why, so the item's words repeat it, and they drift apart. In the same KB map_misfit flagged archived pages, which live in the archive because they are retired, and glossary_gap asked for definitions of API, HTTP, GB and the Italian "NON" (66 items). An empty Observatory is the goal (D306), so a check must not raise something no one can answer except by dismissing it. The cost of dropping item words is that a reason written only in the item is lost. The fix runs only where the text links the same target, which is where the reason belongs.

Alternatives rejected. - Accept duplicate_link map-wide: it keeps the repetition D287 calls a drift risk, and the operator did not want the sections. - Move the item's words into the text: no mechanical rule knows where in the text they belong. - A per-KB list of common acronyms: every KB would write the same list. The built-in one covers universal terms, and glossary.yaml remains for a KB's own terms.

Consequences. An item that mixes a duplicate and another link inside one group ("[[a]] and [[b]]") is left alone, because no cut keeps one without the other. Two-letter all-caps words (HA) are always candidate terms, whatever their lowercase form means.