v2.0.0
v2.0.0
Released: 2026-08-03
The githubAutolinks markdown feature has been removed, and the config loader rejects unknown keys — so any site config still carrying githubAutolinks will fail at config load after upgrading. That is the whole of the breaking surface; everything else in this release is additive or a fix.
Alongside it, this release lands the JSX-nested content passes (links, images, anchors, footnotes inside MDX JSX and container directives now behave like their plain-markdown counterparts), spread attribute validation, shadow-session lifecycle management for the build's staging directory, and a real SWC parse behind the MDX content-bridge gate.
Breaking Changes
Remove the GithubAutolinks markdown feature entirely (a0b11038) — the
githubAutolinksconfig key is gone and is now an unknown-key error. Delete it from your config (and from any preset that emits it) before upgrading. Host-specific issue/PR/SHA autolinking intogithub.does not belong in a general SSG.com/ {repo}
Features
feat(zfb-build,zfb): shadow session lock/teardown/reap/keep-flag (#2257) (a10012ea)
feat(zfb-md-extras): implement JsxNestedImageDimensions (#2248) (86ccfb53)
feat(zfb-content): treat JSX-nested external links with target/rel (#2249) (facba958)
feat(zfb-md-ast,zfb-md-extras,zfb-content): shared mdast-phase wiring for JSX-nested mutation passes (#2247) (a61ba77c)
feat(zfb-content): register JSX-nested anchors and footnote occurrence ids (#2246) (e51e6dfd)
feat(build): add opt-in strictContentBridge flag for MDX fallback (#2220) (80465a1e)
Bug Fixes
fix(zfb-content): preserve nested-image alt text in heading extraction (codex review, #2248) (83375b9e)
fix(zfb-content): keep heading text/anchor when a nested external link is treated (#2249 review) (2bcc591e)
fix(zfb-content): exclude footnote-definition bodies from JSX anchor collection (58cf99c0)
fix(zfb-content): make the spread trailing-token check comment/whitespace-aware (#2242) (1798edbc)
fix(zfb-content): reject a trailing comma / extra tokens after a spread operand (64565f90)
fix(zfb-content): validate + drop-and-warn invalid spread attributes (#2241) (a1bf1acf)
fix(md-extras): reset in_jsx at FootnoteDefinition boundaries in the JSX-nested link collector (#2222 review) (89b2240f)
fix(md-extras): skip FootnoteDefinition subtrees in the JSX-nested link collector (#2225 review) (5b38ac41)
fix(md-extras): validate links nested in MDX JSX and container directives (#2184) (d09ba58f)
fix(bundler): replace the content-bridge byte-scanner gate with a real SWC parse (#2219) (1d43d434)
fix(zfb-server): emit non-empty sentinel on page/css SSE frames (bebf80a5)
fix(zfb-test-utils): preserve verbatim SSE field values in next_sse_frame (92dd85be)
fix(docs): remove unused tailwindcss + @tailwindcss/vite from docs/package.json (f2905375)
Other Changes
refactor(zfb-build): extract run_drain_loop and inject synthetic Change events in pre-tick-hook live-loop tests (f3d815af)
diag(bundler): instrument the content-bridge gate scanner (#2217) (6b305c77)
diag(bundler): keep the gate's production path allocation-free (#2217) (956fa441)
test(zfb-content): live repro of the four JSX-nested anchor classes (#2244) (983d9e52)
test(md-extras): characterize the link-validation MDX-JSX/directive blind spot (#2223) (4d518dad)
test(md-extras): flip the 4 pending-feature descent tests green (#2184, #2225) (f4871df5)
test(md-extras,zfb): Wave 4 confirm pass for JSX-nested link validation (#2226) (449a88e0)
test(bundler): strengthen the #2186 reproducer confirm pass with positive content + real-call-site assertions (#2221) (8e6dd506)
test(zfb): confirm SSE frames carry data: after a content edit (#2239) (81371f30)
test(zfb-md-wasm): re-pin frozen parity corpus to 13 after autolinks fixture removal (dd7b6683)
docs(zfb-build): document the Windows lock-liveness risk as untested, not unsupported (#2258) (24fbba27)
docs(zfb-build): record #2257 codex-review accepted-risk rationale in code (e33c45dd)
docs(zfb-content): explain why run()/run_with_context() skip the JSX-nested stubs (codex-review) (638371f5)
docs(styling): state the embedded-Tailwind contract (EN + JA) (01bebc19)
docs(styling): scope the virtual-import claim to the exact tailwindcss specifier (e67ad13f)
docs(content): name the current gate fn in the LaTeX-escape test comment (d930c9e1)
docs(changelog): de-link removed github-autolinks page in historical entry (14f6e078)
docs: re-derive the Node floor from html-validate after the vite removal (fffbfec6)