This release contains the following enhancements:
-
A new
document_line_widthproject configuration option and a strictdoc format command have been introduced. Whendocument_line_widthis set in the project config, the SDoc and Markdown writers will automatically wrap long text paragraphs to the configured line width (minimum:80). The strictdoc format command acts like Black or Ruff for StrictDoc documents, performing in-place reformatting of all documents in the project tree according to the configured line width. -
cargo-nextest test results now link to the requirements their tests verify. A passing or failing test marks its requirement
IsSatisfiedBythe result, and the result's rendered source includes the test's attributes and doc comment. Resolution is crate-qualified (the crate's [package] name plus the in-crate module path), so tests resolve in any module hierarchy, including integration-test binaries and multi-crate Cargo workspaces. -
GCOV/gcovr coverage reports now handle C++ namespaced member functions more reliably. StrictDoc accepts gcovr
demangled_nameentries and matches gcovr-style function names such astest::Adder::add(int const&, int const&)to the names extracted by StrictDoc's C/C++ reader. GCOV report detail links now use normalized source paths, keeping coverage anchors and gcovr HTML links stable across Linux and Windows. -
MathJax and Mermaid are now enabled by default and no longer need to be listed in project_features in strictdoc_config.py. Existing configurations that still declare MATHJAX or MERMAID in project_features will display a deprecation warning on startup and can safely remove those entries.
-
A new strictdoc manage new CLI command generates boilerplate for a new node (section or requirement) and appends it to a specified document. Required Choice fields are pre-filled with TBD so the document remains valid immediately after insertion.
-
Markdown documents now support
$...$ (inline)and$$...$$ (block)math syntax, which is rendered by MathJax. This matches the math delimiter convention used by most Markdown-aware editors and documentation tools. -
TBD and TBC are now accepted as valid values for any Choice or MultipleChoice field, regardless of the declared option set. This allows placeholder values to be written in documents while the final value is still being determined, without triggering a validation error.
-
Markdown files can now declare a grammar by referencing an external
.gra.mdgrammar file via aGrammar:header field. This brings Markdown-based documentation to feature parity with SDoc documents that use[GRAMMAR]sections, enabling custom node types and fields in Markdown. -
Grammar relation roles now support an optional
REVERSE_ROLEdisplay name. When a relation is rendered from the opposite direction (e.g., a child showing its parent link), theREVERSE_ROLElabel is used instead of the canonicalROLEname. This makes bi-directional traceability views more readable without changing the underlying relation identity. -
Fixed: the Table of Contents in the web editor now updates immediately when a section's title is added or removed, without requiring a page reload.
-
Fixed: InlineLink anchors inside Markdown documents are now rendered as hyperlinks instead of being escaped as literal text during Markdown export.
-
Fixed: .c source files are now parsed with tree-sitter-c instead of tree-sitter-cpp. This corrects macro parsing failures that occurred when C-only constructs were fed to the C++ parser.
-
Fixed: Markdown documents containing exactly one section and one requirement now parse correctly. A regression introduced in the Markdown grammar work caused this common structure to be rejected.
What's Changed
- fix(backend/markdown): render InlineLink anchors instead of escaping them by @willenbug in #2885
- refactor(features/trace): consolidate all related files in one place by @stanislaw in #2887
- fix(sdoc_source_code): fix parsing some C macro by switching to tree-sitter-c by @stanislaw in #2886
- chore: remove the RAPIDOC feature from the codebase by @stanislaw in #2888
- refactor(features/export): consolidate ExportAction by @stanislaw in #2889
- fix(sdoc_source_code): cargo-nextest: mark requirements satisfied, resolve nested/workspace tests, render full test source by @sibkru in #2891
- docs: merge docs_extra/ into docs/ by @stanislaw in #2892
- docs: update Dev Guide, Roadmap/Backlog, add initial AGENTS.md by @stanislaw in #2893
- feat(gcov): improve handling of C++ namespaces by @stanislaw in #2890
- fix(features/static_html_search): fix a flaky CI test by @stanislaw in #2894
- feat(markdown): add initial Markdown grammar, allow attaching grammars to Markdown files by @stanislaw in #2895
- feat(backend/sdoc): accept "TBD" and "TBC" as acceptable values in any Choice fields by @stanislaw in #2902
- test(integration): verify that the images are displayed in Markdown as they as in SDoc by @stanislaw in #2903
- feat(markdown): add support of
$/$ $-based syntax for math formulas (MathJax) by @stanislaw in #2904 - feat(cli): add "manage new" command to generate new node boilerplate by @stanislaw in #2906
- fix(features/document): ensure TOC updates when node title is added/removed by @stanislaw in #2907
- feat(grammar): add reverse display names for relation roles by @larsjohansson-saferadar in #2901
- chore: disable dead links checking in PRs for now by @stanislaw in #2909
- feat: make MathJax and Mermaid enabled by default, announce a deprecation message for their config options by @stanislaw in #2908
- feat: enable SDoc/RST and Markdown formatting when a dedicated option is provided by @stanislaw in #2910
- fix(markdown): handle a basic parsing case with one section and one requirement by @stanislaw in #2911
- chore(spec): extract the Markdown/RST formatting rules to a dedicated spec by @stanislaw in #2912
- fix(markdown): improve recognition of two 'STATEMENT:' content styles inline/newline by @stanislaw in #2913
- release: bump version to 0.24.0-alpha.1 by @stanislaw in #2914
- release: bump version to 0.24.0 by @stanislaw in #2915
New Contributors
- @larsjohansson-saferadar made their first contribution in #2901
Full Changelog: 0.23.1...0.24.0