TL;DR: promoted
@rc→@latest— v3.11.5 STABLE is a 6-RC internal-audit hardening cascade on top of stable 3.11.4 that closes the fence/parser-desync class at its root. The whole line was one class: a note-structure element (heading#, wikilink[[…]], tag#…, questionQ:) that appears ONLY inside a code fence must never be surfaced by an always-on tool — it must match the canonical parser (stripCodeAndInline/parseNote) + Obsidian. Roll-up of the RCs: rc.1 a full from-scratch 12-lens project audit (1 MED write-path fence classifier that mis-read a line-leading inline```span```as a block-fence open and silently droppedrename_note/replace_in_notesedits, + 2 LOW + 1 INFO); rc.2/rc.3/rc.4 three mandatory post-merge re-sweeps, each finding real siblings/residuals of the prior fix — rc.2 the two read-path fence-toggle siblings (readNote(map)heading drop + fts5 breadcrumb freeze) → extracted the sharedsrc/fence.tsopensBlockFenceleaf + an inventory invariant; rc.3 the PARSER-DESYNC class one layer deeper (4 always-on tools re-extracting wikilinks/tags/questions from the RAW body) → routed all through the exportedstripCodeAndInline+tests/parser-desync-invariant.test.ts; rc.4 the 2 tail LOWs; rc.5 a root-cause META-AUDIT that found a MED all 4 RCs + 30+ prior audits missed — a char-BLIND fence toggle (inFence = !inFencecan't tell a ``` delimiter from a~~~) live in `write.ts` ×2 (data-affecting), `read.ts`, `meta.ts` → replaced by a canonical char-aware `advanceFence()` shared by all 5 walkers, with the fence-toggle invariant upgraded from presence to CORRECTNESS; rc.6 the highest-leverage hardening — a GENERATIVE `tests/canonical-parser-agreement.test.ts` net (every fence shape the cascade fixed × every always-on extractor) that would have caught the entire class in one shot, mutation-verified. 13 confirmed findings, every one reproduced against `dist/` and closed with a behavioral test, most with an inventory invariant. The mandatory pre-promotion re-sweep (regression · currency · invariant-soundness, 3-skeptic verify) recommended PROMOTE: all 5 fence walkers verified byte-identical rc.4↔rc.5 across 100k realistic notes; the only divergence is an adversarial unclosed-fence+mismatched-inner shape where rc.5 is the CommonMark-correct side (pre-existing, INFO). 46 tools · 19 prompts · 1479 tests · 11 languages. CI publishes `@latest` + SLSA L2 provenance + OIDC MCP-registry sync.Method note: promoted on the maintainer "go" against the ≥2-external-auditor gate (v3.6.1), substantively met across the v3.9→v3.11 line. Folded into this promotion:
CITATION.cffversion/date bump (drift-guard pins it to the latest stable heading) and a version-agnostic rephrase of thedocs/QUICKSTART.md--versionexample (was a stale3.10.xillustration). Tracked for the next@rcline (genuine but non-blocking test-hardening, no shipped bug — all backstopped today): extend the rc.6 generative net's generator to emit unclosed-fence / nested-fence / frontmatter-adjacent shapes (and reconcilestripCodeAndInline's unclosed-fence leniency with the CommonMark-correct walkers); widenparser-desync-invariantto coverbases.ts collectTags(its own inline-tag regex escapes the current inventory); broaden thefence-toggle-invariantdetector to non-fence-named state vars + the ternary toggle form.