Skip to content

Traceability

Requirements to code and tests

Requirements Modules Tests
FR-001 to FR-005 config.py, build.py, pandoc/source.py test_config.py, test_build.py, test_front_matter.py
FR-006, FR-007 init.py test_init.py
FR-008 migrate.py test_migrate.py
FR-020 to FR-025 directives.py, pandoc/resources/*.lua, pandoc/docx_post.py test_directives.py, test_pandoc.py, test_word_control.py, test_word_layout.py
FR-026, FR-027, QR-080 diagrams/ test_diagrams.py
FR-040 to FR-049 pandoc/engine.py, pandoc/reference.py, pandoc/docx_finish.py, pandoc/pptx_finish.py, naming.py, report.py, template_check.py, convert.py, _cli.py test_pandoc.py, test_pptx_pandoc.py, test_report.py, test_template_check.py, test_cli.py, test_slides_cli.py, test_convert.py, test_examples.py, test_heading_numbers.py
FR-060, FR-062, FR-063 docx_import.py, import_cli.py test_docx_import.py
FR-061 pptx_import.py test_pptx_import.py
FR-080 to FR-086, QR-081 c4/ test_c4.py
FR-100 to FR-106 lint/, markdown/ test_lint.py, test_lint_cli.py, test_structure.py, test_vale.py, test_markdownlint.py, test_markdown_ast.py
FR-120 to FR-127, QR-082 site/, pandoc/resources/site.lua test_site.py
FR-130 to FR-139, FR-150 to FR-160, FR-163 to FR-166 poster.py, poster_blocks.py, poster_svg.py, poster_math.py, poster_scales.py, poster_embedded.py, poster_shapes.py, poster_space.py, poster_elements.py, poster_plot.py, poster_fonts.py, poster_settings.py, poster_themes.py, poster_cli.py, watch.py, config.py, app.py, lint/linter.py, diagrams/tools/poster_pdf.js test_poster.py, test_poster_svg.py, test_poster_math.py, test_poster_scales.py, test_poster_embedded.py, test_poster_shapes.py, test_poster_space.py, test_poster_plot.py, test_poster_browser.py
FR-161 _cli.py, convert.py, watch.py, deck.py, pandoc/engine.py, pandoc/resources/preview.css test_cli.py, test_slides_cli.py, test_convert.py, test_preview_cases.py
FR-162 editors/vscode/extension.js, editors/vscode/src/ editors/vscode/test/, test_preview_cases.py
FR-028 diagrams/render.py, config.py test_diagrams.py
FR-167, FR-168 diagrams/blocks.py, diagrams/render.py, diagrams/scan.py, diagrams/registry.py, diagrams/tools/block_png.js, poster_blocks.py, config.py, runtime/definition/package.json test_document_blocks.py, test_poster_diagrams.py, test_diagrams.py
FR-169 diagram_cli.py, diagram_api.py, diagrams/tools/block_png.js, app.py, __init__.py test_diagram_cli.py
FR-171 icons.py, icons_cli.py, poster_blocks.py, poster.py, poster_settings.py, report.py, report.schema.json test_icons.py
FR-172 poster_engineering.py test_poster_engineering.py, test_examples.py
FR-173 deck.py, convert.py, slides_cli.py, _cli.py, build.py, config.py, site/pages.py, diagrams/tools/deck_pdf.js test_deck.py, test_site.py, test_slides_cli.py, test_preview_cases.py
FR-170, FR-144 diagrams/declarative.py, diagrams/registry.py, diagrams/tools/*_render.py, diagrams/tools/music_render.js, runtime/image.py, runtime/science/, tools_cli.py test_declarative_fences.py, test_image.py
FR-128 site/pages.py, site/engines.py test_site.py
FR-140 to FR-143, QR-040 to QR-043 runtime/, tools_cli.py test_runtime.py, test_image.py, test_setup.py, test_doctor.py, test_platform.py
QR-102 cli.py, slides_cli.py, pydoc2docx, pydoc2slides, pydoclint test_compat.py
QR-123 _logging.py test_logging.py, test_logging_policy.py
QR-103 py-doc.yml, docs/ py-doc lint docs --strict and py-doc build in CI

Open issues

The issues of the repository, as reviewed on 18 October 2026, and the requirements they map to.

Issue Title Requirements State
#3 Merge py-doc2docx, py-doc2slides and py-doclint into a py-doc toolset FR-001, FR-048, FR-100, QR-102 Done and closed: one py-doc command and package, old names kept. render docx became docx, and init now exists
#4 Canonical py-doc.yml configuration model FR-001 to FR-005, FR-009, FR-010, FR-120 Done: documents, collections, bundles, outputs, lint and site. Only content is reserved, for the generators (#18)
#11 Configurable lint rules in py-doc.yml FR-101, FR-102, FR-106 Done: rules, severities, glossary, phrases, acronyms, structure rules, heading, link and alt-text rules, and lint.limits
#12 Complete acronym linting FR-105 Done: length, allow-list, require_definition, scope (file or document), suggestion and severity
#14 HTML renderer and PDF output pipeline FR-042, FR-043 Done and closed: pandoc HTML and XeLaTeX PDF, with templates and per-document settings
#15 Multiple documents, collections and combined bundles FR-004, FR-009 Done: many documents, shared sources, collections and bundles, built side by side
#16 MkDocs project integration and scaffolding FR-120 to FR-124 Done and closed: py-doc site with engine: mkdocs
#17 Astro + Starlight project integration and scaffolding FR-120 to FR-124 Done and closed: py-doc site with engine: starlight
#18 Configurable content generators FR-010 Done: content.generators with glossary, documents, toc, adr-index, requirements, openapi, asyncapi, python-api, diagram, command and python types, entry points for other packages, and py-doc generate
#19 Unified build pipeline and CI integration FR-011, FR-046, FR-104 Done: py-doc build runs generators, lint, documents and bundles, the site and an output check, with steps in the JSON report and SARIF lint output
#41 Documentation quality checks beyond current lint rules FR-106 Done: DOC005 to DOC013 (heading jumps, broken links, alt text, long sentences and headings, repeated headings, unclosed fences, required sections, terminology) and glossary checks
#42 py-doc init and project scaffolding FR-006, FR-007 Done. Can be closed
#43 Documentation analysis and semantic diff tools FR-012, FR-107, FR-108 Done: py-doc stats, py-doc check and py-doc diff (by section, with Git revisions), beside doctor
#44 Front matter and document metadata FR-005 Done: front matter reaches every format, and the site pages carry the description, number, version and status
#47 Machine-readable lint and build output FR-046, FR-104 Done: lint output as text, CSV, GitHub annotations, JSON and SARIF, and the JSON build report
#48 Site navigation from document metadata FR-122 Done: navigation from the documents, their titles and order, site.groups, and a hand-made navigation kept
#149 HTML posters from Markdown: py-doc poster, themes and orientation FR-130 to FR-135 Done: py-doc poster, portrait and landscape, columns, built-in and file themes, examples
#150 Poster: full-width sections FR-137 Done: {.wide} on a section heading, and {colour=} for its heading bar
#151 Poster: callout types, timeline, trend stats and references FR-136, FR-137 Done: callouts in both spellings, timeline, trends in the {.stats} strip, a {.references} list, and chart
#152 Poster: QR code and partner logos in the footer FR-137 Done: footer.qr, footer.logos, and a qr block
#153 Poster: embed theme fonts so a poster looks the same offline FR-150 Done: fonts.files in a theme, and embed_fonts (or --embed-fonts) for the stylesheet’s web fonts, cached
#161 A host runtime, to build with the tools on the PATH instead of the container None yet Open, low priority
#192 Roadmap: poster visualisation plan FR-163 to FR-173, FR-144 Open: the plan. Phases 0 and 1 are done in #208, and every P0, P1 and P2 issue after it
#178, #193, #194, #196 to #199, #202, #205, #206 The phase 0 and phase 1 issues of the plan FR-162 to FR-170, FR-144 Done in #208 (the stretch items of #206, and sky maps of #202, are left)
#195 Theme and document the container’s diagrams FR-168 Done: the themes in #208, then the icon packs logos, tabler, mdi and wi, offline
#190 py-doc diagram, standalone images FR-169 Done: phase 1 in #208, then PDF, WebP, --dpi, cards, render_diagram() and --watch
#200 Engineering structure diagrams FR-172 Done: bowtie, fault-tree, gsn, kmap, plc-ladder, structogram, n2, idef0 and vsm
#201 Icons and illustrations from open-licensed sets FR-171 Done: icon= from four packs and a project folder, credits, the licence list, and a guide to finding pictures
#207 An HTML deck output from the same Markdown FR-173 Done: py-doc slides -f html and deck: true, with a presenter view, PDF and sites
#203, #204 Phase 3 of the plan (P3): reference data and the science backlog None yet Open

Closed issues

The 91 closed issues, checked on 13 October 2026 against the code, the tests and a run of each behaviour through the real pipeline. The 20 duplicates (#21 to #40) point at their originals, which are reviewed above or here.

Issues Outcome
#1, #5, #6, #10, #13, #45, #46, #50, #51, #62 to #64, #69 to #71, #73 to #84, #92, #94, #95, #97 to #100, #102, #103, #105 to #116, #118 Done as described, with tests
#2, #7, #8, #9, #58, #59, #66, #67, #75 Done for the native renderers, which #117 removed. The same behaviour now comes from pandoc. Checked: fences, headings, numbers in text, the byte order mark, invalid UTF-8, vertical tabs, code style, heading levels 5 and 6
#20, #65 Done, with two changes of plan: the heavy tools moved into the container instead of optional Python extras, and macOS was dropped from CI by #102
#49, #72 The code of an unclosed fence was kept, but as text and without the warning the issues asked for. A warning that names the file and line is added
#53 Seven or more # became a level 7 heading under pandoc. Such a line is now text, as in CommonMark
#60 A template’s body text is kept before the document when the template has no [[INSERTCONTENT]] line, as #117 decided. That was silent. A warning now names the text and says how to place the document
#93 Each rule of the PyDoc style now has a test that it flags a bad line and leaves a good one, which found the passive-voice rule missing irregular verbs. The repository’s documentation lints with no findings
#96 The end-to-end test with the real structurizr-cli was missing. It is added, and CI installs the pinned CLI to run it
#104 The note that Setup-DocTools.ps1 is no longer needed is added to the reference chapter
#117 Done. The template-body choice it made is recorded under #60
— Found on the way: a template in the same folder as the Markdown failed with a duplicate mount, now fixed