Conversation
✅
|
| 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 | |
| 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:
- oxsecurity/megalinter/flavors/salesforce@v9.4.0 (58 linters)
- oxsecurity/megalinter/flavors/javascript@v9.4.0 (61 linters)
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

Show us your support by starring ⭐ the repository
📦 Container Size AnalysisNote Comparing 📈 Size Comparison Table
|
There was a problem hiding this comment.
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. |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Ron <45816308+rjaegers@users.noreply.github.com>
📦 Container Size AnalysisNote Comparing 📈 Size Comparison Table
|
📦 Container Size AnalysisNote Comparing 📈 Size Comparison Table
|
| 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}" | ||
| } |
There was a problem hiding this comment.
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).
| with: | ||
| name: documents | ||
| path: | | ||
| *.sbdl | ||
| !document-control.sbdl | ||
| retention-days: 2 |
There was a problem hiding this comment.
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.
| - name: Upload documents to release | ||
| run: | | ||
| set -Eeuo pipefail | ||
| gh release upload "${REF_NAME}" ./*.pdf | ||
| gh release upload "${REF_NAME}" ./*.pdf ./*.sbdl |
There was a problem hiding this comment.
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.
Daniël Schenk (danielschenk)
left a comment
There was a problem hiding this comment.
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 } |
There was a problem hiding this comment.
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)
There was a problem hiding this comment.
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.
|
| @@ -0,0 +1,6 @@ | |||
| import datetime | |||
|
|
|||
| def strftime_filter(value, fmt): | |||
There was a problem hiding this comment.
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.
| def strftime_filter(value, fmt): | |
| def strftime_filter(value, fmt): | |
| if value.endswith('Z'): | |
| value = value[:-1] + '+00:00' |
| {%- 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 }} |
There was a problem hiding this comment.
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.
| - **{{ 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'])) }} |
| {%- 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 | |
There was a problem hiding this comment.
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.
| | {{ 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 | |



🚀 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:
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]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:
wc-document-generation.yml) to accept anis-releaseinput, 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]release-build.yml) to pass theis-release: trueflag and ensure all generated.pdfand.sbdlfiles are uploaded to the release. [1] [2]Test traceability enhancements:
integration-tests.batswith 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