Skip to content

docs: add stp and rtm documents#1210

Open
Ron (rjaegers) wants to merge 16 commits intomainfrom
docs/add-stp-and-rtm-documents
Open

docs: add stp and rtm documents#1210
Ron (rjaegers) wants to merge 16 commits intomainfrom
docs/add-stp-and-rtm-documents

Conversation

@rjaegers
Copy link
Copy Markdown
Member

@rjaegers Ron (rjaegers) commented Mar 20, 2026

🚀 Hey, I have created a Pull Request

Description of changes

This pull request introduces significant improvements to the documentation generation workflow and formalizes requirements traceability for the project. It adds new document templates for the Software Test Plan (STP) and Requirements Traceability Matrix (RTM), enhances metadata and traceability in generated documents, and updates the GitHub Actions workflows to support these changes. Additionally, it improves test-to-requirement mapping in integration tests.

Documentation generation and traceability improvements:

  • Added new templates for the Software Test Plan (software-test-plan.md.j2) and Requirements Traceability Matrix (requirements-traceability-matrix.md.j2), providing formalized, automatically generated documentation for test planning and requirements coverage. [1] [2]
  • Enhanced the Software Requirements Specification template (software-requirements-specification.md.j2) with dynamic metadata (generation date, version, git revision), document control, scope, and references sections. Also added a watermark for non-release builds and improved footer information. [1] [2] [3]

Workflow and automation updates:

  • Updated the documentation generation workflow (wc-document-generation.yml) to accept an is-release input, generate all three document types (SRS, STP, RTM) in both Markdown and PDF, and include a document control SBDL aspect for traceability metadata. [1] [2]
  • Modified the release build workflow (release-build.yml) to pass the is-release: true flag and ensure all generated .pdf and .sbdl files are uploaded to the release. [1] [2]

Test traceability enhancements:

  • Annotated integration tests in integration-tests.bats with SBDL comments to map each test to its corresponding requirement, enabling automated traceability in the generated RTM and STP documents. [1] [2] [3] [4] [5]

✔️ Checklist

  • I have followed the contribution guidelines for this repository
  • I have added tests for new behavior, and have not broken any existing tests
  • I have added or updated relevant documentation
  • I have verified that all added components are accounted for in the SBOM

@rjaegers Ron (rjaegers) requested a review from a team as a code owner March 20, 2026 11:20
Copilot AI review requested due to automatic review settings March 20, 2026 11:20
@rjaegers Ron (rjaegers) marked this pull request as draft March 20, 2026 11:20
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 20, 2026

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ ACTION actionlint 23 0 0 0.22s
✅ DOCKERFILE hadolint 3 0 0 0.28s
✅ JSON npm-package-json-lint yes no no 0.48s
✅ JSON prettier 21 4 0 0 0.62s
✅ JSON v8r 21 0 0 10.55s
✅ MARKDOWN markdownlint 12 0 0 0 1.08s
✅ MARKDOWN markdown-table-formatter 12 0 0 0 0.26s
✅ REPOSITORY checkov yes no no 26.16s
✅ REPOSITORY gitleaks yes no no 1.08s
✅ REPOSITORY git_diff yes no no 0.01s
✅ REPOSITORY grype yes no no 45.36s
✅ REPOSITORY secretlint yes no no 2.04s
✅ REPOSITORY syft yes no no 2.19s
✅ REPOSITORY trivy yes no no 13.56s
✅ REPOSITORY trivy-sbom yes no no 0.5s
✅ REPOSITORY trufflehog yes no no 5.75s
⚠️ SPELL lychee 83 3 0 11.39s
✅ YAML prettier 31 0 0 0 1.03s
✅ YAML v8r 31 0 0 12.54s
✅ YAML yamllint 31 0 0 1.2s

Detailed Issues

⚠️ SPELL / lychee - 3 errors
[IGNORED] docker://pandoc/extra:3.9.0.0-ubuntu@sha256:72afa9c8d3300e5f10c9c4330e101725687f2179bffd912fb859c6d2ae85de62 | Unsupported: Error creating request client: builder error for url (docker://pandoc/extra:3.9.0.0-ubuntu@sha256:72afa9c8d3300e5f10c9c4330e101725687f2179bffd912fb859c6d2ae85de62)
[IGNORED] https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/philips-software/amp-devcontainer | Unsupported: Error creating request client: builder error for url (vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/philips-software/amp-devcontainer)
[403] https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads | Network error: Forbidden
[ERROR] https://www.sigstore.dev/ | Network error: error sending request for url (https://www.sigstore.dev/) Maybe a certificate error?
[ERROR] https://docs.sigstore.dev/cosign/verifying/verify/ | Network error: error sending request for url (https://docs.sigstore.dev/cosign/verifying/verify/) Maybe a certificate error?
📝 Summary
---------------------
🔍 Total..........126
✅ Successful.....121
⏳ Timeouts.........0
🔀 Redirected.......0
👻 Excluded.........0
❓ Unknown..........0
🚫 Errors...........3

Errors in README.md
[ERROR] https://docs.sigstore.dev/cosign/verifying/verify/ | Network error: error sending request for url (https://docs.sigstore.dev/cosign/verifying/verify/) Maybe a certificate error?
[ERROR] https://www.sigstore.dev/ | Network error: error sending request for url (https://www.sigstore.dev/) Maybe a certificate error?

Errors in .github/TOOL_VERSION_ISSUE_TEMPLATE.md
[403] https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads | Network error: Forbidden

See detailed reports in MegaLinter artifacts

You could have the same capabilities but better runtime performances if you use a MegaLinter flavor:

Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)

  • Documentation: Custom Flavors
  • Command: npx mega-linter-runner@9.4.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,DOCKERFILE_HADOLINT,JSON_V8R,JSON_PRETTIER,JSON_NPM_PACKAGE_JSON_LINT,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,REPOSITORY_CHECKOV,REPOSITORY_GIT_DIFF,REPOSITORY_GITLEAKS,REPOSITORY_GRYPE,REPOSITORY_SECRETLINT,REPOSITORY_SYFT,REPOSITORY_TRIVY,REPOSITORY_TRIVY_SBOM,REPOSITORY_TRUFFLEHOG,SPELL_LYCHEE,YAML_PRETTIER,YAML_YAMLLINT,YAML_V8R

MegaLinter is graciously provided by OX Security
Show us your support by starring ⭐ the repository

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 20, 2026

📦 Container Size Analysis

Note

Comparing ghcr.io/philips-software/amp-devcontainer-base:edgeghcr.io/philips-software/amp-devcontainer-base:pr-1210

📈 Size Comparison Table

OS/Platform Previous Current Change Trend
linux/amd64 145.22 MB 145.22 MB +162 B (+0%) 🔼
linux/arm64 137.54 MB 137.54 MB 231 B (0%) 🔽

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds generated quality-system documentation (STP + RTM) alongside the existing SRS, and updates the document-generation workflow to build these documents from the SBDL model (now including BATS integration tests).

Changes:

  • Add Jinja2 templates for a Software Test Plan (STP) and Requirements Traceability Matrix (RTM).
  • Extend the SRS template with Scope/References/Document Control content.
  • Update the reusable document-generation workflow to compile an SBDL model from both Gherkin features and a BATS test file, then render SRS/STP/RTM PDFs.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
test/cpp/integration-tests.bats Adds an inline SBDL test trace annotation for a BATS test.
docs/templates/software-test-plan.md.j2 New STP template rendering tests traced to requirements.
docs/templates/software-requirements-specification.md.j2 Adds scope + document control sections to the generated SRS.
docs/templates/requirements-traceability-matrix.md.j2 New RTM template mapping requirements to tests and computing coverage summary.
.github/workflows/wc-document-generation.yml Generates STP/RTM markdown + PDFs and compiles the SBDL model from features + BATS.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 20, 2026

Test Results

 13 files  ±0   13 suites  ±0   17m 59s ⏱️ -17s
 33 tests ±0   33 ✅ ±0  0 💤 ±0  0 ❌ ±0 
137 runs  ±0  137 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit b44f9c8. ± Comparison against base commit 574dd85.

♻️ This comment has been updated with latest results.

Ron (rjaegers) and others added 2 commits March 31, 2026 16:49
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Ron <45816308+rjaegers@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 31, 2026

📦 Container Size Analysis

Note

Comparing ghcr.io/philips-software/amp-devcontainer-rust:edgeghcr.io/philips-software/amp-devcontainer-rust:pr-1210

📈 Size Comparison Table

OS/Platform Previous Current Change Trend
linux/amd64 455.71 MB 455.71 MB +193 B (+0%) 🔼
linux/arm64 408.89 MB 408.89 MB 474 B (0%) 🔽

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 31, 2026

📦 Container Size Analysis

Note

Comparing ghcr.io/philips-software/amp-devcontainer-cpp:edgeghcr.io/philips-software/amp-devcontainer-cpp:pr-1210

📈 Size Comparison Table

OS/Platform Previous Current Change Trend
linux/amd64 544.77 MB 544.77 MB +632 B (+0%) 🔼
linux/arm64 526.23 MB 526.23 MB 1.18 kB (0%) 🔽

@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 1, 2026 14:41 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 1, 2026 15:25 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 1, 2026 18:32 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 1, 2026 19:12 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 2, 2026 08:22 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 2, 2026 10:13 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 2, 2026 12:35 — with GitHub Actions Inactive
@rjaegers Ron (rjaegers) marked this pull request as ready for review April 2, 2026 13:05
Copilot AI review requested due to automatic review settings April 2, 2026 13:05
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.

@rjaegers Ron (rjaegers) enabled auto-merge April 2, 2026 13:24
@rjaegers Ron (rjaegers) temporarily deployed to acceptance-testing April 2, 2026 18:04 — with GitHub Actions Inactive
Copilot AI review requested due to automatic review settings April 3, 2026 05:57
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Comment on lines +41 to +52
cat > document-control.sbdl <<SBDL
#!sbdl
doc_control is aspect {
description is "Document control metadata"
custom:version is "$(jq -r '.["."]' .release-please-manifest.json)"
custom:generated_at is "[@DATE]"
custom:git_sha is "[@GIT_COMMIT_HASH]"
custom:git_ref is "${GITHUB_REF_NAME}"
custom:sbdl_compiler_version is "[@COMPILER_VERSION]"
custom:sbdl_dsl_version is "[@DSL_VERSION]"
custom:is_release is "${IS_RELEASE}"
}
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The generated doc_control aspect does not define custom:title, but the SRS/STP/RTM templates iterate over all aspect elements and unconditionally access aspect['custom:title']. This will cause template rendering to fail once document-control.sbdl is included. Add a custom:title to doc_control (or adjust templates to skip doc_control / guard for missing custom:title).

Copilot uses AI. Check for mistakes.
Comment on lines 73 to 79
with:
name: documents
path: |
*.pdf
*.sbdl
!document-control.sbdl
retention-days: 2
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow creates document-control.sbdl, but then excludes it from the uploaded artifact. The PR description says all generated .sbdl files should be uploaded; if document-control.sbdl is intended to be part of the release/CI outputs (for reproducibility of document metadata), it should not be excluded. Otherwise, consider renaming it to clarify it's an intermediate file and/or update the PR description.

Copilot uses AI. Check for mistakes.
Comment on lines 142 to +145
- name: Upload documents to release
run: |
set -Eeuo pipefail
gh release upload "${REF_NAME}" ./*.pdf
gh release upload "${REF_NAME}" ./*.pdf ./*.sbdl
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step downloads artifacts using pattern: documents (which typically extracts into a documents/ subdirectory unless merge-multiple: true is set) but uploads ./*.pdf and ./*.sbdl. That glob is likely to match nothing, causing missing assets or a failing upload. Either download with merge-multiple: true / a path that flattens into the workspace, or change the upload paths to point at the extracted directory.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like.

Didn't review the Jinja templates in too deep, because my time is limited today and next week I'm off. However I looked at the output and it looks good. I'll leave any template issues to CoPilot and security bots, I already saw some comments 😄 if you want to be more sure you could ask for an extra reviewer.

}

@test "clangd should be able to analyze source files" {
# @sbdl test-sda-0007 is test { custom:title is [[[[@-LINE]]]]; requirement is req-sda-0002 }
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose this cannot be less cumbersome than this? (I'm comparing this to our feature files where we have the tc:xxx tags to link to requirements in TFS)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some possibilities, but I wanted to keep the tagging of the test framework (BATS, Gherkin) separate from the document rendering and it's IDs.

In my experience, mixing those two worlds leads to more issues than it solves.

@rjaegers Ron (rjaegers) disabled auto-merge April 4, 2026 06:22
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

@@ -0,0 +1,6 @@
import datetime

def strftime_filter(value, fmt):
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strftime_filter uses datetime.datetime.fromisoformat(value), which will raise ValueError for common ISO-8601 timestamps ending with Z (e.g. 2026-04-04T13:04:59Z). Since custom:generated_at is populated from [@DATE], this can break document generation. Consider normalizing a trailing Z to +00:00 (or using a more tolerant parser) before calling fromisoformat.

Suggested change
def strftime_filter(value, fmt):
def strftime_filter(value, fmt):
if value.endswith('Z'):
value = value[:-1] + '+00:00'

Copilot uses AI. Check for mistakes.
{%- if 'requirement' in test_elem -%}
{%- for test_req_ref in test_elem.requirement if test_req_ref.identifier == req_ref.identifier -%}
{%- set ns_tests.has_tests = true %}
- **{{ test_id }}**: {{ utils.reencode(utils.strip_bats_syntax(test_elem['custom:title'])) | capitalize }}
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using Jinja’s capitalize will lowercase the remainder of the string, which will unintentionally change proper nouns/acronyms in test titles (e.g., "Windows" → "windows"). Consider removing capitalize or using a transformation that doesn’t alter the rest of the casing.

Suggested change
- **{{ test_id }}**: {{ utils.reencode(utils.strip_bats_syntax(test_elem['custom:title'])) | capitalize }}
- **{{ test_id }}**: {{ utils.reencode(utils.strip_bats_syntax(test_elem['custom:title'])) }}

Copilot uses AI. Check for mistakes.
{%- if ns_tests.test_list -%}
{%- for test_id in ns_tests.test_list %}
{%- set test_name = utils.strip_bats_syntax(sbdl[test_id]['custom:title']) | trim %}
| {{ utils.display_short(req_name) }} | {{ test_id }}: {{ utils.display_short(test_name) | capitalize }} | Traced |
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using Jinja’s capitalize will lowercase the remainder of the string, which will unintentionally change proper nouns/acronyms in test titles (e.g., "Windows" → "windows"). Consider removing capitalize or using a casing function that preserves existing capitalization.

Suggested change
| {{ utils.display_short(req_name) }} | {{ test_id }}: {{ utils.display_short(test_name) | capitalize }} | Traced |
| {{ utils.display_short(req_name) }} | {{ test_id }}: {{ utils.display_short(test_name) }} | Traced |

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants