fix: a wikilink wrapped across a line break is its own lint finding; rename and rm see it (#115)
CI / verify (push) Successful in 5m15s
CI / pwsh (push) Successful in 2m1s
Release / release (push) Successful in 35s

Files changed:
- CHANGES.md
- VERSION
- instructions/wiki-lint/SKILL.md
- kb/CONTRACT.md
- tools/CONTRACT.md
- tools/chemenu/commands/lint.py
- tools/chemenu/commands/page_ops.py
- tools/chemenu/kb_scan.py
- tools/chemenu/lint_core.py
- tools/chemenu/tests/test_kb_scan.py
- tools/chemenu/tests/test_lint.py
- tools/chemenu/tests/test_page_ops.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
This commit is contained in:
torbenandClaude Opus 5.5 committed 2026-10-03 11:19:10 +02:00
1 parent b3022b8ffb
commit c261b8f4ca
12 files changed
+204 -13

No files matched your search

+15 -2
View File
@@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse.
---
## 8.0.0-beta.29 - 2026-10-03 - stack-close no longer records which model and effort ran each phase
## 8.0.0-beta.30 - 2026-10-03 - lint: a wikilink wrapped across a line break is its own finding; rename and rm see it
**Author:** Torben Nehmer
@@ -140,9 +140,22 @@ concern - readable here, never shipped as something to parse.
- kb/CONTRACT.md: an external article's raw_files point under raw/, a raw fetch capture names both files
- raw fetch --html record and kb/CONTRACT.md path budget follow the folder accept
- stack-close no longer records which model and effort ran each phase
- lint: a wikilink wrapped across a line break is its own finding; rename and rm see it
<!-- /wikitool:bumps -->
### stack-close no longer records which model and effort ran each phase
### lint: a wikilink wrapped across a line break is its own finding; rename and rm see it
A `[[...]]` written across a line break - prose wrapped at a fixed column, with the break
landing inside the link - was read with the break as part of its title. `lint` reported the
target as a missing page, with the line break in the printed name; `rm`'s inbound check did not
count it, so a page referenced only that way was deleted without the `--yes` confirmation; and
`rename` left it pointing at the old title. A link target is now read through one function,
`kb_scan.normalize_link_target()`, which folds a line break and its indentation to one space -
used by the link graph, the index check, `rename` and `rm` alike. That such a link is wrapped
is still a defect: `lint` reports it in a new hard section, *Wrapped Wikilinks*, and reports it
as broken as well only if the folded title is missing. No instance's lint gets redder: every
link the new section names was a hard broken-link finding before. `kb/CONTRACT.md` § Titles are
identifiers states the rule (Gitea #115).
`stack-close`'s closing comment no longer carries a per-phase table of model, effort, session
shape and compaction, nor the `size/` label beside it; the comment is the changelog line, then