Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
15743fc
feat(traceability): add coverage checker and reporting docs
FScholPer Apr 13, 2026
58ae80d
add coverage check
FScholPer Apr 13, 2026
4e9c60e
fix lint
FScholPer Apr 13, 2026
0ec5217
refactoring the coverage, metrics and dashboard
FScholPer Apr 14, 2026
764da8d
add generic filters
FScholPer Apr 14, 2026
ec2e994
Update src/extensions/score_metamodel/traceability_metrics.py
FScholPer Apr 16, 2026
a364257
Apply suggestions from code review
FScholPer Apr 17, 2026
ecd1caf
readd genai headers
FScholPer Apr 17, 2026
313ff9b
Merge branch 'main' into score-2774-traceability
FScholPer Apr 20, 2026
6287c69
changed to new json structure
FScholPer Apr 20, 2026
5876e16
Merge branch 'main' into score-2774-traceability
FScholPer Apr 27, 2026
b4ec35b
removed md and refactored gate
FScholPer Apr 27, 2026
7ce6835
Added the uml from the comment
FScholPer Apr 27, 2026
a6029b7
refactoring to the new json approach and refactoring of dashboards fo…
FScholPer Apr 27, 2026
a93233b
lint fix
FScholPer Apr 27, 2026
6e1e0aa
fixed liniting issues
FScholPer Apr 27, 2026
0d8d75c
Merge branch 'main' into score-2774-traceability
FScholPer Apr 27, 2026
c8e4058
improved description
FScholPer Apr 27, 2026
4437580
fix warnings
FScholPer Apr 27, 2026
243aa21
fix docs build
FScholPer Apr 28, 2026
cf19ba8
fixed review comments(removed coverage py to utilize extension)
FScholPer Apr 28, 2026
2b8aace
review comment fixes
FScholPer Apr 28, 2026
f137f03
replaced for loop by list
FScholPer Apr 28, 2026
e927339
fix linting
FScholPer Apr 28, 2026
a81e4ff
Merge branch 'main' into score-2774-traceability
FScholPer Apr 30, 2026
ef1f5ca
review fixes
FScholPer May 11, 2026
7745cce
added example
FScholPer May 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Commonly used for local settings and secrets
# ╓ ╖
# ║ Some portions generated by Github Copilot ║
# ╙ ╜
.env

# Bazel
Expand Down Expand Up @@ -26,3 +29,4 @@ __pycache__/

# bug: This file is created in repo root on test discovery.
/consumer_test.log
.clwb
Comment thread
FScholPer marked this conversation as resolved.
4 changes: 3 additions & 1 deletion docs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -293,10 +293,12 @@ def docs(source_dir = "docs", data = [], deps = [], scan_code = [], known_good =
"--jobs",
"auto",
"--define=external_needs_source=" + str(data),
"--define=score_sourcelinks_json=$(location :sourcelinks_json)",
"--define=score_source_code_linker_plain_links=1",
],
formats = ["needs"],
sphinx = ":sphinx_build",
tools = data,
tools = data + [":sourcelinks_json"],
visibility = ["//visibility:public"],
# Persistent workers cause stale symlinks after dependency version
# changes, corrupting the Bazel cache.
Expand Down
211 changes: 211 additions & 0 deletions docs/how-to/dashboards_and_quality_gates.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
..
# *******************************************************************************
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************

Build Dashboards and Quality Gates
==================================

Use this guide in repositories that consume docs-as-code as a Bazel
dependency.

Goals:

1. Publish traceability dashboards from repository needs.
2. Export machine-readable metrics.
3. Enforce CI thresholds with ``traceability_gate``.

What You Get
------------

With the ``docs(...)`` macro and ``score_metamodel`` extension enabled, your
repository can:

- build an HTML dashboard from its own Sphinx needs,
- include external needs from other repositories when desired,
- export ``needs.json`` and ``metrics.json`` for machine-readable reporting,
- gate CI on traceability thresholds via ``traceability_gate``.

Typical Setup
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.

this repeats quite a lot of the setup documentation. Let's refer to :ref:setup. instead of repeating the entire setup.

-------------

1. Add docs-as-code as a Bazel dependency as described in :ref:`setup`.
2. Define the documentation target via the ``docs(...)`` macro.
3. Provide process or upstream needs via the ``data`` argument when cross-repo
traceability is required.
4. Provide implementation sources via ``scan_code`` so ``source_code_link`` can
be generated.
5. Add test metadata so ``testlink`` and testcase needs can be generated.

Minimal Consumer Example
------------------------

In ``BUILD``:

.. code-block:: starlark

load("@score_docs_as_code//:docs.bzl", "docs")

filegroup(
name = "module_sources",
srcs = glob([
"src/**/*.py",
"src/**/*.cpp",
"src/**/*.h",
"src/**/*.rs",
]),
)

docs(
source_dir = "docs",
data = [
"@score_process//:needs_json",
],
scan_code = [":module_sources"],
)

In ``docs/conf.py``:

.. code-block:: python

score_metamodel_requirement_types = "feat_req,comp_req,aou_req"
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.

requirements types are already flagged in metamodel as such

score_metamodel_include_external_needs = False
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.

naming it x and explaining that it does y seems complicated ;-)
Let's name it aggregate_traceability_across_dependencies


Use ``score_metamodel_include_external_needs = True`` only in repositories that
Comment thread
FScholPer marked this conversation as resolved.
intentionally aggregate traceability across dependencies, such as integration
repositories.

Configuration split:

**Policy (conf.py):** What needs to filter and whether to aggregate externals.

**Wiring (BUILD):** Which dependencies to pull and how the build executes.

Example:

.. code-block:: python

# docs/conf.py — policy
score_metamodel_requirement_types = "feat_req,comp_req" # What types to include
score_metamodel_include_external_needs = False # Aggregate or not

.. code-block:: starlark

# BUILD — wiring
docs(
source_dir = "docs",
data = [
"@score_process//:needs_json", # Which external sources to bring in
],
scan_code = [":module_sources"], # Which source files to scan
)

Building the Dashboard
----------------------

Run:

.. code-block:: bash

bazel run //:docs

This produces the HTML output.

Run:

.. code-block:: bash

bazel build //:needs_json

In this setup, the documentation build writes ``metrics.json`` via
``score_metamodel``, and the ``needs_json`` artifact contains:

- ``bazel-bin/needs_json/_build/needs/needs.json``
- ``bazel-bin/needs_json/_build/needs/metrics.json``
Comment thread
FScholPer marked this conversation as resolved.

The dashboard charts and the CI gate both use the same computed metrics.

Inputs for Linkage Metrics
--------------------------

To get meaningful dashboard and gate values, consumer repositories typically
need three inputs:

1. Requirement and architecture needs in the documentation itself.
2. Source code references via :doc:`source_to_doc_links`.
3. Test metadata via :doc:`test_to_doc_links`.

If one of those inputs is missing, the related chart or gate metric will remain
empty or low.

Choosing Local vs Aggregated Views
----------------------------------

There are two common modes:

**Module repository**

- Set ``score_metamodel_include_external_needs = False``.
- Gate only on the needs owned by the repository itself.
- Use this for per-module implementation progress and traceability.

**Integration repository**

- Set ``score_metamodel_include_external_needs = True``.
- Aggregate requirements across module dependencies when that is the intended
repository purpose.
- Use this for system or integration-level dashboards.

CI Quality Gate
---------------

After building ``//:needs_json``, run the gate on the exported metrics:
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.

After building/running any docs command (i.e. bazel build //:needs_json or bazel run //:docs_verify are the fastest ones).


.. code-block:: bash

bazel run @score_docs_as_code//scripts_bazel:traceability_gate -- \
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.

let's hide scripts_bazel from this command

--metrics-json bazel-bin/needs_json/_build/needs/metrics.json \
Comment thread
FScholPer marked this conversation as resolved.
--min-req-code 70 \
--min-req-test 70 \
--min-req-fully-linked 60 \
--min-tests-linked 70

In CI, wire targets through Bazel dependencies so test execution and
``needs_json`` generation happen before the gate target.

In larger repositories, define a dedicated wrapper target for your standard
gate thresholds so CI calls a single Bazel target.

Useful flags:

- ``--require-all-links`` for strict 100 percent gating
- ``--fail-on-broken-test-refs`` to fail when testcase references point to
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.

isnt that always the case, and not "disableable"?

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.

found the code change. I would not add this?! We also don't have a flag to ignore broken requriements -> requirements links, so why should we ignore broken test -> requirements links?

unknown requirement IDs

Recommended Rollout
-------------------

For a new consumer repository:

1. Start with local-only metrics.
2. Enable ``scan_code`` and verify ``source_code_link`` coverage first.
3. Add test metadata and verify ``testlink`` coverage.
4. Introduce modest thresholds in CI.
5. Raise thresholds over time as the repository matures.

Related Guides
--------------

- :ref:`setup`
- :doc:`other_modules`
- :doc:`source_to_doc_links`
- :doc:`test_to_doc_links`
3 changes: 3 additions & 0 deletions docs/how-to/get_started.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,6 @@ In an existing S-CORE repository, you can build the documentation using Bazel:
Open the generated site at ``_build/index.html`` in your browser.

In a new S-CORE repository, see :ref:`setup`.

After the initial setup, continue with :doc:`dashboards_and_quality_gates` to
build a repository dashboard and enforce CI quality gates.
1 change: 1 addition & 0 deletions docs/how-to/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Here you find practical guides on how to use docs-as-code.
write_docs
faq
other_modules
dashboards_and_quality_gates
source_to_doc_links
test_to_doc_links
add_extensions
6 changes: 6 additions & 0 deletions docs/how-to/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,9 @@ bazel run //:docs
#### 6. Access your documentation at

`/_build/index.html`

## Next Step

After basic setup, see {doc}`dashboards_and_quality_gates` to configure
traceability dashboards, export `metrics.json`, and enforce CI quality gates in
consumer repositories.
8 changes: 8 additions & 0 deletions docs/how-to/test_to_doc_links.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************

# Assisted-by: GitHub Copilot

Reference Docs in Tests
=======================

Expand Down Expand Up @@ -53,3 +55,9 @@ Limitations
- Partial properties will lead to no Testlink creation.
If you want a test to be linked, please ensure all requirement properties are provided.
- Tests must be executed by Bazel first so `test.xml` files exist.

Related
-------

For end-to-end dashboard and CI threshold setup, see
:doc:`dashboards_and_quality_gates`.
Loading
Loading