From 51a7ff3b7001825b75b0fb6729fd0d8e93d5bc50 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Wed, 27 May 2026 11:05:03 +0000 Subject: [PATCH 1/7] improve ref integration documentation --- .github/skills/overall-status/SKILL.md | 925 ++++++++++++ .github/workflows/test_and_docs.yml | 12 +- docs/_assets/custom.css | 157 +++ docs/_assets/pi_timeline_2026.drawio.svg | 299 ++++ docs/_assets/sw_arch_v_1.drawio.svg | 1253 +++++++++++++++++ docs/conf.py | 35 + docs/index.rst | 81 +- .../integration_process.rst | 16 + docs/needs_filters.py | 139 ++ docs/process_methods_tools.rst | 24 + docs/s_core_v_1/index.rst | 23 + .../releases}/_assets/architecture.drawio.svg | 0 .../_assets/architecture_0_6.drawio.svg | 0 .../score_process_area_overview.drawio.svg | 0 .../releases}/index.rst | 0 .../release_note_score_v0_5_alpha.rst | 0 .../release_note_score_v0_5_beta.rst | 0 .../releases}/release_note_score_v0_6.rst | 0 .../releases}/release_note_score_v0_7.rst | 0 docs/s_core_v_1/releases/releases.rst | 22 + docs/s_core_v_1/roadmap/overall_status.rst | 859 +++++++++++ docs/s_core_v_1/roadmap/pi1.rst | 80 ++ docs/s_core_v_1/roadmap/pi2.rst | 38 + docs/s_core_v_1/roadmap/pi3.rst | 40 + docs/s_core_v_1/roadmap/pi4.rst | 40 + docs/s_core_v_1/roadmap/roadmap.rst | 192 +++ docs/sw_components.rst | 26 + .../platform_verification_report.rst | 1 + scripts/quality_runners.py | 2 +- 29 files changed, 4226 insertions(+), 38 deletions(-) create mode 100644 .github/skills/overall-status/SKILL.md create mode 100644 docs/_assets/custom.css create mode 100644 docs/_assets/pi_timeline_2026.drawio.svg create mode 100644 docs/_assets/sw_arch_v_1.drawio.svg create mode 100644 docs/integration_process/integration_process.rst create mode 100644 docs/needs_filters.py create mode 100644 docs/process_methods_tools.rst create mode 100644 docs/s_core_v_1/index.rst rename docs/{score_releases => s_core_v_1/releases}/_assets/architecture.drawio.svg (100%) rename docs/{score_releases => s_core_v_1/releases}/_assets/architecture_0_6.drawio.svg (100%) rename docs/{score_releases => s_core_v_1/releases}/_assets/score_process_area_overview.drawio.svg (100%) rename docs/{score_releases => s_core_v_1/releases}/index.rst (100%) rename docs/{score_releases => s_core_v_1/releases}/release_note_score_v0_5_alpha.rst (100%) rename docs/{score_releases => s_core_v_1/releases}/release_note_score_v0_5_beta.rst (100%) rename docs/{score_releases => s_core_v_1/releases}/release_note_score_v0_6.rst (100%) rename docs/{score_releases => s_core_v_1/releases}/release_note_score_v0_7.rst (100%) create mode 100644 docs/s_core_v_1/releases/releases.rst create mode 100644 docs/s_core_v_1/roadmap/overall_status.rst create mode 100644 docs/s_core_v_1/roadmap/pi1.rst create mode 100644 docs/s_core_v_1/roadmap/pi2.rst create mode 100644 docs/s_core_v_1/roadmap/pi3.rst create mode 100644 docs/s_core_v_1/roadmap/pi4.rst create mode 100644 docs/s_core_v_1/roadmap/roadmap.rst create mode 100644 docs/sw_components.rst diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md new file mode 100644 index 00000000000..0439c00ade7 --- /dev/null +++ b/.github/skills/overall-status/SKILL.md @@ -0,0 +1,925 @@ +--- +name: overall-status +description: "Update the Feature and Process Status table in docs/s_core_v_1/roadmap/overall_status.rst. Use when: checking module status, updating feature status tracker, refreshing work product status, deriving completion status from eclipse-score GitHub repos for Baselibs, Communication, Logging, Orchestrator, Persistency, Time, Config Management, Lifecycle, Security/Crypto." +argument-hint: "optional: module name or 'all'" +--- + +# Feature and Process Status Tracker + +Derives and updates the completion status table in +`docs/s_core_v_1/roadmap/overall_status.rst` by querying the live eclipse-score GitHub +repositories. + +> **Navigation (updated 2026-05)**: `overall_status.rst` is linked from +> `docs/s_core_v_1/roadmap/roadmap.rst` under the **Status & Goals** toctree section. +> The file was moved from `docs/s_core_v_1/status/` to `docs/s_core_v_1/roadmap/`. +> The `status/` folder has been removed. The roadmap itself is split into sub-pages: +> `roadmap.rst`, `pi1.rst` – `pi4.rst`, `overall_status.rst`, all under `docs/s_core_v_1/roadmap/`. + +## When to Use + +- Refresh the tracker table with current data +- After a sprint/release to check progress +- When a module team reports a deliverable is done + +## RST File Structure + +`docs/s_core_v_1/roadmap/overall_status.rst` consists of a file header followed by 5 +Process Area sections. Each section has this exact pattern: + +```rst +Process Area N β€” +*********************** + + + +See :ref:``. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and '' in tags + type == 'gd_req' and is_external == False and status == 'draft' and '' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and '' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and '' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area() + + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status() + +.. rubric:: Implementation status: πŸ”„ NN% (X/Y deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **** + - **** + + * - + - + ... +``` + +**Important rules:** +- `.. needpie::` does **NOT** support a `:title:` option β€” omit it entirely (causes build errors) +- The pie chart table uses CSS class `compact-overview-table`; each cell needs `.. rst-class:: small-pie-cell` before its `.. needpie::` +- **Pie chart sizing**: `custom.css` sets `compact-overview-table` to `width: 100%; table-layout: fixed` with each column at `width: 33%`. The generated `` elements have their sphinx-needs fixed pixel sizes overridden via `width: 100% !important; max-width: 100% !important; height: auto !important` (selectors: `.small-pie-cell img`, `.compact-overview-table td img`, `img[id^="needpie-"]`). **Do NOT add explicit pixel sizes** β€” this causes horizontal scrolling. +- The module tracker table uses CSS class `module-phase-tracker-table` +- Both `.. rubric::` directives are plain inline text β€” NOT RST section headings +- The `.. rubric:: Implementation status:` line is computed (see Step 4 in Procedure) and placed directly before the module tracker table +- **Formatting rule for table cells** β€” applies to ALL process areas: + - **First line**: status label only (emoji + keyword), e.g. `βœ… 0 findings`, `βœ… Available`, `πŸ”„ Configured`, `πŸ”„ **C0:** 92.3%`, `❌ Open` + - **Further lines** (test counts, links, C1/Rust coverage, comments): each on its own RST **line-block** (`| `) entry after a blank line. Examples: + ```rst + - βœ… Available + + | (4,663 tests) + ``` + ```rst + - πŸ”„ + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% + ``` + ```rst + - βœ… 0 findings + + | `clang-tidy `__ + ``` + ```rst + - βœ… Available + + | (3 tests) + | `reference_integration `__ (cross-module) + ``` + ```rst + - πŸ”„ Configured + + | `clang-tidy `__ + | `CodeQL/MISRA `__ + | but no CI enforcement workflow yet + ``` + ```rst + - πŸ”„ 0% (0/92) + + | `requirements `__ + | (all 92 entries ``:status: invalid``) + ``` + - This applies equally to: test counts in Unit/Integration Test cells, checklist links in Inspection cells, C1/Rust coverage in Coverage cells, CI workflow links in Static/Dynamic Analysis cells, cross-module repo links, and parenthetical notes after any link. +- When referencing `:status: invalid` inside RST text (e.g. lifecycle notes), always use **double backticks**: `` ``:status: invalid`` `` β€” single backticks are RST hyperlink syntax and will cause a parse warning. + +| Process Area | sphinx-needs tag | +|---|---| +| PA 1 β€” Change Management | `change_management` | +| PA 2 β€” Requirements Engineering | `requirements_engineering` | +| PA 3 β€” Architecture Design | `architecture_design` | +| PA 4 β€” Implementation | `implementation` | +| PA 5 β€” Verification | `verification` | + +The pie chart diagrams are computed live by sphinx-needs at build time β€” they **never need manual updates**. Only update the filter `` when adding a new Process Area. + +## Modules and Repos + +> **IMPORTANT**: Each module has its own dedicated repo in the `eclipse-score` GitHub org AND content in `eclipse-score/score`. **Always check BOTH** the module's own repo and `eclipse-score/score` when counting needs elements. Never rely on `eclipse-score/score` alone. + +> **VERSION PINNING**: Always use the commit hash pinned in `known_good.json` (column `known_good.json key`) β€” **never use `main`** for source repos. This ensures data matches exactly the versions that `reference_integration` is currently testing against. For modules not listed in `known_good.json` (marked `β€”`), fall back to `main`. + +| Module | `known_good.json` key | Own Repo (always check!) | Docs in `eclipse-score/score` | +|---|---|---|---| +| Baselibs | `score_baselibs` | `eclipse-score/baselibs` (no sphinx-needs RST so far) | `docs/modules/baselibs/**`, `docs/features/baselibs/docs` | +| Communication | `score_communication` | `eclipse-score/communication` (no sphinx-needs RST so far) | `docs/modules/communication/**`, `docs/features/communication/docs` | +| Logging | `score_logging` | `eclipse-score/logging` (no sphinx-needs RST so far) | `docs/modules/logging/**`, `docs/features/analysis-infra/logging/docs` | +| Orchestrator | `score_orchestrator` | `eclipse-score/orchestrator` | `docs/modules/orchestrator/**`, `docs/features/orchestration` | +| Persistency | `score_persistency` | `eclipse-score/persistency` β€” has `docs/persistency/kvs/` with comp_req/comp_arc βœ… | `docs/features/persistency` | +| Time | `β€”` (not in known_good) | `eclipse-score/inc_time` (no sphinx-needs RST so far) | `docs/features/time/docs` | +| Config Management | `β€”` (not in known_good) | `eclipse-score/config_management` (no sphinx-needs RST so far) | `docs/features/configuration` | +| Lifecycle | `score_lifecycle_health` | `eclipse-score/lifecycle` β€” has `docs/module/health_monitor/` (comp_arc_sta/dyn valid=15/16), `detailed_design/` (dd_sta/dyn valid=1/2), `tests/integration/` | `docs/modules/lifecycle/index.rst`, `docs/features/lifecycle/**` β€” Feature Arch in `docs/features/lifecycle/architecture/` (health_monitor.rst: 19v/2inv, launch_manager.rst: 10v, launch_manager_configuration.rst: 1v β†’ 30/32 valid) | +| Security/Crypto | `β€”` (not in known_good) | `eclipse-score/inc_security_crypto` β€” `src/` has no implementation yet; `docs/index.rst` with stkh_req | `docs/features/security_crypto/**` | + +> **`eclipse-score/score` pinned ref**: Look up key `score_platform` in the `tooling` section of `known_good.json`. + +**How to search all repos for a module:** +```python +for repo in ["eclipse-score/score", "eclipse-score/"]: + files = [p for p in get_tree(repo) if p.endswith(".rst") and "" in p] + for f in files: + v, t = count_needs_in_file(repo, f) +``` + +## Status Format + +- **``βœ… Available (valid/total)``** β€” Artifact complete and approved: **100% of needs elements are `valid`** (valid == total). Always add the count in parentheses for requirements and architecture rows. +- **``πŸ”„ NN% (valid/total)``** β€” In Progress: at least one element is `valid` but not all. Always show count. +- **``❌ Open``** β€” Not started, not found, or 0% valid +- For binary rows (Code, SW Development Plan, Unit Tests, CR approved): no count needed, just ``βœ… Available`` or ``❌ Open`` + +**Percentage calculation per deliverable:** +- **Feature Req / Feature Arch**: count individual needs elements (e.g. `.. feat_req::`, `.. feat_arc::`) inside the doc with `:status: valid`; `valid / total`; 100% (valid == total) β†’ βœ… Available +- **Comp. Req / Comp. Arch**: count individual needs elements across all component docs; `valid / total`; 100% (valid == total) β†’ βœ… Available +- **Req. Inspection / Arch. Inspection**: `valid / total` across all checklists (feature + component combined); 100% (valid == total) β†’ βœ… Available +- **Detailed Design + Code / Impl. Inspection**: `valid / total` across all `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files +- **Binary deliverables** (CR approved, SW Dev Plan, Unit Tests, Integration Tests, Verification Report): no percentage + +## Status Criteria (per Deliverable) + +### Process Area 1 β€” CR approved +- **βœ… Available**: A closed GitHub Issue with "Feature Request" or "Contribution Request" for the module exists in `eclipse-score/score` +- **❌ Open**: No such issue found + +Known closed CRs: Baselibs (#549), Communication (#69), Logging (#68), Orchestrator (#273), Persistency (#95), Time (#910), Config Management (#754, #1764), Lifecycle (#909), Security/Crypto (#905) + +### Process Area 2 β€” Feature Requirements +- **βœ… Available**: 100% of individual needs elements (e.g. `.. feat_req::`) inside the requirements doc have `:status: valid` +- **πŸ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. **This includes `πŸ”„ 0% (0/N)` when N elements exist but ALL are `:status: invalid` β€” do NOT use `❌ Open` in this case.** +- **❌ Open**: no requirements file found, OR zero needs elements found + +### Process Area 2 β€” Component Requirements +- **βœ… Available**: 100% of all individual needs elements across all component requirements `.rst` files have `:status: valid` +- **πŸ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. +- **❌ Open**: no component requirement files found, OR all found files contain zero `.. comp_req::` directives + +### Process Area 2 β€” Req. Inspection +- **βœ… Available**: 100% of all `chklst_req_inspection.rst` files (feature + component level) have `:status: valid` +- **πŸ”„ In Progress**: checklists exist but not all are `valid` +- **❌ Open**: no checklists found + +### PA3 RST structure + +```rst +Process Area 3 β€” Architecture Design +************************************* + +Feature and component architecture must be designed and inspected. +Work products: ``wp__feature_arch``, ``wp__component_arch``, ``wp__sw_arch_verification``. +See :ref:`arch_workflow`. +``` + +Columns: **Feature Architecture**, **Component Architecture**, **Arch. Inspection** + +### PA4 RST structure + +```rst +Process Area 4 β€” Implementation +******************************** + +Source code and detailed design must be implemented and inspected. +Work products: ``wp__sw_development_plan``, ``wp__sw_implementation``, ``wp__sw_implementation_inspection``. +See :ref:`workflow_implementation`. +``` + +Columns: **SW Development Plan**, **Code**, **Detailed Design**, **Impl. Inspection** + +### PA5 RST structure + +PA5 has two `.. note::` blocks **before** the `.. rubric:: Implementation status:` line: + +```rst +Process Area 5 β€” Verification +***************************** + +All tests must be implemented and a module verification report must be approved. +Work products: ``wp__verification_sw_unit_test``, ``wp__verification_comp_int_test``, ``wp__verification_feat_int_test``, ``wp__verification_module_ver_report``. +See :ref:`verification_workflows`. +``` + +```rst +.. note:: + + **C0/C1 Coverage** data is sourced from the `reference_integration <...>`__ + CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). + C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. + Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) or with + disabled coverage extraction (Orchestrator) show ❌ Open. + +.. note:: + + **Static Code Analysis** is tracked per module via dedicated CI workflows ... + + **Dynamic Code Analysis** is tracked via sanitizer CI workflows ... +``` + +Columns: **Unit Tests**, **C0/C1 Coverage**, **Comp. Integration Tests**, **Feature Integration Tests**, **Static Code Analysis**, **Dynamic Code Analysis**, **Module Verification Report**, **Platform Verification Report** + +**Cross-module integration test format** (when tests live in `reference_integration`, not the module's own repo): +```rst + - βœ… Available + + | (3 tests) + | `reference_integration `__ (cross-module) +``` + +**Unit Tests and Integration Tests with known count:** +```rst + - βœ… Available + + | (N tests) +``` +- **βœ… Available**: 100% of individual needs elements (e.g. `.. feat_arc::`) inside the architecture doc have `:status: valid` +- **πŸ”„ NN%**: elements exist but not all are `valid` +- **❌ Open**: no architecture file found, OR zero `.. feat_arc::` directives found + +### Process Area 3 β€” Component Architecture +- **βœ… Available**: 100% of all individual needs elements across all component architecture files have `:status: valid` +- **πŸ”„ NN%**: elements exist but not all are `valid` +- **❌ Open**: no component architecture docs containing directives found + +### Process Area 3 β€” Arch. Inspection +- **βœ… Available**: 100% of all architecture checklists have `:status: valid` +- **πŸ”„ In Progress**: checklists exist but not all are `valid` +- **❌ Open**: no architecture checklists found + +### Process Area 4 β€” SW Development Plan +- **βœ… Available**: `eclipse-score/score` contains `docs/platform_management_plan/software_development.rst` (project-wide) +- **❌ Open**: file absent + +### Process Area 4 β€” Code +- **βœ… Available**: source files (`.cpp`, `.h`, `.py`, `.rs` etc.) exist in the module's own repo outside of `docs/` +- **❌ Open**: no source files found + +**Always include the LOC count** in the cell using the format `βœ… Available (~X,XXX LOC) \`repo \`__`. + +**How to count LOC:** +Count all lines (including blank/comment lines) across all source files (`.cpp`, `.h`, `.c`, `.rs`, `.py`) in the module's own repo. Round to the nearest 100. + +```python +def count_loc(repo, tree, ref="main"): + src_files = [p for p in tree if + any(p.endswith(ext) for ext in ('.cpp', '.h', '.c', '.rs', '.py')) + and not p.startswith('docs/')] + total = 0 + for f in src_files: + content = fetch_file(repo, f, ref) + total += len(content.split('\n')) + # round to nearest 100 + rounded = round(total / 100) * 100 + print(f" LOC: {total} β†’ ~{rounded:,}") + return rounded +``` + +**RST format:** +```rst + - βœ… Available (~12,500 LOC) `inc_someip_gateway `__ +``` + +### Process Area 4 β€” Detailed Design +- **βœ… Available**: 100% of formal design doc needs elements in `detailed_design/` folders have `:status: valid` +- **πŸ”„ NN%**: design docs exist and at least one element is `valid` but not all +- **❌ Open**: no RST files with actual design directives found + +### Process Area 4 β€” Impl. Inspection +- **βœ… Available**: 100% of `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files have `:status: valid` +- **πŸ”„ In Progress**: checklists exist but not all are `valid` +- **❌ Open**: no impl inspection checklists found + +### Process Area 5 β€” Unit Tests +- **βœ… Available**: Source repo contains `_test.cpp`, `_test.py`, or `/test(s)/` directories (excluding docs/) +- **❌ Open**: no test files found + +### Process Area 5 β€” C0/C1 Coverage + +Coverage data is sourced from the `reference_integration` CI (`Code Quality & Documentation` workflow, job `test_and_docs`). +It runs `bazel coverage --config=ferrocene-coverage` per module and extracts C0 (line) and C1 (branch) coverage via `genhtml`/`lcov` for C++ and `cargo llvm-cov` for Rust. + +**Status criteria:** +- **βœ… Available**: C0 β‰₯ 100% AND C1 β‰₯ 100% +- **πŸ”„ C0: XX% / C1: YY%**: Coverage data exists (regardless of %) +- **❌ Open**: Module not in reference_integration CI, or coverage extraction disabled + +**How to fetch the latest values:** +```bash +# Find the latest successful run of the "Code Quality & Documentation" workflow (ID 234977097): +gh api "repos/eclipse-score/reference_integration/actions/workflows/234977097/runs?per_page=10" \ + --jq '.workflow_runs[] | select(.conclusion=="success") | {id: .id, created_at: .created_at}' | head -1 + +# Get the job ID for test_and_docs from that run: +RUN_ID= +JOB_ID=$(gh api "repos/eclipse-score/reference_integration/actions/runs/$RUN_ID/jobs" \ + --jq '.jobs[] | select(.name=="test_and_docs") | .id') + +# Extract the coverage summary from the job log: +gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ + | grep -E "COVERAGE ANALYSIS SUMMARY|'score_.*_cpp'|'score_.*_rust'|lines|functions|branches" \ + | grep -A50 "COVERAGE ANALYSIS SUMMARY" +``` + +**Module β†’ CI key mapping:** +| Tracker Module | CI key (CPP) | CI key (Rust) | +|---|---|---| +| Baselibs | `score_baselibs_cpp` | `score_baselibs_rust_rust` | +| Communication | `score_communication_cpp` | β€” (disabled) | +| Logging | `score_logging_cpp` | `score_logging_rust` | +| Orchestrator | β€” (disabled) | β€” (disabled) | +| Persistency | `score_persistency_cpp` | `score_persistency_rust` | +| Time | not in CI | β€” | +| Config Mgmt | not in CI | β€” | +| Lifecycle | `score_lifecycle_health_cpp` | `score_lifecycle_health_rust` | +| Security/Crypto | not in CI | β€” | + +**Format in table (status emoji alone on first line, all coverage metrics as `| ` line-blocks below):** +- CPP + Rust: + ```rst + - πŸ”„ + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% + ``` +- CPP only: + ```rst + - πŸ”„ + + | **C0:** 87.9% + | **C1:** 58.8% (cpp) + ``` +- Not available: `❌ Open` + +### Process Area 5 β€” Comp. Integration Tests + +Look for component-level integration test targets inside the module’s own repository (i.e. tests that are **not** cross-module tests in `reference_integration`). + +**How to find them:** +```bash +# Count test targets or test files with "integration" in their path or name +gh api repos/eclipse-score//git/trees/main?recursive=1 \ + --jq '[.tree[] | select(.path | test("integrat"; "i")) | select(.type=="blob")] | length' +``` + +Alternatively, look for test target names containing `_it_`, `_integration_`, `component_test`, or similar naming patterns. + +**Status criteria:** +- **`βœ… Available (N tests)`**: Component integration tests exist in the module repo. +- **`❌ Open`**: No component integration tests found. + +**RST format:** +```rst + - βœ… Available (9 tests) +``` + +### Process Area 5 β€” Feature Integration Tests +- **πŸ”„ In Progress**: `integration_test_scenarios` or `feature*test*` paths found in source repo +- **❌ Open**: none found + +### Process Area 5 β€” Static Code Analysis + +Static analysis CI exists at two levels: +1. **Per-module CI workflow** β€” zero-tolerance enforcement on `main` (clang-tidy for C++, Clippy for Rust). A passing CI implies 0 open findings. +2. **Central CodeQL** β€” runs in `eclipse-score/reference_integration` via `codeql-multiple-repo-scan.yml`. + +**Status criteria:** +- **`βœ… 0 findings`**: A zero-tolerance CI workflow enforcing clang-tidy or Clippy exists in the module's own repo AND it passes on `main`. Format: + ```rst + - βœ… 0 findings + + | `clang-tidy `__ + ``` +- **`πŸ”„ Configured`**: Static analysis tools are configured in the repo but no CI workflow enforces them on every PR/push. Format: + ```rst + - πŸ”„ Configured + + | `clang-tidy `__ + | `CodeQL/MISRA `__ + | but no CI enforcement workflow yet + ``` +- **`❌ Open`**: No static analysis configuration found at all in the module's own repo. + +**Per-module static analysis status** (as of 2026-05): +| Module | Status | CI / Config link | +|---|---|---| +| Baselibs | `βœ… 0 findings` | [clang-tidy lint.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/lint.yml) | +| Communication | `πŸ”„ Configured` | [static_analysis.bazelrc](https://github.com/eclipse-score/communication/blob/main/quality/static_analysis/static_analysis.bazelrc) + [CodeQL/MISRA](https://github.com/eclipse-score/communication/tree/main/quality/static_analysis) β€” no CI enforcement yet | +| Logging | `❌ Open` | β€” | +| Orchestrator | `βœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/orchestrator/blob/main/.github/workflows/clippy.yml) | +| Persistency | `βœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/persistency/blob/main/.github/workflows/clippy.yml) | +| Time | `❌ Open` | β€” | +| Config Mgmt | `βœ… 0 findings` | [clang-tidy static-analysis.yml](https://github.com/eclipse-score/config_management/blob/main/.github/workflows/static-analysis.yml) | +| Lifecycle | `βœ… 0 findings` | [Clippy lint_clippy.yml](https://github.com/eclipse-score/lifecycle/blob/main/.github/workflows/lint_clippy.yml) | +| Security/Crypto | `❌ Open` | β€” | + +**Central CodeQL** (all modules): +[codeql-multiple-repo-scan.yml](https://github.com/eclipse-score/reference_integration/blob/main/.github/workflows/codeql-multiple-repo-scan.yml) in `reference_integration`. Finding counts require the GitHub Security tab. + +### Process Area 5 β€” Dynamic Code Analysis + +Dynamic analysis is performed via sanitizer CI workflows (ASan/UBSan/LSan for C++, TSan for threading). All zero-tolerance workflows imply 0 sanitizer findings on a passing `main` branch. + +**Status criteria:** +- **`βœ… 0 findings`**: A zero-tolerance sanitizer CI workflow exists in the module's own repo AND it passes on `main`. Format: + ```rst + - βœ… 0 findings + + | `ASan/UBSan/LSan `__ + ``` + For multiple sanitizer workflows: + ```rst + - βœ… 0 findings + + | `ASan/UBSan/LSan `__ + | `TSan `__ + ``` +- **`❌ Open`**: No sanitizer CI workflow found in the module's own repo. + +**Per-module dynamic code analysis status** (as of 2026-05): +| Module | Status | CI link(s) | +|---|---|---| +| Baselibs | `βœ… 0 findings` | [sanitizers_linux.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/sanitizers_linux.yml) β€” ASan+UBSan+LSan | +| Communication | `βœ… 0 findings` | [ASan/UBSan/LSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/address_undefined_behavior_leak_sanitizer.yml), [TSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/thread_sanitizer.yml) | +| Logging | `❌ Open` | β€” | +| Orchestrator | `❌ Open` | β€” | +| Persistency | `❌ Open` | β€” | +| Time | `❌ Open` | β€” | +| Config Mgmt | `❌ Open` | β€” | +| Lifecycle | `❌ Open` | β€” | +| Security/Crypto | `❌ Open` | β€” | + +### Process Area 5 β€” Module Verification Report +- **βœ… Available**: `verification/module_verification_report.rst` exists AND `:status: valid` AND contains actual verification data +- **πŸ”„ In Progress**: file exists with `:status: draft` +- **❌ Open**: file does not exist, OR file is a template placeholder only + +### Process Area 5 β€” Platform Verification Report +The Platform Verification Report (`wp__verification_platform_ver_report`) is a single cross-module document in `eclipse-score/score` at `docs/score_releases/verification/platform_ver_report.rst`. It tracks **feature requirement test coverage** (via `FullyVerifies`/`PartiallyVerifies` links in Feature Integration Tests on `feat_req__...` IDs) and platform-level test results. + +- **βœ… Available**: `docs/score_releases/verification/platform_ver_report.rst` has `:status: valid` AND contains actual verification data +- **πŸ”„ In Progress**: file exists with `:status: draft` +- **❌ Open**: file does not exist, OR is a template placeholder only + +> ⚠️ This column is **not per-module** β€” it is the same document for all modules. Show the same status in every row. + +## Procedure + +### Prerequisites +- `gh` CLI must be authenticated (`gh auth status`) +- Python 3.8+ + +--- + +### Step 0 β€” Read `known_good.json` (MANDATORY FIRST STEP) + +**Never skip this.** All repo queries must use the pinned hash, not `main`. + +```python +import json, base64, subprocess, re + +def gh_raw(api_path, jq="."): + r = subprocess.run(["gh", "api", api_path, "--jq", jq], + capture_output=True, text=True) + assert r.returncode == 0, f"gh api failed: {r.stderr}" + return r.stdout.strip() + +def gh_json_file(api_path): + content_b64 = gh_raw(api_path, ".content") + return json.loads(base64.b64decode(content_b64).decode()) + +known_good = gh_json_file( + "repos/eclipse-score/reference_integration/contents/known_good.json" +) + +def pinned_ref(module_key): + """Return pinned git hash from known_good.json, or 'main' if not tracked. + IMPORTANT: score_platform lives in 'tooling', all others in 'target_sw'.""" + all_mods = { + **known_good["modules"]["target_sw"], + **known_good["modules"]["tooling"], # score_platform is here! + } + entry = all_mods.get(module_key) + return entry["hash"] if entry else "main" + +REFS = { + "score": pinned_ref("score_platform"), # in 'tooling' section! + "baselibs": pinned_ref("score_baselibs"), + "communication": pinned_ref("score_communication"), + "logging": pinned_ref("score_logging"), + "orchestrator": pinned_ref("score_orchestrator"), + "persistency": pinned_ref("score_persistency"), + "lifecycle": pinned_ref("score_lifecycle_health"), + "inc_time": "main", # not in known_good + "config_management": "main", # not in known_good + "inc_security_crypto": "main", # not in known_good +} +# Verify: print all refs and confirm hashes are 40-char SHA1, not "main" for tracked modules +for k, v in REFS.items(): + print(f" {k}: {v}") +``` + +> ⚠️ **Common mistake**: `score_platform` (= `eclipse-score/score`) is in the `tooling` section of `known_good.json`, not `target_sw`. The `pinned_ref()` function above merges both β€” use it exactly as shown. + +--- + +### Step 1 β€” Fetch repo trees (recursive, with pinned ref) + +```python +def get_tree(repo, ref): + """Returns list of all file paths in repo at given ref.""" + result = subprocess.run( + ["gh", "api", f"repos/{repo}/git/trees/{ref}?recursive=1", + "--jq", ".tree[].path"], + capture_output=True, text=True) + if result.returncode != 0: + print(f"WARNING: could not fetch tree for {repo}@{ref}: {result.stderr}") + return [] + paths = [p for p in result.stdout.strip().split("\n") if p] + print(f" {repo}@{ref[:8]}: {len(paths)} files") + return paths + +# Fetch once, reuse for all PA computations: +tree_score = get_tree("eclipse-score/score", REFS["score"]) +tree_baselibs = get_tree("eclipse-score/baselibs", REFS["baselibs"]) +tree_comm = get_tree("eclipse-score/communication", REFS["communication"]) +tree_log = get_tree("eclipse-score/logging", REFS["logging"]) +tree_orch = get_tree("eclipse-score/orchestrator", REFS["orchestrator"]) +tree_pers = get_tree("eclipse-score/persistency", REFS["persistency"]) +tree_life = get_tree("eclipse-score/lifecycle", REFS["lifecycle"]) +tree_time = get_tree("eclipse-score/inc_time", REFS["inc_time"]) +tree_cfg = get_tree("eclipse-score/config_management", REFS["config_management"]) +tree_sec = get_tree("eclipse-score/inc_security_crypto", REFS["inc_security_crypto"]) +``` + +> ⚠️ **Common mistake**: If `get_tree()` returns an empty list due to a network error or wrong ref, all subsequent counts for that module will be 0 and appear as `❌ Open`. **Always print the file count and verify it is > 0 before proceeding.** + +--- + +### Step 2 β€” Count needs elements per file + +```python +def fetch_file(repo, path, ref): + """Fetch raw file content from GitHub. Returns empty string on error.""" + r = subprocess.run( + ["gh", "api", f"repos/{repo}/contents/{path}?ref={ref}", "--jq", ".content"], + capture_output=True, text=True) + if r.returncode != 0 or not r.stdout.strip(): + return "" + return base64.b64decode(r.stdout.strip()).decode(errors="replace") + +def count_needs_status(content): + """Count :status: fields that are INDENTED (i.e. inside a needs directive). + + CRITICAL: Only match lines with leading whitespace before ':status:'. + A top-level ':status: valid' at column 0 is a document-level field, NOT + an individual needs element β€” do NOT count it. + """ + # Matches lines like " :status: valid" (indented) but NOT ":status: valid" (col 0) + statuses = re.findall(r'^\s+:status:\s+(\w+)', content, re.MULTILINE) + valid = sum(1 for s in statuses if s == 'valid') + return valid, len(statuses) + +def count_files(repo, paths, ref, path_filter): + """Aggregate valid/total across all files matching path_filter. + + CRITICAL: path_filter must match ALL relevant files in ALL subfolders. + Use broad filters (e.g. 'architecture') and check the count printed below. + A result of total=0 means NO files were found β€” investigate before reporting ❌ Open. + """ + matched = [p for p in paths if path_filter(p)] + print(f" {repo}: {len(matched)} files match filter") # ALWAYS verify this + total_valid, total_all = 0, 0 + for path in matched: + content = fetch_file(repo, path, ref) + v, t = count_needs_status(content) + if t > 0: + print(f" {path}: {v}v / {t}t") + total_valid += v + total_all += t + return total_valid, total_all +``` + +> ⚠️ **Common mistake (caused Lifecycle PA3 bug)**: Using a filter that only matches top-level index files misses content in subfolders like `docs/features/lifecycle/architecture/health_monitor.rst`. Always use `in path` substring filters, never exact filename matches. **Print the matched file list and verify it is complete.** + +--- + +### Step 3 β€” Derive cell status from counts + +```python +def cell_status(valid, total, label=""): + """Convert valid/total counts to RST cell status string. + + Rules: + total == 0 β†’ ❌ Open (no files found at all β€” verify tree was non-empty!) + valid == total > 0 β†’ βœ… Available (valid/total) + 0 < valid < total β†’ πŸ”„ NN% (valid/total) + valid == 0, total > 0 β†’ πŸ”„ 0% (0/total) ← NOT ❌ Open! Files exist but all invalid. + """ + if total == 0: + return "❌ Open" + pct = valid * 100 // total + if valid == total: + return f"βœ… Available ({valid}/{total})" + return f"πŸ”„ {pct}% ({valid}/{total})" +``` + +> ⚠️ **Common mistake**: Reporting `❌ Open` when `total > 0` but `valid == 0`. This is wrong β€” use `πŸ”„ 0% (0/N)` to indicate files exist but all are invalid/draft (e.g. Lifecycle requirements). + +--- + +### Step 4 β€” Per-module path filters (reference table) + +Use these exact filters when calling `count_files()`. Verify printed file counts before trusting results. + +| Module | Deliverable | Repo | Path filter | +|---|---|---|---| +| Baselibs | Feat. Req | score | `lambda p: 'features/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Comp. Req | score | `lambda p: 'modules/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Req. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_req_inspection' in p` | +| Baselibs | Feat. Arch | score | `lambda p: 'features/baselibs' in p and 'architecture' in p and p.endswith('.rst')` | +| Baselibs | Comp. Arch | score | `lambda p: 'modules/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Arch. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_arc_inspection' in p` | +| Baselibs | Impl. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_impl_inspection' in p` | +| Orchestrator | Feat. Req | score | `lambda p: 'features/orchestration' in p and 'requirements' in p and p.endswith('.rst')` | +| Orchestrator | Comp. Req | score | `lambda p: 'modules/orchestrator' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Orchestrator | Comp. Arch | score | `lambda p: 'modules/orchestrator' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Persistency | Feat. Req | score | `lambda p: 'features/persistency' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Persistency | Feat. Arch | score | `lambda p: 'features/persistency' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Persistency | Comp. Req | pers | `lambda p: 'kvs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Persistency | Comp. Arch | pers | `lambda p: 'kvs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| **Lifecycle** | **Feat. Req** | **score** | `lambda p: 'features/lifecycle' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` β€” **includes subfolders!** | +| **Lifecycle** | **Feat. Arch** | **score** | `lambda p: 'features/lifecycle' in p and 'architecture' in p and p.endswith('.rst')` β€” **matches health_monitor.rst, launch_manager.rst, launch_manager_configuration.rst** | +| **Lifecycle** | **Comp. Arch** | **lifecycle** | `lambda p: 'module' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | + +> ⚠️ **Lifecycle is the most complex module** β€” content is split across `eclipse-score/score` (feature-level: `docs/features/lifecycle/**`) AND `eclipse-score/lifecycle` (component-level: `docs/module/health_monitor/**`). Always query both repos and aggregate. + +--- + +### Step 5 β€” Sanity checks before writing the RST + +Before updating the file, verify these invariants: + +1. **No module with non-empty tree has all-zero counts across all PAs** β€” that indicates a filter bug, not genuine absence of content. +2. **total=0 for a known deliverable** β€” investigate. Run `get_tree()` result manually and search for relevant paths. +3. **PA summary arithmetic**: `complete/total` must equal the number of `βœ… Available` cells in the table. Count manually. +4. **`πŸ”„ 0%` vs `❌ Open`**: grep all cells β€” any `πŸ”„ 0%` means files exist but are all invalid. Any `❌ Open` means zero files found. These are fundamentally different states. +5. **Cross-check against previous version**: If a cell flips from `πŸ”„ NN%` to `❌ Open` compared to the prior RST, investigate before accepting β€” it almost certainly means a filter missed files, not that content disappeared. + +#### 5a β€” Structural completeness check (same set of information) + +**Before comparing values, verify that the new data has the same structure as the existing RST.** +This catches missing modules, missing columns, or accidentally dropped rows β€” and must run first. + +```python +def parse_rst_structure(rst_path): + """ + Parses overall_status.rst and returns the set of modules and deliverable + columns present in each PA table. + + Returns: + { + 'PA1': {'modules': ['Baselibs', ...], 'columns': ['CR approved']}, + 'PA2': {'modules': [...], 'columns': ['Feature Requirements', ...]}, + ... + } + """ + with open(rst_path) as f: + text = f.read() + + pa_sections = re.split(r'Process Area (\d+) β€”', text)[1:] # alternating: pa_num, pa_body + result = {} + for i in range(0, len(pa_sections) - 1, 2): + pa = f"PA{pa_sections[i].strip()}" + body = pa_sections[i + 1] + + # Extract header row (columns) + header_match = re.search(r'\* - \*\*Module\*\*(.*?)(?=\n \* -\s+\w)', body, re.DOTALL) + cols = re.findall(r'\*\*([^*]+)\*\*', header_match.group(0)) if header_match else [] + cols = [c.strip() for c in cols if c.strip() != 'Module'] + + # Extract module names (stub column = first cell of each data row) + modules = re.findall(r'\n \* - ((?![\*\s])[\w][^\n]+)', body) + modules = [m.strip() for m in modules] + + result[pa] = {'modules': modules, 'columns': cols} + return result + +def structural_check(old_structure, new_structure): + """ + Compares structure dicts from parse_rst_structure. + Prints errors for any missing modules or columns. + Returns True if identical, False otherwise. + """ + ok = True + for pa in old_structure: + if pa not in new_structure: + print(f" πŸ›‘ MISSING PA: {pa} not found in new data") + ok = False + continue + + old_mods = set(old_structure[pa]['modules']) + new_mods = set(new_structure[pa]['modules']) + missing_mods = old_mods - new_mods + extra_mods = new_mods - old_mods + if missing_mods: + print(f" πŸ›‘ {pa}: MISSING MODULES: {sorted(missing_mods)}") + ok = False + if extra_mods: + print(f" ℹ️ {pa}: NEW MODULES: {sorted(extra_mods)} (verify intentional)") + + old_cols = old_structure[pa]['columns'] + new_cols = new_structure[pa]['columns'] + if old_cols != new_cols: + print(f" πŸ›‘ {pa}: COLUMN MISMATCH") + print(f" old: {old_cols}") + print(f" new: {new_cols}") + ok = False + + return ok +``` + +**Run this before any value comparison:** +```python +old = parse_rst_structure("docs/s_core_v_1/roadmap/overall_status.rst") +# ... compute new_structure from your freshly calculated data ... +assert structural_check(old, new_structure), "Structure mismatch β€” do not write RST until resolved" +``` + +**Rules:** + +| Situation | Action | +|---|---| +| Module present in old, missing in new | πŸ›‘ **STOP** β€” row was dropped accidentally | +| Column present in old, missing in new | πŸ›‘ **STOP** β€” deliverable column was dropped | +| New module not in old | ℹ️ Intentional addition β€” verify it was requested | +| Module count in new < old | πŸ›‘ **STOP** β€” data loss | +| All PA sections present | βœ… | + +#### 5b β€” Compare new values against existing RST (plausibility diff) + +**Only run this after 5a passes.** Diff computed values against the existing RST cell-by-cell: + +```python +def plausibility_check(old_val, new_val, module, deliverable): + """ + Flags suspicious regressions. Print a WARNING for human review. + """ + def rank(val): + if 'βœ…' in val: return 2 + if 'πŸ”„' in val: return 1 + return 0 # ❌ Open + + old_rank = rank(old_val) + new_rank = rank(new_val) + + if new_rank < old_rank: + print(f" ⚠️ REGRESSION [{module} / {deliverable}]: {old_val!r} β†’ {new_val!r}") + print(f" β†’ Check filter paths, repo tree, and pinned ref.") + elif old_rank == 0 and new_rank == 2: + print(f" ℹ️ LARGE JUMP [{module} / {deliverable}]: {old_val!r} β†’ {new_val!r}") + print(f" β†’ Confirm count is correct before accepting.") + else: + print(f" βœ“ [{module} / {deliverable}]: {old_val!r} β†’ {new_val!r}") +``` + +**Rules for human review:** + +| Old value | New value | Action | +|---|---|---| +| `βœ… Available` | `❌ Open` | πŸ›‘ **STOP** β€” almost certainly a filter bug. Do not write. | +| `βœ… Available` | `πŸ”„ NN%` | ⚠️ Regression β€” investigate before accepting. | +| `πŸ”„ NN%` | `❌ Open` | πŸ›‘ **STOP** β€” files existed before, filter is now missing them. | +| `πŸ”„ NN%` β†’ `πŸ”„ MM%` | MM < NN | ⚠️ Percentage dropped β€” check if content was deleted or filter changed. | +| `❌ Open` | `πŸ”„ NN%` or `βœ…` | βœ… Progress β€” verify count is plausible. | +| `πŸ”„ NN%` | `βœ… Available` | βœ… Completion β€” confirm valid == total. | +| Any | Same | βœ… No change β€” OK. | + +**LOC plausibility** (PA4 Code column): if the new LOC count is less than 50% of the previous value, flag it β€” most likely a filter excluded files it shouldn't have. + +--- + +### Step 6 β€” Update the RST file + +Write the computed values to `docs/s_core_v_1/roadmap/overall_status.rst` following the formatting rules in the RST File Structure section above. Update the `.. rubric:: Implementation status:` line for each PA. + +--- + +### Step 7 β€” Adding a new module + +Add a row to the Modules and Repos table above (with known_good.json key and path filters), then add a row to each tracker table. + +## Interpretation Notes + +### Artifacts vs. Checklists β€” Key Rule +- **Artifacts** (Feature Requirements, Component Requirements, Feature Architecture, Component Architecture, Detailed Design, Code): derive status by **directly inspecting the repos**. +- **Inspection rows** (Req. Inspection, Arch. Inspection, Impl. Inspection): report what is found in `chklst_*.rst` files. + +### Additional Notes +- **Requirements/Architecture rows**: count individual needs elements (`:status:` fields inside `.. feat_req::`, `.. feat_arc::`, `.. comp_req::`, etc.) β€” NOT the document-level `:status:` field. +- The SW Development Plan check is project-wide (not per-module). +- **Template vs. real report**: A file with `:status: valid` can still be an empty template. Look for actual content beyond section headings. +- **Aggregation pitfall**: When a module has architecture/requirements content spread across multiple files in a subfolder (e.g. `docs/features/lifecycle/architecture/*.rst`), make sure to fetch and aggregate ALL files in that folder β€” not just the top-level index. Missing any file leads to falsely reporting `❌ Open` instead of the correct percentage. + +## Limitations + +- Cannot detect whether requirements have 100% test coverage (needs needs.json analysis) +- **Static analysis findings**: Per-module CI enforcement workflows are zero-tolerance β€” a passing `main` branch implies 0 findings. +- Central CodeQL finding counts require GitHub Security tab access. +- Feature integration tests heuristic is weak β€” manual verification recommended + +## Docs Structure (reference_integration) + +``` +docs/ + index.rst ← top-level: Modules, PMT, S-Core v1.0, Integration Status + conf.py ← Sphinx config (pydata theme, sidebar-toggle.js, custom.css) + _assets/ + custom.css ← compact-overview-table (fluid 33%-per-column pie charts, !important img override), module-phase-tracker-table, wide-content-page, collapsible right sidebar + sidebar-toggle.js ← right sidebar collapse/expand toggle (persisted in localStorage) + _templates/ + sidebar-root-nav.html ← left nav with startdepth=0 (shows full toctree on all pages) + s_core_v_1/ + index.rst ← S-Core v1.0 section: Status, Releases, Verification, Roadmap + status/ + status.rst ← Status section index (toctree) + overall_status.rst ← Feature and Process Status tracker (THIS FILE β€” updated by this skill) + releases/ + releases.rst + score_07.rst + verification/ + verification.rst + unit_test_summary.md + coverage_summary.md + roadmap.rst + integration_process/ + integration_process.rst ← Integration Process section (currently empty placeholder) + sw_components.rst + process_tools.rst + needs_filters.py ← sphinx-needs filter functions for pie charts +``` + +**`conf.py` key settings:** +- `html_sidebars = {"**": ["sidebar-root-nav"]}` β€” full left nav on every page +- `html_js_files = ["sidebar-toggle.js"]` β€” collapsible right TOC sidebar +- `html_theme_options.secondary_sidebar_items` β€” suppresses right TOC on `s_core_v_1/roadmap/overall_status` and `feature_and_process_status` pages + +## Complete RST Snapshot + +Full content of `docs/s_core_v_1/roadmap/overall_status.rst` as of last update (2026-05). +Use this to recreate the file from scratch if needed. + +See the file directly at `docs/s_core_v_1/roadmap/overall_status.rst` in `eclipse-score/reference_integration`. diff --git a/.github/workflows/test_and_docs.yml b/.github/workflows/test_and_docs.yml index d6088fd0ee5..c25c643e0b9 100644 --- a/.github/workflows/test_and_docs.yml +++ b/.github/workflows/test_and_docs.yml @@ -74,16 +74,16 @@ jobs: - name: Publish build summary if: always() run: | - if [ -f docs/verification_report/unit_test_summary.md ]; then - cat docs/verification_report/unit_test_summary.md >> "$GITHUB_STEP_SUMMARY" + if [ -f docs/s_core_v_1/verification/unit_test_summary.md ]; then + cat docs/s_core_v_1/verification/unit_test_summary.md >> "$GITHUB_STEP_SUMMARY" else - echo "No build summary file found (docs/verification_report/unit_test_summary.md)" >> "$GITHUB_STEP_SUMMARY" + echo "No build summary file found (docs/s_core_v_1/verification/unit_test_summary.md)" >> "$GITHUB_STEP_SUMMARY" fi echo "" >> "$GITHUB_STEP_SUMMARY" # Add a newline for better formatting - if [ -f docs/verification_report/coverage_summary.md ]; then - cat docs/verification_report/coverage_summary.md >> "$GITHUB_STEP_SUMMARY" + if [ -f docs/s_core_v_1/verification/coverage_summary.md ]; then + cat docs/s_core_v_1/verification/coverage_summary.md >> "$GITHUB_STEP_SUMMARY" else - echo "No coverage summary file found (docs/verification_report/coverage_summary.md)" >> "$GITHUB_STEP_SUMMARY" + echo "No coverage summary file found (docs/s_core_v_1/verification/coverage_summary.md)" >> "$GITHUB_STEP_SUMMARY" fi - name: Create archive of test reports if: github.ref_type == 'tag' diff --git a/docs/_assets/custom.css b/docs/_assets/custom.css new file mode 100644 index 00000000000..e98f41114c9 --- /dev/null +++ b/docs/_assets/custom.css @@ -0,0 +1,157 @@ +/* ******************************************************************************* + * 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 + * *****************************************************************************/ + +/* --------------------------------------------------------------------------- + * Compact process-area overview tables (used in feature_and_process_status.rst) + * ---------------------------------------------------------------------------*/ + +.compact-overview-wrapper { + overflow-x: auto; +} + +.compact-overview-table td:nth-child(1), +.compact-overview-table th:nth-child(1), +.compact-overview-table td:nth-child(5), +.compact-overview-table th:nth-child(5), +.compact-overview-table td:nth-child(6), +.compact-overview-table th:nth-child(6) { + text-align: center; + vertical-align: middle; +} + +.compact-overview-table { + width: 100%; + table-layout: fixed; + max-width: 100%; +} + +.compact-overview-table td { + width: 33%; + overflow: hidden; +} + +.compact-overview-table td:has(img[id^="needpie-"]) { + vertical-align: middle; + text-align: center; +} + +/* Override the fixed pixel size sphinx-needs writes into the img attributes */ +.small-pie-cell img, +.compact-overview-table td img, +img[id^="needpie-"] { + width: 100% !important; + max-width: 100% !important; + height: auto !important; + display: block; + margin: 0 auto; +} + +/* --------------------------------------------------------------------------- + * Module phase tracker table (also used in feature_and_process_status.rst) + * ---------------------------------------------------------------------------*/ + +.module-phase-tracker-table td, +.module-phase-tracker-table th { + vertical-align: middle; + white-space: nowrap; +} + +.module-phase-tracker-table td:first-child { + font-weight: 600; +} + +/* --------------------------------------------------------------------------- + * Wide content area: pages that opt in via a `wide-content-page` body class + * get a full-width article container. + * ---------------------------------------------------------------------------*/ + +body.wide-content-page .bd-content .bd-article-container { + max-width: 100%; +} + +/* --------------------------------------------------------------------------- + * Process-area cards (used in roadmap.rst β€” Qualifiable State section) + * ---------------------------------------------------------------------------*/ + +.card-pa-grey { + background-color: #e8e8e8 !important; + border-color: #c8c8c8 !important; + font-size: 0.82rem; +} + +.card-pa-grey .sd-card-header { + background-color: #e8e8e8 !important; + border-color: #c8c8c8 !important; + font-size: 0.82rem; + font-weight: 600; + padding: 0.4rem 0.6rem; +} + +.card-pa-grey .sd-card-body { + background-color: #e8e8e8 !important; + color: #444; + padding: 0.4rem 0.6rem; + font-size: 0.78rem; +} + +/* Thin border around each process-area grid group (Management / Development / Support) */ +.score-grid { + border: 1px solid #c0c8d4; + border-radius: 6px; + padding: 0.6rem 0.6rem 0.2rem 0.6rem; + margin-bottom: 1.2rem; +} + +/* Compact card grid (Management section) β€” approximately half the visual size */ +.score-grid-compact .sd-card { + min-height: unset; +} + +.score-grid-compact .sd-card-header { + padding: 0.2rem 0.35rem !important; + font-size: 0.68rem !important; +} + +.score-grid-compact .sd-card-body { + padding: 0.2rem 0.35rem !important; + font-size: 0.62rem !important; +} + +/* Highlighted process-area cards (Requirements Engineering, Architecture Design, + Implementation, Verification) */ +.card-pa-highlight { + background-color: #1a5fa8 !important; + border-color: #134a87 !important; + font-size: 0.82rem; +} + +.card-pa-highlight .sd-card-header { + background-color: #1a5fa8 !important; + border-color: #134a87 !important; + font-size: 0.82rem; + font-weight: 600; + padding: 0.4rem 0.6rem; + color: #ffffff !important; +} + +.card-pa-highlight .sd-card-header a, +.card-pa-highlight .sd-card-header a:visited { + color: #ffffff !important; +} + +.card-pa-highlight .sd-card-body { + background-color: #1a5fa8 !important; + color: #e8f0fc !important; + padding: 0.4rem 0.6rem; + font-size: 0.78rem; +} diff --git a/docs/_assets/pi_timeline_2026.drawio.svg b/docs/_assets/pi_timeline_2026.drawio.svg new file mode 100644 index 00000000000..f108e686516 --- /dev/null +++ b/docs/_assets/pi_timeline_2026.drawio.svg @@ -0,0 +1,299 @@ + + + + + + + + + + + + + PI 1 v0.8 Β· May 13–Jul 13 + + + + + + + + + + PI 2 v0.9 Β· Jul 14–Sep 7 + + + + + + + + + + PI 3 v1.0 Β· Sep 8–Nov 2 + + + + + + + + + + PI 4 Final Β· Nov 3–Dec 15 + + + + + + + + + + + + + + + + +
+
+
+ May +
+
+
+
+ + May + +
+
+
+ + + + + + + + + + +
+
+
+ Jun +
+
+
+
+ + Jun + +
+
+
+ + + + + + + + + + +
+
+
+ Jul +
+
+
+
+ + Jul + +
+
+
+ + + + + + + + + + +
+
+
+ Aug +
+
+
+
+ + Aug + +
+
+
+ + + + + + + + + + +
+
+
+ Sep +
+
+
+
+ + Sep + +
+
+
+ + + + + + + + + + +
+
+
+ Oct +
+
+
+
+ + Oct + +
+
+
+ + + + + + + + + + +
+
+
+ Nov +
+
+
+
+ + Nov + +
+
+
+ + + + + + + + + + +
+
+
+ Dec +
+
+
+
+ + Dec + +
+
+
+ + + + + + + +
+
+
+ 2026 +
+
+
+
+ + 2026 + +
+
+
+ + + + + + + + + + + + + +
+
+
+ πŸš€ v1.0 Final +
+
+
+
+ + πŸš€ v1.0 Final + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + +
diff --git a/docs/_assets/sw_arch_v_1.drawio.svg b/docs/_assets/sw_arch_v_1.drawio.svg new file mode 100644 index 00000000000..47a9590ae43 --- /dev/null +++ b/docs/_assets/sw_arch_v_1.drawio.svg @@ -0,0 +1,1253 @@ + + + + + + + + + + + +
+
+
+ C++ Base Libraries +
+
+
+
+ + C++ Base Libraries + +
+
+
+ + + + + + + +
+
+
+ System Services +
+
+
+
+ + System Services + +
+
+
+ + + + + + + +
+
+
+ Communication +
+
+
+
+ + Communication + +
+
+
+ + + + + + + +
+
+
+ Operating System +
+
+
+
+ + Operating System + +
+
+
+ + + + + + + +
+
+
+ Hypervisor / Hardware +
+
+
+
+ + Hypervisor / Hardware + +
+
+
+ + + + + + + +
+
+
+ Rust Base Libraries +
+
+
+
+ + Rust Base Libraries + +
+
+
+ + + + + + + +
+
+
+ BaseLibs Rust +
+
+
+
+ + BaseLibs Rust + +
+
+
+ + + + + + + +
+
+
+ Platform API (native APIs for Rust and C++) +
+
+
+
+ + Platform API (native APIs for Rust and C++) + +
+
+
+ + + + + + + +
+
+
+ LoggingΒ API +
+
+
+
+ + LoggingΒ API + +
+
+
+ + + + + + + +
+
+
+ S-CORE Architecture v1.0 +
+
+
+
+ + S-CORE Architecture v1.0 + +
+
+
+ + + + + + + +
+
+
+ S-Core v1.0 +
+
+
+
+ + S-Core v1.0 + +
+
+
+ + + + + + + +
+
+
+ Part of OS or HW specific implementation +
+
+
+
+ + Part of OS or HW speci... + +
+
+
+ + + + + + + +
+
+
+ to be discussed for future releases +
+
+
+
+ + to be discussed for... + +
+
+
+ + + + + + + +
+
+
+ VideoΒ API +
+
+
+
+ + VideoΒ API + +
+
+
+ + + + + + + +
+
+
+ CryptoΒ API +
+
+
+
+ + CryptoΒ API + +
+
+
+ + + + + + + +
+
+
+ HW Acceleration API +
+
+
+
+ + HW Acceleration... + +
+
+
+ + + + + + + +
+
+
+ PersistencyΒ API +
+
+
+
+ + PersistencyΒ API + +
+
+
+ + + + + + + +
+
+
+ Communication API +
+
+
+
+ + Communication API + +
+
+
+ + + + + + + +
+
+
+ Lifecycle & Health API +
+
+
+
+ + Lifecycle & Heal... + +
+
+
+ + + + + + + +
+
+
+ ConfigurationΒ API +
+
+
+
+ + ConfigurationΒ API + +
+
+
+ + + + + + + +
+
+
+ TimeΒ API +
+
+
+
+ + TimeΒ API + +
+
+
+ + + + + + + +
+
+
+ FaultΒ API +
+
+
+
+ + FaultΒ API + +
+
+
+ + + + + + + +
+
+
+ Runtime orchestrator API +
+
+
+
+ + Runtime orchestr... + +
+
+
+ + + + + + + +
+
+
+ User / Capability management +
+
+
+
+ + User / Capabilit... + +
+
+
+ + + + + + + +
+
+
+ Mandatory Access Control +
+
+
+
+ + Mandatory Access... + +
+
+
+ + + + + + + +
+
+
+ Key / Certificate Mgmt +
+
+
+
+ + Key / Certificat... + +
+
+
+ + + + + + + +
+
+
+ Intrusion Detection System +
+
+
+
+ + Intrusion Detecti... + +
+
+
+ + + + + + + +
+
+
+ Config Mgmt +
+
+
+
+ + Config Mgmt + +
+
+
+ + + + + + + +
+
+
+ Storage Mgmt +
+
+
+
+ + Storage Mgmt + +
+
+
+ + + + + + + +
+
+
+ Video Frame-server +
+
+
+
+ + Video Frame-serv... + +
+
+
+ + + + + + + +
+
+
+ Fault Mgmt. +
+
+
+
+ + Fault Mgmt. + +
+
+
+ + + + + + + +
+
+
+ Lifecycle & Health Mgmt +
+
+
+
+ + Lifecycle & Heal... + +
+
+
+ + + + + + + +
+
+
+ HW HealthΒ Mgmt +
+
+
+
+ + HW HealthΒ Mgmt + +
+
+
+ + + + + + + +
+
+
+ Logging / Data Collection +
+
+
+
+ + Logging / Data C... + +
+
+
+ + + + + + + +
+
+
+ SoftwareΒ Update +
+
+
+
+ + SoftwareΒ Update + +
+
+
+ + + + + + + +
+
+
+ Firewall +
+
+
+
+ + Firewall + +
+
+
+ + + + + + + +
+
+
+ Tunneling +
+
+
+
+ + Tunneling + +
+
+
+ + + + + + + +
+
+
+ zero-copy communication +
+
+
+
+ + zero-copy commun... + +
+
+
+ + + + + + + +
+
+
+ SOME/IP Gateway +
+
+
+
+ + SOME/IP Gateway + +
+
+
+ + + + + + + +
+
+
+ NM +
+
+
+
+ + NM + +
+
+
+ + + + + + + +
+
+
+ Kernel +
+
+
+
+ + Kernel + +
+
+
+ + + + + + + +
+
+
+ Time Sync +
+
+
+
+ + Time Sync + +
+
+
+ + + + + + + +
+
+
+ Hardware Supervision +
+
+
+
+ + Hardware Supervi... + +
+
+
+ + + + + + + +
+
+
+ Container Support +
+
+
+
+ + Container Support + +
+
+
+ + + + + + + +
+
+
+ Video / Camera Support +
+
+
+
+ + Video / Camera S... + +
+
+
+ + + + + + + +
+
+
+ Audio Support +
+
+
+
+ + Audio Support + +
+
+
+ + + + + + + +
+
+
+ Peripheral Support +
+
+
+
+ + Peripheral Suppo... + +
+
+
+ + + + + + + +
+
+
+ Ethernet (TCP/IP) +
+
+
+
+ + Ethernet (TCP/IP) + +
+
+
+ + + + + + + +
+
+
+ AVB +
+
+
+
+ + AVB + +
+
+
+ + + + + + + +
+
+
+ Board Support Package +
+
+
+
+ + Board Support Pa... + +
+
+
+ + + + + + + +
+
+
+ Secure Boot +
+
+
+
+ + Secure Boot + +
+
+
+ + + + + + + +
+
+
+ Hardware Acceleration Support +
+
+
+
+ + Hardware Acceleration... + +
+
+
+ + + + + + + +
+
+
+ Hardware SecurityΒ Support +
+
+
+
+ + Hardware Securit... + +
+
+
+ + + + + + + +
+
+
+ Startup +
+
+
+
+ + Startup + +
+
+
+ + + + + + + +
+
+
+ Inter-Partition Communication +
+
+
+
+ + Inter-Partition... + +
+
+
+ + + + + + + +
+
+
+ Hardware Virtualization Support +
+
+
+
+ + Hardware Virtualizatio... + +
+
+
+ + + + + + + +
+
+
+ Diagnostic Handler (SOVD, UDS) +
+
+
+
+ + Diagnostic Handle... + +
+
+
+ + + + + + + +
+
+
+ BaseLibs C++ +
+
+
+
+ + BaseLibs C++ + +
+
+
+ + + + + + + +
+
+
+ System launch and monitor +
+
+
+
+ + System launch an... + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + +
diff --git a/docs/conf.py b/docs/conf.py index f2057673436..3b5499d6a20 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,6 +13,26 @@ # Configuration file for the Sphinx documentation builder. +import os as _os +import sys as _sys + +# Make docs/ importable so needs_filters.py (and similar helpers) can be used +# as :filter-func: targets in sphinx-needs directives. +_sys.path.insert(0, _os.path.dirname(_os.path.abspath(__file__))) + + +def _patch_needpie_suppress_legend() -> None: + """Suppress all in-chart legends in sphinx-needs needpie charts.""" + try: + import matplotlib.axes + + matplotlib.axes.Axes.legend = lambda self, *args, **kwargs: None + except Exception: + pass + + +_patch_needpie_suppress_legend() + project = "REF_INT" project_url = "https://eclipse-score.github.io/reference_integration" version = "0.1" @@ -30,3 +50,18 @@ ".rst": "restructuredtext", ".md": "markdown", } + +# Custom static assets (CSS, etc.) +html_static_path = ["_assets"] +html_css_files = ["custom.css"] + + +html_theme_options = { + "secondary_sidebar_items": { + "**": ["page-toc"], + "feature_and_process_status": [], + "s_core_v_1/roadmap/overall_status": [], + }, + "show_toc_level": 2, + "navigation_with_keys": False, +} diff --git a/docs/index.rst b/docs/index.rst index 325467e0885..743e1acb746 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -15,46 +15,65 @@ Reference Integration Documentation =================================== -Current Integration Status Overview ------------------------------------ +The **Reference Integration** is the central integration repository of the +eclipse-score project. It combines all +S-CORE software modules β€” including Communication, Logging, Orchestrator, +Persistency, Time, Config Management, Lifecycle, and Security/Crypto β€” into a +single, consistently versioned workspace. -`View dashboard (points always to main for now) `_ +Its purpose is to verify that all modules build, integrate, and pass their +tests together, providing a stable baseline for downstream projects. The +repository also hosts the consolidated documentation, verification reports, +and release notes for each S-CORE release. -Explore the documentation -------------------------- +Beyond validation, the **Reference Integration** also serves as a technical +blueprint for future commercial distributions. It demonstrates how S-CORE +modules can be combined into a coherent, releaseable platform baseline, +including the expected integration structure, verification artifacts, and +documentation set that downstream product distributions can build on. -.. toctree:: - :glob: - :caption: S-CORE Releases - :maxdepth: 2 +.. grid:: 1 1 3 3 + :gutter: 3 - score_releases/index + .. grid-item-card:: πŸ“Š Status & Roadmap + :link: s_core_v_1/index + :link-type: doc -.. toctree:: - :caption: Software Components - :titlesonly: - :maxdepth: 1 + :doc:`S-Core v1.0 Roadmap ` and PI planning. + .. grid-item-card:: πŸ“– Process, Methods & Tools + :link: process_methods_tools + :link-type: doc - _collections/score_persistency/docs/index - _collections/score_orchestrator/docs/index - _collections/score_kyron/docs/index - _collections/score_baselibs_rust/docs/index - _collections/score_logging/docs/index + S-CORE process description, platform standards, and documentation toolchain. -.. toctree:: - :caption: Process, Methods, and Tools - :titlesonly: - :maxdepth: 1 + .. grid-item-card:: βœ… Code Quality + :link: verification_report/platform_verification_report + :link-type: doc - _collections/score_platform/docs/index - _collections/score_process/process/index - _collections/score_docs_as_code/docs/index + Platform verification report and test coverage results. -.. toctree:: - :caption: Code Quality - :titlesonly: - :glob: + .. grid-item-card:: Integration + Reference Integration workflow and health overview with links to + :doc:`Integration Process ` and + `Integration Status `_. + + .. grid-item-card:: Modules + :link: sw_components + :link-type: doc - verification_report/platform_verification_report + Central overview for all integrated modules. See :doc:`All Modules `. + + .. grid-item-card:: πŸ“ Release Notes + :link: s_core_v_1/releases/releases + :link-type: doc + + Overview of published S-CORE releases and their release notes. + +.. toctree:: + :hidden: + sw_components + integration_process/integration_process + process_methods_tools + s_core_v_1/releases/releases diff --git a/docs/integration_process/integration_process.rst b/docs/integration_process/integration_process.rst new file mode 100644 index 00000000000..2468fba0860 --- /dev/null +++ b/docs/integration_process/integration_process.rst @@ -0,0 +1,16 @@ +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +Integration Process +################### diff --git a/docs/needs_filters.py b/docs/needs_filters.py new file mode 100644 index 00000000000..6c1a4d14328 --- /dev/null +++ b/docs/needs_filters.py @@ -0,0 +1,139 @@ +# ******************************************************************************* +# 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 +# ******************************************************************************* + +""" +Custom filter functions for use with sphinx-needs :filter-func: option. +""" + + +def std_req_status_for_area(needs, results, arg1=""): + """ + filter_func for needpie: counts the tag-based compliance status distribution + of std_req needs referenced via `complies` from gd_req needs tagged with the + given process area tag. + + Recognized tags (in priority order): ok, recommendation, open, action, + deviation, n/a. Needs with none of these tags are counted as "other". + + arg1 = process area tag (e.g. requirements_engineering) + """ + area_tag = arg1.strip() + std_req_ids = set() + needs_by_id = {n["id"]: n for n in needs} + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False) and area_tag in need.get("tags", []): + for ref_id in need.get("complies", []): + if ref_id.startswith("std_req__iso26262__"): + std_req_ids.add(ref_id) + ok = recommendation = open_ = action = deviation = na = other = 0 + for sid in std_req_ids: + n = needs_by_id.get(sid) + if n: + t = set(n.get("tags", [])) + if "deviation" in t: + deviation += 1 + elif "action" in t: + action += 1 + elif "open" in t: + open_ += 1 + elif "ok" in t: + ok += 1 + elif "recommendation" in t: + recommendation += 1 + elif "n/a" in t: + na += 1 + else: + other += 1 + results += [ok, recommendation, open_, action, deviation, na, other] + + +def wp_tag_status(needs, results, arg1=""): + """ + filter_func for needpie: counts the tag-based verification status distribution + of gd_req needs associated with one or more workflows (pipe-separated in arg1). + + Tags (in priority order): + - done_automation β†’ Automated + - prio__automation β†’ Waiting for automation + - manual_prio_ β†’ Inspection list + - (none of the above) β†’ Other + + arg1 = workflow id(s), pipe-separated (e.g. wf__foo or wf__foo|wf__bar) + """ + workflow_ids = [w.strip() for w in arg1.split("|") if w.strip()] + automated = waiting = inspection = other = 0 + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False): + satisfies = need.get("satisfies", []) + if any(wf in satisfies for wf in workflow_ids): + tags = set(need.get("tags", [])) + if "done_automation" in tags: + automated += 1 + elif any(t.startswith("prio_") and t.endswith("_automation") for t in tags): + waiting += 1 + elif any(t.startswith("manual_prio_") for t in tags): + inspection += 1 + else: + other += 1 + results += [automated, waiting, inspection, other] + + +def area_verification_status(needs, results, arg1=""): + """ + filter_func for needpie: counts the tag-based verification status distribution + of gd_req needs tagged with the given process area tag, aggregated across all + workflows for that area. + + Tags (in priority order): + - done_automation β†’ Automated + - prio__automation β†’ Waiting for automation + - manual_prio_ β†’ Inspection list + - (none of the above) β†’ Other + + arg1 = process area tag (e.g. requirements_engineering) + """ + area_tag = arg1.strip() + automated = waiting = inspection = other = 0 + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False) and area_tag in need.get("tags", []): + tags = set(need.get("tags", [])) + if "done_automation" in tags: + automated += 1 + elif any(t.startswith("prio_") and t.endswith("_automation") for t in tags): + waiting += 1 + elif any(t.startswith("manual_prio_") for t in tags): + inspection += 1 + else: + other += 1 + results += [automated, waiting, inspection, other] + + +def wp_done_automation_status(needs, results, arg1=""): + """ + filter_func for needpie: counts gd_req needs associated with one or more + workflows and splits them into done_automation vs. remaining requirements. + + arg1 = workflow id(s), pipe-separated (e.g. wf__foo or wf__foo|wf__bar) + """ + workflow_ids = [w.strip() for w in arg1.split("|") if w.strip()] + done = rest = 0 + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False): + satisfies = need.get("satisfies", []) + if any(wf in satisfies for wf in workflow_ids): + tags = set(need.get("tags", [])) + if "done_automation" in tags: + done += 1 + else: + rest += 1 + results += [done, rest] diff --git a/docs/process_methods_tools.rst b/docs/process_methods_tools.rst new file mode 100644 index 00000000000..b46d895f910 --- /dev/null +++ b/docs/process_methods_tools.rst @@ -0,0 +1,24 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 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 + # ******************************************************************************* + +Process, Methods, and Tools +============================ + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + _collections/score_platform/docs/index + _collections/score_process/process/index + _collections/score_docs_as_code/docs/index diff --git a/docs/s_core_v_1/index.rst b/docs/s_core_v_1/index.rst new file mode 100644 index 00000000000..fdeb53d50df --- /dev/null +++ b/docs/s_core_v_1/index.rst @@ -0,0 +1,23 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 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 + # ******************************************************************************* + +S-Core v1.0 +=========== + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + Releases + Roadmap diff --git a/docs/score_releases/_assets/architecture.drawio.svg b/docs/s_core_v_1/releases/_assets/architecture.drawio.svg similarity index 100% rename from docs/score_releases/_assets/architecture.drawio.svg rename to docs/s_core_v_1/releases/_assets/architecture.drawio.svg diff --git a/docs/score_releases/_assets/architecture_0_6.drawio.svg b/docs/s_core_v_1/releases/_assets/architecture_0_6.drawio.svg similarity index 100% rename from docs/score_releases/_assets/architecture_0_6.drawio.svg rename to docs/s_core_v_1/releases/_assets/architecture_0_6.drawio.svg diff --git a/docs/score_releases/_assets/score_process_area_overview.drawio.svg b/docs/s_core_v_1/releases/_assets/score_process_area_overview.drawio.svg similarity index 100% rename from docs/score_releases/_assets/score_process_area_overview.drawio.svg rename to docs/s_core_v_1/releases/_assets/score_process_area_overview.drawio.svg diff --git a/docs/score_releases/index.rst b/docs/s_core_v_1/releases/index.rst similarity index 100% rename from docs/score_releases/index.rst rename to docs/s_core_v_1/releases/index.rst diff --git a/docs/score_releases/release_note_score_v0_5_alpha.rst b/docs/s_core_v_1/releases/release_note_score_v0_5_alpha.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_5_alpha.rst rename to docs/s_core_v_1/releases/release_note_score_v0_5_alpha.rst diff --git a/docs/score_releases/release_note_score_v0_5_beta.rst b/docs/s_core_v_1/releases/release_note_score_v0_5_beta.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_5_beta.rst rename to docs/s_core_v_1/releases/release_note_score_v0_5_beta.rst diff --git a/docs/score_releases/release_note_score_v0_6.rst b/docs/s_core_v_1/releases/release_note_score_v0_6.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_6.rst rename to docs/s_core_v_1/releases/release_note_score_v0_6.rst diff --git a/docs/score_releases/release_note_score_v0_7.rst b/docs/s_core_v_1/releases/release_note_score_v0_7.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_7.rst rename to docs/s_core_v_1/releases/release_note_score_v0_7.rst diff --git a/docs/s_core_v_1/releases/releases.rst b/docs/s_core_v_1/releases/releases.rst new file mode 100644 index 00000000000..af111240b0a --- /dev/null +++ b/docs/s_core_v_1/releases/releases.rst @@ -0,0 +1,22 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 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 + # ******************************************************************************* + +Releases +============ + +.. toctree:: + :titlesonly: + :glob: + + * diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst new file mode 100644 index 00000000000..c3aa0c932d3 --- /dev/null +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -0,0 +1,859 @@ +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +.. raw:: html + + + +Overall Status +########################## + +This page tracks the completion status of all 5 process areas per module. +Update the status column for each module after completing the respective deliverable. + +**Process Status chart legend:** + +.. list-table:: + :header-rows: 1 + :widths: 30 30 40 + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - 🟒 Valid + + 🟑 Draft + + πŸ”΄ Invalid + + ⬜ Other + - 🟒 Ok + + πŸ”΅ Recommendation + + 🟑 Open + + 🟠 Action + + πŸ”΄ Deviation + + ⬜ N/A Β· β—» Other + - 🟒 Automated + + 🟑 Waiting for automation + + πŸ”΅ Inspection list + + ⬜ Other + +**Implementation Status Values:** + +- ``βœ… Available`` β€” Work product created, reviewed and approved +- ``πŸ”„ NN%`` β€” In Progress: artifact exists with at least one valid element, percentage shows valid/total +- ``❌ Open`` β€” Not yet started, not found, or 0% valid +- ``β€”`` β€” Not applicable for this module + +Process Area 1 β€” Change Management +*********************************** + +A Change Request must be created and approved by the Architecture Community before module +development begins. +See :ref:`chm_change_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'change_management' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'change_management' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'change_management' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'change_management' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(change_management) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(change_management) + +.. rubric:: Implementation status: πŸ”„ 92% (11/12 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **CR approved** + + * - Baselibs + - βœ… Available + + * - Communication + - βœ… Available + + * - Logging + - βœ… Available + + * - Orchestrator + - βœ… Available + + * - Persistency + - βœ… Available + + * - Time + - βœ… Available + + * - Config Mgmt + - βœ… Available + + * - Lifecycle + - βœ… Available + + * - Security/Crypto + - βœ… Available + + * - Diagnostic Services + - βœ… Available + + * - NM + - ❌ Open + + * - Some/IP + - βœ… Available + +.. _overall_status_pa2: + +Process Area 2 β€” Requirements Engineering +***************************************** + +Feature and component requirements must be written and inspected. +Work products: ``wp__requirements_feat``, ``wp__requirements_comp``, ``wp__requirements_inspect``. +See :ref:`requirements_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'requirements_engineering' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(requirements_engineering) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(requirements_engineering) + +.. rubric:: Implementation status: πŸ”„ 25% (9/36 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Feature Requirements** + - **Component Requirements** + - **Req. Inspection** + + * - Baselibs + - πŸ”„ 97% (37/38) + - πŸ”„ 92% (124/134) + - πŸ”„ 20% (2/10) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ + | `feature-level `__ + + * - Communication + - βœ… Available (60/60) + - πŸ”„ 97% (34/35) + - ❌ Open + + * - Logging + - βœ… Available (46/46) + - ❌ Open + - ❌ Open + + * - Orchestrator + - πŸ”„ 83% (26/31) + - πŸ”„ 0% (0/2) + - πŸ”„ 0% (0/2) + + | `executor `__ + | `orchestrator `__ + + * - Persistency + - βœ… Available (41/41) + - πŸ”„ 94% (36/38) + - πŸ”„ 50% (1/2) + + | `feature-level `__ + | `kvs `__ + + * - Time + - βœ… Available (15/15) + - ❌ Open + - ❌ Open + + * - Config Mgmt + - βœ… Available (13/13) + - ❌ Open + - ❌ Open + + * - Lifecycle + - πŸ”„ 0% (0/92) + + | `requirements `__ + | (all 92 entries ``:status: invalid``) + - πŸ”„ 0% (0/5) + + | `health_monitor `__ + | (template placeholder, ``:status: invalid``) + - ❌ Open + + * - Security/Crypto + - βœ… Available (42/42) + - ❌ Open + - ❌ Open + + * - Diagnostic Services + - βœ… Available (22/22) + + | `requirements `__ + - ❌ Open + - ❌ Open + + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + + * - Some/IP + - βœ… Available (6/6) + + | `score (5) `__ + | `tc8 conformance (1) `__ + - βœ… Available (8/8) + + | `tc8 conformance `__ + - ❌ Open + +.. _overall_status_pa3: + +Process Area 3 β€” Architecture Design +************************************ + +Feature and component architecture must be designed and inspected. +Work products: ``wp__feature_arch``, ``wp__component_arch``, ``wp__sw_arch_verification``. +See :ref:`arch_workflow`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'architecture_design' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(architecture_design) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(architecture_design) + +.. rubric:: Implementation status: πŸ”„ 17% (6/36 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Feature Architecture** + - **Component Architecture** + - **Arch. Inspection** + + * - Baselibs + - βœ… Available (4/4) + - πŸ”„ 98% (172/175) + - πŸ”„ 80% (8/10) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ + | `feature-level `__ + + * - Communication + - βœ… Available (5/5) + - πŸ”„ 94% (17/18) + - ❌ Open + + * - Logging + - βœ… Available (4/4) + - βœ… Available (3/3) + - ❌ Open + + * - Orchestrator + - πŸ”„ 66% (4/6) + - βœ… Available (27/27) + - πŸ”„ 0% (0/2) + + | `executor `__ + | `orchestrator `__ + + * - Persistency + - βœ… Available (12/12) + - πŸ”„ 25% (1/4) + - πŸ”„ 0% (0/2) + + | `feature-level `__ + | `kvs `__ + + * - Time + - ❌ Open + - ❌ Open + - ❌ Open + + * - Config Mgmt + - ❌ Open + - ❌ Open + - ❌ Open + + * - Lifecycle + - πŸ”„ 93% (30/32) + - πŸ”„ 93% (15/16) + - ❌ Open + + * - Security/Crypto + - ❌ Open + - ❌ Open + - ❌ Open + + * - Diagnostic Services + - ❌ Open + - ❌ Open + - ❌ Open + + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + + * - Some/IP + - ❌ Open + - ❌ Open + - ❌ Open + +.. _overall_status_pa4: + +Process Area 4 β€” Implementation +******************************** + +Source code and detailed design must be implemented and inspected. +Work products: ``wp__sw_development_plan``, ``wp__sw_implementation``, ``wp__sw_implementation_inspection``. +See :ref:`workflow_implementation`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'implementation' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'implementation' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'implementation' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'implementation' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(implementation) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(implementation) + +.. rubric:: Implementation status: πŸ”„ 38% (18/48 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **SW Development Plan** + - **Code** + - **Detailed Design** + - **Impl. Inspection** + + * - Baselibs + - βœ… Available + - βœ… Available (~119,400 LOC) `baselibs `__ + - ❌ Open + - πŸ”„ 0% (0/9) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ + + * - Communication + - βœ… Available + - βœ… Available (~71,300 LOC) `communication `__ + - ❌ Open + - ❌ Open + + * - Logging + - βœ… Available + - βœ… Available (~22,900 LOC) `logging `__ + - ❌ Open + - ❌ Open + + * - Orchestrator + - βœ… Available + - βœ… Available (~38,300 LOC) `orchestrator `__ + - ❌ Open + - ❌ Open + + * - Persistency + - βœ… Available + - βœ… Available (~8,700 LOC) `persistency `__ + - ❌ Open + - πŸ”„ 0% (0/1) + + | `kvs `__ + + * - Time + - βœ… Available + - βœ… Available (~11,700 LOC) `inc_time `__ + - ❌ Open + - ❌ Open + + * - Config Mgmt + - βœ… Available + - βœ… Available (~5,400 LOC) `config_management `__ + - ❌ Open + - ❌ Open + + * - Lifecycle + - βœ… Available + - βœ… Available (~38,300 LOC) `lifecycle `__ + - πŸ”„ 50% (1/2) + - ❌ Open + + * - Security/Crypto + - βœ… Available + - ❌ Open + - ❌ Open + - ❌ Open + + * - Diagnostic Services + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - Some/IP + - ❌ Open + - βœ… Available (~12,500 LOC) `inc_someip_gateway `__ + - ❌ Open + - ❌ Open + +.. _overall_status_pa5: + +Process Area 5 β€” Verification +***************************** + +All tests must be implemented and a module verification report must be approved. +Work products: ``wp__verification_sw_unit_test``, ``wp__verification_comp_int_test``, ``wp__verification_feat_int_test``, ``wp__verification_module_ver_report``. +See :ref:`verification_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'verification' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'verification' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'verification' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'verification' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(verification) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(verification) + +.. note:: + + **C0/C1 Coverage** data is sourced from the `reference_integration `__ + CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). + C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. + Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) or with + disabled coverage extraction (Orchestrator) show ❌ Open. + +.. note:: + + **Static Code Analysis** is tracked per module via dedicated CI workflows (clang-tidy for C++, + Rust Clippy for Rust). All listed workflows are zero-tolerance (CI fails on any finding), + so a passing ``main`` branch implies **0 open findings**. Additionally, + `CodeQL `__ + runs centrally across all pinned repositories in ``reference_integration`` + (finding counts require the GitHub Security tab). + + **Dynamic Code Analysis** is tracked via sanitizer CI workflows (ASan/UBSan/LSan via + ``--config=asan_ubsan_lsan``, TSan via ``--config=tsan``). All listed workflows are + zero-tolerance, so a passing ``main`` branch implies **0 sanitizer findings**. + +.. rubric:: Implementation status: πŸ”„ 29% (25/87 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Unit Tests** + - **C0/C1 Coverage** + - **Comp. Integration Tests** + - **Feature Integration Tests** + - **Static Code Analysis** + - **Dynamic Code Analysis** + - | **Module Verification** + | **Report** + - | **Platform Verification** + | **Report** + + * - Baselibs + - βœ… Available + + | (4,663 tests) + - πŸ”„ **C0:** 92.3% + + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% + - βœ… Available (13 tests) + - ❌ Open + - βœ… 0 findings + + | `clang-tidy `__ + - βœ… 0 findings + + | `ASan/UBSan/LSan `__ + - ❌ Open + - ❌ Open + + * - Communication + - βœ… Available + + | (2,374 tests) + - πŸ”„ **C0:** 87.9% + + | **C1:** 58.8% (cpp) + - βœ… Available (42 tests) + - ❌ Open + - πŸ”„ Configured + + | `clang-tidy `__ + | `CodeQL/MISRA `__ + | but no CI enforcement workflow yet + - βœ… 0 findings + + | `ASan/UBSan/LSan `__ + | `TSan `__ + - ❌ Open + - ❌ Open + + * - Logging + - βœ… Available + + | (619 tests) + - πŸ”„ **C0:** 79.5% + + | **C1:** 42.4% (cpp) + | **Rust line:** 39.9% + - ❌ Open + - βœ… Available (1 test) + + | `reference_integration `__ (cross-module) + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - Orchestrator + - βœ… Available + + | (2 tests) + - ❌ Open + - βœ… Available (9 tests) + - βœ… Available (3 tests) + + | `reference_integration `__ (cross-module) + - βœ… 0 findings + + | `Clippy `__ + - ❌ Open + - ❌ Open + - ❌ Open + + * - Persistency + - βœ… Available + + | (138 tests) + - πŸ”„ **C0:** 94.7% + + | **C1:** 63.0% (cpp) + | **Rust line:** 92.7% + - ❌ Open + - βœ… Available (6 tests) + + | `reference_integration `__ (cross-module) + - βœ… 0 findings + + | `Clippy `__ + - ❌ Open + - ❌ Open + - ❌ Open + + * - Time + - βœ… Available + + | (296 tests) + - ❌ Open + - βœ… Available (11 tests) + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - Config Mgmt + - βœ… Available + + | (143 tests) + - ❌ Open + - ❌ Open + - ❌ Open + - βœ… 0 findings + + | `clang-tidy `__ + - ❌ Open + - ❌ Open + - ❌ Open + + * - Lifecycle + - βœ… Available + + | (2 tests) + - πŸ”„ **C0:** 77.2% + + | **C1:** 45.8% (cpp) + | **Rust line:** 53.8% + - βœ… Available (9 tests) + - ❌ Open + - βœ… 0 findings + + | `Clippy `__ + - ❌ Open + - ❌ Open + - ❌ Open + + * - Security/Crypto + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - Diagnostic Services + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - Some/IP + - βœ… Available + + | (199 tests) + - ❌ Open + - βœ… Available (17 stress tests) + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + +Done Criteria +************* + +A module is considered **complete** when all of the following are true: + +#. All ``valid`` component requirements have **100% test coverage** (linked via ``FullyVerifies`` or ``PartiallyVerifies``). +#. All CI metadata checks pass (``TestType``, ``DerivationTechnique``, ``Description`` set on every test). +#. Static analysis has no open ``Critical`` or ``High`` findings. +#. The **Module Verification Report** (``wp__verification_module_ver_report``) is generated and approved by a Committer. diff --git a/docs/s_core_v_1/roadmap/pi1.rst b/docs/s_core_v_1/roadmap/pi1.rst new file mode 100644 index 00000000000..9547f0f2c63 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi1.rst @@ -0,0 +1,80 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 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 + # ******************************************************************************* + +πŸš€ PI 1 β€” 13 May – 13 July 2026 Β· `v0.8 `__ +================================================================================================== + +Focus: Requirements Engineering (PA2) + Architecture Design (PA3) +------------------------------------------------------------------ + +- Complete feature and component requirements for all modules (no open TBDs, status ``valid``) +- Fill in and approve ``chklst_req_inspection.rst`` for all modules and features β€” each checklist point + is either completed or the finding is noted in the checklist with a tracked issue; + each tracked issue must have the **component** set and the **milestone** set +- Complete feature and component architecture for all modules (no open TBDs, status ``valid``) +- Fill in and approve ``chklst_arc_inspection.rst`` for all modules and features β€” each checklist point + is either completed or the finding is noted in the checklist with a tracked issue; + each tracked issue must have the **component** set and the **milestone** set +- All requirements relevant for v1.0 must be explicitly marked as such +- Implementation of functionality must be planned via tickets in the + `main S-CORE GitHub project `__ β€” + each ticket must have the **component** set and the **milestone** set +- A Module Verification Report must be created for every module, tracking at minimum + that unit-test coverage (C0/C1) reaches at least **90%** and dynamic code analysis + (sanitizers: ASan/UBSan/LSan, TSan) passes with **0 findings** + +Current State +------------- + +See the relevant tables in :doc:`overall_status`: + +- :ref:`overall_status_pa2` β€” Requirements Engineering +- :ref:`overall_status_pa3` β€” Architecture Design +- :ref:`overall_status_pa5` β€” Verification / Coverage + +Feasibility Check +----------------- + +Do we have everything in place to deliver the PI 1 focus items? + +**Tooling & Process** + +- [ ] The S-CORE process templates (requirement, architecture, inspection checklists) are finalised and available +- [ ] sphinx-needs / docs-as-code toolchain supports the required requirement types and attributes +- [ ] CI pipeline enforces ``valid`` status and broken-link checks on requirements and architecture documents + +**Inputs & Dependencies** + +- [ ] Stakeholder requirements are stable enough to derive component requirements (no major scope changes expected) +- [ ] Inter-module interfaces are sufficiently defined to allow architecture sign-off +- [ ] External dependencies (e.g. AUTOSAR, SOME/IP specs) needed for requirements are accessible + +**Definition of Done clarity** + +- [ ] Acceptance criteria for "requirements complete" and "architecture complete" are agreed upon by all module owners +- [ ] It is clear what "no open TBDs" means β€” a shared definition exists + +**Verification β€” how do we ensure it was done?** + +- [ ] Every module's ``chklst_req_inspection.rst`` and ``chklst_arc_inspection.rst`` are reviewed and merged into the module repo +- [ ] The overall status tracker (``overall_status.rst``) reflects the current state for each module +- [ ] All tracked findings from inspections have a linked GitHub issue with component + milestone set +- [ ] A final PI 1 review meeting confirms sign-off by module owners and process responsible + +**Integration in Reference Integration** + +- [ ] All modules with completed requirements and architecture are integrated in this reference integration repository +- [ ] The reference integration build passes (no broken imports, no unresolved need IDs) +- [ ] The documentation (this site) builds without warnings for all PI 1 modules +- [ ] The PI 1 status table in ``overall_status.rst`` is updated to reflect the final state diff --git a/docs/s_core_v_1/roadmap/pi2.rst b/docs/s_core_v_1/roadmap/pi2.rst new file mode 100644 index 00000000000..9c35c128708 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi2.rst @@ -0,0 +1,38 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 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 + # ******************************************************************************* + +PI 2 β€” 14 July – 7 September 2026 Β· `v0.9 `__ +===================================================================================================== + +**Focus: Implementation (PA4)** + +- A Module Verification Report must be extended for every module, showing at least **75%** + **component requirement test coverage** (linked via ``FullyVerifies`` / ``PartiallyVerifies`` + on ``comp_req__...`` IDs in unit tests and component integration tests) +- A Platform Verification Report must be created, showing at least **75%** + **feature requirement test coverage** (linked via ``FullyVerifies`` / ``PartiallyVerifies`` + on ``feat_req__...`` IDs in Feature Integration Tests) +- Detailed design documented for all modules (no open TBDs, status ``valid``) +- Fill in and approve ``chklst_impl_inspection.rst`` for all modules β€” each checklist point + is either completed or the finding is noted in the checklist with a tracked issue +- Remaining requirements (the ~20%) must have tracked tickets in the + `main S-CORE GitHub project `__ β€” + each ticket must have the **component** set and the **milestone** set + +**Current State** + +See the relevant tables in :doc:`overall_status`: + +- :ref:`overall_status_pa4` β€” Implementation +- :ref:`overall_status_pa5` β€” Verification / Coverage diff --git a/docs/s_core_v_1/roadmap/pi3.rst b/docs/s_core_v_1/roadmap/pi3.rst new file mode 100644 index 00000000000..2a2e380e592 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi3.rst @@ -0,0 +1,40 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 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 + # ******************************************************************************* + +PI 3 β€” 8 September – 2 November 2026 Β· `v1.0 `__ +======================================================================================================= + +**Focus: Verification (PA5)** + +- Implementation of all v1.0-relevant modules is **100% feature complete** β€” all ``valid`` feature + and component requirements are implemented and code is merged to ``main`` +- The ``chklst_req_inspection.rst`` (Requirements Inspection Checklist) is ``valid`` and complete + for all v1.0-relevant features and modules β€” all findings are fixed +- The ``chklst_arc_inspection.rst`` (Architecture Inspection Checklist) is ``valid`` and complete + for all v1.0-relevant features and modules β€” all findings are fixed +- The ``chklst_impl_inspection.rst`` (Implementation Inspection Checklist) is ``valid`` and complete + for all v1.0-relevant modules β€” all findings are fixed +- Component requirement test coverage (``FullyVerifies``/``PartiallyVerifies`` on ``comp_req__...``) + is at least **100%** for all modules β€” documented and approved in each module's + **Module Verification Report** (``wp__verification_module_ver_report``) +- Feature requirement test coverage (``FullyVerifies``/``PartiallyVerifies`` on ``feat_req__...``) + is at least **100%** for all modules β€” documented and approved in the + **Platform Verification Report** (``wp__verification_platform_ver_report``) +- Static code analysis tracking is set up for all modules + +**Current State** + +See the relevant tables in :doc:`overall_status`: + +- :ref:`overall_status_pa5` β€” Verification / Coverage diff --git a/docs/s_core_v_1/roadmap/pi4.rst b/docs/s_core_v_1/roadmap/pi4.rst new file mode 100644 index 00000000000..f945e23c89f --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi4.rst @@ -0,0 +1,40 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 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 + # ******************************************************************************* + +PI 4 β€” 3 November – 15 December 2026 Β· v1.0 Final *(milestone TBD)* +===================================================================== + +**Focus: Hardening & Release** + +- All inspection checklists are ``valid`` and complete for all v1.0-relevant features and modules: + + - ``chklst_req_inspection.rst`` β€” Requirements Inspection + - ``chklst_arc_inspection.rst`` β€” Architecture Inspection + - ``chklst_impl_inspection.rst`` β€” Implementation Inspection +- All module verification reports (``wp__verification_module_ver_report``) are approved by a Committer, containing: + + - **Requirements coverage**: all ``valid`` component requirements are linked to at least one test + via ``FullyVerifies`` / ``PartiallyVerifies`` β€” pass/fail verdict per requirement documented + - **Architecture coverage**: all component architecture elements are linked to at least one test β€” verdict documented + - **Structural coverage**: C0 (line) and C1 (branch) coverage per unit listed and meets targets + - **Static code analysis**: 0 open ``Critical`` or ``High`` findings + - **Dynamic code analysis**: 0 sanitizer findings (ASan/UBSan/LSan, TSan) +- The Platform Verification Report (``wp__verification_platform_ver_report``) is approved by a Committer, containing: + + - **Feature requirements coverage**: all ``valid`` feature requirements are linked to at least one + Feature Integration Test via ``FullyVerifies`` / ``PartiallyVerifies`` β€” pass/fail verdict per requirement documented + - **Feature architecture coverage**: all feature architecture elements are linked to at least one test β€” verdict documented + - **Feature Integration Test results**: pass/fail/not_run result per test case documented + - **Feature Integration Test logs**: test logs per test case attached +- Release notes and changelog for v1.0 finalised diff --git a/docs/s_core_v_1/roadmap/roadmap.rst b/docs/s_core_v_1/roadmap/roadmap.rst new file mode 100644 index 00000000000..b6d3c220f8e --- /dev/null +++ b/docs/s_core_v_1/roadmap/roadmap.rst @@ -0,0 +1,192 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 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 + # ******************************************************************************* + +.. _v1_0_release_plan: + +S-CORE v1.0 Roadmap +==================== + +This document describes the release planning for **S-CORE v1.0**, organized around the +`eclipse-score/score milestones `__, +and covers **two overarching project goals**: + +**1. Feature Completeness** β€” Selected modules are fully implemented and tested. + + .. image:: ../../_assets/sw_arch_v_1.drawio.svg + :alt: S-CORE v1.0 Software Architecture + :align: center + :width: 100% + +.. list-table:: + :widths: 30 70 + :header-rows: 1 + + * - Module + - Notes + * - `Baselibs `__ + - Base libraries (C++) + * - `Baselibs Rust `__ + - Base libraries (Rust) + * - `Communication `__ + - IPC / service-oriented communication + * - `Logging `__ + - Platform logging + * - `Persistency `__ + - Data persistence + * - `Time `__ + - Time services + * - `Config Management `__ + - Configuration management + * - `Lifecycle `__ + - Lifecycle management + * - `Security/Crypto `__ + - Cryptographic services + * - `Diagnosis `__ + - On-board diagnostics / DTC management + * - `Some/IP `__ + - SOME/IP communication middleware + +**2. Qualifiable State** + +All modules follow the S-CORE process and use S-CORE tools for +artifact generation across the following process areas: **Requirements Engineering**, **Architecture Design**, **Implementation**, **Verification**. + +Management +^^^^^^^^^^ + +.. grid:: 2 4 4 4 + :class-container: score-grid score-grid-compact + + .. grid-item-card:: `Platform Management `__ + :class-card: card-pa-grey + + Manage the common platform, its modules and integration. + + .. grid-item-card:: `Safety Management `__ + :class-card: card-pa-grey + + Plan and oversee safety activities across the project lifecycle. + + .. grid-item-card:: `Security Management `__ + :class-card: card-pa-grey + + Plan and oversee cybersecurity activities across the project lifecycle. + + .. grid-item-card:: `Quality Management `__ + :class-card: card-pa-grey + + Define and monitor quality objectives, measures and improvements. + + .. grid-item-card:: `Change Management `__ + :class-card: card-pa-grey + + Control and track changes to work products and configurations. + + .. grid-item-card:: `Problem Resolution `__ + :class-card: card-pa-grey + + Identify, analyse and resolve problems found during development. + + .. grid-item-card:: `Release Management `__ + :class-card: card-pa-grey + + Plan, prepare and control the release of deliverables. + + .. grid-item-card:: `Process Management `__ + :class-card: card-pa-grey + + Define, deploy and improve the organisational process. + +Development +^^^^^^^^^^^ + +.. grid:: 1 2 3 4 + :class-container: score-grid + + .. grid-item-card:: `Requirements Engineering `__ + :class-card: card-pa-highlight + + Elicit, specify and manage stakeholder and system requirements. + + .. grid-item-card:: `Architecture Design `__ + :class-card: card-pa-highlight + + Define and document the system and software architecture. + + .. grid-item-card:: `Implementation `__ + :class-card: card-pa-highlight + + Develop and unit-test software units according to the design. + + .. grid-item-card:: `Verification `__ + :class-card: card-pa-highlight + + Verify that work products fulfil their specified requirements. + + .. grid-item-card:: `Safety Analysis `__ + :class-card: card-pa-grey + + Identify and assess safety hazards and derive mitigation measures. + + .. grid-item-card:: `Security Analysis `__ + :class-card: card-pa-grey + + Identify and assess security threats and derive mitigation measures. + +Support +^^^^^^^ + +.. grid:: 1 2 3 4 + :class-container: score-grid + + .. grid-item-card:: `Configuration Management `__ + :class-card: card-pa-grey + + Control versions and baselines of all project artefacts. + + .. grid-item-card:: `Tool Management `__ + :class-card: card-pa-grey + + Qualify and manage tools used in the development process. + + .. grid-item-card:: `Documentation Management `__ + :class-card: card-pa-grey + + Plan, create and maintain project and product documentation. + +.. note:: + + We will also work on the other process areas, but they are not in the main focus for S-CORE v1.0 + (shown grayed out above). + +Status & Next Steps +------------------- + +.. raw:: html + :file: ../../_assets/pi_timeline_2026.drawio.svg + +.. raw:: html + +
+ +.. toctree:: + :titlesonly: + :maxdepth: 1 + + Overall Status + PI 1 β€” Requirements Engineering + Architecture Design + PI 2 β€” Implementation + PI 3 β€” Verification + PI 4 β€” Hardening & Release + diff --git a/docs/sw_components.rst b/docs/sw_components.rst new file mode 100644 index 00000000000..3d58fd8dca5 --- /dev/null +++ b/docs/sw_components.rst @@ -0,0 +1,26 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 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 + # ******************************************************************************* + +Modules +======= + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + _collections/score_persistency/docs/index + _collections/score_orchestrator/docs/index + _collections/score_kyron/docs/index + _collections/score_baselibs_rust/docs/index + _collections/score_logging/docs/index diff --git a/docs/verification_report/platform_verification_report.rst b/docs/verification_report/platform_verification_report.rst index 63822f371e3..0889c4e696c 100644 --- a/docs/verification_report/platform_verification_report.rst +++ b/docs/verification_report/platform_verification_report.rst @@ -75,6 +75,7 @@ The following referenced summary pages exist only. .. toctree:: :titlesonly: + :hidden: Unit Tests Summary Coverage Analysis Summary diff --git a/scripts/quality_runners.py b/scripts/quality_runners.py index c3786153f48..42ed8dd0dc4 100644 --- a/scripts/quality_runners.py +++ b/scripts/quality_runners.py @@ -283,7 +283,7 @@ def parse_arguments() -> argparse.Namespace: def main() -> bool: args = parse_arguments() args.coverage_output_dir.mkdir(parents=True, exist_ok=True) - path_to_docs = Path(__file__).parent.parent / "docs/verification_report" + path_to_docs = Path(__file__).parent.parent / "docs/s_core_v_1/verification" known = load_known_good(args.known_good_path.resolve()) From 43c93f3cdb0b5beaafdb69dad1f3bf3c79869364 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Thu, 28 May 2026 08:53:54 +0000 Subject: [PATCH 2/7] Fix CI: write quality reports to docs/verification_report The path docs/s_core_v_1/verification did not exist and was not created, causing the unit-test/coverage script to crash with FileNotFoundError. Use the existing docs/verification_report directory (and create it if missing) for both the script output and the workflow summary step. --- .github/workflows/test_and_docs.yml | 12 ++++++------ scripts/quality_runners.py | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_and_docs.yml b/.github/workflows/test_and_docs.yml index c25c643e0b9..d6088fd0ee5 100644 --- a/.github/workflows/test_and_docs.yml +++ b/.github/workflows/test_and_docs.yml @@ -74,16 +74,16 @@ jobs: - name: Publish build summary if: always() run: | - if [ -f docs/s_core_v_1/verification/unit_test_summary.md ]; then - cat docs/s_core_v_1/verification/unit_test_summary.md >> "$GITHUB_STEP_SUMMARY" + if [ -f docs/verification_report/unit_test_summary.md ]; then + cat docs/verification_report/unit_test_summary.md >> "$GITHUB_STEP_SUMMARY" else - echo "No build summary file found (docs/s_core_v_1/verification/unit_test_summary.md)" >> "$GITHUB_STEP_SUMMARY" + echo "No build summary file found (docs/verification_report/unit_test_summary.md)" >> "$GITHUB_STEP_SUMMARY" fi echo "" >> "$GITHUB_STEP_SUMMARY" # Add a newline for better formatting - if [ -f docs/s_core_v_1/verification/coverage_summary.md ]; then - cat docs/s_core_v_1/verification/coverage_summary.md >> "$GITHUB_STEP_SUMMARY" + if [ -f docs/verification_report/coverage_summary.md ]; then + cat docs/verification_report/coverage_summary.md >> "$GITHUB_STEP_SUMMARY" else - echo "No coverage summary file found (docs/s_core_v_1/verification/coverage_summary.md)" >> "$GITHUB_STEP_SUMMARY" + echo "No coverage summary file found (docs/verification_report/coverage_summary.md)" >> "$GITHUB_STEP_SUMMARY" fi - name: Create archive of test reports if: github.ref_type == 'tag' diff --git a/scripts/quality_runners.py b/scripts/quality_runners.py index 42ed8dd0dc4..e7c21f24d68 100644 --- a/scripts/quality_runners.py +++ b/scripts/quality_runners.py @@ -283,7 +283,8 @@ def parse_arguments() -> argparse.Namespace: def main() -> bool: args = parse_arguments() args.coverage_output_dir.mkdir(parents=True, exist_ok=True) - path_to_docs = Path(__file__).parent.parent / "docs/s_core_v_1/verification" + path_to_docs = Path(__file__).parent.parent / "docs/verification_report" + path_to_docs.mkdir(parents=True, exist_ok=True) known = load_known_good(args.known_good_path.resolve()) From 1ea37cb30bbf8f41417e61cd502b290eae8e3836 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Thu, 28 May 2026 09:20:51 +0000 Subject: [PATCH 3/7] docs: add missing pages to root toctree Sphinx (warnings-as-errors) failed because docs/s_core_v_1/index.rst and docs/verification_report/platform_verification_report.rst were referenced via grid-cards but not listed in any toctree. --- .github/skills/overall-status/SKILL.md | 17 ++----- docs/_assets/custom.css | 11 +++++ docs/_assets/pi_timeline_2026.drawio.svg | 12 ++--- docs/index.rst | 14 ++++-- docs/s_core_v_1/roadmap/overall_status.rst | 55 +++------------------- docs/s_core_v_1/roadmap/pi1.rst | 14 +++--- docs/s_core_v_1/roadmap/pi2.rst | 6 ++- docs/s_core_v_1/roadmap/pi3.rst | 6 ++- docs/s_core_v_1/roadmap/pi4.rst | 6 ++- docs/s_core_v_1/roadmap/roadmap.rst | 31 +++++++----- 10 files changed, 78 insertions(+), 94 deletions(-) diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md index 0439c00ade7..26f6336497a 100644 --- a/.github/skills/overall-status/SKILL.md +++ b/.github/skills/overall-status/SKILL.md @@ -1,6 +1,6 @@ --- name: overall-status -description: "Update the Feature and Process Status table in docs/s_core_v_1/roadmap/overall_status.rst. Use when: checking module status, updating feature status tracker, refreshing work product status, deriving completion status from eclipse-score GitHub repos for Baselibs, Communication, Logging, Orchestrator, Persistency, Time, Config Management, Lifecycle, Security/Crypto." +description: "Update the Feature and Process Status table in docs/s_core_v_1/roadmap/overall_status.rst. Use when: checking module status, updating feature status tracker, refreshing work product status, deriving completion status from eclipse-score GitHub repos for Baselibs, Communication, Logging, Persistency, Time, Config Management, Lifecycle, Security/Crypto." argument-hint: "optional: module name or 'all'" --- @@ -151,6 +151,8 @@ The pie chart diagrams are computed live by sphinx-needs at build time β€” they ## Modules and Repos +> **EXCLUDED MODULES**: **Orchestrator** is intentionally not tracked in `overall_status.rst` and must NOT be added to any of the PA tables, even though `score_orchestrator` is pinned in `known_good.json` and the module exists in `eclipse-score/score` / `eclipse-score/orchestrator`. Do not query or generate rows for it. + > **IMPORTANT**: Each module has its own dedicated repo in the `eclipse-score` GitHub org AND content in `eclipse-score/score`. **Always check BOTH** the module's own repo and `eclipse-score/score` when counting needs elements. Never rely on `eclipse-score/score` alone. > **VERSION PINNING**: Always use the commit hash pinned in `known_good.json` (column `known_good.json key`) β€” **never use `main`** for source repos. This ensures data matches exactly the versions that `reference_integration` is currently testing against. For modules not listed in `known_good.json` (marked `β€”`), fall back to `main`. @@ -160,7 +162,6 @@ The pie chart diagrams are computed live by sphinx-needs at build time β€” they | Baselibs | `score_baselibs` | `eclipse-score/baselibs` (no sphinx-needs RST so far) | `docs/modules/baselibs/**`, `docs/features/baselibs/docs` | | Communication | `score_communication` | `eclipse-score/communication` (no sphinx-needs RST so far) | `docs/modules/communication/**`, `docs/features/communication/docs` | | Logging | `score_logging` | `eclipse-score/logging` (no sphinx-needs RST so far) | `docs/modules/logging/**`, `docs/features/analysis-infra/logging/docs` | -| Orchestrator | `score_orchestrator` | `eclipse-score/orchestrator` | `docs/modules/orchestrator/**`, `docs/features/orchestration` | | Persistency | `score_persistency` | `eclipse-score/persistency` β€” has `docs/persistency/kvs/` with comp_req/comp_arc βœ… | `docs/features/persistency` | | Time | `β€”` (not in known_good) | `eclipse-score/inc_time` (no sphinx-needs RST so far) | `docs/features/time/docs` | | Config Management | `β€”` (not in known_good) | `eclipse-score/config_management` (no sphinx-needs RST so far) | `docs/features/configuration` | @@ -197,7 +198,7 @@ for repo in ["eclipse-score/score", "eclipse-score/"]: - **βœ… Available**: A closed GitHub Issue with "Feature Request" or "Contribution Request" for the module exists in `eclipse-score/score` - **❌ Open**: No such issue found -Known closed CRs: Baselibs (#549), Communication (#69), Logging (#68), Orchestrator (#273), Persistency (#95), Time (#910), Config Management (#754, #1764), Lifecycle (#909), Security/Crypto (#905) +Known closed CRs: Baselibs (#549), Communication (#69), Logging (#68), Persistency (#95), Time (#910), Config Management (#754, #1764), Lifecycle (#909), Security/Crypto (#905) ### Process Area 2 β€” Feature Requirements - **βœ… Available**: 100% of individual needs elements (e.g. `.. feat_req::`) inside the requirements doc have `:status: valid` @@ -260,7 +261,7 @@ See :ref:`verification_workflows`. CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) or with - disabled coverage extraction (Orchestrator) show ❌ Open. + Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) show ❌ Open. .. note:: @@ -379,7 +380,6 @@ gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ | Baselibs | `score_baselibs_cpp` | `score_baselibs_rust_rust` | | Communication | `score_communication_cpp` | β€” (disabled) | | Logging | `score_logging_cpp` | `score_logging_rust` | -| Orchestrator | β€” (disabled) | β€” (disabled) | | Persistency | `score_persistency_cpp` | `score_persistency_rust` | | Time | not in CI | β€” | | Config Mgmt | not in CI | β€” | @@ -459,7 +459,6 @@ Static analysis CI exists at two levels: | Baselibs | `βœ… 0 findings` | [clang-tidy lint.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/lint.yml) | | Communication | `πŸ”„ Configured` | [static_analysis.bazelrc](https://github.com/eclipse-score/communication/blob/main/quality/static_analysis/static_analysis.bazelrc) + [CodeQL/MISRA](https://github.com/eclipse-score/communication/tree/main/quality/static_analysis) β€” no CI enforcement yet | | Logging | `❌ Open` | β€” | -| Orchestrator | `βœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/orchestrator/blob/main/.github/workflows/clippy.yml) | | Persistency | `βœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/persistency/blob/main/.github/workflows/clippy.yml) | | Time | `❌ Open` | β€” | | Config Mgmt | `βœ… 0 findings` | [clang-tidy static-analysis.yml](https://github.com/eclipse-score/config_management/blob/main/.github/workflows/static-analysis.yml) | @@ -495,7 +494,6 @@ Dynamic analysis is performed via sanitizer CI workflows (ASan/UBSan/LSan for C+ | Baselibs | `βœ… 0 findings` | [sanitizers_linux.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/sanitizers_linux.yml) β€” ASan+UBSan+LSan | | Communication | `βœ… 0 findings` | [ASan/UBSan/LSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/address_undefined_behavior_leak_sanitizer.yml), [TSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/thread_sanitizer.yml) | | Logging | `❌ Open` | β€” | -| Orchestrator | `❌ Open` | β€” | | Persistency | `❌ Open` | β€” | | Time | `❌ Open` | β€” | | Config Mgmt | `❌ Open` | β€” | @@ -560,7 +558,6 @@ REFS = { "baselibs": pinned_ref("score_baselibs"), "communication": pinned_ref("score_communication"), "logging": pinned_ref("score_logging"), - "orchestrator": pinned_ref("score_orchestrator"), "persistency": pinned_ref("score_persistency"), "lifecycle": pinned_ref("score_lifecycle_health"), "inc_time": "main", # not in known_good @@ -597,7 +594,6 @@ tree_score = get_tree("eclipse-score/score", REFS["score"]) tree_baselibs = get_tree("eclipse-score/baselibs", REFS["baselibs"]) tree_comm = get_tree("eclipse-score/communication", REFS["communication"]) tree_log = get_tree("eclipse-score/logging", REFS["logging"]) -tree_orch = get_tree("eclipse-score/orchestrator", REFS["orchestrator"]) tree_pers = get_tree("eclipse-score/persistency", REFS["persistency"]) tree_life = get_tree("eclipse-score/lifecycle", REFS["lifecycle"]) tree_time = get_tree("eclipse-score/inc_time", REFS["inc_time"]) @@ -694,9 +690,6 @@ Use these exact filters when calling `count_files()`. Verify printed file counts | Baselibs | Comp. Arch | score | `lambda p: 'modules/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | | Baselibs | Arch. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_arc_inspection' in p` | | Baselibs | Impl. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_impl_inspection' in p` | -| Orchestrator | Feat. Req | score | `lambda p: 'features/orchestration' in p and 'requirements' in p and p.endswith('.rst')` | -| Orchestrator | Comp. Req | score | `lambda p: 'modules/orchestrator' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | -| Orchestrator | Comp. Arch | score | `lambda p: 'modules/orchestrator' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | | Persistency | Feat. Req | score | `lambda p: 'features/persistency' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | | Persistency | Feat. Arch | score | `lambda p: 'features/persistency' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | | Persistency | Comp. Req | pers | `lambda p: 'kvs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | diff --git a/docs/_assets/custom.css b/docs/_assets/custom.css index e98f41114c9..79c9446587b 100644 --- a/docs/_assets/custom.css +++ b/docs/_assets/custom.css @@ -155,3 +155,14 @@ body.wide-content-page .bd-content .bd-article-container { padding: 0.4rem 0.6rem; font-size: 0.78rem; } + +/* --------------------------------------------------------------------------- + * Landing-page grid cards (docs/index.rst): white text, original background. + * ---------------------------------------------------------------------------*/ + +.landing-grid .sd-card *, +.landing-grid .sd-card a, +.landing-grid .sd-card a:visited, +.landing-grid .sd-card a:hover { + color: #ffffff !important; +} diff --git a/docs/_assets/pi_timeline_2026.drawio.svg b/docs/_assets/pi_timeline_2026.drawio.svg index f108e686516..fc166c4f579 100644 --- a/docs/_assets/pi_timeline_2026.drawio.svg +++ b/docs/_assets/pi_timeline_2026.drawio.svg @@ -10,7 +10,7 @@ - PI 1 v0.8 Β· May 13–Jul 13 + Rel v0.8 Β· May 13–Jul 13 @@ -20,7 +20,7 @@ - PI 2 v0.9 Β· Jul 14–Sep 7 + Rel v0.9 Β· Jul 14–Sep 7 @@ -30,7 +30,7 @@ - PI 3 v1.0 Β· Sep 8–Nov 2 + Rel v0.10 Β· Sep 8–Nov 2 @@ -40,7 +40,7 @@ - PI 4 Final Β· Nov 3–Dec 15 + Rel v1.0 Β· Nov 3–Dec 15 @@ -276,13 +276,13 @@
- πŸš€ v1.0 Final + πŸš€ v1.0
- πŸš€ v1.0 Final + πŸš€ v1.0 diff --git a/docs/index.rst b/docs/index.rst index 743e1acb746..58904495804 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -34,9 +34,10 @@ documentation set that downstream product distributions can build on. .. grid:: 1 1 3 3 :gutter: 3 + :class-container: landing-grid .. grid-item-card:: πŸ“Š Status & Roadmap - :link: s_core_v_1/index + :link: s_core_v_1/roadmap/roadmap :link-type: doc :doc:`S-Core v1.0 Roadmap ` and PI planning. @@ -73,7 +74,10 @@ documentation set that downstream product distributions can build on. .. toctree:: :hidden: - sw_components - integration_process/integration_process - process_methods_tools - s_core_v_1/releases/releases + Modules + Integration Process + Integration Status + Process & Tools + S-Core v1.0 + Releases + Verification Report diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst index c3aa0c932d3..586fd94678a 100644 --- a/docs/s_core_v_1/roadmap/overall_status.rst +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -109,7 +109,7 @@ See :ref:`chm_change_workflows`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(change_management) -.. rubric:: Implementation status: πŸ”„ 92% (11/12 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 91% (10/11 deliverables complete) .. list-table:: :header-rows: 1 @@ -128,9 +128,6 @@ See :ref:`chm_change_workflows`. * - Logging - βœ… Available - * - Orchestrator - - βœ… Available - * - Persistency - βœ… Available @@ -202,7 +199,7 @@ See :ref:`requirements_workflows`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(requirements_engineering) -.. rubric:: Implementation status: πŸ”„ 25% (9/36 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 27% (9/33 deliverables complete) .. list-table:: :header-rows: 1 @@ -240,14 +237,6 @@ See :ref:`requirements_workflows`. - ❌ Open - ❌ Open - * - Orchestrator - - πŸ”„ 83% (26/31) - - πŸ”„ 0% (0/2) - - πŸ”„ 0% (0/2) - - | `executor `__ - | `orchestrator `__ - * - Persistency - βœ… Available (41/41) - πŸ”„ 94% (36/38) @@ -351,7 +340,7 @@ See :ref:`arch_workflow`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(architecture_design) -.. rubric:: Implementation status: πŸ”„ 17% (6/36 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 15% (5/33 deliverables complete) .. list-table:: :header-rows: 1 @@ -389,14 +378,6 @@ See :ref:`arch_workflow`. - βœ… Available (3/3) - ❌ Open - * - Orchestrator - - πŸ”„ 66% (4/6) - - βœ… Available (27/27) - - πŸ”„ 0% (0/2) - - | `executor `__ - | `orchestrator `__ - * - Persistency - βœ… Available (12/12) - πŸ”„ 25% (1/4) @@ -487,7 +468,7 @@ See :ref:`workflow_implementation`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(implementation) -.. rubric:: Implementation status: πŸ”„ 38% (18/48 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 36% (16/44 deliverables complete) .. list-table:: :header-rows: 1 @@ -528,12 +509,6 @@ See :ref:`workflow_implementation`. - ❌ Open - ❌ Open - * - Orchestrator - - βœ… Available - - βœ… Available (~38,300 LOC) `orchestrator `__ - - ❌ Open - - ❌ Open - * - Persistency - βœ… Available - βœ… Available (~8,700 LOC) `persistency `__ @@ -636,8 +611,8 @@ See :ref:`verification_workflows`. **C0/C1 Coverage** data is sourced from the `reference_integration `__ CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. - Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) or with - disabled coverage extraction (Orchestrator) show ❌ Open. + Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) + show ❌ Open. .. note:: @@ -652,7 +627,7 @@ See :ref:`verification_workflows`. ``--config=asan_ubsan_lsan``, TSan via ``--config=tsan``). All listed workflows are zero-tolerance, so a passing ``main`` branch implies **0 sanitizer findings**. -.. rubric:: Implementation status: πŸ”„ 29% (25/87 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 27% (21/79 deliverables complete) .. list-table:: :header-rows: 1 @@ -728,22 +703,6 @@ See :ref:`verification_workflows`. - ❌ Open - ❌ Open - * - Orchestrator - - βœ… Available - - | (2 tests) - - ❌ Open - - βœ… Available (9 tests) - - βœ… Available (3 tests) - - | `reference_integration `__ (cross-module) - - βœ… 0 findings - - | `Clippy `__ - - ❌ Open - - ❌ Open - - ❌ Open - * - Persistency - βœ… Available diff --git a/docs/s_core_v_1/roadmap/pi1.rst b/docs/s_core_v_1/roadmap/pi1.rst index 9547f0f2c63..8a7013f0b70 100644 --- a/docs/s_core_v_1/roadmap/pi1.rst +++ b/docs/s_core_v_1/roadmap/pi1.rst @@ -12,8 +12,10 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -πŸš€ PI 1 β€” 13 May – 13 July 2026 Β· `v0.8 `__ -================================================================================================== +πŸš€ Release Gate v0.8 β€” 13 May – 13 July 2026 +================================================= + +Milestone: `score/v0.8 `__ Focus: Requirements Engineering (PA2) + Architecture Design (PA3) ------------------------------------------------------------------ @@ -46,7 +48,7 @@ See the relevant tables in :doc:`overall_status`: Feasibility Check ----------------- -Do we have everything in place to deliver the PI 1 focus items? +Do we have everything in place to deliver the Release Gate v0.8 focus items? **Tooling & Process** @@ -70,11 +72,11 @@ Do we have everything in place to deliver the PI 1 focus items? - [ ] Every module's ``chklst_req_inspection.rst`` and ``chklst_arc_inspection.rst`` are reviewed and merged into the module repo - [ ] The overall status tracker (``overall_status.rst``) reflects the current state for each module - [ ] All tracked findings from inspections have a linked GitHub issue with component + milestone set -- [ ] A final PI 1 review meeting confirms sign-off by module owners and process responsible +- [ ] A final Release Gate v0.8 review meeting confirms sign-off by module owners and process responsible **Integration in Reference Integration** - [ ] All modules with completed requirements and architecture are integrated in this reference integration repository - [ ] The reference integration build passes (no broken imports, no unresolved need IDs) -- [ ] The documentation (this site) builds without warnings for all PI 1 modules -- [ ] The PI 1 status table in ``overall_status.rst`` is updated to reflect the final state +- [ ] The documentation (this site) builds without warnings for all Release Gate v0.8 modules +- [ ] The Release Gate v0.8 status table in ``overall_status.rst`` is updated to reflect the final state diff --git a/docs/s_core_v_1/roadmap/pi2.rst b/docs/s_core_v_1/roadmap/pi2.rst index 9c35c128708..d504f195a11 100644 --- a/docs/s_core_v_1/roadmap/pi2.rst +++ b/docs/s_core_v_1/roadmap/pi2.rst @@ -12,8 +12,10 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -PI 2 β€” 14 July – 7 September 2026 Β· `v0.9 `__ -===================================================================================================== +Release Gate v0.9 β€” 14 July – 7 September 2026 +============================================== + +Milestone: `score/v0.9 `__ **Focus: Implementation (PA4)** diff --git a/docs/s_core_v_1/roadmap/pi3.rst b/docs/s_core_v_1/roadmap/pi3.rst index 2a2e380e592..85ab0c41f85 100644 --- a/docs/s_core_v_1/roadmap/pi3.rst +++ b/docs/s_core_v_1/roadmap/pi3.rst @@ -12,8 +12,10 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -PI 3 β€” 8 September – 2 November 2026 Β· `v1.0 `__ -======================================================================================================= +Release Gate v0.10 β€” 8 September – 2 November 2026 +=================================================== + +Milestone: `score/v0.10 `__ **Focus: Verification (PA5)** diff --git a/docs/s_core_v_1/roadmap/pi4.rst b/docs/s_core_v_1/roadmap/pi4.rst index f945e23c89f..1ff54cd51df 100644 --- a/docs/s_core_v_1/roadmap/pi4.rst +++ b/docs/s_core_v_1/roadmap/pi4.rst @@ -12,8 +12,10 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -PI 4 β€” 3 November – 15 December 2026 Β· v1.0 Final *(milestone TBD)* -===================================================================== +Release Gate v1.0 β€” 3 November – 15 December 2026 +================================================== + +Milestone: `score/v1.0 `__ **Focus: Hardening & Release** diff --git a/docs/s_core_v_1/roadmap/roadmap.rst b/docs/s_core_v_1/roadmap/roadmap.rst index b6d3c220f8e..7546882f4ee 100644 --- a/docs/s_core_v_1/roadmap/roadmap.rst +++ b/docs/s_core_v_1/roadmap/roadmap.rst @@ -21,12 +21,15 @@ This document describes the release planning for **S-CORE v1.0**, organized arou `eclipse-score/score milestones `__, and covers **two overarching project goals**: -**1. Feature Completeness** β€” Selected modules are fully implemented and tested. +Feature Completeness +-------------------- - .. image:: ../../_assets/sw_arch_v_1.drawio.svg - :alt: S-CORE v1.0 Software Architecture - :align: center - :width: 100% +Selected modules are fully implemented and tested. + +.. image:: ../../_assets/sw_arch_v_1.drawio.svg + :alt: S-CORE v1.0 Software Architecture + :align: center + :width: 100% .. list-table:: :widths: 30 70 @@ -54,10 +57,13 @@ and covers **two overarching project goals**: - Cryptographic services * - `Diagnosis `__ - On-board diagnostics / DTC management + * - `NM `__ + - Network management * - `Some/IP `__ - SOME/IP communication middleware -**2. Qualifiable State** +Qualifiable State +----------------- All modules follow the S-CORE process and use S-CORE tools for artifact generation across the following process areas: **Requirements Engineering**, **Architecture Design**, **Implementation**, **Verification**. @@ -67,6 +73,7 @@ Management .. grid:: 2 4 4 4 :class-container: score-grid score-grid-compact + :gutter: 4 .. grid-item-card:: `Platform Management `__ :class-card: card-pa-grey @@ -113,6 +120,7 @@ Development .. grid:: 1 2 3 4 :class-container: score-grid + :gutter: 4 .. grid-item-card:: `Requirements Engineering `__ :class-card: card-pa-highlight @@ -135,7 +143,7 @@ Development Verify that work products fulfil their specified requirements. .. grid-item-card:: `Safety Analysis `__ - :class-card: card-pa-grey + :class-card: card-pa-highlight Identify and assess safety hazards and derive mitigation measures. @@ -149,6 +157,7 @@ Support .. grid:: 1 2 3 4 :class-container: score-grid + :gutter: 4 .. grid-item-card:: `Configuration Management `__ :class-card: card-pa-grey @@ -185,8 +194,8 @@ Status & Next Steps :maxdepth: 1 Overall Status - PI 1 β€” Requirements Engineering + Architecture Design - PI 2 β€” Implementation - PI 3 β€” Verification - PI 4 β€” Hardening & Release + Release Gate v0.8 β€” Requirements Engineering + Architecture Design + Release Gate v0.9 β€” Implementation + Release Gate v0.10 β€” Verification + Release Gate v1.0 β€” Hardening & Release From 274760d2d5db4cc4f950fd2e4784074ca5ae1364 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Tue, 2 Jun 2026 12:16:05 +0000 Subject: [PATCH 4/7] docs(roadmap): refresh overall_status against pinned score ref - Repin score from 5b8a1e34 to 1b51518e (81 source-link URLs) - Baselibs PA3 Component Architecture: 164/166 -> 165/167 skill(overall-status): clean up and fix checklist counter - Restructure SKILL.md (1063 -> 517 lines): drop migration notes, duplicated callouts, and the empty 'Complete RST Snapshot' section. - Specify counting model in plain prose (no formulas). - Fix count_checklist_status: chklst_*.rst stores :status: indented inside the .. document:: block, not at column 0. Updated section 3.3 and the Step-2 helper accordingly. --- .github/skills/overall-status/SKILL.md | 1113 +++++++------------- docs/s_core_v_1/roadmap/overall_status.rst | 228 ++-- 2 files changed, 508 insertions(+), 833 deletions(-) diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md index 26f6336497a..162d4546939 100644 --- a/.github/skills/overall-status/SKILL.md +++ b/.github/skills/overall-status/SKILL.md @@ -6,525 +6,300 @@ argument-hint: "optional: module name or 'all'" # Feature and Process Status Tracker -Derives and updates the completion status table in -`docs/s_core_v_1/roadmap/overall_status.rst` by querying the live eclipse-score GitHub -repositories. +Refreshes the table in `docs/s_core_v_1/roadmap/overall_status.rst` from +live `eclipse-score` GitHub repositories pinned via `known_good.json`. -> **Navigation (updated 2026-05)**: `overall_status.rst` is linked from -> `docs/s_core_v_1/roadmap/roadmap.rst` under the **Status & Goals** toctree section. -> The file was moved from `docs/s_core_v_1/status/` to `docs/s_core_v_1/roadmap/`. -> The `status/` folder has been removed. The roadmap itself is split into sub-pages: -> `roadmap.rst`, `pi1.rst` – `pi4.rst`, `overall_status.rst`, all under `docs/s_core_v_1/roadmap/`. - -## When to Use - -- Refresh the tracker table with current data -- After a sprint/release to check progress -- When a module team reports a deliverable is done +--- -## RST File Structure +## 1. Scope -`docs/s_core_v_1/roadmap/overall_status.rst` consists of a file header followed by 5 -Process Area sections. Each section has this exact pattern: +Tracked modules (one table row each, in this order): -```rst -Process Area N β€” -*********************** +``` +Baselibs Β· Communication Β· Logging Β· Persistency Β· Time Β· Config Mgmt +Lifecycle Β· Security/Crypto Β· Diagnostic Services Β· NM Β· Some/IP +``` - - -See :ref:``. +Excluded: **Orchestrator** β€” never add a row for it. -.. rubric:: Process Status +Five process areas, each with its own table: -.. list-table:: - :header-rows: 1 - :class: compact-overview-table +| PA | Title | sphinx-needs tag | Columns | +|---|---|---|---| +| PA1 | Change Management | `change_management` | CR approved | +| PA2 | Requirements Engineering | `requirements_engineering` | Feature Req Β· Component Req Β· Req. Inspection | +| PA3 | Architecture Design | `architecture_design` | Feature Arch Β· Component Arch Β· Arch. Inspection | +| PA4 | Implementation | `implementation` | SW Dev Plan Β· Code Β· Detailed Design Β· Impl. Inspection | +| PA5 | Verification | `verification` | Unit Tests Β· C0/C1 Cov Β· Comp. IT Β· Feat. IT Β· Static Β· Dynamic Β· Module Ver. Rpt Β· Platform Ver. Rpt | - * - Process req. status - - ISO 26262 std_req status - - Req. verification status - * - +--- - .. rst-class:: small-pie-cell +## 2. Repos and pinned refs - .. needpie:: - :labels: Valid, Draft, Invalid, Other - :colors: LimeGreen, Gold, LightCoral, LightGray +Each module has content in **`eclipse-score/score`** (feature-level) and in its +**own repo** (component-level). Always query both. - type == 'gd_req' and is_external == False and status == 'valid' and '' in tags - type == 'gd_req' and is_external == False and status == 'draft' and '' in tags - type == 'gd_req' and is_external == False and status == 'invalid' and '' in tags - type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and '' in tags - - +| Module | `known_good.json` key | Own repo | Score-side path | +|---|---|---|---| +| Baselibs | `score_baselibs` | `eclipse-score/baselibs` | `docs/{features,modules}/baselibs/**` | +| Communication | `score_communication` | `eclipse-score/communication` | `docs/{features,modules}/communication/**` | +| Logging | `score_logging` | `eclipse-score/logging` | `docs/features/analysis-infra/logging/**`, `docs/modules/logging/**` | +| Persistency | `score_persistency` | `eclipse-score/persistency` (`docs/persistency/kvs/**`) | `docs/features/persistency/**` | +| Time | β€” | `eclipse-score/inc_time` | `docs/features/time/**` | +| Config Mgmt | β€” | `eclipse-score/config_management` | `docs/features/configuration/**` | +| Lifecycle | `score_lifecycle_health` | `eclipse-score/lifecycle` (`docs/module/health_monitor/**`) | `docs/features/lifecycle/**` | +| Security/Crypto | β€” | `eclipse-score/inc_security_crypto` | `docs/features/security_crypto/**` | +| Some/IP | β€” | `eclipse-score/inc_someip_gateway` | `docs/features/communication/some_ip_gateway/**` | + +> `eclipse-score/score` itself is pinned under key **`score_platform`** in the +> **`tooling`** section of `known_good.json` (not `target_sw`). Use the helper +> `pinned_ref()` in Β§6 below. + +> **TRLC files** (`.trlc`) are not parsed by this skill. `eclipse-score/communication` +> keeps real component requirements in +> `score/mw/com/requirements/component_requirements/component_requirements_ipc.trlc`; +> render them in the cell as `0/0 comp_req [TRLC]` plus a link. - .. rst-class:: small-pie-cell +--- - .. needpie:: - :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other - :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver - :filter-func: needs_filters.std_req_status_for_area() +## 3. Counting model - - +For each deliverable column a set of allowed directive types is defined +(see Β§3.1). For every RST file under the deliverable's path filter, count +the `.. ::` directive blocks whose immediately-following indented +`:status:` field equals `valid` (= **valid**) and the total number of such +blocks regardless of status (= **total**). Sum both numbers across all files. - .. rst-class:: small-pie-cell +The cell renders as: - .. needpie:: - :labels: Automated, Waiting for automation, Inspection list, Other - :colors: LimeGreen, Gold, LightBlue, LightGray - :filter-func: needs_filters.area_verification_status() - -.. rubric:: Implementation status: πŸ”„ NN% (X/Y deliverables complete) - -.. list-table:: - :header-rows: 1 - :stub-columns: 1 - :class: module-phase-tracker-table +| Condition | Output | +|---|---| +| total = 0 | `❌ Open` | +| valid = total > 0 | `βœ… Available (valid/total)` | +| 0 ≀ valid < total | `πŸ”„ NN% (valid/total)`, `NN = floor(100 Β· valid / total)` | - * - **Module** - - **** - - **** +> valid = 0 with total > 0 renders as `πŸ”„ 0% (0/total)`, **never** `❌ Open`. +> `❌ Open` means *no files / no directives found at all*. - * - - - - ... -``` +### 3.1 Allowed directive types per deliverable -**Important rules:** -- `.. needpie::` does **NOT** support a `:title:` option β€” omit it entirely (causes build errors) -- The pie chart table uses CSS class `compact-overview-table`; each cell needs `.. rst-class:: small-pie-cell` before its `.. needpie::` -- **Pie chart sizing**: `custom.css` sets `compact-overview-table` to `width: 100%; table-layout: fixed` with each column at `width: 33%`. The generated `` elements have their sphinx-needs fixed pixel sizes overridden via `width: 100% !important; max-width: 100% !important; height: auto !important` (selectors: `.small-pie-cell img`, `.compact-overview-table td img`, `img[id^="needpie-"]`). **Do NOT add explicit pixel sizes** β€” this causes horizontal scrolling. -- The module tracker table uses CSS class `module-phase-tracker-table` -- Both `.. rubric::` directives are plain inline text β€” NOT RST section headings -- The `.. rubric:: Implementation status:` line is computed (see Step 4 in Procedure) and placed directly before the module tracker table -- **Formatting rule for table cells** β€” applies to ALL process areas: - - **First line**: status label only (emoji + keyword), e.g. `βœ… 0 findings`, `βœ… Available`, `πŸ”„ Configured`, `πŸ”„ **C0:** 92.3%`, `❌ Open` - - **Further lines** (test counts, links, C1/Rust coverage, comments): each on its own RST **line-block** (`| `) entry after a blank line. Examples: - ```rst - - βœ… Available - - | (4,663 tests) - ``` - ```rst - - πŸ”„ - - | **C0:** 92.3% - | **C1:** 60.3% (cpp) - | **Rust line:** 74.4% - ``` - ```rst - - βœ… 0 findings - - | `clang-tidy `__ - ``` - ```rst - - βœ… Available - - | (3 tests) - | `reference_integration `__ (cross-module) - ``` - ```rst - - πŸ”„ Configured - - | `clang-tidy `__ - | `CodeQL/MISRA `__ - | but no CI enforcement workflow yet - ``` - ```rst - - πŸ”„ 0% (0/92) - - | `requirements `__ - | (all 92 entries ``:status: invalid``) - ``` - - This applies equally to: test counts in Unit/Integration Test cells, checklist links in Inspection cells, C1/Rust coverage in Coverage cells, CI workflow links in Static/Dynamic Analysis cells, cross-module repo links, and parenthetical notes after any link. -- When referencing `:status: invalid` inside RST text (e.g. lifecycle notes), always use **double backticks**: `` ``:status: invalid`` `` β€” single backticks are RST hyperlink syntax and will cause a parse warning. - -| Process Area | sphinx-needs tag | +| Deliverable | Directive types in `A` | |---|---| -| PA 1 β€” Change Management | `change_management` | -| PA 2 β€” Requirements Engineering | `requirements_engineering` | -| PA 3 β€” Architecture Design | `architecture_design` | -| PA 4 β€” Implementation | `implementation` | -| PA 5 β€” Verification | `verification` | - -The pie chart diagrams are computed live by sphinx-needs at build time β€” they **never need manual updates**. Only update the filter `` when adding a new Process Area. +| Feature Requirements | `feat_req` | +| Component Requirements | `comp_req`, `aou_req` | +| Feature Architecture | `feat`, `feat_arc`, `feat_arc_sta`, `feat_arc_dyn` | +| Component Architecture | `comp`, `comp_arc`, `comp_arc_sta`, `comp_arc_dyn`, `logic_arc_int`, `logic_arc_int_op`, `real_arc_int`, `real_arc_int_op` | +| Detailed Design | `dd`, `dd_sta`, `dd_dyn` | +| Req./Arch./Impl. Inspection | document-level `:status:` of each `chklst_*.rst` (one per file) | -## Modules and Repos +Never counted as Req/Arch directives: `stkh_req`, `tool_req`, `document`, +`needtable`, `needpie`, `needextend`, `figure`, `uml`, `note`, `attention`, +`toctree`, `grid`. AoUs (`aou_req`) count for **Component** Req only, never for +Feature Req. -> **EXCLUDED MODULES**: **Orchestrator** is intentionally not tracked in `overall_status.rst` and must NOT be added to any of the PA tables, even though `score_orchestrator` is pinned in `known_good.json` and the module exists in `eclipse-score/score` / `eclipse-score/orchestrator`. Do not query or generate rows for it. +### 3.2 Component Requirements split format -> **IMPORTANT**: Each module has its own dedicated repo in the `eclipse-score` GitHub org AND content in `eclipse-score/score`. **Always check BOTH** the module's own repo and `eclipse-score/score` when counting needs elements. Never rely on `eclipse-score/score` alone. +Component Requirements counts both `comp_req` and `aou_req` but **renders them +split** so the reader sees what fraction is real component requirements vs. +Assumptions of Use: -> **VERSION PINNING**: Always use the commit hash pinned in `known_good.json` (column `known_good.json key`) β€” **never use `main`** for source repos. This ensures data matches exactly the versions that `reference_integration` is currently testing against. For modules not listed in `known_good.json` (marked `β€”`), fall back to `main`. - -| Module | `known_good.json` key | Own Repo (always check!) | Docs in `eclipse-score/score` | -|---|---|---|---| -| Baselibs | `score_baselibs` | `eclipse-score/baselibs` (no sphinx-needs RST so far) | `docs/modules/baselibs/**`, `docs/features/baselibs/docs` | -| Communication | `score_communication` | `eclipse-score/communication` (no sphinx-needs RST so far) | `docs/modules/communication/**`, `docs/features/communication/docs` | -| Logging | `score_logging` | `eclipse-score/logging` (no sphinx-needs RST so far) | `docs/modules/logging/**`, `docs/features/analysis-infra/logging/docs` | -| Persistency | `score_persistency` | `eclipse-score/persistency` β€” has `docs/persistency/kvs/` with comp_req/comp_arc βœ… | `docs/features/persistency` | -| Time | `β€”` (not in known_good) | `eclipse-score/inc_time` (no sphinx-needs RST so far) | `docs/features/time/docs` | -| Config Management | `β€”` (not in known_good) | `eclipse-score/config_management` (no sphinx-needs RST so far) | `docs/features/configuration` | -| Lifecycle | `score_lifecycle_health` | `eclipse-score/lifecycle` β€” has `docs/module/health_monitor/` (comp_arc_sta/dyn valid=15/16), `detailed_design/` (dd_sta/dyn valid=1/2), `tests/integration/` | `docs/modules/lifecycle/index.rst`, `docs/features/lifecycle/**` β€” Feature Arch in `docs/features/lifecycle/architecture/` (health_monitor.rst: 19v/2inv, launch_manager.rst: 10v, launch_manager_configuration.rst: 1v β†’ 30/32 valid) | -| Security/Crypto | `β€”` (not in known_good) | `eclipse-score/inc_security_crypto` β€” `src/` has no implementation yet; `docs/index.rst` with stkh_req | `docs/features/security_crypto/**` | - -> **`eclipse-score/score` pinned ref**: Look up key `score_platform` in the `tooling` section of `known_good.json`. - -**How to search all repos for a module:** -```python -for repo in ["eclipse-score/score", "eclipse-score/"]: - files = [p for p in get_tree(repo) if p.endswith(".rst") and "" in p] - for f in files: - v, t = count_needs_in_file(repo, f) +``` +βœ… Available (84/84 comp_req + 32/32 AoU) +βœ… Available (0/0 comp_req [TRLC] + 33/33 AoU) ← Communication: comp_req live in .trlc +βœ… Available (35/35 comp_req) ← no AoUs +πŸ”„ 0% (0/1 comp_req + 0/1 AoU) ← mixed, none valid ``` -## Status Format - -- **``βœ… Available (valid/total)``** β€” Artifact complete and approved: **100% of needs elements are `valid`** (valid == total). Always add the count in parentheses for requirements and architecture rows. -- **``πŸ”„ NN% (valid/total)``** β€” In Progress: at least one element is `valid` but not all. Always show count. -- **``❌ Open``** β€” Not started, not found, or 0% valid -- For binary rows (Code, SW Development Plan, Unit Tests, CR approved): no count needed, just ``βœ… Available`` or ``❌ Open`` - -**Percentage calculation per deliverable:** -- **Feature Req / Feature Arch**: count individual needs elements (e.g. `.. feat_req::`, `.. feat_arc::`) inside the doc with `:status: valid`; `valid / total`; 100% (valid == total) β†’ βœ… Available -- **Comp. Req / Comp. Arch**: count individual needs elements across all component docs; `valid / total`; 100% (valid == total) β†’ βœ… Available -- **Req. Inspection / Arch. Inspection**: `valid / total` across all checklists (feature + component combined); 100% (valid == total) β†’ βœ… Available -- **Detailed Design + Code / Impl. Inspection**: `valid / total` across all `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files -- **Binary deliverables** (CR approved, SW Dev Plan, Unit Tests, Integration Tests, Verification Report): no percentage - -## Status Criteria (per Deliverable) - -### Process Area 1 β€” CR approved -- **βœ… Available**: A closed GitHub Issue with "Feature Request" or "Contribution Request" for the module exists in `eclipse-score/score` -- **❌ Open**: No such issue found - -Known closed CRs: Baselibs (#549), Communication (#69), Logging (#68), Persistency (#95), Time (#910), Config Management (#754, #1764), Lifecycle (#909), Security/Crypto (#905) +If both subtotals are zero β†’ `❌ Open`. -### Process Area 2 β€” Feature Requirements -- **βœ… Available**: 100% of individual needs elements (e.g. `.. feat_req::`) inside the requirements doc have `:status: valid` -- **πŸ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. **This includes `πŸ”„ 0% (0/N)` when N elements exist but ALL are `:status: invalid` β€” do NOT use `❌ Open` in this case.** -- **❌ Open**: no requirements file found, OR zero needs elements found +### 3.3 Inspections -### Process Area 2 β€” Component Requirements -- **βœ… Available**: 100% of all individual needs elements across all component requirements `.rst` files have `:status: valid` -- **πŸ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. -- **❌ Open**: no component requirement files found, OR all found files contain zero `.. comp_req::` directives +Each `chklst_*.rst` file contains a single `.. document::` directive whose +indented `:status:` field is treated as the document status. Each file +contributes `(1, 1)` if `:status: valid`, else `(0, 1)`. Files without any +`:status:` field contribute `(0, 0)`. -### Process Area 2 β€” Req. Inspection -- **βœ… Available**: 100% of all `chklst_req_inspection.rst` files (feature + component level) have `:status: valid` -- **πŸ”„ In Progress**: checklists exist but not all are `valid` -- **❌ Open**: no checklists found +### 3.4 Lines of Code (PA4 Code column) -### PA3 RST structure +LOC counts every line in source files (`.cpp .h .c .rs .py`) outside `docs/`, +`third_party/`, and `bazel-*/`, then rounds to the nearest 100. Format: ```rst -Process Area 3 β€” Architecture Design -************************************* - -Feature and component architecture must be designed and inspected. -Work products: ``wp__feature_arch``, ``wp__component_arch``, ``wp__sw_arch_verification``. -See :ref:`arch_workflow`. + - βœ… Available (~12,500 LOC) `repo >`__ ``` -Columns: **Feature Architecture**, **Component Architecture**, **Arch. Inspection** +--- -### PA4 RST structure +## 4. Per-deliverable status criteria -```rst -Process Area 4 β€” Implementation -******************************** +| Deliverable | `βœ… Available` | `πŸ”„ …` | `❌ Open` | +|---|---|---|---| +| **PA1** CR approved | Closed GitHub issue tagged "Feature/Contribution Request" for the module exists in `eclipse-score/score` | β€” | No such issue | +| **PA2** Feature Req | `valid = total` per Β§3 | files exist, not all valid | no `feat_req` directives in `docs/features//**` | +| **PA2** Component Req | `valid = total` per Β§3.2 | mixed | no `comp_req`/`aou_req` directives, and no TRLC stand-in | +| **PA2** Req. Inspection | every `chklst_req_inspection.rst` has `:status: valid` | mixed | no checklists | +| **PA3** Feature Arch | `valid = total` per Β§3 | mixed | no matching directives | +| **PA3** Component Arch | `valid = total` per Β§3 | mixed | no matching directives | +| **PA3** Arch. Inspection | every `chklst_arc_inspection.rst` valid | mixed | no checklists | +| **PA4** SW Dev Plan | `eclipse-score/score` has `docs/platform_management_plan/software_development.rst` (project-wide; same status in every row) | β€” | file absent | +| **PA4** Code | source files exist outside `docs/` | β€” | none found | +| **PA4** Detailed Design | `valid = total` per Β§3 over `dd*` directives | mixed | none | +| **PA4** Impl. Inspection | every `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` valid | mixed | no checklists | +| **PA5** Unit Tests | repo has `_test.cpp` / `_test.py` / `tests/` | β€” | none | +| **PA5** C0/C1 Coverage | C0 = C1 = 100 % | data exists (any %) | not in `reference_integration` CI | +| **PA5** Comp. Integration Tests | tests in module's own repo | β€” | none | +| **PA5** Feature Integration Tests | `integration_test_scenarios` / `feature*test*` paths in repo | β€” | none | +| **PA5** Static Analysis | zero-tolerance per-module CI workflow passes on `main` (clang-tidy / Clippy) | tools configured but no CI enforcement | no static-analysis config | +| **PA5** Dynamic Analysis | zero-tolerance sanitizer CI passes on `main` | β€” | no sanitizer CI | +| **PA5** Module Ver. Report | `verification/module_verification_report.rst` `:status: valid` and contains data | `:status: draft` | absent or template only | +| **PA5** Platform Ver. Report | `eclipse-score/score: docs/score_releases/verification/platform_ver_report.rst` `:status: valid` (same status in every row) | `:status: draft` | absent or template only | + +### 4.1 PA5 β€” coverage CI keys + +Coverage data is read from the latest successful run of workflow id +`234977097` (`Code Quality & Documentation`), job `test_and_docs`, in +`eclipse-score/reference_integration`. + +| Tracker module | CPP key | Rust key | +|---|---|---| +| Baselibs | `score_baselibs_cpp` | `score_baselibs_rust_rust` | +| Communication | `score_communication_cpp` | β€” | +| Logging | `score_logging_cpp` | `score_logging_rust` | +| Persistency | `score_persistency_cpp` | `score_persistency_rust` | +| Lifecycle | `score_lifecycle_health_cpp` | `score_lifecycle_health_rust` | +| Time / Config Mgmt / Security/Crypto | not in CI | β€” | -Source code and detailed design must be implemented and inspected. -Work products: ``wp__sw_development_plan``, ``wp__sw_implementation``, ``wp__sw_implementation_inspection``. -See :ref:`workflow_implementation`. +```bash +RUN_ID=$(gh api "repos/eclipse-score/reference_integration/actions/workflows/234977097/runs?per_page=10" \ + --jq '[.workflow_runs[] | select(.conclusion=="success")][0].id') +JOB_ID=$(gh api "repos/eclipse-score/reference_integration/actions/runs/$RUN_ID/jobs" \ + --jq '.jobs[] | select(.name=="test_and_docs") | .id') +gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ + | grep -A50 "COVERAGE ANALYSIS SUMMARY" ``` -Columns: **SW Development Plan**, **Code**, **Detailed Design**, **Impl. Inspection** - -### PA5 RST structure - -PA5 has two `.. note::` blocks **before** the `.. rubric:: Implementation status:` line: +### 4.2 PA5 β€” static / dynamic analysis CI table -```rst -Process Area 5 β€” Verification -***************************** - -All tests must be implemented and a module verification report must be approved. -Work products: ``wp__verification_sw_unit_test``, ``wp__verification_comp_int_test``, ``wp__verification_feat_int_test``, ``wp__verification_module_ver_report``. -See :ref:`verification_workflows`. -``` - -```rst -.. note:: +| Module | Static | Dynamic | +|---|---|---| +| Baselibs | βœ… `lint.yml` (clang-tidy) | βœ… `sanitizers_linux.yml` (ASan/UBSan/LSan) | +| Communication | πŸ”„ Configured (no CI) | βœ… ASan/UBSan/LSan + TSan | +| Logging | ❌ | ❌ | +| Persistency | βœ… `clippy.yml` | ❌ | +| Time | ❌ | ❌ | +| Config Mgmt | βœ… `static-analysis.yml` (clang-tidy) | ❌ | +| Lifecycle | βœ… `lint_clippy.yml` | ❌ | +| Security/Crypto | ❌ | ❌ | - **C0/C1 Coverage** data is sourced from the `reference_integration <...>`__ - CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). - C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. - Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) or with - Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) show ❌ Open. +Central CodeQL runs in `reference_integration/.github/workflows/codeql-multiple-repo-scan.yml`. -.. note:: +--- - **Static Code Analysis** is tracked per module via dedicated CI workflows ... +## 5. RST formatting rules - **Dynamic Code Analysis** is tracked via sanitizer CI workflows ... -``` +### 5.1 Cell layout -Columns: **Unit Tests**, **C0/C1 Coverage**, **Comp. Integration Tests**, **Feature Integration Tests**, **Static Code Analysis**, **Dynamic Code Analysis**, **Module Verification Report**, **Platform Verification Report** +Status emoji + label on the **first line**; everything else (counts, links, +notes) goes on a **line-block** (`| `) after a blank line. -**Cross-module integration test format** (when tests live in `reference_integration`, not the module's own repo): ```rst - - βœ… Available + - βœ… Available (37/37) - | (3 tests) - | `reference_integration `__ (cross-module) + | `feature-level `__ + | `abi-compatible-data-types `__ ``` -**Unit Tests and Integration Tests with known count:** ```rst - - βœ… Available + - πŸ”„ - | (N tests) + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% ``` -- **βœ… Available**: 100% of individual needs elements (e.g. `.. feat_arc::`) inside the architecture doc have `:status: valid` -- **πŸ”„ NN%**: elements exist but not all are `valid` -- **❌ Open**: no architecture file found, OR zero `.. feat_arc::` directives found - -### Process Area 3 β€” Component Architecture -- **βœ… Available**: 100% of all individual needs elements across all component architecture files have `:status: valid` -- **πŸ”„ NN%**: elements exist but not all are `valid` -- **❌ Open**: no component architecture docs containing directives found -### Process Area 3 β€” Arch. Inspection -- **βœ… Available**: 100% of all architecture checklists have `:status: valid` -- **πŸ”„ In Progress**: checklists exist but not all are `valid` -- **❌ Open**: no architecture checklists found +When mentioning `:status: invalid` in prose, **always use double backticks**: +`` ``:status: invalid`` `` (single backticks are RST hyperlink syntax β†’ parse warning). -### Process Area 4 β€” SW Development Plan -- **βœ… Available**: `eclipse-score/score` contains `docs/platform_management_plan/software_development.rst` (project-wide) -- **❌ Open**: file absent +### 5.2 Source links β€” mandatory -### Process Area 4 β€” Code -- **βœ… Available**: source files (`.cpp`, `.h`, `.py`, `.rs` etc.) exist in the module's own repo outside of `docs/` -- **❌ Open**: no source files found +Every Req / Arch / Detailed-Design / Code cell that is **not** `❌ Open` +**MUST** carry one or more source links directly below the count line. Rules: -**Always include the LOC count** in the cell using the format `βœ… Available (~X,XXX LOC) \`repo \`__`. +- One bullet per source RST file or per logical group (e.g. per module + subfolder). +- URLs **MUST** point to the pinned ref (40-char SHA from `known_good.json`), + not `blob/main` β€” counts come from the pinned ref, and `main` may have been + restructured. For repos not in `known_good.json` (`inc_time`, + `config_management`, `inc_security_crypto`, `inc_someip_gateway`), + `blob/main` is acceptable. +- For Communication `comp_req` link the `.trlc` file marked `[TRLC]`. -**How to count LOC:** -Count all lines (including blank/comment lines) across all source files (`.cpp`, `.h`, `.c`, `.rs`, `.py`) in the module's own repo. Round to the nearest 100. +### 5.3 Pie chart row (Process Status) -```python -def count_loc(repo, tree, ref="main"): - src_files = [p for p in tree if - any(p.endswith(ext) for ext in ('.cpp', '.h', '.c', '.rs', '.py')) - and not p.startswith('docs/')] - total = 0 - for f in src_files: - content = fetch_file(repo, f, ref) - total += len(content.split('\n')) - # round to nearest 100 - rounded = round(total / 100) * 100 - print(f" LOC: {total} β†’ ~{rounded:,}") - return rounded -``` +Each PA section starts with a pie chart row. -**RST format:** ```rst - - βœ… Available (~12,500 LOC) `inc_someip_gateway `__ -``` - -### Process Area 4 β€” Detailed Design -- **βœ… Available**: 100% of formal design doc needs elements in `detailed_design/` folders have `:status: valid` -- **πŸ”„ NN%**: design docs exist and at least one element is `valid` but not all -- **❌ Open**: no RST files with actual design directives found +.. list-table:: + :header-rows: 1 + :class: compact-overview-table -### Process Area 4 β€” Impl. Inspection -- **βœ… Available**: 100% of `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files have `:status: valid` -- **πŸ”„ In Progress**: checklists exist but not all are `valid` -- **❌ Open**: no impl inspection checklists found + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - -### Process Area 5 β€” Unit Tests -- **βœ… Available**: Source repo contains `_test.cpp`, `_test.py`, or `/test(s)/` directories (excluding docs/) -- **❌ Open**: no test files found + .. rst-class:: small-pie-cell -### Process Area 5 β€” C0/C1 Coverage + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray -Coverage data is sourced from the `reference_integration` CI (`Code Quality & Documentation` workflow, job `test_and_docs`). -It runs `bazel coverage --config=ferrocene-coverage` per module and extracts C0 (line) and C1 (branch) coverage via `genhtml`/`lcov` for C++ and `cargo llvm-cov` for Rust. + type == 'gd_req' and is_external == False and status == 'valid' and '' in tags + type == 'gd_req' and is_external == False and status == 'draft' and '' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and '' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and '' in tags + - -**Status criteria:** -- **βœ… Available**: C0 β‰₯ 100% AND C1 β‰₯ 100% -- **πŸ”„ C0: XX% / C1: YY%**: Coverage data exists (regardless of %) -- **❌ Open**: Module not in reference_integration CI, or coverage extraction disabled + .. rst-class:: small-pie-cell -**How to fetch the latest values:** -```bash -# Find the latest successful run of the "Code Quality & Documentation" workflow (ID 234977097): -gh api "repos/eclipse-score/reference_integration/actions/workflows/234977097/runs?per_page=10" \ - --jq '.workflow_runs[] | select(.conclusion=="success") | {id: .id, created_at: .created_at}' | head -1 + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area() + - -# Get the job ID for test_and_docs from that run: -RUN_ID= -JOB_ID=$(gh api "repos/eclipse-score/reference_integration/actions/runs/$RUN_ID/jobs" \ - --jq '.jobs[] | select(.name=="test_and_docs") | .id') + .. rst-class:: small-pie-cell -# Extract the coverage summary from the job log: -gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ - | grep -E "COVERAGE ANALYSIS SUMMARY|'score_.*_cpp'|'score_.*_rust'|lines|functions|branches" \ - | grep -A50 "COVERAGE ANALYSIS SUMMARY" + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status() ``` -**Module β†’ CI key mapping:** -| Tracker Module | CI key (CPP) | CI key (Rust) | -|---|---|---| -| Baselibs | `score_baselibs_cpp` | `score_baselibs_rust_rust` | -| Communication | `score_communication_cpp` | β€” (disabled) | -| Logging | `score_logging_cpp` | `score_logging_rust` | -| Persistency | `score_persistency_cpp` | `score_persistency_rust` | -| Time | not in CI | β€” | -| Config Mgmt | not in CI | β€” | -| Lifecycle | `score_lifecycle_health_cpp` | `score_lifecycle_health_rust` | -| Security/Crypto | not in CI | β€” | - -**Format in table (status emoji alone on first line, all coverage metrics as `| ` line-blocks below):** -- CPP + Rust: - ```rst - - πŸ”„ - - | **C0:** 92.3% - | **C1:** 60.3% (cpp) - | **Rust line:** 74.4% - ``` -- CPP only: - ```rst - - πŸ”„ +Hard rules: +- `.. needpie::` does **not** support `:title:` (build error). +- Each cell needs `.. rst-class:: small-pie-cell` before its `.. needpie::`. +- Pie chart sizing is governed by `_assets/custom.css` (class + `compact-overview-table`, fluid 33% per column, `!important` img override). + Do not add explicit pixel sizes. - | **C0:** 87.9% - | **C1:** 58.8% (cpp) - ``` -- Not available: `❌ Open` +### 5.4 Implementation status rubric -### Process Area 5 β€” Comp. Integration Tests +Directly above the module tracker table: -Look for component-level integration test targets inside the module’s own repository (i.e. tests that are **not** cross-module tests in `reference_integration`). - -**How to find them:** -```bash -# Count test targets or test files with "integration" in their path or name -gh api repos/eclipse-score//git/trees/main?recursive=1 \ - --jq '[.tree[] | select(.path | test("integrat"; "i")) | select(.type=="blob")] | length' -``` - -Alternatively, look for test target names containing `_it_`, `_integration_`, `component_test`, or similar naming patterns. - -**Status criteria:** -- **`βœ… Available (N tests)`**: Component integration tests exist in the module repo. -- **`❌ Open`**: No component integration tests found. - -**RST format:** ```rst - - βœ… Available (9 tests) +.. rubric:: Implementation status: πŸ”„ NN% (X/Y deliverables complete) ``` -### Process Area 5 β€” Feature Integration Tests -- **πŸ”„ In Progress**: `integration_test_scenarios` or `feature*test*` paths found in source repo -- **❌ Open**: none found - -### Process Area 5 β€” Static Code Analysis - -Static analysis CI exists at two levels: -1. **Per-module CI workflow** β€” zero-tolerance enforcement on `main` (clang-tidy for C++, Clippy for Rust). A passing CI implies 0 open findings. -2. **Central CodeQL** β€” runs in `eclipse-score/reference_integration` via `codeql-multiple-repo-scan.yml`. - -**Status criteria:** -- **`βœ… 0 findings`**: A zero-tolerance CI workflow enforcing clang-tidy or Clippy exists in the module's own repo AND it passes on `main`. Format: - ```rst - - βœ… 0 findings - - | `clang-tidy `__ - ``` -- **`πŸ”„ Configured`**: Static analysis tools are configured in the repo but no CI workflow enforces them on every PR/push. Format: - ```rst - - πŸ”„ Configured - - | `clang-tidy `__ - | `CodeQL/MISRA `__ - | but no CI enforcement workflow yet - ``` -- **`❌ Open`**: No static analysis configuration found at all in the module's own repo. - -**Per-module static analysis status** (as of 2026-05): -| Module | Status | CI / Config link | -|---|---|---| -| Baselibs | `βœ… 0 findings` | [clang-tidy lint.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/lint.yml) | -| Communication | `πŸ”„ Configured` | [static_analysis.bazelrc](https://github.com/eclipse-score/communication/blob/main/quality/static_analysis/static_analysis.bazelrc) + [CodeQL/MISRA](https://github.com/eclipse-score/communication/tree/main/quality/static_analysis) β€” no CI enforcement yet | -| Logging | `❌ Open` | β€” | -| Persistency | `βœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/persistency/blob/main/.github/workflows/clippy.yml) | -| Time | `❌ Open` | β€” | -| Config Mgmt | `βœ… 0 findings` | [clang-tidy static-analysis.yml](https://github.com/eclipse-score/config_management/blob/main/.github/workflows/static-analysis.yml) | -| Lifecycle | `βœ… 0 findings` | [Clippy lint_clippy.yml](https://github.com/eclipse-score/lifecycle/blob/main/.github/workflows/lint_clippy.yml) | -| Security/Crypto | `❌ Open` | β€” | - -**Central CodeQL** (all modules): -[codeql-multiple-repo-scan.yml](https://github.com/eclipse-score/reference_integration/blob/main/.github/workflows/codeql-multiple-repo-scan.yml) in `reference_integration`. Finding counts require the GitHub Security tab. - -### Process Area 5 β€” Dynamic Code Analysis - -Dynamic analysis is performed via sanitizer CI workflows (ASan/UBSan/LSan for C++, TSan for threading). All zero-tolerance workflows imply 0 sanitizer findings on a passing `main` branch. - -**Status criteria:** -- **`βœ… 0 findings`**: A zero-tolerance sanitizer CI workflow exists in the module's own repo AND it passes on `main`. Format: - ```rst - - βœ… 0 findings - - | `ASan/UBSan/LSan `__ - ``` - For multiple sanitizer workflows: - ```rst - - βœ… 0 findings - - | `ASan/UBSan/LSan `__ - | `TSan `__ - ``` -- **`❌ Open`**: No sanitizer CI workflow found in the module's own repo. - -**Per-module dynamic code analysis status** (as of 2026-05): -| Module | Status | CI link(s) | -|---|---|---| -| Baselibs | `βœ… 0 findings` | [sanitizers_linux.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/sanitizers_linux.yml) β€” ASan+UBSan+LSan | -| Communication | `βœ… 0 findings` | [ASan/UBSan/LSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/address_undefined_behavior_leak_sanitizer.yml), [TSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/thread_sanitizer.yml) | -| Logging | `❌ Open` | β€” | -| Persistency | `❌ Open` | β€” | -| Time | `❌ Open` | β€” | -| Config Mgmt | `❌ Open` | β€” | -| Lifecycle | `❌ Open` | β€” | -| Security/Crypto | `❌ Open` | β€” | - -### Process Area 5 β€” Module Verification Report -- **βœ… Available**: `verification/module_verification_report.rst` exists AND `:status: valid` AND contains actual verification data -- **πŸ”„ In Progress**: file exists with `:status: draft` -- **❌ Open**: file does not exist, OR file is a template placeholder only - -### Process Area 5 β€” Platform Verification Report -The Platform Verification Report (`wp__verification_platform_ver_report`) is a single cross-module document in `eclipse-score/score` at `docs/score_releases/verification/platform_ver_report.rst`. It tracks **feature requirement test coverage** (via `FullyVerifies`/`PartiallyVerifies` links in Feature Integration Tests on `feat_req__...` IDs) and platform-level test results. - -- **βœ… Available**: `docs/score_releases/verification/platform_ver_report.rst` has `:status: valid` AND contains actual verification data -- **πŸ”„ In Progress**: file exists with `:status: draft` -- **❌ Open**: file does not exist, OR is a template placeholder only - -> ⚠️ This column is **not per-module** β€” it is the same document for all modules. Show the same status in every row. - -## Procedure - -### Prerequisites -- `gh` CLI must be authenticated (`gh auth status`) -- Python 3.8+ +`X` = number of `βœ… Available` cells in the table; `Y` = number of cells in +the table excluding the leftmost stub column. Both rubrics in a PA section +(`Process Status` and `Implementation status`) are inline text, not headings. --- -### Step 0 β€” Read `known_good.json` (MANDATORY FIRST STEP) +## 6. Procedure -**Never skip this.** All repo queries must use the pinned hash, not `main`. +### Step 0 β€” Resolve pinned refs ```python import json, base64, subprocess, re @@ -536,80 +311,58 @@ def gh_raw(api_path, jq="."): return r.stdout.strip() def gh_json_file(api_path): - content_b64 = gh_raw(api_path, ".content") - return json.loads(base64.b64decode(content_b64).decode()) + return json.loads(base64.b64decode(gh_raw(api_path, ".content")).decode()) known_good = gh_json_file( - "repos/eclipse-score/reference_integration/contents/known_good.json" -) + "repos/eclipse-score/reference_integration/contents/known_good.json") def pinned_ref(module_key): - """Return pinned git hash from known_good.json, or 'main' if not tracked. - IMPORTANT: score_platform lives in 'tooling', all others in 'target_sw'.""" - all_mods = { - **known_good["modules"]["target_sw"], - **known_good["modules"]["tooling"], # score_platform is here! - } + """`score_platform` lives in `tooling`; everything else in `target_sw`.""" + all_mods = {**known_good["modules"]["target_sw"], + **known_good["modules"]["tooling"]} entry = all_mods.get(module_key) return entry["hash"] if entry else "main" REFS = { - "score": pinned_ref("score_platform"), # in 'tooling' section! + "score": pinned_ref("score_platform"), "baselibs": pinned_ref("score_baselibs"), "communication": pinned_ref("score_communication"), "logging": pinned_ref("score_logging"), "persistency": pinned_ref("score_persistency"), "lifecycle": pinned_ref("score_lifecycle_health"), - "inc_time": "main", # not in known_good - "config_management": "main", # not in known_good - "inc_security_crypto": "main", # not in known_good + "inc_time": "main", + "config_management": "main", + "inc_security_crypto": "main", } -# Verify: print all refs and confirm hashes are 40-char SHA1, not "main" for tracked modules -for k, v in REFS.items(): - print(f" {k}: {v}") ``` -> ⚠️ **Common mistake**: `score_platform` (= `eclipse-score/score`) is in the `tooling` section of `known_good.json`, not `target_sw`. The `pinned_ref()` function above merges both β€” use it exactly as shown. - ---- - -### Step 1 β€” Fetch repo trees (recursive, with pinned ref) +### Step 1 β€” Fetch repo trees ```python def get_tree(repo, ref): - """Returns list of all file paths in repo at given ref.""" - result = subprocess.run( + out = subprocess.run( ["gh", "api", f"repos/{repo}/git/trees/{ref}?recursive=1", "--jq", ".tree[].path"], capture_output=True, text=True) - if result.returncode != 0: - print(f"WARNING: could not fetch tree for {repo}@{ref}: {result.stderr}") - return [] - paths = [p for p in result.stdout.strip().split("\n") if p] - print(f" {repo}@{ref[:8]}: {len(paths)} files") + paths = [p for p in out.stdout.strip().split("\n") if p] + assert paths, f"empty tree for {repo}@{ref}" return paths - -# Fetch once, reuse for all PA computations: -tree_score = get_tree("eclipse-score/score", REFS["score"]) -tree_baselibs = get_tree("eclipse-score/baselibs", REFS["baselibs"]) -tree_comm = get_tree("eclipse-score/communication", REFS["communication"]) -tree_log = get_tree("eclipse-score/logging", REFS["logging"]) -tree_pers = get_tree("eclipse-score/persistency", REFS["persistency"]) -tree_life = get_tree("eclipse-score/lifecycle", REFS["lifecycle"]) -tree_time = get_tree("eclipse-score/inc_time", REFS["inc_time"]) -tree_cfg = get_tree("eclipse-score/config_management", REFS["config_management"]) -tree_sec = get_tree("eclipse-score/inc_security_crypto", REFS["inc_security_crypto"]) ``` -> ⚠️ **Common mistake**: If `get_tree()` returns an empty list due to a network error or wrong ref, all subsequent counts for that module will be 0 and appear as `❌ Open`. **Always print the file count and verify it is > 0 before proceeding.** - ---- - -### Step 2 β€” Count needs elements per file +### Step 2 β€” Count directives ```python +DIRECTIVE_TYPES = { + "feat_req": ("feat_req",), + "comp_req": ("comp_req", "aou_req"), + "feat_arc": ("feat", "feat_arc", "feat_arc_sta", "feat_arc_dyn"), + "comp_arc": ("comp", "comp_arc", "comp_arc_sta", "comp_arc_dyn", + "logic_arc_int", "logic_arc_int_op", + "real_arc_int", "real_arc_int_op"), + "dd": ("dd", "dd_sta", "dd_dyn"), +} + def fetch_file(repo, path, ref): - """Fetch raw file content from GitHub. Returns empty string on error.""" r = subprocess.run( ["gh", "api", f"repos/{repo}/contents/{path}?ref={ref}", "--jq", ".content"], capture_output=True, text=True) @@ -617,302 +370,150 @@ def fetch_file(repo, path, ref): return "" return base64.b64decode(r.stdout.strip()).decode(errors="replace") -def count_needs_status(content): - """Count :status: fields that are INDENTED (i.e. inside a needs directive). - - CRITICAL: Only match lines with leading whitespace before ':status:'. - A top-level ':status: valid' at column 0 is a document-level field, NOT - an individual needs element β€” do NOT count it. - """ - # Matches lines like " :status: valid" (indented) but NOT ":status: valid" (col 0) - statuses = re.findall(r'^\s+:status:\s+(\w+)', content, re.MULTILINE) - valid = sum(1 for s in statuses if s == 'valid') - return valid, len(statuses) - -def count_files(repo, paths, ref, path_filter): - """Aggregate valid/total across all files matching path_filter. - - CRITICAL: path_filter must match ALL relevant files in ALL subfolders. - Use broad filters (e.g. 'architecture') and check the count printed below. - A result of total=0 means NO files were found β€” investigate before reporting ❌ Open. - """ +def count_directives_with_status(content, allowed): + """Return (valid, total) for `.. ::` blocks where type ∈ allowed, + using the *indented* :status: field of each block. Document-level + :status: at column 0 is ignored.""" + pat = re.compile(r'^\.\.\s+(' + '|'.join(allowed) + r')::', re.MULTILINE) + valid = total = 0 + for m in pat.finditer(content): + tail = content[m.end():] + nxt = re.search(r'^\.\.\s+\w', tail, re.MULTILINE) + block = tail[:nxt.start()] if nxt else tail + st = re.search(r'^\s+:status:\s+(\w+)', block, re.MULTILINE) + total += 1 + if st and st.group(1) == 'valid': + valid += 1 + return valid, total + +def count_checklist_status(content): + """Status of the `.. document::` directive in a chklst_*.rst file. + The :status: is indented inside the directive body, not at column 0.""" + m = re.search(r'^\.\.\s+document::', content, re.MULTILINE) + if not m: + return 0, 0 + tail = content[m.end():] + nxt = re.search(r'^\.\.\s+\w', tail, re.MULTILINE) + block = tail[:nxt.start()] if nxt else tail + st = re.search(r'^\s+:status:\s+(\w+)', block, re.MULTILINE) + if not st: + return 0, 0 + return (1 if st.group(1) == 'valid' else 0), 1 + +def count_files(repo, paths, ref, path_filter, kind): + """kind ∈ {'feat_req','comp_req','feat_arc','comp_arc','dd','chklst'}.""" matched = [p for p in paths if path_filter(p)] - print(f" {repo}: {len(matched)} files match filter") # ALWAYS verify this - total_valid, total_all = 0, 0 + tv = tt = 0 for path in matched: content = fetch_file(repo, path, ref) - v, t = count_needs_status(content) - if t > 0: - print(f" {path}: {v}v / {t}t") - total_valid += v - total_all += t - return total_valid, total_all + if kind == 'chklst': + v, t = count_checklist_status(content) + else: + v, t = count_directives_with_status(content, DIRECTIVE_TYPES[kind]) + tv += v; tt += t + return tv, tt ``` -> ⚠️ **Common mistake (caused Lifecycle PA3 bug)**: Using a filter that only matches top-level index files misses content in subfolders like `docs/features/lifecycle/architecture/health_monitor.rst`. Always use `in path` substring filters, never exact filename matches. **Print the matched file list and verify it is complete.** - ---- - -### Step 3 β€” Derive cell status from counts +### Step 3 β€” Render cells ```python -def cell_status(valid, total, label=""): - """Convert valid/total counts to RST cell status string. - - Rules: - total == 0 β†’ ❌ Open (no files found at all β€” verify tree was non-empty!) - valid == total > 0 β†’ βœ… Available (valid/total) - 0 < valid < total β†’ πŸ”„ NN% (valid/total) - valid == 0, total > 0 β†’ πŸ”„ 0% (0/total) ← NOT ❌ Open! Files exist but all invalid. - """ - if total == 0: - return "❌ Open" - pct = valid * 100 // total - if valid == total: - return f"βœ… Available ({valid}/{total})" - return f"πŸ”„ {pct}% ({valid}/{total})" +def cell(v, t): + if t == 0: return "❌ Open" + if v == t: return f"βœ… Available ({v}/{t})" + return f"πŸ”„ {v*100//t}% ({v}/{t})" + +def comp_req_cell(contents, *, trlc=False): + cv = ct = av = at = 0 + for c in contents: + v, t = count_directives_with_status(c, ('comp_req',)); cv+=v; ct+=t + v, t = count_directives_with_status(c, ('aou_req',)); av+=v; at+=t + parts = [] + if ct or trlc: parts.append(f"{cv}/{ct} comp_req" + (" [TRLC]" if trlc else "")) + if at: parts.append(f"{av}/{at} AoU") + if not parts: return "❌ Open" + body = " + ".join(parts) + tot_v, tot_t = cv + av, ct + at + if tot_t == 0 or tot_v == tot_t: return f"βœ… Available ({body})" + return f"πŸ”„ {tot_v*100//tot_t}% ({body})" ``` -> ⚠️ **Common mistake**: Reporting `❌ Open` when `total > 0` but `valid == 0`. This is wrong β€” use `πŸ”„ 0% (0/N)` to indicate files exist but all are invalid/draft (e.g. Lifecycle requirements). - ---- - -### Step 4 β€” Per-module path filters (reference table) - -Use these exact filters when calling `count_files()`. Verify printed file counts before trusting results. +### Step 4 β€” Path filters (reference) -| Module | Deliverable | Repo | Path filter | +| Module | Deliverable | Repo | Filter (`lambda p: ...`) | |---|---|---|---| -| Baselibs | Feat. Req | score | `lambda p: 'features/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | -| Baselibs | Comp. Req | score | `lambda p: 'modules/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | -| Baselibs | Req. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_req_inspection' in p` | -| Baselibs | Feat. Arch | score | `lambda p: 'features/baselibs' in p and 'architecture' in p and p.endswith('.rst')` | -| Baselibs | Comp. Arch | score | `lambda p: 'modules/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | -| Baselibs | Arch. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_arc_inspection' in p` | -| Baselibs | Impl. Inspection | score | `lambda p: 'baselibs' in p and 'chklst_impl_inspection' in p` | -| Persistency | Feat. Req | score | `lambda p: 'features/persistency' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | -| Persistency | Feat. Arch | score | `lambda p: 'features/persistency' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | -| Persistency | Comp. Req | pers | `lambda p: 'kvs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | -| Persistency | Comp. Arch | pers | `lambda p: 'kvs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | -| **Lifecycle** | **Feat. Req** | **score** | `lambda p: 'features/lifecycle' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` β€” **includes subfolders!** | -| **Lifecycle** | **Feat. Arch** | **score** | `lambda p: 'features/lifecycle' in p and 'architecture' in p and p.endswith('.rst')` β€” **matches health_monitor.rst, launch_manager.rst, launch_manager_configuration.rst** | -| **Lifecycle** | **Comp. Arch** | **lifecycle** | `lambda p: 'module' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | - -> ⚠️ **Lifecycle is the most complex module** β€” content is split across `eclipse-score/score` (feature-level: `docs/features/lifecycle/**`) AND `eclipse-score/lifecycle` (component-level: `docs/module/health_monitor/**`). Always query both repos and aggregate. - ---- - -### Step 5 β€” Sanity checks before writing the RST - -Before updating the file, verify these invariants: - -1. **No module with non-empty tree has all-zero counts across all PAs** β€” that indicates a filter bug, not genuine absence of content. -2. **total=0 for a known deliverable** β€” investigate. Run `get_tree()` result manually and search for relevant paths. -3. **PA summary arithmetic**: `complete/total` must equal the number of `βœ… Available` cells in the table. Count manually. -4. **`πŸ”„ 0%` vs `❌ Open`**: grep all cells β€” any `πŸ”„ 0%` means files exist but are all invalid. Any `❌ Open` means zero files found. These are fundamentally different states. -5. **Cross-check against previous version**: If a cell flips from `πŸ”„ NN%` to `❌ Open` compared to the prior RST, investigate before accepting β€” it almost certainly means a filter missed files, not that content disappeared. - -#### 5a β€” Structural completeness check (same set of information) - -**Before comparing values, verify that the new data has the same structure as the existing RST.** -This catches missing modules, missing columns, or accidentally dropped rows β€” and must run first. +| Baselibs | Feat. Req | score | `'features/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Comp. Req | score | `'modules/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Feat. Arch | score | `'features/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Comp. Arch | score | `'modules/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | *Inspections | score | `'baselibs' in p and 'chklst_' in p` | +| Communication | Feat. Req/Arch | score | `'features/communication' in p and '' in p and …` | +| Communication | Comp. Req/Arch | score | `'modules/communication' in p and …` | +| Logging | Feat. Req/Arch | score | `('features/logging' in p or 'features/analysis-infra/logging' in p) and …` | +| Logging | Comp. Req/Arch | score | `'modules/logging' in p and …` | +| Persistency | Feat. Req/Arch | score | `'features/persistency' in p and …` | +| Persistency | Comp. Req/Arch/DD | persistency | `'kvs' in p and …` | +| Lifecycle | Feat. Req/Arch | score | `'features/lifecycle' in p and …` *(must walk subfolders)* | +| Lifecycle | Comp. Req/Arch/DD | lifecycle | `'module' in p and …` | +| Time / Config Mgmt / Sec.Crypto | Feat. Req/Arch | score | `'features/' in p and …` | + +> **Lifecycle is the most complex module** β€” feature-level lives in +> `eclipse-score/score`, component-level (`docs/module/health_monitor/**`) in +> `eclipse-score/lifecycle`. Always query both and aggregate. + +### Step 5 β€” Sanity checks (run **before** writing the RST) + +#### 5a Structural β€” same modules, same columns ```python def parse_rst_structure(rst_path): - """ - Parses overall_status.rst and returns the set of modules and deliverable - columns present in each PA table. - - Returns: - { - 'PA1': {'modules': ['Baselibs', ...], 'columns': ['CR approved']}, - 'PA2': {'modules': [...], 'columns': ['Feature Requirements', ...]}, - ... - } - """ - with open(rst_path) as f: - text = f.read() - - pa_sections = re.split(r'Process Area (\d+) β€”', text)[1:] # alternating: pa_num, pa_body - result = {} - for i in range(0, len(pa_sections) - 1, 2): - pa = f"PA{pa_sections[i].strip()}" - body = pa_sections[i + 1] - - # Extract header row (columns) - header_match = re.search(r'\* - \*\*Module\*\*(.*?)(?=\n \* -\s+\w)', body, re.DOTALL) - cols = re.findall(r'\*\*([^*]+)\*\*', header_match.group(0)) if header_match else [] - cols = [c.strip() for c in cols if c.strip() != 'Module'] - - # Extract module names (stub column = first cell of each data row) - modules = re.findall(r'\n \* - ((?![\*\s])[\w][^\n]+)', body) - modules = [m.strip() for m in modules] - - result[pa] = {'modules': modules, 'columns': cols} - return result - -def structural_check(old_structure, new_structure): - """ - Compares structure dicts from parse_rst_structure. - Prints errors for any missing modules or columns. - Returns True if identical, False otherwise. - """ - ok = True - for pa in old_structure: - if pa not in new_structure: - print(f" πŸ›‘ MISSING PA: {pa} not found in new data") - ok = False - continue - - old_mods = set(old_structure[pa]['modules']) - new_mods = set(new_structure[pa]['modules']) - missing_mods = old_mods - new_mods - extra_mods = new_mods - old_mods - if missing_mods: - print(f" πŸ›‘ {pa}: MISSING MODULES: {sorted(missing_mods)}") - ok = False - if extra_mods: - print(f" ℹ️ {pa}: NEW MODULES: {sorted(extra_mods)} (verify intentional)") - - old_cols = old_structure[pa]['columns'] - new_cols = new_structure[pa]['columns'] - if old_cols != new_cols: - print(f" πŸ›‘ {pa}: COLUMN MISMATCH") - print(f" old: {old_cols}") - print(f" new: {new_cols}") - ok = False - - return ok + text = open(rst_path).read() + parts = re.split(r'Process Area (\d+) β€”', text)[1:] + out = {} + for i in range(0, len(parts) - 1, 2): + pa, body = f"PA{parts[i].strip()}", parts[i+1] + hdr = re.search(r'\* - \*\*Module\*\*(.*?)(?=\n \* -\s+\w)', body, re.DOTALL) + cols = [c.strip() for c in re.findall(r'\*\*([^*]+)\*\*', hdr.group(0) if hdr else "") if c.strip() != 'Module'] + mods = [m.strip() for m in re.findall(r'\n \* - ((?![\*\s])[\w][^\n]+)', body)] + out[pa] = {'modules': mods, 'columns': cols} + return out ``` -**Run this before any value comparison:** -```python -old = parse_rst_structure("docs/s_core_v_1/roadmap/overall_status.rst") -# ... compute new_structure from your freshly calculated data ... -assert structural_check(old, new_structure), "Structure mismatch β€” do not write RST until resolved" -``` +Stop and investigate if: +- a module present before is missing now, or +- a column changed. -**Rules:** +#### 5b Plausibility β€” diff each cell -| Situation | Action | +| Old β†’ New | Action | |---|---| -| Module present in old, missing in new | πŸ›‘ **STOP** β€” row was dropped accidentally | -| Column present in old, missing in new | πŸ›‘ **STOP** β€” deliverable column was dropped | -| New module not in old | ℹ️ Intentional addition β€” verify it was requested | -| Module count in new < old | πŸ›‘ **STOP** β€” data loss | -| All PA sections present | βœ… | +| `βœ…` β†’ `❌` or `πŸ”„ NN%` β†’ `❌` | πŸ›‘ stop β€” almost certainly a filter bug | +| `βœ…` β†’ `πŸ”„` | ⚠️ investigate (regression) | +| `πŸ”„ NN%` β†’ `πŸ”„ MM%`, MM 50 % | ⚠️ filter likely too strict | -#### 5b β€” Compare new values against existing RST (plausibility diff) +### Step 6 β€” Write the RST -**Only run this after 5a passes.** Diff computed values against the existing RST cell-by-cell: - -```python -def plausibility_check(old_val, new_val, module, deliverable): - """ - Flags suspicious regressions. Print a WARNING for human review. - """ - def rank(val): - if 'βœ…' in val: return 2 - if 'πŸ”„' in val: return 1 - return 0 # ❌ Open - - old_rank = rank(old_val) - new_rank = rank(new_val) - - if new_rank < old_rank: - print(f" ⚠️ REGRESSION [{module} / {deliverable}]: {old_val!r} β†’ {new_val!r}") - print(f" β†’ Check filter paths, repo tree, and pinned ref.") - elif old_rank == 0 and new_rank == 2: - print(f" ℹ️ LARGE JUMP [{module} / {deliverable}]: {old_val!r} β†’ {new_val!r}") - print(f" β†’ Confirm count is correct before accepting.") - else: - print(f" βœ“ [{module} / {deliverable}]: {old_val!r} β†’ {new_val!r}") -``` - -**Rules for human review:** - -| Old value | New value | Action | -|---|---|---| -| `βœ… Available` | `❌ Open` | πŸ›‘ **STOP** β€” almost certainly a filter bug. Do not write. | -| `βœ… Available` | `πŸ”„ NN%` | ⚠️ Regression β€” investigate before accepting. | -| `πŸ”„ NN%` | `❌ Open` | πŸ›‘ **STOP** β€” files existed before, filter is now missing them. | -| `πŸ”„ NN%` β†’ `πŸ”„ MM%` | MM < NN | ⚠️ Percentage dropped β€” check if content was deleted or filter changed. | -| `❌ Open` | `πŸ”„ NN%` or `βœ…` | βœ… Progress β€” verify count is plausible. | -| `πŸ”„ NN%` | `βœ… Available` | βœ… Completion β€” confirm valid == total. | -| Any | Same | βœ… No change β€” OK. | - -**LOC plausibility** (PA4 Code column): if the new LOC count is less than 50% of the previous value, flag it β€” most likely a filter excluded files it shouldn't have. - ---- - -### Step 6 β€” Update the RST file - -Write the computed values to `docs/s_core_v_1/roadmap/overall_status.rst` following the formatting rules in the RST File Structure section above. Update the `.. rubric:: Implementation status:` line for each PA. - ---- +Update each PA's module table and the `.. rubric:: Implementation status:` +line. Source links as in Β§5.2. Pie-chart row stays unchanged unless the +sphinx-needs tag changes. ### Step 7 β€” Adding a new module -Add a row to the Modules and Repos table above (with known_good.json key and path filters), then add a row to each tracker table. +1. Append to Β§1 module list and Β§2 repo table (with key + path filter). +2. Add a row to every PA table. +3. Re-run Β§6. -## Interpretation Notes - -### Artifacts vs. Checklists β€” Key Rule -- **Artifacts** (Feature Requirements, Component Requirements, Feature Architecture, Component Architecture, Detailed Design, Code): derive status by **directly inspecting the repos**. -- **Inspection rows** (Req. Inspection, Arch. Inspection, Impl. Inspection): report what is found in `chklst_*.rst` files. - -### Additional Notes -- **Requirements/Architecture rows**: count individual needs elements (`:status:` fields inside `.. feat_req::`, `.. feat_arc::`, `.. comp_req::`, etc.) β€” NOT the document-level `:status:` field. -- The SW Development Plan check is project-wide (not per-module). -- **Template vs. real report**: A file with `:status: valid` can still be an empty template. Look for actual content beyond section headings. -- **Aggregation pitfall**: When a module has architecture/requirements content spread across multiple files in a subfolder (e.g. `docs/features/lifecycle/architecture/*.rst`), make sure to fetch and aggregate ALL files in that folder β€” not just the top-level index. Missing any file leads to falsely reporting `❌ Open` instead of the correct percentage. - -## Limitations - -- Cannot detect whether requirements have 100% test coverage (needs needs.json analysis) -- **Static analysis findings**: Per-module CI enforcement workflows are zero-tolerance β€” a passing `main` branch implies 0 findings. -- Central CodeQL finding counts require GitHub Security tab access. -- Feature integration tests heuristic is weak β€” manual verification recommended - -## Docs Structure (reference_integration) - -``` -docs/ - index.rst ← top-level: Modules, PMT, S-Core v1.0, Integration Status - conf.py ← Sphinx config (pydata theme, sidebar-toggle.js, custom.css) - _assets/ - custom.css ← compact-overview-table (fluid 33%-per-column pie charts, !important img override), module-phase-tracker-table, wide-content-page, collapsible right sidebar - sidebar-toggle.js ← right sidebar collapse/expand toggle (persisted in localStorage) - _templates/ - sidebar-root-nav.html ← left nav with startdepth=0 (shows full toctree on all pages) - s_core_v_1/ - index.rst ← S-Core v1.0 section: Status, Releases, Verification, Roadmap - status/ - status.rst ← Status section index (toctree) - overall_status.rst ← Feature and Process Status tracker (THIS FILE β€” updated by this skill) - releases/ - releases.rst - score_07.rst - verification/ - verification.rst - unit_test_summary.md - coverage_summary.md - roadmap.rst - integration_process/ - integration_process.rst ← Integration Process section (currently empty placeholder) - sw_components.rst - process_tools.rst - needs_filters.py ← sphinx-needs filter functions for pie charts -``` - -**`conf.py` key settings:** -- `html_sidebars = {"**": ["sidebar-root-nav"]}` β€” full left nav on every page -- `html_js_files = ["sidebar-toggle.js"]` β€” collapsible right TOC sidebar -- `html_theme_options.secondary_sidebar_items` β€” suppresses right TOC on `s_core_v_1/roadmap/overall_status` and `feature_and_process_status` pages - -## Complete RST Snapshot +--- -Full content of `docs/s_core_v_1/roadmap/overall_status.rst` as of last update (2026-05). -Use this to recreate the file from scratch if needed. +## 7. Limitations -See the file directly at `docs/s_core_v_1/roadmap/overall_status.rst` in `eclipse-score/reference_integration`. +- Test coverage of requirements (link analysis) is not detected β€” needs + `needs.json`. +- Per-module CI workflows are zero-tolerance; "passing on `main` β‡’ 0 findings" + is the only signal used for static / dynamic analysis. +- Central CodeQL finding counts require the GitHub Security tab. +- Feature-Integration-Test heuristic is path-based and weak β€” confirm + manually. +- TRLC content is not parsed; cells reference the `.trlc` file via link only. diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst index 586fd94678a..50ce57a3c71 100644 --- a/docs/s_core_v_1/roadmap/overall_status.rst +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -199,7 +199,7 @@ See :ref:`requirements_workflows`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(requirements_engineering) -.. rubric:: Implementation status: πŸ”„ 27% (9/33 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 42% (14/33 deliverables complete) .. list-table:: :header-rows: 1 @@ -212,69 +212,103 @@ See :ref:`requirements_workflows`. - **Req. Inspection** * - Baselibs - - πŸ”„ 97% (37/38) - - πŸ”„ 92% (124/134) + - βœ… Available (37/37) + + | `feature-level `__ + | `abi-compatible-data-types `__ + - βœ… Available (84/84 comp_req + 32/32 AoU) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `flatbuffers `__ + | `json `__ + | `safecpp `__ + | `memory_shared `__ + | `result `__ + | `srs `__ + | `utils `__ - πŸ”„ 20% (2/10) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `json `__ - | `safecpp `__ - | `result `__ - | `srs `__ - | `utils `__ - | `feature-level `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ + | `feature-level `__ * - Communication - - βœ… Available (60/60) - - πŸ”„ 97% (34/35) + - βœ… Available (58/58) + + | `feature-level `__ + | `ipc `__ + | `some_ip_gateway `__ + - βœ… Available (0/0 comp_req [TRLC] + 33/33 AoU) + + | `aou_req (RST) `__ + | (real component requirements maintained in TRLC: `component_requirements_ipc.trlc `__) - ❌ Open * - Logging - βœ… Available (46/46) + + | `mw-fr_logging_req `__ - ❌ Open - ❌ Open * - Persistency - - βœ… Available (41/41) - - πŸ”„ 94% (36/38) + - βœ… Available (37/37) + + | `feature-level `__ + - βœ… Available (35/35 comp_req) + + | `kvs `__ - πŸ”„ 50% (1/2) - | `feature-level `__ - | `kvs `__ + | `feature-level `__ + | `kvs `__ * - Time - βœ… Available (15/15) + + | `feature-level `__ - ❌ Open - ❌ Open * - Config Mgmt - βœ… Available (13/13) + + | `feature-level `__ - ❌ Open - ❌ Open * - Lifecycle - πŸ”„ 0% (0/92) - | `requirements `__ + | `requirements `__ | (all 92 entries ``:status: invalid``) - - πŸ”„ 0% (0/5) + - πŸ”„ 0% (0/1 comp_req + 0/1 AoU) - | `health_monitor `__ + | `health_monitor `__ | (template placeholder, ``:status: invalid``) - ❌ Open * - Security/Crypto - - βœ… Available (42/42) + - βœ… Available (41/41) + + | `feature-level `__ - ❌ Open - ❌ Open * - Diagnostic Services - βœ… Available (22/22) - | `requirements `__ + | `requirements `__ - ❌ Open - ❌ Open @@ -286,7 +320,7 @@ See :ref:`requirements_workflows`. * - Some/IP - βœ… Available (6/6) - | `score (5) `__ + | `score (5) `__ | `tc8 conformance (1) `__ - βœ… Available (8/8) @@ -353,38 +387,69 @@ See :ref:`arch_workflow`. - **Arch. Inspection** * - Baselibs - - βœ… Available (4/4) - - πŸ”„ 98% (172/175) + - βœ… Available (3/3) + + | `feature-level `__ + - πŸ”„ 98% (165/167) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `flatbuffers `__ + | `json `__ + | `safecpp `__ + | `memory_shared `__ + | `result `__ + | `srs `__ + | `utils `__ - πŸ”„ 80% (8/10) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `json `__ - | `safecpp `__ - | `result `__ - | `srs `__ - | `utils `__ - | `feature-level `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ + | `feature-level `__ * - Communication - - βœ… Available (5/5) - - πŸ”„ 94% (17/18) + - βœ… Available (3/3) + + | `feature-level `__ + | `ipc `__ + - βœ… Available (16/16) + + | `configuration `__ + | `frontent `__ + | `ipc_binding `__ + | `message_passing `__ + | `mock_binding `__ - ❌ Open * - Logging - - βœ… Available (4/4) + - βœ… Available (1/1) + + | `feature-level `__ - βœ… Available (3/3) + + | `logging `__ - ❌ Open * - Persistency - - βœ… Available (12/12) - - πŸ”„ 25% (1/4) + - βœ… Available (9/9) + + | `feature-level `__ + - πŸ”„ 0% (0/3) + + | `kvs `__ - πŸ”„ 0% (0/2) - | `feature-level `__ - | `kvs `__ + | `feature-level `__ + | `kvs `__ * - Time - ❌ Open @@ -397,8 +462,13 @@ See :ref:`arch_workflow`. - ❌ Open * - Lifecycle - - πŸ”„ 93% (30/32) - - πŸ”„ 93% (15/16) + - πŸ”„ 60% (3/5) + + | `health_monitor `__ + | `launch_manager `__ + - βœ… Available (15/15) + + | `health_monitor `__ - ❌ Open * - Security/Crypto @@ -468,7 +538,7 @@ See :ref:`workflow_implementation`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(implementation) -.. rubric:: Implementation status: πŸ”„ 36% (16/44 deliverables complete) +.. rubric:: Implementation status: πŸ”„ 39% (17/44 deliverables complete) .. list-table:: :header-rows: 1 @@ -483,61 +553,65 @@ See :ref:`workflow_implementation`. * - Baselibs - βœ… Available - - βœ… Available (~119,400 LOC) `baselibs `__ + - βœ… Available (~219,400 LOC) `baselibs `__ - ❌ Open - πŸ”„ 0% (0/9) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `json `__ - | `safecpp `__ - | `result `__ - | `srs `__ - | `utils `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ * - Communication - βœ… Available - - βœ… Available (~71,300 LOC) `communication `__ - - ❌ Open + - βœ… Available (~175,100 LOC) `communication `__ + - πŸ”„ 0% (0/1) + + | `lola `__ - ❌ Open * - Logging - βœ… Available - - βœ… Available (~22,900 LOC) `logging `__ + - βœ… Available (~40,300 LOC) `logging `__ - ❌ Open - ❌ Open * - Persistency - βœ… Available - - βœ… Available (~8,700 LOC) `persistency `__ - - ❌ Open + - βœ… Available (~14,700 LOC) `persistency `__ - πŸ”„ 0% (0/1) - | `kvs `__ + | `kvs `__ + - πŸ”„ 0% (0/1) + + | `kvs `__ * - Time - βœ… Available - - βœ… Available (~11,700 LOC) `inc_time `__ + - βœ… Available (~20,500 LOC) `inc_time `__ - ❌ Open - ❌ Open * - Config Mgmt - βœ… Available - - βœ… Available (~5,400 LOC) `config_management `__ + - βœ… Available (~14,200 LOC) `config_management `__ - ❌ Open - ❌ Open * - Lifecycle - βœ… Available - - βœ… Available (~38,300 LOC) `lifecycle `__ + - βœ… Available (~28,800 LOC) `lifecycle `__ - πŸ”„ 50% (1/2) - ❌ Open * - Security/Crypto - βœ… Available - - ❌ Open + - βœ… Available (~20,600 LOC) `inc_security_crypto `__ - ❌ Open - ❌ Open @@ -555,7 +629,7 @@ See :ref:`workflow_implementation`. * - Some/IP - ❌ Open - - βœ… Available (~12,500 LOC) `inc_someip_gateway `__ + - βœ… Available (~12,700 LOC) `inc_someip_gateway `__ - ❌ Open - ❌ Open @@ -652,16 +726,16 @@ See :ref:`verification_workflows`. | (4,663 tests) - πŸ”„ **C0:** 92.3% - | **C1:** 60.3% (cpp) + | **C1:** 60.4% (cpp) | **Rust line:** 74.4% - βœ… Available (13 tests) - ❌ Open - βœ… 0 findings - | `clang-tidy `__ + | `clang-tidy `__ - βœ… 0 findings - | `ASan/UBSan/LSan `__ + | `ASan/UBSan/LSan `__ - ❌ Open - ❌ Open @@ -676,13 +750,13 @@ See :ref:`verification_workflows`. - ❌ Open - πŸ”„ Configured - | `clang-tidy `__ + | `clang-tidy `__ | `CodeQL/MISRA `__ | but no CI enforcement workflow yet - βœ… 0 findings - | `ASan/UBSan/LSan `__ - | `TSan `__ + | `ASan/UBSan/LSan `__ + | `TSan `__ - ❌ Open - ❌ Open @@ -692,7 +766,7 @@ See :ref:`verification_workflows`. | (619 tests) - πŸ”„ **C0:** 79.5% - | **C1:** 42.4% (cpp) + | **C1:** 42.5% (cpp) | **Rust line:** 39.9% - ❌ Open - βœ… Available (1 test) @@ -717,7 +791,7 @@ See :ref:`verification_workflows`. | `reference_integration `__ (cross-module) - βœ… 0 findings - | `Clippy `__ + | `Clippy `__ - ❌ Open - ❌ Open - ❌ Open @@ -760,7 +834,7 @@ See :ref:`verification_workflows`. - ❌ Open - βœ… 0 findings - | `Clippy `__ + | `Clippy `__ - ❌ Open - ❌ Open - ❌ Open From 703ffa63a31796c59891de86ad95b8920cb61296 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:01:33 +0000 Subject: [PATCH 5/7] docs(roadmap): add per-PA release-progress SVG figures and document generation in SKILL - Add docs/_assets/pa{2,3,4,5}_*.svg charts showing release evolution (v0.5.0-beta -> v0.6.0 -> v0.7.0 -> current main) above each PA module-tracker table in overall_status.rst. - Embed via .. figure:: directives with alt text and width. - Extend .github/skills/overall-status/SKILL.md (sec. 6a) with: - release pinning recipe (annotated-tag deref, known_good schema diffs, 'now' = known_good.json on main of reference_integration) - per-chart metric table and SVG generation workflow - Communication vs. Some/IP double-count guard (applies to all PAs) - rule that charts use TOTAL directive count, not valid-only - PA5 split: historical bars from TEST-macro regex, 'now' bar from PA5 RST table column sums; documented divergences. --- .github/skills/overall-status/SKILL.md | 214 +++++++++++++++++++++ docs/_assets/pa2_impl_progress.svg | 75 ++++++++ docs/_assets/pa3_arch_progress.svg | 70 +++++++ docs/_assets/pa4_impl_progress.svg | 61 ++++++ docs/_assets/pa5_verification_progress.svg | 143 ++++++++++++++ docs/s_core_v_1/roadmap/overall_status.rst | 29 +++ 6 files changed, 592 insertions(+) create mode 100644 docs/_assets/pa2_impl_progress.svg create mode 100644 docs/_assets/pa3_arch_progress.svg create mode 100644 docs/_assets/pa4_impl_progress.svg create mode 100644 docs/_assets/pa5_verification_progress.svg diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md index 162d4546939..a894dfa2f3b 100644 --- a/.github/skills/overall-status/SKILL.md +++ b/.github/skills/overall-status/SKILL.md @@ -507,6 +507,209 @@ sphinx-needs tag changes. --- +## 6a. Progress graphics (per-PA SVG charts above each table) + +Above the module-tracker table of **PA2, PA3, PA4 and PA5** sits a `figure::` +that renders an inline SVG showing how the totals evolved across the four +most recent releases (`v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main`). +Files live in `docs/_assets/`: + +| PA | File | Bars | +|---|---|---| +| PA2 | `pa2_impl_progress.svg` | Feature Req (`#1f77b4`), Component Req (`#ff7f0e`) | +| PA3 | `pa3_arch_progress.svg` | Feature Arch (`#1f77b4`), Component Arch (`#ff7f0e`) | +| PA4 | `pa4_impl_progress.svg` | Estimated LOC (`#1f77b4`) | +| PA5 | `pa5_verification_progress.svg`| 3 panels: Unit Tests, Integration Tests (Component `#ff7f0e` + Feature `#9467bd`), Coverage now (`#17becf`) | + +Each figure embeds in RST as + +```rst +.. figure:: /_assets/.svg + :alt: ... + :width: 720px + + +``` + +### 6a.1 Release pinning + +Resolve the four release SHAs once via the GitHub tag refs (annotated tags +must be dereferenced): + +```python +def resolve_tag(repo, tag): + d = json.loads(gh_raw(f"repos/{repo}/git/refs/tags/{tag}")) + sha = d["object"]["sha"] + if d["object"]["type"] == "tag": + d2 = json.loads(gh_raw(f"repos/{repo}/git/tags/{sha}")) + sha = d2["object"]["sha"] + return sha +``` + +For each release tag of `eclipse-score/reference_integration`, fetch its +`known_good.json` and read the per-module hash. Schemas differ: + +- v0.5 / v0.6: `modules..{hash,version}` flat +- v0.7+: `modules.{target_sw,tooling}..hash` +- v0.7.0 itself only carries `version` for some entries β†’ fall back to + `resolve_tag(, "v"+version)`. + +`now` is the per-module SHA from `known_good.json` on the **`main` branch of +`eclipse-score/reference_integration`** (not the working tree). Fetch it via +`gh api repos/eclipse-score/reference_integration/contents/known_good.json` β€” +this keeps the charts reproducible regardless of local uncommitted changes +or temporary ref bumps in the workspace. + +Module repos used for the charts: + +``` +score: eclipse-score/score (key: score_platform / "score") +baselibs: eclipse-score/baselibs (key: score_baselibs) +communication: eclipse-score/communication (key: score_communication) +logging: eclipse-score/logging (key: score_logging) +persistency: eclipse-score/persistency (key: score_persistency) +lifecycle: eclipse-score/lifecycle (key: score_lifecycle_health) +inc_time: eclipse-score/inc_time (only "now") +config_management: eclipse-score/config_management (only "now") +inc_security_crypto: eclipse-score/inc_security_crypto (only "now") +inc_someip_gateway: eclipse-score/inc_someip_gateway (only "now") +``` + +### 6a.2 Metrics β€” what each chart sums + +All four charts sum across the **11 PA2 modules** (Baselibs, Communication, +Logging, Persistency, Time, Config Mgmt, Lifecycle, Security/Crypto, +Diagnostic Services, NM, Some/IP). Modules whose data isn't in a release +contribute 0. + +> **Communication vs. Some/IP β€” never double-count.** +> Some/IP and Communication are **separate** modules even though Some/IP +> lives at `docs/features/communication/some_ip_gateway/**` inside the score +> repo. Whenever a path filter for Communication includes +> `'features/communication' in p` (or its `modules/` counterpart), it +> **MUST also exclude** `some_ip_gateway`: +> +> ```python +> def is_comm(p): +> return ('features/communication' in p +> and 'some_ip_gateway' not in p) +> ``` +> +> Some/IP gets its own filter that requires `some_ip_gateway` in the path +> plus its own repo `eclipse-score/inc_someip_gateway` for component-level +> data. The rule applies to **every** PA β€” PA2 (FR/CR), PA3 (FA/CA), +> PA4 (LOC, DD, code links) and PA5 (unit tests, integration tests, coverage). +> For PA4/PA5 the separation is usually automatic because Some/IP code lives +> in its own repo (`inc_someip_gateway`); but whenever a counter walks the +> Communication module repo (`eclipse-score/communication`) or the score +> repo's `features/communication/**` / `modules/communication/**` subtree, +> the `'some_ip_gateway' not in p` guard MUST be present. + +| Chart | Metric | Source | +|---|---|---| +| PA2 β€” Feature Req | sum of `count_directives_with_status(..., DIRECTIVE_TYPES["feat_req"])` totals (denominator) | per-module `path_filter` from Β§4 | +| PA2 β€” Component Req | analogous, `comp_req` + `aou_req` | per-module `path_filter` | +| PA3 β€” Feature Arch | analogous, `DIRECTIVE_TYPES["feat_arc"]` | per-module under `architecture` | +| PA3 β€” Component Arch | analogous, `DIRECTIVE_TYPES["comp_arc"]` | per-module under `architecture` | +| PA4 β€” LOC | `sum(blob.size for path in tree if is_src(path)) / 30` (rounded) | each module's own repo at the release SHA | +| PA5 β€” Unit Tests (historical) | count of `TEST(`, `TEST_F(`, `TEST_P(`, `TYPED_TEST(`, `TYPED_TEST_P(` macros plus Rust `#[test]` and Python `^def test_` in files matching `is_test_path` | each module's own repo | +| PA5 β€” Comp. IT (historical) | same counters in files where path contains `integration` | each module's own repo | +| PA5 β€” Feat. IT (historical) | same counters in `feature_integration_tests/` and `platform_integration_tests/` | `eclipse-score/reference_integration` at the release tag | +| PA5 β€” Unit / Comp. IT / Feat. IT (**now** column) | **column sum** of the corresponding cells in the PA5 RST table (the `(N tests)` annotations) | parsed from `overall_status.rst` | +| PA5 β€” C0/C1 now | weighted mean of per-module C0 and C1 from the current PA5 RST table, weights = unit-test count per module | parsed from `overall_status.rst` | + +> **PA5 test counts: table is the source of truth for "now".** +> The four releases use **two different sources** for the test-count bars: +> - `v0.5.0-beta`, `v0.6.0`, `v0.7.0` β†’ macro-based regex over module repo +> sources (Best-Effort, no curated table available for past tags). +> - `now` β†’ **sum of the `(N tests)` annotations in the PA5 RST table** +> (`Unit Tests`, `Comp. Integration Tests`, `Feature Integration Tests` +> columns), because the curated table is what users see. +> +> The two methods diverge for several reasons that are NOT bugs: +> 1. Some/IP integration tests are named `stress_tests/` not `integration*`, +> so the historical regex misses them; the table includes them. +> 2. Feature-Integration counts in the table are **per module** (i.e. how +> many of the cross-module `reference_integration` tests exercise that +> module), not the total `feature_integration_tests/` tree size β€” so +> the table sum (β‰ˆ7) is much smaller than the tree-walk total (β‰ˆ59). +> 3. Some modules have CI test-run counts in the table that don't match +> `TEST(...)` macro counts (parameterized tests count as one macro but +> many runs). +> +> Practical rule: when updating the SVG, run both the Β§6a recipe **and** +> sum the `(N tests)` cells from the RST. Use the recipe values for the +> three release bars and the **table sum** for `now`. Note the divergence +> in the caption / commit message if it's >10 %. + +> **Charts count TOTAL, not valid-only.** +> The progress bars must use the **total** count of directives (denominator +> from Β§3) β€” i.e. every `feat_req` / `comp_req` / `feat_arc` / `comp_arc` +> block irrespective of `:status:`. This is intentional and differs from +> the per-cell tracker logic in the tables, which renders `valid/total`. +> Rationale: the charts visualise *scope growth* across releases, not +> validation maturity. Drafts and invalids count. +> +> Practical consequence: use `count_directives(...)` (returns total only), +> **never** `count_directives_with_status(...)` for chart numbers. This is +> particularly important for Lifecycle, whose feature-level requirements +> were largely `:status: draft` or `:status: invalid` in v0.5/v0.6 β€” a +> valid-only counter would report 0 instead of ~92. + +LOC source-file filter: + +```python +SRC_EXT = (".cpp", ".cc", ".cxx", ".c", ".h", ".hpp", ".hh", ".rs", ".py") +def is_src(p): + pl = p.lower() + if not pl.endswith(SRC_EXT): return False + if pl.startswith("docs/") or "/docs/" in pl: return False + if pl.startswith("third_party/") or "/third_party/" in pl: return False + if pl.startswith("bazel-"): return False + return True + +def is_test_path(p): + pl = p.lower() + if any(pl.startswith(x) or "/"+x in "/"+pl + for x in ("docs/","third_party/","bazel-",".git/")): + return False + return any(t in pl for t in + ("_test.","/test/","/tests/","_tests.","gtest","unit_test","unittest")) +``` + +### 6a.3 Generating / updating the SVGs + +The SVGs are hand-written (no toolchain). Workflow: + +1. Compute totals (one Python script per chart, using `gh api` with the + on-disk cache `/tmp/status_cache/`). Write `/tmp/release_totals.json`, + `/tmp/release_totals_pa3_pa4.json`, `/tmp/release_totals_pa5.json`. +2. Update the bar `y`/`height` values and the printed numbers inside the + existing SVG. The chart frames stay fixed; only the bars and labels + change. +3. Bar heights use linear scale anchored at the panel's plot area. For PA2 + `viewBox="0 0 720 320"` with plot area `x=70..690, y=50..260` (height + 210 px), max value 400 β†’ `y = 260 βˆ’ value Β· 0.525`, + `height = 260 βˆ’ y`. PA3 uses max 240 (`Γ— 0.875`), PA4 uses max 900 000 + (`Γ— 0.0002333`), PA5 panels: Unit `Γ— 0.021`, Integration `Γ— 2.1`, + Coverage `Γ— 2.1`. + +When a metric goes out of the chart's current range, raise the y-axis max +and rescale **all four bars** of that panel; do not crop. + +### 6a.4 Caption discipline + +Caption template per chart: + +> ` across the 11 PA2 modules per release +> (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main).` + +Always write "across the 11 PA2 modules" (not "across all modules") β€” the +charts intentionally exclude orchestrator, baselibs_rust, score_platform, +docs_as_code, kyron and other repos that don't appear in the PA tables. + +--- + ## 7. Limitations - Test coverage of requirements (link analysis) is not detected β€” needs @@ -517,3 +720,14 @@ sphinx-needs tag changes. - Feature-Integration-Test heuristic is path-based and weak β€” confirm manually. - TRLC content is not parsed; cells reference the `.trlc` file via link only. +- PA4 LOC bars are an estimate (`tree blob bytes Γ· 30`) since `gh api` + exposes blob sizes but not line counts; expect Β±10 % vs `cloc`. +- PA5 historical coverage is not available β€” only the current snapshot. +- PA5 test-count bars use **two sources**: the three release bars come + from a TEST-macro regex over module repos (Best-Effort), the `now` bar + is the **column sum of the RST table cells**. Expect divergences of + 10–20 % between the methods (parameterized tests, naming conventions + like Some/IP `stress_tests/`, per-module cross-feature attribution). + Lifecycle has only C0; modules without coverage in CI (Time, Config Mgmt, + Security/Crypto, Some/IP, NM, Diagnostic Services) are excluded from the + weighted mean. diff --git a/docs/_assets/pa2_impl_progress.svg b/docs/_assets/pa2_impl_progress.svg new file mode 100644 index 00000000000..bb2e716d3f3 --- /dev/null +++ b/docs/_assets/pa2_impl_progress.svg @@ -0,0 +1,75 @@ + + PA2 Implementation β€” total Feature and Component Requirements per release + + + + PA2 Implementation β€” total requirements per release (sum of all modules) + + + + + + + + + + + + + + + + 0 + 100 + 200 + 300 + 400 + + + + + + + + + + 313 + 80 + v0.5.0-beta + + + + + + + 315 + 160 + v0.6.0 + + + + + + + 316 + 186 + v0.7.0 + + + + + + + 316 + 186 + now + + + + + + Feature Requirements + + Component Requirements + + diff --git a/docs/_assets/pa3_arch_progress.svg b/docs/_assets/pa3_arch_progress.svg new file mode 100644 index 00000000000..63ed7f16866 --- /dev/null +++ b/docs/_assets/pa3_arch_progress.svg @@ -0,0 +1,70 @@ + + PA3 Architecture Design β€” total Feature and Component Architecture items per release + + + PA3 Architecture β€” total architecture items per release (sum of all modules) + + + + + + + + + + + + + + 0 + 60 + 120 + 180 + 240 + + + + + + + + + 16 + 83 + v0.5.0-beta + + + + + + + 19 + 151 + v0.6.0 + + + + + + + 21 + 203 + v0.7.0 + + + + + + + 21 + 204 + now + + + + + Feature Architecture + + Component Architecture + + diff --git a/docs/_assets/pa4_impl_progress.svg b/docs/_assets/pa4_impl_progress.svg new file mode 100644 index 00000000000..7405b55fe04 --- /dev/null +++ b/docs/_assets/pa4_impl_progress.svg @@ -0,0 +1,61 @@ + + PA4 Implementation β€” estimated total Lines of Code per release + + + PA4 Implementation β€” estimated total Lines of Code per release + + + + + + + + + + + + + + 0 + 200k + 400k + 600k + 800k + + + + + + + + ~570k + v0.5.0-beta + + + + + + ~651k + v0.6.0 + + + + + + ~690k + v0.7.0 + + + + + + ~809k + now + + + + + Estimated from GitHub tree blob sizes (.cpp / .h / .c / .rs / .py outside docs/, third_party/, bazel-*) Γ· 30 + + + diff --git a/docs/_assets/pa5_verification_progress.svg b/docs/_assets/pa5_verification_progress.svg new file mode 100644 index 00000000000..79bca55719b --- /dev/null +++ b/docs/_assets/pa5_verification_progress.svg @@ -0,0 +1,143 @@ + + PA5 Verification β€” tests per release and current code coverage + + + PA5 Verification β€” test counts per release and current code coverage (sum of all 11 PA2 modules) + + + + + Unit Tests + + + + + + + + + + + + + 0 + 3k + 6k + 9k + + + + + + 8399 + v0.5.0-beta + + + 8409 + v0.6.0 + + + 8718 + v0.7.0 + + + 8434 + now + + + + + Integration Tests + + + + + + + + + + + + + 0 + 30 + 60 + 90 + + + + + + + v0.5.0-beta + 15 + 3 + + + + v0.6.0 + 43 + 13 + + + + v0.7.0 + 63 + 12 + + + + now + 92 + 7 + + + + + Component + + Feature + + + + + + Code Coverage (now, weighted by # tests) + + + + + + + + + + + + + 0% + 30% + 60% + 90% + + + + 100% + + + + + 90.1% + C0 (line) + + + 58.7% + C1 (branch) + + + + + Test counts: GTEST macros (TEST/TEST_F/TEST_P/TYPED_TEST), Rust #[test], Python def test_* β€’ Coverage: weighted by unit-test count across modules with reported numbers + + diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst index 50ce57a3c71..1ecd0cb980c 100644 --- a/docs/s_core_v_1/roadmap/overall_status.rst +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -201,6 +201,13 @@ See :ref:`requirements_workflows`. .. rubric:: Implementation status: πŸ”„ 42% (14/33 deliverables complete) +.. figure:: /_assets/pa2_impl_progress.svg + :alt: Total Feature and Component Requirements across PA2 modules per release + :width: 720px + + Total Feature and Component Requirements across all PA2 modules per release + (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + .. list-table:: :header-rows: 1 :stub-columns: 1 @@ -376,6 +383,13 @@ See :ref:`arch_workflow`. .. rubric:: Implementation status: πŸ”„ 15% (5/33 deliverables complete) +.. figure:: /_assets/pa3_arch_progress.svg + :alt: Total Feature and Component Architecture items across PA2 modules per release + :width: 720px + + Total Feature and Component Architecture items across all PA2 modules per + release (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + .. list-table:: :header-rows: 1 :stub-columns: 1 @@ -540,6 +554,13 @@ See :ref:`workflow_implementation`. .. rubric:: Implementation status: πŸ”„ 39% (17/44 deliverables complete) +.. figure:: /_assets/pa4_impl_progress.svg + :alt: Estimated total Lines of Code across PA2 modules per release + :width: 720px + + Estimated total Lines of Code across all PA2 modules per release + (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + .. list-table:: :header-rows: 1 :stub-columns: 1 @@ -703,6 +724,14 @@ See :ref:`verification_workflows`. .. rubric:: Implementation status: πŸ”„ 27% (21/79 deliverables complete) +.. figure:: /_assets/pa5_verification_progress.svg + :alt: PA5 verification β€” test counts per release and current coverage + :width: 1100px + + Test counts (Unit / Component Integration / Feature Integration) per release + and current code coverage across the 11 PA2 modules. Coverage values are + only available for the current snapshot. + .. list-table:: :header-rows: 1 :stub-columns: 1 From c3da6e57873525e7fec7e597c6424406160bf575 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Wed, 3 Jun 2026 12:51:39 +0000 Subject: [PATCH 6/7] docs(overall_status): refine PA1/PA5 layout, add platform-ver admonition, fix label warnings - PA1: render FR issue titles next to the issue number; restrict #549 to Baselibs; add #757 'qualified json-parser' to Baselibs (no milestone); drop #914/#917 from Communication (local IPC scope only) - PA5: drop per-module Platform Ver. Rpt column; add prominent Platform Verification Report admonition after the table - PA5: split test counts onto a separate line-block line below the status emoji - PA5: add reader notes for C0/C1 coverage source and Static/Dynamic analysis semantics - Add cross-reference labels (overall_status_pa2..pa5) to fix six Sphinx 'undefined label' warnings from pi1/pi2/pi3 - custom.css: neutralise blockquote/line-block styling inside list tables so secondary lines blend into the cell; style new .platform-ver-report admonition Sphinx build now reports 0 warnings, 0 errors. SKILL.md updated to document all of the above (sections 4.0, 4.2, 5.0, 5.1, 5.2). --- .github/skills/overall-status/SKILL.md | 372 ++++++++++- docs/_assets/custom.css | 64 ++ docs/_assets/pa2_impl_progress.svg | 10 +- docs/_assets/pa3_arch_progress.svg | 8 +- docs/_assets/pa4_impl_progress.svg | 6 +- docs/_assets/pa5_verification_progress.svg | 20 +- docs/s_core_v_1/roadmap/overall_status.rst | 691 +++++++++------------ 7 files changed, 749 insertions(+), 422 deletions(-) diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md index a894dfa2f3b..9219325ed0d 100644 --- a/.github/skills/overall-status/SKILL.md +++ b/.github/skills/overall-status/SKILL.md @@ -30,7 +30,7 @@ Five process areas, each with its own table: | PA2 | Requirements Engineering | `requirements_engineering` | Feature Req Β· Component Req Β· Req. Inspection | | PA3 | Architecture Design | `architecture_design` | Feature Arch Β· Component Arch Β· Arch. Inspection | | PA4 | Implementation | `implementation` | SW Dev Plan Β· Code Β· Detailed Design Β· Impl. Inspection | -| PA5 | Verification | `verification` | Unit Tests Β· C0/C1 Cov Β· Comp. IT Β· Feat. IT Β· Static Β· Dynamic Β· Module Ver. Rpt Β· Platform Ver. Rpt | +| PA5 | Verification | `verification` | Unit Tests Β· C0/C1 Cov Β· Comp. IT Β· Feat. IT Β· Static Β· Dynamic Β· Module Ver. Rpt | --- @@ -125,16 +125,19 @@ LOC counts every line in source files (`.cpp .h .c .rs .py`) outside `docs/`, `third_party/`, and `bazel-*/`, then rounds to the nearest 100. Format: ```rst - - βœ… Available (~12,500 LOC) `repo >`__ + - βœ… Available (~12,500 LOC) ` >`__ ``` +The link label MUST be the bare repository name (e.g. `baselibs`, +`communication`, `inc_time`), not the literal word `repo`. + --- ## 4. Per-deliverable status criteria | Deliverable | `βœ… Available` | `πŸ”„ …` | `❌ Open` | |---|---|---|---| -| **PA1** CR approved | Closed GitHub issue tagged "Feature/Contribution Request" for the module exists in `eclipse-score/score` | β€” | No such issue | +| **PA1** CR approved | At least one matching `feature_request` issue **scoped to milestone v0.5 or v1.0** has Status `Accepted` (or `Done`) in Project V2 #4 "Feature Requests / Modification" (see Β§4.0); cell lists every matching FR with its individual project status and milestone tag | At least one in-scope FR in `In Progress`/`In Review`/`Ready for Review`/`Changes Requested`/`Draft`/`POC Needed` and none Accepted | No matching FR in scope, or all matching FRs `Rejected` | | **PA2** Feature Req | `valid = total` per Β§3 | files exist, not all valid | no `feat_req` directives in `docs/features//**` | | **PA2** Component Req | `valid = total` per Β§3.2 | mixed | no `comp_req`/`aou_req` directives, and no TRLC stand-in | | **PA2** Req. Inspection | every `chklst_req_inspection.rst` has `:status: valid` | mixed | no checklists | @@ -148,11 +151,163 @@ LOC counts every line in source files (`.cpp .h .c .rs .py`) outside `docs/`, | **PA5** Unit Tests | repo has `_test.cpp` / `_test.py` / `tests/` | β€” | none | | **PA5** C0/C1 Coverage | C0 = C1 = 100 % | data exists (any %) | not in `reference_integration` CI | | **PA5** Comp. Integration Tests | tests in module's own repo | β€” | none | -| **PA5** Feature Integration Tests | `integration_test_scenarios` / `feature*test*` paths in repo | β€” | none | -| **PA5** Static Analysis | zero-tolerance per-module CI workflow passes on `main` (clang-tidy / Clippy) | tools configured but no CI enforcement | no static-analysis config | +e| **PA5** Static Analysis | zero-tolerance per-module CI workflow passes on `main` (clang-tidy / Clippy) | tools configured but no CI enforcement | no static-analysis config | _no link_ β€” Static cells render the **status only**, no source-code link. Same convention as Dynamic Analysis (Β§4.2). | | **PA5** Dynamic Analysis | zero-tolerance sanitizer CI passes on `main` | β€” | no sanitizer CI | | **PA5** Module Ver. Report | `verification/module_verification_report.rst` `:status: valid` and contains data | `:status: draft` | absent or template only | -| **PA5** Platform Ver. Report | `eclipse-score/score: docs/score_releases/verification/platform_ver_report.rst` `:status: valid` (same status in every row) | `:status: draft` | absent or template only | +| **PA5** Platform Ver. Report | _no column_ β€” the platform verification report exists **once** for the entire platform; do not render it as a per-module column. Add it as a **bold one-liner immediately after the PA5 table** (see Β§5.2). | | | + +### 4.0 PA1 β€” Feature Request issue lookup + +PA1 "CR approved" tracks **Feature Request** issues in `eclipse-score/score`. +The label name is **`feature_request`** (lowercase, with underscore). Use +`state=all` (some FRs are still open) and combine the topical +`ft:` label with a title-keyword pass; **always union both result +sets** (deduplicated by issue number) so that older FRs which pre-date the +`ft:*` label scheme are still attributed to a module β€” see the attribution +note below. + +**Milestone scope.** Only Feature Requests targeted at the **v0.5** or +**v1.0** release milestones are counted. The GitHub milestone titles that +currently qualify are: + +- `SCORE v0.5 Feature Complete` +- `S-CORE v0.5 Certifiable` +- `v1.0` + +The match is performed by substring on the milestone title with whitespace +stripped (`"0.5" in title` or `"1.0" in title`, case-insensitive). FRs with +no milestone, or with any other milestone (`v0.6`…`v0.10`), are excluded +from PA1 β€” even if they carry a matching `ft:*` label. Each rendered FR is +tagged with its short milestone in square brackets (e.g. `[v1.0]`, +`[v0.5 Certifiable]`). + +The issues fetch must therefore include the milestone field in the jq +projection. + +For each issue, fetch its **`Status`** field from the org-level project +**"Feature Requests / Modification"** (Project V2, id +`PVT_kwDOCy9hX84Auo7w`, number `#4`). The PA1 cell renders **one entry per +Feature Request**, each annotated with its individual project status β€” not a +single aggregate "Available". The cell headline is the **best** status +across all FRs for that module (so a module with at least one Accepted FR +still shows βœ… in summaries). + +```python +# 1. List feature requests via the issue label (incl. milestone) +def fetch_frs(): + s = gh_raw( + "repos/eclipse-score/score/issues?state=all" + "&labels=feature_request&per_page=100 --paginate", + '.[] | [(.number|tostring), .title,' + ' ((.labels // []) | map(.name) | join(",")),' + ' ((.milestone.title // ""))] | @tsv') + return [tuple(line.split("\t")) for line in s.splitlines() if line] + +def in_scope(milestone: str) -> bool: + s = milestone.lower().replace(" ", "") + return ("0.5" in s) or ("1.0" in s) + +# 2. Pull Status per issue from Project V2 #4 +PROJECT_FR_ID = "PVT_kwDOCy9hX84Auo7w" +def fetch_fr_project_status() -> dict[str, str]: + q = ('query($endCursor:String){node(id:"' + PROJECT_FR_ID + '"){' + '... on ProjectV2{items(first:100, after:$endCursor){' + 'pageInfo{hasNextPage endCursor} ' + 'nodes{content{... on Issue{number repository{nameWithOwner}}} ' + 'fieldValues(first:20){nodes{... on ProjectV2ItemFieldSingleSelectValue' + '{name field{... on ProjectV2SingleSelectField{name}}}}}}}}}}') + out = subprocess.run( + ["gh","api","graphql","--paginate","-f", "query="+q, + "--jq", + '.data.node.items.nodes[] | ' + 'select(.content.repository.nameWithOwner=="eclipse-score/score") | ' + '[(.content.number|tostring), ' + '((.fieldValues.nodes[]|select(.field.name=="Status")|.name) // "β€”")] | @tsv'], + capture_output=True, text=True, timeout=120) + return dict(line.split("\t",1) for line in out.stdout.splitlines() if "\t" in line) +``` + +Status-field options (from project schema) and the recommended emoji / +ranking the cell uses to pick the headline: + +| Project Status | Emoji | Rank | +|---------------------|:-----:|:----:| +| `Accepted` / `Done` | βœ… | 0 | +| `In Progress` | πŸ”„ | 1 | +| `In Review` | πŸ”„ | 1 | +| `Ready for Review` | πŸ”„ | 1 | +| `Changes Requested` | πŸ”„ | 1 | +| `Draft` | πŸ“ | 2 | +| `POC Needed` | πŸ§ͺ | 3 | +| `Rejected` | ❌ | 4 | +| _not in project_ | ❔ | 5 | + +Cell layout (RST): + +```rst + - βœ… Accepted + + | `#914 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for SOME/IP Gateway + | `#549 `__ β€” βœ… Accepted [v0.5 Certifiable] β€” Feature request: common libraries for IPC and Logging +``` + +Each FR line is `\`#NNN \`__ β€” [] β€” `. +The issue title is taken verbatim from the GitHub `.title` field (already +fetched by `fetch_frs()`). + +Module attribution mapping. **Always** combine the label-based hits and +the title-keyword hits (deduplicated by issue number) β€” do **not** treat +the keyword set as a fallback that only fires when the `ft:*` query is +empty. Older feature requests pre-date the `ft:*` label scheme and only +match by title keyword (e.g. `#69 "Feature Request for IPC"` for +Communication carries `feature_request` + `community:architecture` + +`planned-for:0.5` but no `ft:communication`); skipping the keyword pass +when `ft:*` already produced hits causes such issues to silently disappear +from PA1. + +```python +FT_LABEL = { + "Baselibs": "ft:baselibs", + "Communication": "ft:communication", + "Logging": "ft:logging", + "Persistency": "ft:persistency", + "Config Mgmt": "ft:config_management", + "Lifecycle": "ft:health&lifecycle", + "Security/Crypto": "ft:security&crypto", +} +KW_FALLBACK = { + "Baselibs": ["baselib", "common librar", "abi compatible", "json parser"], + "Communication": ["ipc", "streaming", "record and replay"], + "Logging": ["logging"], + "Persistency": ["persistency", " kvs"], + "Time": [" time"], + "Some/IP": ["some/ip", "someip", "some_ip"], + "Diagnostic Services": ["diagnos"], + "NM": ["network management"], +} +``` + +Render up to ~6 hits per cell. If a module has zero matches, render +`❌ Open`. The older label `contribution request` exists too but tracks +formal contribution intent, not feature scope β€” **do not** use it for PA1. + +> **Manual overrides β€” apply *after* the automated labelβˆͺkeyword union +> has produced its hit set:** +> +> - **`#549` "common libraries for IPC and Logging"** is rendered **only +> under Baselibs**, even though its title contains both "IPC" and +> "Logging" (which would otherwise match Communication and Logging). +> Drop `#549` from the Communication and Logging cells. +> - **`#757` "Feature request for qualified json-parser"** belongs to +> **Baselibs** (label `ft:baselibs`). It has **no GitHub milestone**, +> so the standard milestone filter (`"0.5"|"1.0" in title`) excludes +> it; force-include it for Baselibs and render it without the `[…]` +> milestone bracket. +> - **Communication scope is local IPC only.** Drop `#914` (SOME/IP +> Gateway β†’ Some/IP module) and `#917` (ABI compatible datatypes β†’ +> Baselibs) from the Communication cell, even though their title +> keywords (`some/ip`, `abi compatible`) or labels could attribute +> them. Communication renders only `#69 β€” Feature Request for IPC`. ### 4.1 PA5 β€” coverage CI keys @@ -178,8 +333,45 @@ gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ | grep -A50 "COVERAGE ANALYSIS SUMMARY" ``` +The log emits a single Python-dict dump after the +`=== QR: COVERAGE ANALYSIS SUMMARY ===` banner, e.g. + +```text +{'score_baselibs_cpp': {'branches': '60.3%', 'exit_code': 0, 'functions': '85.4%', 'lines': '92.3%'}, + 'score_logging_rust': {'branches': 'NA', 'exit_code': 0, 'functions': '99.5%', 'lines': '74.4%'}, + ...} +``` + +Parse it with this regex (works for both cpp and rust keys; either field may be `'NA'`): + +```python +COV_RE = re.compile( + r"'(score_[a-z_]+)':\s*\{[^}]*'branches':\s*'([^']*)'" + r"[^}]*'functions':\s*'([^']*)'" + r"[^}]*'lines':\s*'([^']*)'") +``` + ### 4.2 PA5 β€” static / dynamic analysis CI table +> **Reader notes (rendered in the RST as `.. note::` blocks placed +> immediately after the PA5 `Implementation status:` rubric and before +> the PA5 list-table β€” keep them in sync when regenerating):** +> +> 1. **C0/C1 Coverage source.** Coverage data comes from the +> `reference_integration` CI (*Code Quality & Documentation* workflow, +> `bazel coverage --config=ferrocene-coverage`). C0 = line coverage, +> C1 = branch coverage. Rust coverage reports **line only**. Modules +> not yet integrated into the `reference_integration` CI render +> `❌ Open` (currently: Time, Config Mgmt, Security/Crypto, Some/IP β€” +> update list each regen). +> 2. **Static / Dynamic semantics.** Static = per-module clang-tidy +> (C++) / Clippy (Rust) workflows; Dynamic = sanitizer workflows +> (`--config=asan_ubsan_lsan`, `--config=tsan`). All listed workflows +> are **zero-tolerance** β†’ a passing `main` β‡’ `βœ… 0 findings`. +> Central CodeQL runs in +> `reference_integration/.github/workflows/codeql-multiple-repo-scan.yml` +> (finding counts require the GitHub Security tab). + | Module | Static | Dynamic | |---|---|---| | Baselibs | βœ… `lint.yml` (clang-tidy) | βœ… `sanitizers_linux.yml` (ASan/UBSan/LSan) | @@ -193,15 +385,50 @@ gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ Central CodeQL runs in `reference_integration/.github/workflows/codeql-multiple-repo-scan.yml`. +> **Link discipline:** The **Static** column renders the workflow YAML +> as a line-block link below the status emoji (so reviewers can click +> through to the actual configuration). The **Dynamic** column renders +> the **status only** (no link) β€” the dynamic-analysis CI is more +> heterogeneous (multiple sanitizer runs per repo, sometimes split across +> several workflow files) and listing one representative file would be +> misleading. Keep this asymmetry when regenerating. + --- ## 5. RST formatting rules +### 5.0 Cross-reference labels (mandatory) + +Each `Process Area N β€” …` heading **must** be preceded by an explicit +target label so that `pi1.rst`, `pi2.rst`, `pi3.rst` (and any future +release-gate page) can link back via `:ref:\`overall_status_paN\``: + +```rst +.. _overall_status_pa2: + +Process Area 2 β€” Requirements Engineering +----------------------------------------- +``` + +Required labels: `overall_status_pa2`, `overall_status_pa3`, +`overall_status_pa4`, `overall_status_pa5`. Omitting any of them +produces six Sphinx `WARNING: undefined label` messages from the PI +release-gate pages β€” a clean build is the success criterion. + ### 5.1 Cell layout Status emoji + label on the **first line**; everything else (counts, links, notes) goes on a **line-block** (`| `) after a blank line. +> **Pluralisation.** When emitting test counts, write `1 test` (singular) +> and `N tests` (plural). A naive `f"{n} tests"` will produce the wrong +> `1 tests` for Logging Feat. IT and any other 1-test cell: +> +> ```python +> def plur(n, s="test"): +> return f"{n} {s}" if n == 1 else f"{n} {s}s" +> ``` + ```rst - βœ… Available (37/37) @@ -217,24 +444,134 @@ notes) goes on a **line-block** (`| `) after a blank line. | **Rust line:** 74.4% ``` +> **PA5 test counts on a new line.** For the **Unit Tests**, **Comp. IT** +> and **Feat. IT** columns, the test count goes on its **own line-block +> line** below the status β€” never on the same line as `βœ… Available`: +> +> ```rst +> - βœ… Available +> +> | 5376 tests +> ``` +> +> Do **not** emit `βœ… Available (5376 tests)` on a single line. The +> `(valid/total)` parenthetical form (Β§3, requirements/AoU columns) is +> unaffected. + +> **Line-blocks inside table cells render flush-left.** Sphinx wraps an +> indented `| ...` continuation in a `
` +> which by default carries a left border + tinted background β€” visually +> noisy inside a status table. `docs/_assets/custom.css` neutralises this +> for `table … blockquote` and `table … .line-block` (zero margin/padding, +> `border: none`, `background: transparent`). Do **not** add per-cell +> raw-HTML wrappers to fight the styling β€” let the CSS rule do it. + When mentioning `:status: invalid` in prose, **always use double backticks**: `` ``:status: invalid`` `` (single backticks are RST hyperlink syntax β†’ parse warning). ### 5.2 Source links β€” mandatory -Every Req / Arch / Detailed-Design / Code cell that is **not** `❌ Open` -**MUST** carry one or more source links directly below the count line. Rules: +Every Req / Arch / Detailed-Design / Code / Inspection cell that is **not** +`❌ Open` **MUST** carry one or more source links directly below the count +line. Rules: - One bullet per source RST file or per logical group (e.g. per module - subfolder). + subfolder). **List every matching source** β€” Feature Req, Component Req, + Feature Arch, Component Arch, Detailed Design, **and** Inspection cells + use no link cap. Earlier revisions capped non-Inspection cells at ~4 + links; that rule is obsolete because the truncated cells (e.g. Baselibs + with 10 components) hid components from the reader. +- **Link labels MUST be the component (or feature) name**, derived from + the URL path. This applies to **all** cells with source links β€” + Feature Req, Component Req, Feature Arch, Component Arch, + Detailed Design, **and** Inspection cells. Do **not** use the bare + filename (`index`, `requirements`, `aou_req`, `mw-fr_logging_req`, + `chklst_req_inspection`, …) as the label. +- Algorithm to derive the label from a path: + 1. drop the filename; + 2. drop trailing segments `requirements` / `architecture` / + `detailed_design` / `docs` / `component_requirements` / + `feature_requirements`; + 3. use the last remaining path segment. + + Examples: + + | Path | Label | + |---|---| + | `docs/features/baselibs/docs/requirements/index.rst` | `baselibs` | + | `docs/modules/baselibs/concurrency/docs/requirements/index.rst` | `concurrency` | + | `docs/features/communication/ipc/docs/requirements/index.rst` | `ipc` | + | `docs/persistency/kvs/requirements/index.rst` | `kvs` | + | `docs/module/health_monitor/requirements/index.rst` | `health_monitor` | + | `score/mw/com/requirements/component_requirements/component_requirements_ipc.trlc` | `com` | + | `docs/features/baselibs/docs/requirements/chklst_req_inspection.rst` | `baselibs` | + | `docs/modules/baselibs/concurrency/docs/requirements/chklst_req_inspection.rst` | `concurrency` | + +- Inspection cells (`Req. Inspection`, `Arch. Inspection`, + `Impl. Inspection`) link the underlying `chklst_*_inspection.rst` files, + not the parent index β€” readers want to click directly into the checklist + whose `:status:` drives the cell. - URLs **MUST** point to the pinned ref (40-char SHA from `known_good.json`), not `blob/main` β€” counts come from the pinned ref, and `main` may have been restructured. For repos not in `known_good.json` (`inc_time`, `config_management`, `inc_security_crypto`, `inc_someip_gateway`), `blob/main` is acceptable. - For Communication `comp_req` link the `.trlc` file marked `[TRLC]`. +- **PA4 Code cell** links the **repository root** (e.g. + `https://github.com/eclipse-score/baselibs`). The link label MUST be the + repository name (last URL segment), **not** the literal word `repo` β€” + e.g. `baselibs`, `communication`, `inc_time`, `config_management`, + `inc_security_crypto`, `inc_someip_gateway`. +- **PA5 Static Analysis cell** is **status-only** β€” do NOT add links to + CI workflow files or `quality/static_analysis` directories under the + status. Same rule as Dynamic Analysis (Β§4.2). +- **PA5 Platform Verification Report** is a **single project-wide + deliverable** β€” it does **not** get a per-module column. Render it as + a prominent admonition immediately after the PA5 list-table (styled + via `.platform-ver-report` in `docs/_assets/custom.css` β€” larger font, + blue accent, so it can't be missed): + + ```rst + .. admonition:: Platform Verification Report + :class: important platform-ver-report + + `platform_ver_report + / + docs/score_releases/verification/platform_ver_report.rst>`__ + β€” πŸ”„ **Draft** (single project-wide deliverable) + ``` + + Update the status emoji + label to match the report's current + `:status:` field (βœ… **Valid** / πŸ”„ **Draft**). Do **not** revert this + to a plain `**bold paragraph**` β€” the admonition class is what makes + it visually prominent. + +### 5.3 Per-PA progress figures + +Each Process Area embeds one SVG figure under `docs/_assets/`: + +| PA | File | `:width:` | +|-----|-----------------------------------|------------| +| PA2 | `pa2_impl_progress.svg` | `720px` | +| PA3 | `pa3_arch_progress.svg` | `720px` | +| PA4 | `pa4_impl_progress.svg` | `720px` | +| PA5 | `pa5_verification_progress.svg` | `1080px` | + +The PA5 verification figure is rendered at **1.5Γ— the standard width** +(`1080px` instead of `720px`) because it carries four series across four +release columns and a 720px render makes the per-module test counts hard +to read. All other PAs keep the default 720px width. + +```rst +.. figure:: /_assets/pa5_verification_progress.svg + :alt: PA5 verification progress + :width: 1080px -### 5.3 Pie chart row (Process Status) + Test counts and coverage across the 11 PA2 modules per release + (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). +``` + +### 5.4 Pie chart row (Process Status) Each PA section starts with a pie chart row. @@ -439,6 +776,15 @@ def comp_req_cell(contents, *, trlc=False): ### Step 4 β€” Path filters (reference) +> **Component-level data may live in two repos at once.** Baselibs and +> Logging keep `comp_arc` directives both in `eclipse-score/score` +> (`modules//**`) **and** in their own repo (`docs//**`). +> Always query both filters and **sum** the `(valid, total)` tuples; never +> drop one source. The same is true for Persistency `kvs` (uses both +> `score/kvs/docs/` and the older `docs/persistency/kvs/`). +> Some/IP keeps `comp_req` partly in `docs/requirements/component/**` and +> partly in `docs/tc8_conformance/requirements.rst` β€” combine both. + | Module | Deliverable | Repo | Filter (`lambda p: ...`) | |---|---|---|---| | Baselibs | Feat. Req | score | `'features/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | @@ -615,14 +961,14 @@ contribute 0. | PA5 β€” Unit Tests (historical) | count of `TEST(`, `TEST_F(`, `TEST_P(`, `TYPED_TEST(`, `TYPED_TEST_P(` macros plus Rust `#[test]` and Python `^def test_` in files matching `is_test_path` | each module's own repo | | PA5 β€” Comp. IT (historical) | same counters in files where path contains `integration` | each module's own repo | | PA5 β€” Feat. IT (historical) | same counters in `feature_integration_tests/` and `platform_integration_tests/` | `eclipse-score/reference_integration` at the release tag | -| PA5 β€” Unit / Comp. IT / Feat. IT (**now** column) | **column sum** of the corresponding cells in the PA5 RST table (the `(N tests)` annotations) | parsed from `overall_status.rst` | +| PA5 β€” Unit / Comp. IT / Feat. IT (**now** column) | **column sum** of the corresponding cells in the PA5 RST table (the `| N tests` line-block annotations) | parsed from `overall_status.rst` | | PA5 β€” C0/C1 now | weighted mean of per-module C0 and C1 from the current PA5 RST table, weights = unit-test count per module | parsed from `overall_status.rst` | > **PA5 test counts: table is the source of truth for "now".** > The four releases use **two different sources** for the test-count bars: > - `v0.5.0-beta`, `v0.6.0`, `v0.7.0` β†’ macro-based regex over module repo > sources (Best-Effort, no curated table available for past tags). -> - `now` β†’ **sum of the `(N tests)` annotations in the PA5 RST table** +> - `now` β†’ **sum of the `| N tests` line-block annotations in the PA5 RST table** > (`Unit Tests`, `Comp. Integration Tests`, `Feature Integration Tests` > columns), because the curated table is what users see. > @@ -638,7 +984,7 @@ contribute 0. > many runs). > > Practical rule: when updating the SVG, run both the Β§6a recipe **and** -> sum the `(N tests)` cells from the RST. Use the recipe values for the +> sum the `| N tests` line-block cells from the RST. Use the recipe values for the > three release bars and the **table sum** for `now`. Note the divergence > in the caption / commit message if it's >10 %. diff --git a/docs/_assets/custom.css b/docs/_assets/custom.css index 79c9446587b..674fd1cdba7 100644 --- a/docs/_assets/custom.css +++ b/docs/_assets/custom.css @@ -166,3 +166,67 @@ body.wide-content-page .bd-content .bd-article-container { .landing-grid .sd-card a:hover { color: #ffffff !important; } + +/* --------------------------------------------------------------------------- + * RST line-blocks inside list-tables (used in overall_status.rst PA cells): + * Sphinx wraps the indented "| ..." continuation in a
, which + * adds a left border and a tinted background. Inside a status table we want + * those secondary lines (test counts, coverage values, links) to look like + * regular text β€” same color, no border, no inset background. + * ---------------------------------------------------------------------------*/ + +table.docutils blockquote, +table blockquote { + margin: 0 !important; + padding: 0 !important; + border: none !important; + background: transparent !important; + box-shadow: none !important; +} + +table.docutils blockquote > div, +table blockquote > div { + margin: 0 !important; + padding: 0 !important; +} + +table.docutils .line-block, +table .line-block { + margin: 0 !important; + padding: 0 !important; + border: none !important; + background: transparent !important; +} + +table.docutils .line-block .line, +table .line-block .line { + margin: 0 !important; + padding: 0 !important; + border: none !important; + background: transparent !important; +} + +/* --------------------------------------------------------------------------- + * Platform Verification Report admonition (overall_status.rst PA5): + * make this single project-wide deliverable visually prominent. + * ---------------------------------------------------------------------------*/ + +.admonition.platform-ver-report { + font-size: 1.15rem; + border-left: 6px solid #1a5fa8; + background-color: #eef4fb; + padding: 0.8rem 1rem; + margin: 1.2rem 0; +} + +.admonition.platform-ver-report > .admonition-title { + font-size: 1.25rem; + font-weight: 700; + color: #1a5fa8; + margin-bottom: 0.3rem; +} + +.admonition.platform-ver-report p { + margin: 0; + font-size: 1.1rem; +} diff --git a/docs/_assets/pa2_impl_progress.svg b/docs/_assets/pa2_impl_progress.svg index bb2e716d3f3..211feb8d708 100644 --- a/docs/_assets/pa2_impl_progress.svg +++ b/docs/_assets/pa2_impl_progress.svg @@ -56,12 +56,12 @@ v0.7.0 - + - - - 316 - 186 + + + 361 + 194 now diff --git a/docs/_assets/pa3_arch_progress.svg b/docs/_assets/pa3_arch_progress.svg index 63ed7f16866..17ac6141111 100644 --- a/docs/_assets/pa3_arch_progress.svg +++ b/docs/_assets/pa3_arch_progress.svg @@ -52,12 +52,12 @@ v0.7.0 - + - - 21 - 204 + + 21 + 228 now diff --git a/docs/_assets/pa4_impl_progress.svg b/docs/_assets/pa4_impl_progress.svg index 7405b55fe04..78d1c67ced3 100644 --- a/docs/_assets/pa4_impl_progress.svg +++ b/docs/_assets/pa4_impl_progress.svg @@ -46,10 +46,10 @@ v0.7.0 - + - - ~809k + + ~809k now diff --git a/docs/_assets/pa5_verification_progress.svg b/docs/_assets/pa5_verification_progress.svg index 79bca55719b..e2d68f46076 100644 --- a/docs/_assets/pa5_verification_progress.svg +++ b/docs/_assets/pa5_verification_progress.svg @@ -39,9 +39,9 @@ 8718 v0.7.0 - - - 8434 + + + 9430 now @@ -85,12 +85,12 @@ v0.7.0 63 12 - - - + + + now - 92 - 7 + 96 + 54 @@ -127,8 +127,8 @@ - - 90.1% + + 90.1% C0 (line) diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst index 1ecd0cb980c..2bd24a43f32 100644 --- a/docs/s_core_v_1/roadmap/overall_status.rst +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -1,75 +1,15 @@ -.. - # ******************************************************************************* - # 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 - # ******************************************************************************* - -.. raw:: html - - +:hide-toc: Overall Status -########################## +============== -This page tracks the completion status of all 5 process areas per module. -Update the status column for each module after completing the respective deliverable. +This page tracks feature and process status across the SCORE platform modules. +It is regenerated from live `eclipse-score` GitHub repositories pinned via +``known_good.json``. -**Process Status chart legend:** - -.. list-table:: - :header-rows: 1 - :widths: 30 30 40 - - * - Process req. status - - ISO 26262 std_req status - - Req. verification status - * - 🟒 Valid - - 🟑 Draft - - πŸ”΄ Invalid - - ⬜ Other - - 🟒 Ok - - πŸ”΅ Recommendation - - 🟑 Open - - 🟠 Action - - πŸ”΄ Deviation - - ⬜ N/A Β· β—» Other - - 🟒 Automated - - 🟑 Waiting for automation - - πŸ”΅ Inspection list - - ⬜ Other - -**Implementation Status Values:** - -- ``βœ… Available`` β€” Work product created, reviewed and approved -- ``πŸ”„ NN%`` β€” In Progress: artifact exists with at least one valid element, percentage shows valid/total -- ``❌ Open`` β€” Not yet started, not found, or 0% valid -- ``β€”`` β€” Not applicable for this module Process Area 1 β€” Change Management -*********************************** - -A Change Request must be created and approved by the Architecture Community before module -development begins. -See :ref:`chm_change_workflows`. +---------------------------------- .. rubric:: Process Status @@ -109,57 +49,65 @@ See :ref:`chm_change_workflows`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(change_management) -.. rubric:: Implementation status: πŸ”„ 91% (10/11 deliverables complete) + +.. rubric:: Implementation status: πŸ”„ 90% (10/11 deliverables complete) + .. list-table:: :header-rows: 1 - :stub-columns: 1 - :class: module-phase-tracker-table * - **Module** - **CR approved** - * - Baselibs - - βœ… Available + - βœ… Accepted + | `#549 `__ β€” βœ… Accepted [v0.5 Certifiable] β€” Feature request: common libraries for IPC and Logging + | `#757 `__ β€” βœ… Accepted β€” Feature request for qualified json-parser + | `#917 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for ABI compatible datatypes * - Communication - - βœ… Available + - βœ… Accepted + | `#69 `__ β€” βœ… Accepted [v0.5 Certifiable] β€” Feature Request for IPC * - Logging - - βœ… Available + - βœ… Accepted + | `#68 `__ β€” βœ… Accepted [v0.5 Certifiable] β€” Feature Request for Logging * - Persistency - - βœ… Available + - βœ… Accepted + | `#95 `__ β€” βœ… Accepted [v0.5 Certifiable] β€” Feature Request for Persistency * - Time - - βœ… Available + - βœ… Accepted + | `#910 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for Time * - Config Mgmt - - βœ… Available + - βœ… Accepted + | `#754 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for Config Management * - Lifecycle - - βœ… Available + - βœ… Accepted + | `#909 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for Health & Lifecycle * - Security/Crypto - - βœ… Available + - βœ… Accepted + | `#905 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for Security & Crypto * - Diagnostic Services - - βœ… Available + - βœ… Accepted + | `#911 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for Diagnostic Services & Fault Management * - NM - ❌ Open - * - Some/IP - - βœ… Available + - βœ… Accepted + + | `#914 `__ β€” βœ… Accepted [v1.0] β€” Feature Request for SOME/IP Gateway + .. _overall_status_pa2: Process Area 2 β€” Requirements Engineering -***************************************** - -Feature and component requirements must be written and inspected. -Work products: ``wp__requirements_feat``, ``wp__requirements_comp``, ``wp__requirements_inspect``. -See :ref:`requirements_workflows`. +----------------------------------------- .. rubric:: Process Status @@ -199,149 +147,129 @@ See :ref:`requirements_workflows`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(requirements_engineering) -.. rubric:: Implementation status: πŸ”„ 42% (14/33 deliverables complete) .. figure:: /_assets/pa2_impl_progress.svg - :alt: Total Feature and Component Requirements across PA2 modules per release + :alt: PA2 implementation progress :width: 720px - Total Feature and Component Requirements across all PA2 modules per release - (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + Total Feature and Component Requirements across the 11 PA2 modules per release (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + + +.. rubric:: Implementation status: πŸ”„ 39% (13/33 deliverables complete) + .. list-table:: :header-rows: 1 - :stub-columns: 1 - :class: module-phase-tracker-table * - **Module** - - **Feature Requirements** - - **Component Requirements** + - **Feature Req** + - **Component Req** - **Req. Inspection** - * - Baselibs - βœ… Available (37/37) - | `feature-level `__ - | `abi-compatible-data-types `__ + | `abi_compatible_data_types `__ + | `baselibs `__ - βœ… Available (84/84 comp_req + 32/32 AoU) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `flatbuffers `__ - | `json `__ - | `safecpp `__ - | `memory_shared `__ - | `result `__ - | `srs `__ - | `utils `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ - πŸ”„ 20% (2/10) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `json `__ - | `safecpp `__ - | `result `__ - | `srs `__ - | `utils `__ - | `feature-level `__ - + | `baselibs `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ * - Communication - - βœ… Available (58/58) + - βœ… Available (53/53) - | `feature-level `__ - | `ipc `__ - | `some_ip_gateway `__ + | `communication `__ + | `ipc `__ - βœ… Available (0/0 comp_req [TRLC] + 33/33 AoU) - | `aou_req (RST) `__ - | (real component requirements maintained in TRLC: `component_requirements_ipc.trlc `__) + | `com `__ + | `communication `__ - ❌ Open - * - Logging - βœ… Available (46/46) - | `mw-fr_logging_req `__ + | `logging `__ - ❌ Open - ❌ Open - * - Persistency - βœ… Available (37/37) - | `feature-level `__ + | `persistency `__ - βœ… Available (35/35 comp_req) - | `kvs `__ + | `kvs `__ - πŸ”„ 50% (1/2) - | `feature-level `__ - | `kvs `__ - + | `persistency `__ + | `kvs `__ * - Time - βœ… Available (15/15) - | `feature-level `__ + | `time `__ - ❌ Open - ❌ Open - * - Config Mgmt - βœ… Available (13/13) - | `feature-level `__ + | `config_mgmt `__ - ❌ Open - ❌ Open - * - Lifecycle - πŸ”„ 0% (0/92) - | `requirements `__ - | (all 92 entries ``:status: invalid``) + | `lifecycle `__ - πŸ”„ 0% (0/1 comp_req + 0/1 AoU) - | `health_monitor `__ - | (template placeholder, ``:status: invalid``) + | `health_monitor `__ - ❌ Open - * - Security/Crypto - βœ… Available (41/41) - | `feature-level `__ + | `security_crypto `__ - ❌ Open - ❌ Open - * - Diagnostic Services - βœ… Available (22/22) - | `requirements `__ + | `diagnostics `__ - ❌ Open - ❌ Open - * - NM - ❌ Open - ❌ Open - ❌ Open - * - Some/IP - - βœ… Available (6/6) + - βœ… Available (5/5) - | `score (5) `__ - | `tc8 conformance (1) `__ - - βœ… Available (8/8) + | `some_ip_gateway `__ + - βœ… Available (8/8 comp_req) - | `tc8 conformance `__ + | `tc8_conformance `__ - ❌ Open + .. _overall_status_pa3: Process Area 3 β€” Architecture Design -************************************ - -Feature and component architecture must be designed and inspected. -Work products: ``wp__feature_arch``, ``wp__component_arch``, ``wp__sw_arch_verification``. -See :ref:`arch_workflow`. +------------------------------------ .. rubric:: Process Status @@ -381,138 +309,127 @@ See :ref:`arch_workflow`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(architecture_design) -.. rubric:: Implementation status: πŸ”„ 15% (5/33 deliverables complete) .. figure:: /_assets/pa3_arch_progress.svg - :alt: Total Feature and Component Architecture items across PA2 modules per release + :alt: PA3 architecture progress :width: 720px - Total Feature and Component Architecture items across all PA2 modules per - release (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + Total Feature and Component Architecture elements across the 11 PA2 modules per release (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + + +.. rubric:: Implementation status: πŸ”„ 24% (8/33 deliverables complete) + .. list-table:: :header-rows: 1 - :stub-columns: 1 - :class: module-phase-tracker-table * - **Module** - - **Feature Architecture** - - **Component Architecture** + - **Feature Arch** + - **Component Arch** - **Arch. Inspection** - * - Baselibs - βœ… Available (3/3) - | `feature-level `__ - - πŸ”„ 98% (165/167) - - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `flatbuffers `__ - | `json `__ - | `safecpp `__ - | `memory_shared `__ - | `result `__ - | `srs `__ - | `utils `__ + | `baselibs `__ + - πŸ”„ 98% (164/166) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ - πŸ”„ 80% (8/10) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `json `__ - | `safecpp `__ - | `result `__ - | `srs `__ - | `utils `__ - | `feature-level `__ - + | `baselibs `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ * - Communication - βœ… Available (3/3) - | `feature-level `__ - | `ipc `__ + | `communication `__ + | `ipc `__ - βœ… Available (16/16) - | `configuration `__ - | `frontent `__ - | `ipc_binding `__ - | `message_passing `__ - | `mock_binding `__ + | `configuration `__ + | `frontent `__ + | `ipc_binding `__ + | `message_passing `__ - ❌ Open - * - Logging - βœ… Available (1/1) - | `feature-level `__ + | `logging `__ - βœ… Available (3/3) - | `logging `__ + | `logging `__ - ❌ Open - * - Persistency - βœ… Available (9/9) - | `feature-level `__ + | `persistency `__ - πŸ”„ 0% (0/3) - | `kvs `__ + | `kvs `__ - πŸ”„ 0% (0/2) - | `feature-level `__ - | `kvs `__ - + | `persistency `__ + | `kvs `__ * - Time - ❌ Open - ❌ Open - ❌ Open - * - Config Mgmt - ❌ Open - ❌ Open - ❌ Open - * - Lifecycle - πŸ”„ 60% (3/5) - | `health_monitor `__ - | `launch_manager `__ + | `lifecycle `__ + | `lifecycle `__ - βœ… Available (15/15) - | `health_monitor `__ + | `health_monitor `__ - ❌ Open - * - Security/Crypto - ❌ Open - - ❌ Open - - ❌ Open + - πŸ”„ 0% (0/23) + | `crypto `__ + | `crypto `__ + | `crypto `__ + - ❌ Open * - Diagnostic Services - ❌ Open - ❌ Open - ❌ Open - * - NM - ❌ Open - ❌ Open - ❌ Open - * - Some/IP - ❌ Open + - βœ… Available (2/2) + + | `docs/architecture/components.rst `__ - ❌ Open - - ❌ Open + .. _overall_status_pa4: Process Area 4 β€” Implementation -******************************** - -Source code and detailed design must be implemented and inspected. -Work products: ``wp__sw_development_plan``, ``wp__sw_implementation``, ``wp__sw_implementation_inspection``. -See :ref:`workflow_implementation`. +------------------------------- .. rubric:: Process Status @@ -552,116 +469,140 @@ See :ref:`workflow_implementation`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(implementation) -.. rubric:: Implementation status: πŸ”„ 39% (17/44 deliverables complete) .. figure:: /_assets/pa4_impl_progress.svg - :alt: Estimated total Lines of Code across PA2 modules per release + :alt: PA4 implementation progress :width: 720px - Estimated total Lines of Code across all PA2 modules per release - (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + Estimated Lines of Code across the 11 PA2 modules per release (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + + +.. rubric:: Implementation status: πŸ”„ 47% (21/44 deliverables complete) + .. list-table:: :header-rows: 1 - :stub-columns: 1 - :class: module-phase-tracker-table * - **Module** - - **SW Development Plan** + - **SW Dev Plan** - **Code** - **Detailed Design** - **Impl. Inspection** - * - Baselibs - βœ… Available - - βœ… Available (~219,400 LOC) `baselibs `__ + + | `platform_management_plan `__ + - βœ… Available (~315,200 LOC) + + | `baselibs `__ - ❌ Open - πŸ”„ 0% (0/9) - | `bitmanipulation `__ - | `concurrency `__ - | `containers `__ - | `filesystem `__ - | `json `__ - | `safecpp `__ - | `result `__ - | `srs `__ - | `utils `__ - + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ * - Communication - βœ… Available - - βœ… Available (~175,100 LOC) `communication `__ - - πŸ”„ 0% (0/1) - | `lola `__ - - ❌ Open + | `platform_management_plan `__ + - βœ… Available (~253,700 LOC) + | `communication `__ + - ❌ Open + - ❌ Open * - Logging - βœ… Available - - βœ… Available (~40,300 LOC) `logging `__ + + | `platform_management_plan `__ + - βœ… Available (~50,800 LOC) + + | `logging `__ - ❌ Open - ❌ Open - * - Persistency - βœ… Available - - βœ… Available (~14,700 LOC) `persistency `__ - - πŸ”„ 0% (0/1) - | `kvs `__ - - πŸ”„ 0% (0/1) + | `platform_management_plan `__ + - βœ… Available (~18,000 LOC) - | `kvs `__ + | `persistency `__ + - ❌ Open + - πŸ”„ 0% (0/1) + | `kvs `__ * - Time - βœ… Available - - βœ… Available (~20,500 LOC) `inc_time `__ + + | `platform_management_plan `__ + - βœ… Available (~23,200 LOC) + + | `inc_time `__ - ❌ Open - ❌ Open - * - Config Mgmt - βœ… Available - - βœ… Available (~14,200 LOC) `config_management `__ + + | `platform_management_plan `__ + - βœ… Available (~20,400 LOC) + + | `config_management `__ - ❌ Open - ❌ Open - * - Lifecycle - βœ… Available - - βœ… Available (~28,800 LOC) `lifecycle `__ - - πŸ”„ 50% (1/2) - - ❌ Open + | `platform_management_plan `__ + - βœ… Available (~51,800 LOC) + + | `lifecycle `__ + - βœ… Available (1/1) + + | `health_monitor `__ + - ❌ Open * - Security/Crypto - βœ… Available - - βœ… Available (~20,600 LOC) `inc_security_crypto `__ + + | `platform_management_plan `__ + - βœ… Available (~51,600 LOC) + + | `inc_security_crypto `__ - ❌ Open - ❌ Open - * - Diagnostic Services + - βœ… Available + + | `platform_management_plan `__ - ❌ Open - ❌ Open - ❌ Open - - ❌ Open - * - NM + - βœ… Available + + | `platform_management_plan `__ - ❌ Open - ❌ Open - ❌ Open - - ❌ Open - * - Some/IP - - ❌ Open - - βœ… Available (~12,700 LOC) `inc_someip_gateway `__ + - βœ… Available + + | `platform_management_plan `__ + - βœ… Available (~24,500 LOC) + + | `inc_someip_gateway `__ - ❌ Open - ❌ Open + .. _overall_status_pa5: Process Area 5 β€” Verification -***************************** - -All tests must be implemented and a module verification report must be approved. -Work products: ``wp__verification_sw_unit_test``, ``wp__verification_comp_int_test``, ``wp__verification_feat_int_test``, ``wp__verification_module_ver_report``. -See :ref:`verification_workflows`. +----------------------------- .. rubric:: Process Status @@ -701,183 +642,165 @@ See :ref:`verification_workflows`. :colors: LimeGreen, Gold, LightBlue, LightGray :filter-func: needs_filters.area_verification_status(verification) -.. note:: - **C0/C1 Coverage** data is sourced from the `reference_integration `__ - CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). - C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. - Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) - show ❌ Open. +.. figure:: /_assets/pa5_verification_progress.svg + :alt: PA5 verification progress + :width: 1080px + + Test counts and coverage across the 11 PA2 modules per release (v0.5.0-beta β†’ v0.6.0 β†’ v0.7.0 β†’ current main). + + +.. rubric:: Implementation status: πŸ”„ 28% (25/88 deliverables complete) .. note:: - **Static Code Analysis** is tracked per module via dedicated CI workflows (clang-tidy for C++, - Rust Clippy for Rust). All listed workflows are zero-tolerance (CI fails on any finding), - so a passing ``main`` branch implies **0 open findings**. Additionally, - `CodeQL `__ - runs centrally across all pinned repositories in ``reference_integration`` - (finding counts require the GitHub Security tab). + **C0/C1 Coverage** data is sourced from the ``reference_integration`` + CI (*Code Quality & Documentation* workflow, + ``bazel coverage --config=ferrocene-coverage``). C0 = line coverage, + C1 = branch coverage. Rust coverage reports line coverage only. + Modules not yet integrated into the ``reference_integration`` CI + (Time, Config Mgmt, Security/Crypto, Some/IP) show ❌ Open. - **Dynamic Code Analysis** is tracked via sanitizer CI workflows (ASan/UBSan/LSan via - ``--config=asan_ubsan_lsan``, TSan via ``--config=tsan``). All listed workflows are - zero-tolerance, so a passing ``main`` branch implies **0 sanitizer findings**. +.. note:: -.. rubric:: Implementation status: πŸ”„ 27% (21/79 deliverables complete) + **Static Code Analysis** is tracked per module via dedicated CI + workflows (clang-tidy for C++, Rust Clippy for Rust). All listed + workflows are *zero-tolerance* (CI fails on any finding), so a passing + ``main`` branch implies **0 open findings**. Additionally, CodeQL + runs centrally across all pinned repositories in + ``reference_integration`` (finding counts require the GitHub Security + tab). -.. figure:: /_assets/pa5_verification_progress.svg - :alt: PA5 verification β€” test counts per release and current coverage - :width: 1100px + **Dynamic Code Analysis** is tracked via sanitizer CI workflows + (ASan/UBSan/LSan via ``--config=asan_ubsan_lsan``, TSan via + ``--config=tsan``). All listed workflows are zero-tolerance, so a + passing ``main`` branch implies **0 sanitizer findings**. - Test counts (Unit / Component Integration / Feature Integration) per release - and current code coverage across the 11 PA2 modules. Coverage values are - only available for the current snapshot. .. list-table:: :header-rows: 1 - :stub-columns: 1 - :class: module-phase-tracker-table * - **Module** - **Unit Tests** - - **C0/C1 Coverage** - - **Comp. Integration Tests** - - **Feature Integration Tests** - - **Static Code Analysis** - - **Dynamic Code Analysis** - - | **Module Verification** - | **Report** - - | **Platform Verification** - | **Report** - + - **C0/C1 Cov** + - **Comp. IT** + - **Feat. IT** + - **Static** + - **Dynamic** + - **Module Ver. Rpt** * - Baselibs - βœ… Available - | (4,663 tests) - - πŸ”„ **C0:** 92.3% + | 5376 tests + - πŸ”„ + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.35% + - βœ… Available - | **C1:** 60.4% (cpp) - | **Rust line:** 74.4% - - βœ… Available (13 tests) + | 13 tests - ❌ Open - βœ… 0 findings - - | `clang-tidy `__ - βœ… 0 findings - - | `ASan/UBSan/LSan `__ - ❌ Open - - ❌ Open - * - Communication - βœ… Available - | (2,374 tests) - - πŸ”„ **C0:** 87.9% - - | **C1:** 58.8% (cpp) - - βœ… Available (42 tests) - - ❌ Open - - πŸ”„ Configured + | 2585 tests + - πŸ”„ - | `clang-tidy `__ - | `CodeQL/MISRA `__ - | but no CI enforcement workflow yet - - βœ… 0 findings + | **C0:** 87.9% + | **C1:** 58.8% (cpp) + - βœ… Available - | `ASan/UBSan/LSan `__ - | `TSan `__ + | 42 tests - ❌ Open + - πŸ”„ Configured (no CI) + - βœ… 0 findings - ❌ Open - * - Logging - βœ… Available - | (619 tests) - - πŸ”„ **C0:** 79.5% + | 617 tests + - πŸ”„ - | **C1:** 42.5% (cpp) - | **Rust line:** 39.9% + | **C0:** 79.3% + | **C1:** 42.1% (cpp) + | **Rust line:** 39.86% - ❌ Open - - βœ… Available (1 test) + - βœ… Available - | `reference_integration `__ (cross-module) + | 1 test - ❌ Open - ❌ Open - ❌ Open - - ❌ Open - * - Persistency - βœ… Available - | (138 tests) - - πŸ”„ **C0:** 94.7% + | 138 tests + - πŸ”„ - | **C1:** 63.0% (cpp) - | **Rust line:** 92.7% - - ❌ Open - - βœ… Available (6 tests) + | **C0:** 94.7% + | **C1:** 63.0% (cpp) + | **Rust line:** 92.66% + - βœ… Available + - βœ… Available - | `reference_integration `__ (cross-module) + | 53 tests - βœ… 0 findings - - | `Clippy `__ - - ❌ Open - - ❌ Open - ❌ Open + - βœ… Available + | `verification `__ * - Time - βœ… Available - | (296 tests) - - ❌ Open - - βœ… Available (11 tests) + | 296 tests - ❌ Open + - βœ… Available + + | 11 tests - ❌ Open - ❌ Open - ❌ Open - ❌ Open - * - Config Mgmt - βœ… Available - | (143 tests) + | 179 tests - ❌ Open - ❌ Open - ❌ Open - βœ… 0 findings - - | `clang-tidy `__ - - ❌ Open - ❌ Open - ❌ Open - * - Lifecycle - βœ… Available - | (2 tests) - - πŸ”„ **C0:** 77.2% + | 2 tests + - πŸ”„ - | **C1:** 45.8% (cpp) - | **Rust line:** 53.8% - - βœ… Available (9 tests) - - ❌ Open - - βœ… 0 findings + | **C0:** 77.2% + | **C1:** 45.8% (cpp) + | **Rust line:** 53.81% + - βœ… Available - | `Clippy `__ + | 8 tests - ❌ Open + - βœ… 0 findings - ❌ Open - ❌ Open - * - Security/Crypto + - βœ… Available - ❌ Open + - βœ… Available + + | 5 tests - ❌ Open - ❌ Open - ❌ Open - ❌ Open - - ❌ Open - - ❌ Open - - ❌ Open - * - Diagnostic Services - ❌ Open - ❌ Open @@ -886,8 +809,6 @@ See :ref:`verification_workflows`. - ❌ Open - ❌ Open - ❌ Open - - ❌ Open - * - NM - ❌ Open - ❌ Open @@ -896,26 +817,22 @@ See :ref:`verification_workflows`. - ❌ Open - ❌ Open - ❌ Open - - ❌ Open - * - Some/IP - βœ… Available - | (199 tests) - - ❌ Open - - βœ… Available (17 stress tests) + | 237 tests - ❌ Open + - βœ… Available + + | 17 tests - ❌ Open - ❌ Open - ❌ Open - ❌ Open -Done Criteria -************* +.. admonition:: Platform Verification Report + :class: important platform-ver-report -A module is considered **complete** when all of the following are true: + `platform_ver_report `__ + β€” πŸ”„ **Draft** (single project-wide deliverable) -#. All ``valid`` component requirements have **100% test coverage** (linked via ``FullyVerifies`` or ``PartiallyVerifies``). -#. All CI metadata checks pass (``TestType``, ``DerivationTechnique``, ``Description`` set on every test). -#. Static analysis has no open ``Critical`` or ``High`` findings. -#. The **Module Verification Report** (``wp__verification_module_ver_report``) is generated and approved by a Committer. From 6018c275c29bfa29d585aef3a51b59d376aa336a Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:54:44 +0000 Subject: [PATCH 7/7] docs: mark overall_status as AI-generated and indicative --- docs/s_core_v_1/roadmap/overall_status.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst index 2bd24a43f32..dc2026b0727 100644 --- a/docs/s_core_v_1/roadmap/overall_status.rst +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -3,6 +3,14 @@ Overall Status ============== +.. note:: + + This status overview is generated with AI assistance and is **not yet + fully accurate**. It is intended as a directional snapshot β€” the trend and + structure are correct, but individual figures and statuses may still be + off. Treat the numbers as indicative until the underlying data sources are + fully validated. + This page tracks feature and process status across the SCORE platform modules. It is regenerated from live `eclipse-score` GitHub repositories pinned via ``known_good.json``.