Address review nits on the relative-link absolute-path suggestion:
- Replace the duplicated absoluteTarget helper with resolveLink("", link),
whose empty fromConceptID yields the bundle-root interpretation. Guard the
suggestion on absTarget != target so an already-absolute broken link (and
root-level concepts where relative and absolute coincide) falls through to
the plain broken-link message rather than suggesting itself.
- Preserve the #fragment on the suggested absolute path (e.g.
organizations/cloaked#section -> /organizations/cloaked#section).
Fragments remain ignored for concept resolution.
- Add tests for the already-absolute-and-broken case (no "absolute path"
suggestion) and for fragment preservation in the suggestion.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Problem
Relative markdown links like
[Cloaked](organizations/cloaked)from a concept atpages/about.mdresolve topages/organizations/cloaked(broken). The correct form is[Cloaked](/organizations/cloaked)(absolute). The error message didn't explain this gotcha.Fix
When validate finds a broken link, it checks if the target would resolve as an absolute path. If so, the error message suggests the absolute path:
use /organizations/cloaked for an absolute path.