From 100e9a3ab23173d04f880f6ee79ecd1f8b4f8f11 Mon Sep 17 00:00:00 2001 From: PandaeDo Date: Wed, 7 Oct 2026 10:38:56 +0200 Subject: [PATCH 1/2] update documentation management plan --- .../documentation_management.rst | 1044 ++++++++++++++--- 1 file changed, 878 insertions(+), 166 deletions(-) diff --git a/docs/platform_management_plan/documentation_management.rst b/docs/platform_management_plan/documentation_management.rst index 1bed7ad606b..16b9850097f 100644 --- a/docs/platform_management_plan/documentation_management.rst +++ b/docs/platform_management_plan/documentation_management.rst @@ -15,7 +15,7 @@ .. document:: Documentation Management Plan :id: doc__documentation_mgt_plan :status: valid - :version: 3 + :version: 4 :safety: ASIL_B :security: YES :tags: platform_management @@ -84,18 +84,54 @@ Versioning of documents is done as for every work product with github means and The time schedule is not part of the documentation management plan. As described in the project management plan GitHub issues is used to plan and track the work. -The following tables lists all documents. The documentation is structured in several folders :ref:`platform_folder_structure`, -each representing a specific aspect of the project. The following sections lists all documents that are available in each folder. -Afterwards an additional section is provided with the collected documents for the features, modules and components. Missing -documents are listed as well, so that it is easy to identify missing documents. +The following tables list all documents. The documentation is structured in several folders :ref:`platform_folder_structure`, +each representing a specific aspect of the project. First the documents of the platform folders are listed. +Afterwards the documents are listed per feature: for each feature the feature documents are followed by the +documents of the implementing modules and their components. Finally all further documents, which do not belong +to one of these sections, are listed. +.. note:: -.. _project_documents_list: + The tables of this plan are generated during the documentation build from the documents which are part of + that build. Therefore this plan looks different depending on where it is built: + + * **S-CORE platform repository**: only the documents of the platform repository are listed. The module + repositories are not part of this build, so the module and component tables are empty. Only the module + documentation still located in the folder ``docs/modules`` of the platform repository is listed there. + This documentation is not yet transferred into the module repositories, see :ref:`module_folder_structure`. + Also the section "Further documents" is empty. + * **Reference integration**: the module repositories and further dependencies (e.g. the process description + and docs-as-code) are part of the build. Therefore the tables additionally contain the module and component + documents of these repositories and the section "Further documents" lists the documents of the other dependencies. + + The structure of the plan is the same in both cases. +.. _project_documents_list: + Platform documentation ++++++++++++++++++++++ +.. _documents_docs_root: + +docs +#### + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname and "/" not in docname: + results.append(need) + .. _documents_docs_architecture: docs/architecture @@ -105,13 +141,16 @@ docs/architecture :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 + :sort: docname results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "architecture/" in need["docname"] and not "features/" in need["docname"] and not "modules/" in need["docname"]: - results.append(need) - + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("architecture/"): + results.append(need) .. _documents_docs_contribute: @@ -122,320 +161,883 @@ docs/contribute :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("contribute/"): + results.append(need) + +.. _doc_platform_management_plan: + +docs/platform_management_plan +############################# + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("platform_management_plan/"): + results.append(need) + +.. _documents_docs_quality: + +docs/quality +############ + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("quality/"): + results.append(need) + +.. _documents_docs_requirements: + +docs/requirements +################# + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "contribute/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("requirements/"): + results.append(need) + +.. _documents_docs_safety: + +docs/safety +########### + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("safety/"): + results.append(need) + +.. _documents_docs_score_tools: + +docs/score_tools +################ + +.. needtable:: + :style: table + :columns: title;id;safety_affected;security_affected;status + :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("score_tools/"): + results.append(need) + +.. needtable:: + :style: table + :columns: title;id;safety_affected;security_affected;status + :colwidths: 25,45,10,10,10 + :sort: docname + + results = [] + + for need in needs.filter_types(["doc_tool"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + if docname.startswith("score_tools/"): + results.append(need) .. _documents_docs_features: +.. _documents_docs_modules: + +Feature, module and component documentation ++++++++++++++++++++++++++++++++++++++++++++ + +In the following sections the documents of the features, that are planned for release v1.0, are listed. +The features of the platform repository (``docs/features``) are used as structure. For each feature the +documents are listed in the following order: -Feature documentation -+++++++++++++++++++++ +* Feature documents: the feature documents of the platform repository (see :ref:`platform_folder_structure`) + and the feature documents of the implementing module(s) (``docs/features``, see :ref:`module_folder_structure`) +* Module documents: the documents on module level of the implementing module(s), e.g. module safety plan, + safety manual, release note and verification report (``docs/module``, ``docs/verification_report``) +* Component documents: the documents of the components of the implementing module(s), e.g. requirements, + architecture, detailed design, safety analyses and their inspection checklists (``score//docs``) -In the following sections all documents of the features, that are -planned for release v1.0, are listed. +The modules implementing a feature are listed with their Bazel module name, which is also used as folder +name for the module documentation in the reference integration. If no module is assigned to a feature +or a table is empty, the corresponding documentation is missing in the build. .. _documents_docs_features_ai_platform: -docs/features/ai_platform -######################### +AI platform +########### + +Modules: none + +.. note:: + + The incubation repositories ``inc_ai_platform`` and ``inc_gen_ai`` were archived on 2026-03-10. + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/ai_platform/"] + module_paths = [] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/ai_platform/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents + +No module is assigned to this feature yet. +.. rubric:: Component documents + +No module is assigned to this feature yet. .. _documents_docs_features_baselibs: -docs/features/baselibs -###################### +Baselibs +######## + +Modules: ``score_baselibs`` + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/baselibs/"] + module_paths = ["modules/score_baselibs/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/baselibs/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + module_paths = ["modules/score_baselibs/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break + +.. rubric:: Component documents + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + module_paths = ["modules/score_baselibs/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break .. _documents_docs_features_code_generation: -docs/features/code_generation -############################# +Code generation +############### + +Modules: none + +.. note:: + + The incubation repository ``inc_score_codegen`` was archived on 2026-03-10. + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/code_generation/"] + module_paths = [] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/code_generation/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents + +No module is assigned to this feature yet. + +.. rubric:: Component documents + +No module is assigned to this feature yet. .. _documents_docs_features_communication: -docs/features/communication -########################### +Communication +############# + +Modules: ``score_communication``, ``score_someip_gateway``, ``communication`` + +.. rubric:: Feature documents + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + feature_paths = ["features/communication/"] + module_paths = ["modules/score_communication/", "modules/score_someip_gateway/", "modules/communication/"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + module_paths = ["modules/score_communication/", "modules/score_someip_gateway/", "modules/communication/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break + +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_communication/", "modules/score_someip_gateway/", "modules/communication/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/communication/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break .. _documents_docs_features_configuration: -docs/features/configuration -########################### +Configuration +############# + +Modules: ``score_config_management`` + +.. note:: + + The incubation repository ``inc_config_management`` was archived on 2026-03-10, the module is continued in the repository ``config_management`` (``score_config_management``). + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/configuration/"] + module_paths = ["modules/score_config_management/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/configuration/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + + module_paths = ["modules/score_config_management/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] -.. _documents_docs_features_daal: + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break -docs/features/daal -################## +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_config_management/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/frameworks/daal/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break .. _documents_docs_features_diagnostics: -docs/features/diagnostics -######################### +Diagnostics +########### + +Modules: ``score_diagnostics`` + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/diagnostics/"] + module_paths = ["modules/score_diagnostics/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/diagnostics/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents -.. _documents_docs_features_feo: +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname -docs/features/feo -################# + module_paths = ["modules/score_diagnostics/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break + +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_diagnostics/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/frameworks/feo/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break .. _documents_docs_features_frameworks: -docs/features/frameworks -######################## +Frameworks (DAAL, FEO) +###################### + +Modules: ``score_feo``, ``score_inc_daal``, ``feo`` + +.. note:: + + The incubation repository ``inc_feo`` was archived on 2026-03-10, the module is continued in the repository ``feo`` (``score_feo``). + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/frameworks/"] + module_paths = ["modules/score_feo/", "modules/score_inc_daal/", "modules/feo/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/frameworks/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname -.. _documents_docs_features_gen_ai: + module_paths = ["modules/score_feo/", "modules/score_inc_daal/", "modules/feo/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break -docs/features/gen_ai -#################### +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_feo/", "modules/score_inc_daal/", "modules/feo/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/ai_platform/gen_ai/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break .. _documents_docs_features_lifecycle: -docs/features/lifecycle -####################### +Lifecycle +######### + +Modules: ``score_lifecycle`` + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/lifecycle/"] + module_paths = ["modules/score_lifecycle/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/lifecycle/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents + +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname + module_paths = ["modules/score_lifecycle/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] -.. _documents_docs_features_logging: + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break -docs/features/log_and_trace -########################### +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_lifecycle/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/log_and_trace/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break +.. _documents_docs_features_logging: -.. _documents_docs_features_orchestration: +Log and trace +############# + +Modules: ``score_logging`` -docs/features/orchestration -########################### +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/log_and_trace/"] + module_paths = ["modules/score_logging/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/orchestration/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents -.. _documents_docs_features_os: +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname -docs/features/os -################ + module_paths = ["modules/score_logging/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break + +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_logging/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/os/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break +.. _documents_docs_features_orchestration: -.. _documents_docs_features_persistency: +Orchestration +############# -docs/features/persistency -######################### +Modules: ``score_kyron``, ``orchestrator`` + +.. note:: + + The repository ``orchestrator`` was archived on 2026-09-21. The module documentation still available in the platform repository (``docs/modules/orchestrator``) is kept. + +.. rubric:: Feature documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + feature_paths = ["features/orchestration/"] + module_paths = ["modules/score_kyron/", "modules/orchestrator/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/persistency/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents -.. _documents_docs_features_security_crypto: +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname -docs/features/security_crypto -############################# + module_paths = ["modules/score_kyron/", "modules/orchestrator/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break + +.. rubric:: Component documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/score_kyron/", "modules/orchestrator/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/security_crypto/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break -.. _documents_docs_features_time: +.. _documents_docs_features_os: + +Operating system +################ + +Modules: ``os`` -docs/features/time -################## +.. note:: + + The repository ``operating_system`` was archived on 2026-03-10. The module documentation still available in the platform repository (``docs/modules/os``) is kept. + +.. rubric:: Feature documents + +There is no dedicated feature for the operating system. + +.. rubric:: Module documents .. needtable:: :style: table :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 - :sort: id + :sort: docname + module_paths = ["modules/os/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "features/time/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break -.. _documents_docs_glossary: - -docs/glossary -############# +.. rubric:: Component documents .. needtable:: :style: table @@ -443,17 +1045,27 @@ docs/glossary :colwidths: 25,45,10,10,10 :sort: docname + module_paths = ["modules/os/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "glossary/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break +.. _documents_docs_features_persistency: -.. _documents_docs_introduction: +Persistency +########### -docs/introduction -################# +Modules: ``score_persistency`` + +.. rubric:: Feature documents .. needtable:: :style: table @@ -461,16 +1073,24 @@ docs/introduction :colwidths: 25,45,10,10,10 :sort: docname + feature_paths = ["features/persistency/"] + module_paths = ["modules/score_persistency/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "introduction/" in need["docname"]: - results.append(need) - -.. _documents_docs_modules: - -docs/modules -############ + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents .. needtable:: :style: table @@ -478,16 +1098,20 @@ docs/modules :colwidths: 25,45,10,10,10 :sort: docname + module_paths = ["modules/score_persistency/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "modules/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break -.. _doc_platform_management_plan: - -docs/platform_management_plan -############################# +.. rubric:: Component documents .. needtable:: :style: table @@ -495,16 +1119,27 @@ docs/platform_management_plan :colwidths: 25,45,10,10,10 :sort: docname + module_paths = ["modules/score_persistency/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "platform_management_plan/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break -.. _documents_docs_quality: +.. _documents_docs_features_security_crypto: -docs/quality -############ +Security and crypto +################### + +Modules: ``score_security_crypto`` + +.. rubric:: Feature documents .. needtable:: :style: table @@ -512,16 +1147,45 @@ docs/quality :colwidths: 25,45,10,10,10 :sort: docname + feature_paths = ["features/security_crypto/"] + module_paths = ["modules/score_security_crypto/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "quality/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents -.. _documents_docs_requirements: +.. needtable:: + :style: table + :columns: title;id;safety;security;status + :colwidths: 25,45,10,10,10 + :sort: docname -docs/requirements -################# + module_paths = ["modules/score_security_crypto/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] + results = [] + + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break + +.. rubric:: Component documents .. needtable:: :style: table @@ -529,16 +1193,27 @@ docs/requirements :colwidths: 25,45,10,10,10 :sort: docname + module_paths = ["modules/score_security_crypto/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "requirements/" in need["docname"] and not "features/" in need["docname"] and not "modules/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break -.. _documents_docs_safety: +.. _documents_docs_features_time: -docs/safety -########### +Time +#### + +Modules: ``score_time`` + +.. rubric:: Feature documents .. needtable:: :style: table @@ -546,48 +1221,73 @@ docs/safety :colwidths: 25,45,10,10,10 :sort: docname + feature_paths = ["features/time/"] + module_paths = ["modules/score_time/"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "safety/" in need["docname"]: - results.append(need) - -.. _documents_docs_score_tools: - -docs/score_tools -################ + docname = need["docname"] or "" + for feature_path in feature_paths: + if feature_path in docname: + results.append(need) + break + else: + for module_path in module_paths: + if module_path in docname: + if docname.split(module_path, 1)[1].split("/")[0] == "features": + results.append(need) + break + +.. rubric:: Module documents .. needtable:: :style: table - :columns: title;id;safety_affected;security_affected;status + :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 :sort: docname + module_paths = ["modules/score_time/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] for need in needs.filter_types(["document"]): - if need["docname"] is not None and "score_tools/" in need["docname"]: - results.append(need) + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder in module_folders: + results.append(need) + break +.. rubric:: Component documents .. needtable:: :style: table - :columns: title;id;safety_affected;security_affected;status + :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 :sort: docname + module_paths = ["modules/score_time/"] + module_folders = ["docs", "index", "manuals", "module", "release", "safety_mgt", "security_mgt", "verification", "verification_report"] results = [] - for need in needs.filter_types(["doc_tool"]): - if need["docname"] is not None and "score_tools/" in need["docname"]: - results.append(need) + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + for module_path in module_paths: + if module_path in docname: + folder = docname.split(module_path, 1)[1].split("/")[0] + if folder not in module_folders and folder != "features": + results.append(need) + break +.. _documents_further: -.. _documents_docs_security: +Further documents ++++++++++++++++++ -docs/security -############# +This section lists all documents which are part of the documentation build but are not assigned to one of +the sections above, e.g. documents of included dependencies or of modules which are not yet assigned to a feature. .. needtable:: :style: table @@ -595,8 +1295,20 @@ docs/security :colwidths: 25,45,10,10,10 :sort: docname + platform_folders = ["architecture", "contribute", "features", "modules", "platform_management_plan", "quality", "requirements", "safety", "score_tools"] + assigned_modules = ["score_baselibs", "score_communication", "score_someip_gateway", "communication", "score_config_management", "score_diagnostics", "score_feo", "score_inc_daal", "feo", "score_lifecycle", "score_logging", "score_kyron", "orchestrator", "os", "score_persistency", "score_security_crypto", "score_time"] results = [] - for need in needs.filter_types(["document"]): - if need["docname"] is not None and "security/" in need["docname"]: - results.append(need) + for need in needs.filter_types(["document", "doc_tool"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + folders = docname.split("/") + if len(folders) == 1: + continue + if folders[0] == "modules": + if folders[1] in assigned_modules: + continue + elif folders[0] in platform_folders: + continue + results.append(need) From 284eb3069798313a51980f051d0f3f278ca5ade6 Mon Sep 17 00:00:00 2001 From: PandaeDo Date: Wed, 7 Oct 2026 16:41:27 +0200 Subject: [PATCH 2/2] Show tool safety/security impact in documentation management tables Render doc_tool needs in separate tables using safety_affected and security_affected, and use safety/security for plain documents. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../documentation_management.rst | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/docs/platform_management_plan/documentation_management.rst b/docs/platform_management_plan/documentation_management.rst index 16b9850097f..622bb812a65 100644 --- a/docs/platform_management_plan/documentation_management.rst +++ b/docs/platform_management_plan/documentation_management.rst @@ -259,7 +259,7 @@ docs/score_tools .. needtable:: :style: table - :columns: title;id;safety_affected;security_affected;status + :columns: title;id;safety;security;status :colwidths: 25,45,10,10,10 :sort: docname @@ -1299,7 +1299,31 @@ the sections above, e.g. documents of included dependencies or of modules which assigned_modules = ["score_baselibs", "score_communication", "score_someip_gateway", "communication", "score_config_management", "score_diagnostics", "score_feo", "score_inc_daal", "feo", "score_lifecycle", "score_logging", "score_kyron", "orchestrator", "os", "score_persistency", "score_security_crypto", "score_time"] results = [] - for need in needs.filter_types(["document", "doc_tool"]): + for need in needs.filter_types(["document"]): + docname = need["docname"] or "" + if "score_platform/" in docname: + docname = docname.split("score_platform/", 1)[1] + folders = docname.split("/") + if len(folders) == 1: + continue + if folders[0] == "modules": + if folders[1] in assigned_modules: + continue + elif folders[0] in platform_folders: + continue + results.append(need) + +.. needtable:: + :style: table + :columns: title;id;safety_affected;security_affected;status + :colwidths: 25,45,10,10,10 + :sort: docname + + platform_folders = ["architecture", "contribute", "features", "modules", "platform_management_plan", "quality", "requirements", "safety", "score_tools"] + assigned_modules = ["score_baselibs", "score_communication", "score_someip_gateway", "communication", "score_config_management", "score_diagnostics", "score_feo", "score_inc_daal", "feo", "score_lifecycle", "score_logging", "score_kyron", "orchestrator", "os", "score_persistency", "score_security_crypto", "score_time"] + results = [] + + for need in needs.filter_types(["doc_tool"]): docname = need["docname"] or "" if "score_platform/" in docname: docname = docname.split("score_platform/", 1)[1]