Skip to content

Quality requirements

Reliability

ID Requirement Priority Status
QR-001 py-doc shall never drop text, a picture or a setting quietly. What it cannot carry over is named in a warning, and what it cannot do is an error. Must Met
QR-002 A failing tool shall stop the step with a non-zero exit status and the tool’s whole output. Nothing shall be written as a stand-in for a picture or document that failed. Must Met
QR-003 One failing document or file shall not stop the others in a batch: every failure is listed, then a summary, then exit status 1. Must Met
QR-004 Exit statuses shall separate the environment (2) from a failed build or check (1). Must Met

Safety of the user’s files

ID Requirement Priority Status
QR-020 A build, export or site build shall change no source file. Only commands that exist to change project files (init, import, migrate, site init, c4 up) write into the project, and only what they say. Must Met
QR-021 An existing file shall not be replaced unless the command is told to (--force, --backup), or the file is one py-doc wrote itself. Must Met
QR-022 The input shall be checked before anything is created, so a typo leaves nothing behind. Should Met

Security

ID Requirement Priority Status
QR-040 A tool shall run in a fresh container as the calling user, with no capabilities and no privilege escalation. It gets no network unless the step needs it, and only the folders it needs, read-only unless it writes there. Must Met
QR-041 Commands shall be argument lists, never shell strings built from user input. Must Met
QR-042 Downloaded tools shall be checked against recorded SHA-256 checksums when the image is built. Must Met
QR-043 Steps that change the machine (py-doc setup) shall show what they will run and ask first. Must Met

Reproducibility

ID Requirement Priority Status
QR-060 The same sources and the same image shall give the same documents on Linux, Windows and CI. Tool versions are pinned, and the image tag follows its definition. Must Met
QR-061 Generated text (C4 chapters, reports) shall be sorted and carry no times unless asked. Should Met
QR-062 The Structurizr Local image can be pinned by digest. Could Met

Performance

ID Requirement Priority Status
QR-080 Unchanged diagrams shall not be drawn again: pictures are cached by their text, format and tool image. Should Met
QR-081 Unchanged Structurizr workspaces shall not be exported or drawn again. Should Met
QR-082 The pages of a site shall be converted in one container run. Could Met
QR-083 The full test suite shall finish without hanging on any supported platform. Tools that can block (such as a TeX package manager waiting for an answer) are given a time limit. Must Met

Usability

ID Requirement Priority Status
QR-100 Every error shall say what is wrong, where (file, line, configuration key or view) and, where it can, what to do. Must Met
QR-101 Long steps (building the image, starting Structurizr) shall show progress. Should Met
QR-102 Old command and import names shall keep working, with a one-line note naming the replacement. Should Met
QR-103 py-doc’s own documentation shall be written, checked and built with py-doc. Should Met

Portability and maintainability

ID Requirement Priority Status
QR-120 py-doc shall run on Linux and Windows with Python 3.10 to 3.14. Must Met
QR-121 Each module shall have one job, and engine-specific code (MkDocs, Starlight, Structurizr) shall stay in its own module. Should Met
QR-122 Every feature shall have tests, and the tests shall run without Docker by running the tools on the host or faking the engine. Must Met
QR-123 The library shall use the standard logging module and never configure it. Should Met