-
Notifications
You must be signed in to change notification settings - Fork 24
feat: traceability metrics #484
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
FScholPer
wants to merge
33
commits into
main
Choose a base branch
from
score-2774-traceability
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
33 commits
Select commit
Hold shift + click to select a range
15743fc
feat(traceability): add coverage checker and reporting docs
FScholPer 58ae80d
add coverage check
FScholPer 4e9c60e
fix lint
FScholPer 0ec5217
refactoring the coverage, metrics and dashboard
FScholPer 764da8d
add generic filters
FScholPer ec2e994
Update src/extensions/score_metamodel/traceability_metrics.py
FScholPer a364257
Apply suggestions from code review
FScholPer ecd1caf
readd genai headers
FScholPer 313ff9b
Merge branch 'main' into score-2774-traceability
FScholPer 6287c69
changed to new json structure
FScholPer 5876e16
Merge branch 'main' into score-2774-traceability
FScholPer b4ec35b
removed md and refactored gate
FScholPer 7ce6835
Added the uml from the comment
FScholPer a6029b7
refactoring to the new json approach and refactoring of dashboards fo…
FScholPer a93233b
lint fix
FScholPer 6e1e0aa
fixed liniting issues
FScholPer 0d8d75c
Merge branch 'main' into score-2774-traceability
FScholPer c8e4058
improved description
FScholPer 4437580
fix warnings
FScholPer 243aa21
fix docs build
FScholPer cf19ba8
fixed review comments(removed coverage py to utilize extension)
FScholPer 2b8aace
review comment fixes
FScholPer f137f03
replaced for loop by list
FScholPer e927339
fix linting
FScholPer a81e4ff
Merge branch 'main' into score-2774-traceability
FScholPer ef1f5ca
review fixes
FScholPer 7745cce
added example
FScholPer 0a1a885
Update docs/reference/commands.md
FScholPer 15d8e91
fix: address PR #484 review comments (dashboards, implementation_stat…
FScholPer 5e49964
Merge origin/main into score-2774-traceability (resolve docs.bzl conf…
FScholPer 56779d3
fix: remove undocumented --fail-on-broken-test-refs flag from docs
FScholPer 5403782
format fix
FScholPer fcde178
Merge branch 'main' into score-2774-traceability
FScholPer File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,142 @@ | ||
| .. | ||
| # ******************************************************************************* | ||
| # 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 | ||
|
FScholPer marked this conversation as resolved.
|
||
| ------------- | ||
|
|
||
| For details, see :ref:`setup`. | ||
|
|
||
| Minimal Configuration Example | ||
| ----------------------------- | ||
|
|
||
| In ``docs/conf.py``: | ||
|
|
||
| .. code-block:: python | ||
|
|
||
| score_metamodel_requirement_types = "feat_req,comp_req,aou_req" | ||
|
FScholPer marked this conversation as resolved.
|
||
| score_metamodel_include_external_needs = False | ||
|
FScholPer marked this conversation as resolved.
|
||
|
|
||
| Use ``score_metamodel_include_external_needs = True`` (aggregate_traceability_across_dependencies) | ||
| only in repositories that intentionally aggregate requirements across module dependencies, such as | ||
| integration repositories. Use ``False`` for module repositories to gate only on local traceability. | ||
|
|
||
| Building the Dashboard | ||
| ---------------------- | ||
|
|
||
| After building/running any docs command (i.e. ``bazel build //:needs_json`` or ``bazel run //:docs_verify`` are the fastest): | ||
|
|
||
| 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`` | ||
|
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: | ||
|
FScholPer marked this conversation as resolved.
|
||
|
|
||
| .. code-block:: bash | ||
|
|
||
| bazel run //:docs && \ | ||
| bazel run //:traceability_gate -- \ | ||
| --metrics-json bazel-bin/needs_json/_build/needs/metrics.json \ | ||
|
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 | ||
|
|
||
| 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` | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.