fix(wiki): protect math in cross-refs; drop no-op DB call; fix mark order
- R-9 (MED): _inject_cross_refs now protects LaTeX math spans ($…$, $$…$$, \(…\), \[…\]) like inline code, so a concept name inside a formula is no longer rewritten to a [[slug]] link and corrupting the LaTeX. Regression test added. - C-13 (LOW): mark ungrounded claims on the raw body BEFORE injecting cross-refs (render then inject), so a concept name inside a claim cannot stop the ⚠ regex from matching. - C-12 (LOW): _try_embed_formulas is now a true no-op — it previously issued a per-concept information_schema round-trip that did nothing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -274,6 +274,19 @@ def test_inject_cross_refs_skips_inline_code() -> None:
|
||||
assert "[[circle-packing]]" in result # bare occurrence replaced
|
||||
|
||||
|
||||
def test_inject_cross_refs_skips_math_spans() -> None:
|
||||
"""Concept names inside LaTeX math are NOT rewritten to [[slug]] links (audit R-9)."""
|
||||
concepts = [
|
||||
Concept(slug="energy", title="Energy", aliases=[]),
|
||||
FIXTURE_CONCEPT,
|
||||
]
|
||||
text = "Prose Energy here. Math $x = Energy^2$ and inline \\(Energy\\) stay literal."
|
||||
result = _inject_cross_refs(text, concepts, current_slug="lobachevsky-function")
|
||||
assert "$x = Energy^2$" in result # display/inline $...$ math untouched
|
||||
assert "\\(Energy\\)" in result # \(...\) math untouched
|
||||
assert "Prose [[energy]] here." in result # prose occurrence still linked
|
||||
|
||||
|
||||
def test_inject_cross_refs_full_list_even_when_single_concept() -> None:
|
||||
"""Cross-ref injection uses the full concept list, not just the compiled concept."""
|
||||
concepts = [
|
||||
|
||||
Reference in New Issue
Block a user