diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md new file mode 100644 index 0000000000..56ce784e04 --- /dev/null +++ b/.github/skills/overall-status/SKILL.md @@ -0,0 +1,752 @@ +--- +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 + +### 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 +- **โœ… Available**: Source repo contains integration test source files (`.cpp`/`.py` with "integration" in path) +- **๐Ÿ”„ In Progress**: integration test CI workflow exists but no test source files +- **โŒ Open**: no integration test artifacts + +### 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. + +--- + +### 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/skills/pi-tracker/SKILL.md b/.github/skills/pi-tracker/SKILL.md new file mode 100644 index 0000000000..205ac72fc3 --- /dev/null +++ b/.github/skills/pi-tracker/SKILL.md @@ -0,0 +1,464 @@ +--- +name: pi-tracker +description: "Update the Current State tables in any PI file (pi1.rst, pi2.rst, pi3.rst, pi4.rst) under docs/s_core_v_1/roadmap/. Use when: refreshing PI status for any increment, updating requirements/architecture/implementation/verification/coverage progress, checking module deliverable status across all PIs." +argument-hint: "which PI to update: '1', '2', '3', '4', or 'all'" +--- + +# PI Status Tracker + +Derives and updates the **Current State** tables in any PI file +(`docs/s_core_v_1/roadmap/pi1.rst` โ€ฆ `pi4.rst`) by querying the live +eclipse-score GitHub repositories. + +## PI Overview + +| PI | File | Focus | Period | Milestone | +|---|---|---|---|---| +| PI 1 | `pi1.rst` | Requirements Engineering (PA2) + Architecture Design (PA3) | 13 May โ€“ 13 July 2026 | v0.8 | +| PI 2 | `pi2.rst` | Implementation (PA4) | 14 July โ€“ 7 Sep 2026 | v0.9 | +| PI 3 | `pi3.rst` | Verification (PA5) | 8 Sep โ€“ 3 Nov 2026 | v0.10 | +| PI 4 | `pi4.rst` | Hardening & Release | 4 Nov โ€“ 15 Dec 2026 | v1.0 | + +## When to Use + +- Refresh current-state tables in one or all PI files with live data +- After a module team completes work relevant to a PI focus area +- To check progress at any point during the release cycle + +## Which Tables Exist Per PI + +### PI 1 โ€” three tables +1. *Requirements Engineering* โ€” Feature Reqs / Component Reqs / Req. Inspection +2. *Architecture Design* โ€” Feature Arch / Component Arch / Arch. Inspection +3. *Module Verification Report / Coverage* โ€” C0/C1 / Dynamic Analysis / MVR + +### PI 2 โ€” two tables +1. *Implementation* โ€” Impl. Inspection / Unit Tests / Integration Tests +2. *Module Verification Report / Coverage* โ€” same format as PI 1 Table 3 + +### PI 3 โ€” one table +1. *Verification* โ€” Module Verification Report status / Coverage โ‰ฅ 90% / Sanitizers = 0 + +### PI 4 โ€” one table +1. *Hardening & Release* โ€” Release note / Score milestone / Known issues closed + +## File Structure (all PIs follow the same pattern) + +```rst +.. (license header) + +๐Ÿš€ PI N โ€” ยท `vX.Y <...>`__ +================================================================================================== + +**Focus: ...** + +- (static goal bullet points โ€” do NOT modify) + +**Current State ()** + +*
* + +.. list-table:: + ... +``` + +**IMPORTANT**: The date in `**Current State ()**` must be updated to the actual +date of the data fetch (e.g. `**Current State (19 May 2026)**`). +Only update table cells and the date โ€” never modify goal bullet points or titles. + +## Table 1 โ€” Requirements Engineering (PI 1 only) + +Columns: +- **Feature Requirements**: `valid / total` count of `.. feat_req::` directives +- **Component Requirements**: `valid / total` count of `.. comp_req::` directives +- **Req. Inspection**: `valid / total` across all `chklst_req_inspection.rst` files; list each as a `| name ` line-block + +### Cell format โ€” Inspection column (when checklists exist) + +```rst + * - Baselibs + - ๐Ÿ”„ 20% (2/10) + + | `bitmanipulation `__ + | `concurrency <...>`__ + ... +``` + +For `โŒ Open` (no checklists found): just `โŒ Open` with no line-blocks. + +### Source paths โ€” Feature Requirements + +| Module | Repo | Path filter | +|---|---|---| +| Baselibs | score | `features/baselibs` + `requirements` + `.rst`, exclude `chklst` | +| Communication | score | `features/communication` + `requirements` + `.rst`, exclude `chklst` | +| Logging | score | `features/analysis-infra/logging` + `requirements` + `.rst`, exclude `chklst` | +| Orchestrator | score | `features/orchestration` + `requirements` + `.rst`, exclude `chklst` | +| Persistency | score | `features/persistency` + `requirements` + `.rst`, exclude `chklst` | +| Time | score | `features/time` + `requirements` + `.rst`, exclude `chklst` | +| Config Mgmt | score | `features/configuration` + `requirements` + `.rst`, exclude `chklst` | +| Lifecycle | score | `features/lifecycle` + `requirements` + `.rst`, exclude `chklst` | +| Security/Crypto | score | `features/security_crypto` + `requirements` + `.rst`, exclude `chklst` | + +### Source paths โ€” Component Requirements + +| Module | Repo | Path filter | +|---|---|---| +| Baselibs | score | `modules/baselibs` + `requirements` + `.rst`, exclude `chklst` | +| Communication | score | `modules/communication` + `requirements` + `.rst`, exclude `chklst` | +| Logging | score | `modules/logging` + `requirements` + `.rst`, exclude `chklst` | +| Orchestrator | score | `modules/orchestrator` + `requirements` + `.rst`, exclude `chklst` | +| Persistency | persistency | `kvs` + `requirements` + `.rst`, exclude `chklst` | +| Time | inc_time | `requirements` + `.rst`, exclude `chklst` | +| Config Mgmt | config_management | `requirements` + `.rst`, exclude `chklst` | +| Lifecycle | score | `modules/lifecycle` + `requirements` + `.rst`, exclude `chklst` | +| Security/Crypto | inc_security_crypto | `requirements` + `.rst`, exclude `chklst` | + +### Source paths โ€” Req. Inspection + +| Module | Repo | Filter | +|---|---|---| +| Baselibs | score | `baselibs` + `chklst_req_inspection` | +| Communication | score | `communication` + `chklst_req_inspection` | +| Logging | score | `logging` + `chklst_req_inspection` | +| Orchestrator | score | `orchestrator` + `chklst_req_inspection` | +| Persistency | score + persistency | `persistency` + `chklst_req_inspection` in score; `kvs` + `chklst_req_inspection` in persistency | +| Time | inc_time | `chklst_req_inspection` | +| Config Mgmt | config_management | `chklst_req_inspection` | +| Lifecycle | score | `lifecycle` + `chklst_req_inspection` | +| Security/Crypto | inc_security_crypto | `chklst_req_inspection` | + +## Table 2 โ€” Architecture Design (PI 1 only) + +Columns: +- **Feature Architecture**: `valid / total` count of `.. feat_arc::` directives +- **Component Architecture**: `valid / total` count of `.. comp_arc::` directives +- **Arch. Inspection**: `valid / total` across all `chklst_arc_inspection.rst` files; list each as a `| name ` line-block + +### Source paths โ€” Feature Architecture + +| Module | Repo | Path filter | +|---|---|---| +| Baselibs | score | `features/baselibs` + `architecture` + `.rst` | +| Communication | score | `features/communication` + `architecture` + `.rst` | +| Logging | score | `features/analysis-infra/logging` + `architecture` + `.rst` | +| Orchestrator | score | `features/orchestration` + `architecture` + `.rst` | +| Persistency | score | `features/persistency` + `architecture` + `.rst` | +| Time | score | `features/time` + `architecture` + `.rst` | +| Config Mgmt | score | `features/configuration` + `architecture` + `.rst` | +| Lifecycle | score | `features/lifecycle` + `architecture` + `.rst` โ€” **includes subfolders** | +| Security/Crypto | score | `features/security_crypto` + `architecture` + `.rst` | + +### Source paths โ€” Component Architecture + +| Module | Repo | Path filter | +|---|---|---| +| Baselibs | score | `modules/baselibs` + `architecture` + `.rst`, exclude `chklst` | +| Communication | score | `modules/communication` + `architecture` + `.rst`, exclude `chklst` | +| Logging | score | `modules/logging` + `architecture` + `.rst`, exclude `chklst` | +| Orchestrator | score | `modules/orchestrator` + `architecture` + `.rst`, exclude `chklst` | +| Persistency | persistency | `kvs` + `architecture` + `.rst`, exclude `chklst` | +| Time | inc_time | `architecture` + `.rst`, exclude `chklst` | +| Config Mgmt | config_management | `architecture` + `.rst`, exclude `chklst` | +| Lifecycle | lifecycle | `module` + `architecture` + `.rst`, exclude `chklst` | +| Security/Crypto | inc_security_crypto | `architecture` + `.rst`, exclude `chklst` | + +### Source paths โ€” Arch. Inspection + +| Module | Repo | Filter | +|---|---|---| +| Baselibs | score | `baselibs` + `chklst_arc_inspection` | +| Communication | score | `communication` + `chklst_arc_inspection` | +| Logging | score | `logging` + `chklst_arc_inspection` | +| Orchestrator | score | `orchestrator` + `chklst_arc_inspection` | +| Persistency | score + persistency | `persistency` + `chklst_arc_inspection` in score; `kvs` + `chklst_arc_inspection` in persistency | +| Time | inc_time | `chklst_arc_inspection` | +| Config Mgmt | config_management | `chklst_arc_inspection` | +| Lifecycle | score | `lifecycle` + `chklst_arc_inspection` | +| Security/Crypto | inc_security_crypto | `chklst_arc_inspection` | + +## Table โ€” Module Verification Report / Coverage (all PIs) + +This table appears in PI 1, PI 2, and PI 3 with the same format and sources. + +Columns: +- **C0/C1 Coverage**: sourced from `reference_integration` CI +- **Dynamic Analysis**: sanitizer CI workflows per module repo +- **Module Ver. Report**: existence and status of `module_verification_report.rst` +- **Module Ver. Report**: existence and status of `module_verification_report.rst` + +### C0/C1 Coverage โ€” cell format + +Status emoji alone on the first line; each metric as a `| ` line-block below: + +```rst + * - Baselibs + - ๐Ÿ”„ + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% +``` + +CPP only (no Rust): +```rst + - ๐Ÿ”„ + + | **C0:** 87.9% + | **C1:** 58.8% (cpp) +``` + +Not available: `โŒ Open` + +**Status rule:** +- `โœ…`: C0 โ‰ฅ 90% AND C1 โ‰ฅ 90% (PI 1 target) +- `๐Ÿ”„`: data exists but below target +- `โŒ Open`: module not in CI or extraction disabled + +**How to fetch coverage values** (from `reference_integration` CI): + +```bash +# Find the latest successful "Code Quality & Documentation" workflow run: +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 + +RUN_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 -E "COVERAGE ANALYSIS SUMMARY|'score_.*_cpp'|'score_.*_rust'|lines|branches" \ + | grep -A50 "COVERAGE ANALYSIS SUMMARY" +``` + +**Module โ†’ CI key mapping:** + +| 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 | โ€” | + +### Dynamic Analysis โ€” cell format + +```rst + - โœ… 0 findings + + | `ASan/UBSan/LSan `__ + | `TSan `__ +``` + +`โŒ Open` if no sanitizer CI workflow exists in the module's own repo. + +**Per-module dynamic 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) | +| 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` | โ€” | + +### Module Ver. Report +- `โœ… Available`: `module_verification_report.rst` exists with `:status: valid` and actual content +- `๐Ÿ”„ In Progress`: file exists with `:status: draft` +- `โŒ Open`: file absent or template placeholder only + +## Status Format + +- **`โœ… Available (valid/total)`** โ€” 100% of needs elements are `valid` +- **`๐Ÿ”„ NN% (valid/total)`** โ€” at least one element `valid`, but not all +- **`๐Ÿ”„ 0% (0/N)`** โ€” files exist but all elements are invalid/draft (NOT `โŒ Open`) +- **`โŒ Open`** โ€” no files found, or zero needs elements + +## Modules and Repos + +> **IMPORTANT**: Each module has its own dedicated repo AND content in `eclipse-score/score`. +> Always check **both**. Never rely on `eclipse-score/score` alone. + +> **VERSION PINNING**: Always use the commit hash from `known_good.json` โ€” **never use `main`** +> for tracked modules. + +| Module | `known_good.json` key | Own Repo | +|---|---|---| +| Baselibs | `score_baselibs` | `eclipse-score/baselibs` | +| Communication | `score_communication` | `eclipse-score/communication` | +| Logging | `score_logging` | `eclipse-score/logging` | +| Orchestrator | `score_orchestrator` | `eclipse-score/orchestrator` | +| Persistency | `score_persistency` | `eclipse-score/persistency` | +| Time | โ€” (use `main`) | `eclipse-score/inc_time` | +| Config Mgmt | โ€” (use `main`) | `eclipse-score/config_management` | +| Lifecycle | `score_lifecycle_health` | `eclipse-score/lifecycle` | +| Security/Crypto | โ€” (use `main`) | `eclipse-score/inc_security_crypto` | + +> `score_platform` (= `eclipse-score/score`) is in the **`tooling`** section of +> `known_good.json`, not `target_sw`. + +## Procedure + +### Step 0 โ€” Read `known_good.json` + +```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): + 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"), + "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", + "config_management": "main", + "inc_security_crypto": "main", +} +``` + +### Step 1 โ€” Fetch repo trees + +```python +def get_tree(repo, 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 + +tree_score = get_tree("eclipse-score/score", REFS["score"]) +tree_pers = get_tree("eclipse-score/persistency", REFS["persistency"]) +tree_orch = get_tree("eclipse-score/orchestrator", REFS["orchestrator"]) +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"]) +``` + +> โš ๏ธ Always verify the printed file count is > 0 before proceeding. + +### Step 2 โ€” Count needs elements + +```python +def fetch_file(repo, path, ref): + 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): + """Only count indented :status: fields (inside needs directives, not doc-level).""" + 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): + matched = [p for p in paths if path_filter(p)] + print(f" {repo}: {len(matched)} files match filter") + 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 +``` + +### Step 3 โ€” Derive cell status + +```python +def cell_status(valid, total): + if total == 0: + return "โŒ Open" + pct = valid * 100 // total + if valid == total: + return f"โœ… Available ({valid}/{total})" + return f"๐Ÿ”„ {pct}% ({valid}/{total})" +``` + +> โš ๏ธ `๐Ÿ”„ 0% (0/N)` โ€” files exist but all invalid. Never use `โŒ Open` when `total > 0`. + +### Step 4 โ€” Collect inspection checklist links + +For the Req. Inspection and Arch. Inspection columns, also collect the URL of each +`chklst_*_inspection.rst` file that exists. Generate `| name ` RST line-blocks +using the pinned ref in the GitHub blob URL. + +```python +def checklist_links(repo, paths, ref, module_filter, checklist_name): + """Return list of (label, url) for each matching checklist file.""" + matched = [p for p in paths if module_filter(p) and checklist_name in p] + links = [] + for path in matched: + # Use label = second-to-last folder name (component name) + parts = path.split("/") + label = parts[-3] if len(parts) >= 3 else parts[-1] + url = f"https://github.com/eclipse-score/{repo}/blob/{ref}/{path}" + links.append((label, url)) + return links +``` + +Format the links as RST: +```python +def format_links(links): + return "\n".join(f" | `{label} <{url}>`__" for label, url in links) +``` + +### Step 5 โ€” Update the target PI file(s) + +Repeat for each PI requested (pi1โ€“pi4): + +1. Read the target file (`docs/s_core_v_1/roadmap/piN.rst`) +2. Determine which tables it contains (see **Which Tables Exist Per PI** above) +3. Compute all cell values for all modules ร— columns in those tables +4. Update the date: `**Current State (DD Mon YYYY)**` +5. Write the tables, keeping all surrounding static content unchanged +6. Do **not** modify the goal bullet points or the title + +### Sanity checks + +- No module with a non-empty tree has all-zero counts โ†’ filter bug, not missing content +- `๐Ÿ”„ 0%` vs `โŒ Open`: fundamentally different โ€” verify before writing +- Lifecycle Feature Arch: must aggregate across all files in `features/lifecycle/architecture/` + (health_monitor.rst, launch_manager.rst, launch_manager_configuration.rst) +- Persistency: component data lives in `eclipse-score/persistency`, not `eclipse-score/score` diff --git a/.github/workflows/test_and_docs.yml b/.github/workflows/test_and_docs.yml index d6088fd0ee..c25c643e0b 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 0000000000..f9d46479a8 --- /dev/null +++ b/docs/_assets/custom.css @@ -0,0 +1,204 @@ +/* ******************************************************************************* + * 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%; +} + +/* --------------------------------------------------------------------------- + * Collapsible right sidebar (page-TOC) + * ---------------------------------------------------------------------------*/ + +#right-sidebar-toggle { + position: absolute; + top: 0.6rem; + left: -1.4rem; + z-index: 100; + width: 1.4rem; + height: 1.8rem; + padding: 0; + border: 1px solid var(--pst-color-border, #d0d0d0); + border-right: none; + border-radius: 4px 0 0 4px; + background: var(--pst-color-background, #fff); + color: var(--pst-color-text-muted, #666); + font-size: 0.75rem; + line-height: 1.8rem; + cursor: pointer; + transition: background 0.15s; +} + +#right-sidebar-toggle:hover { + background: var(--pst-color-surface, #f5f5f5); +} + +.bd-sidebar-secondary { + position: relative; + transition: width 0.2s ease, min-width 0.2s ease, padding 0.2s ease, + opacity 0.2s ease; +} + +.bd-sidebar-secondary.collapsed { + width: 0 !important; + min-width: 0 !important; + padding-left: 0 !important; + padding-right: 0 !important; + overflow: visible; + border: none; +} + +.bd-sidebar-secondary.collapsed > *:not(#right-sidebar-toggle) { + opacity: 0; + pointer-events: none; +} + +/* --------------------------------------------------------------------------- + * 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 0000000000..f108e68651 --- /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/sidebar-toggle.js b/docs/_assets/sidebar-toggle.js new file mode 100644 index 0000000000..5e6d44b44a --- /dev/null +++ b/docs/_assets/sidebar-toggle.js @@ -0,0 +1,48 @@ +/* ******************************************************************************* + * 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 + * *****************************************************************************/ + +(function () { + "use strict"; + + var STORAGE_KEY = "right-sidebar-collapsed"; + + function init() { + var sidebar = document.querySelector(".bd-sidebar-secondary"); + if (!sidebar) return; + + // Create toggle button + var btn = document.createElement("button"); + btn.id = "right-sidebar-toggle"; + btn.title = "Toggle table of contents"; + btn.innerHTML = "❯"; // โฏ + sidebar.prepend(btn); + + // Restore persisted state + if (localStorage.getItem(STORAGE_KEY) === "1") { + sidebar.classList.add("collapsed"); + btn.innerHTML = "❮"; // โฎ + } + + btn.addEventListener("click", function () { + var collapsed = sidebar.classList.toggle("collapsed"); + btn.innerHTML = collapsed ? "❮" : "❯"; + localStorage.setItem(STORAGE_KEY, collapsed ? "1" : "0"); + }); + } + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", init); + } else { + init(); + } +})(); 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 0000000000..47a9590ae4 --- /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/_templates/sidebar-root-nav.html b/docs/_templates/sidebar-root-nav.html new file mode 100644 index 0000000000..5f02cc869e --- /dev/null +++ b/docs/_templates/sidebar-root-nav.html @@ -0,0 +1,28 @@ +{# + Left navigation sidebar for the root/index page. + + pydata's default sidebar-nav-bs.html uses startdepth=1, which requires a + "parent" page to exist. The root page has no parent, so pydata's + suppress_sidebar_toctree() removes sidebar-nav-bs from the sidebar list, + leaving the left panel empty. + + This template is identical in appearance but calls generate_toctree_html with + startdepth=0, which renders the full top-level toctree directly โ€” no ancestor + lookup required. +#} +{% set show_nav_level = meta['html_theme.show_nav_level'] if (meta is defined and meta is not none and 'html_theme.show_nav_level' in meta) else theme_show_nav_level %} + diff --git a/docs/conf.py b/docs/conf.py index f205767343..f0e2882054 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,32 @@ ".rst": "restructuredtext", ".md": "markdown", } + +# Custom static assets (CSS, etc.) +html_static_path = ["_assets"] +html_css_files = ["custom.css"] +html_js_files = ["sidebar-toggle.js"] + +# Custom Jinja2 templates (e.g. sidebar-root-nav.html). +templates_path = ["_templates"] + +# Left navigation sidebar: +# Use sidebar-root-nav (startdepth=0) on ALL pages so the full navigation tree +# is always visible โ€” allowing users to switch between top-level sections from +# any subpage. pydata's default sidebar-nav-bs uses startdepth=1, which only +# shows the current section's children. +html_sidebars = { + "**": ["sidebar-root-nav"], +} + +# Theme options: suppress the right-side TOC sidebar on the status overview page +# (it is very wide and the local nav is not useful there). +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 bbc08312fe..fbaa40d713 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -15,29 +15,27 @@ Reference Integration Documentation =================================== -Newest Release Notes --------------------- +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. -:doc:`score_releases/release_note_score_07` +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. -Current Integration Status Overview ------------------------------------ - -`View dashboard (points always to main for now) `_ - -Explore the documentation -------------------------- .. toctree:: - :caption: Software Components + :caption: Status & Roadmap :titlesonly: :maxdepth: 1 + Modules + S-Core v1.0 + Integration Process + Integration Status - _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 .. toctree:: :caption: Process, Methods, and Tools @@ -57,7 +55,7 @@ Explore the documentation .. toctree:: :hidden: - :glob: - score_releases/* - verification_report/* + process_tools + verification_report/coverage_summary + verification_report/unit_test_summary diff --git a/docs/integration_process/integration_process.rst b/docs/integration_process/integration_process.rst new file mode 100644 index 0000000000..2468fba086 --- /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 0000000000..6c1a4d1432 --- /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_tools.rst b/docs/process_tools.rst new file mode 100644 index 0000000000..0f271b1c3b --- /dev/null +++ b/docs/process_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 + # ******************************************************************************* + +PMT +=== + +.. 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 0000000000..8ed87af052 --- /dev/null +++ b/docs/s_core_v_1/index.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 + # ******************************************************************************* + +S-Core v1.0 +=========== + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + Releases + Verification + Roadmap 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 0000000000..ed2ef1343a --- /dev/null +++ b/docs/s_core_v_1/releases/releases.rst @@ -0,0 +1,21 @@ +.. + # ******************************************************************************* + # 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: + + S-Core v0.7 diff --git a/docs/score_releases/release_note_score_07.rst b/docs/s_core_v_1/releases/score_07.rst similarity index 100% rename from docs/score_releases/release_note_score_07.rst rename to docs/s_core_v_1/releases/score_07.rst 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 0000000000..1e95bb4fa1 --- /dev/null +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -0,0 +1,765 @@ +.. + # ******************************************************************************* + # 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: โœ… Available (9/9 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 + +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: ๐Ÿ”„ 22% (6/27 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 + +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: ๐Ÿ”„ 22% (6/27 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 + +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: ๐Ÿ”„ 47% (17/36 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 + +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: ๐Ÿ”„ 37% (23/63 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 + +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 0000000000..837ff73632 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi1.rst @@ -0,0 +1,272 @@ +.. + # ******************************************************************************* + # 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 (19 May 2026)** + +*Requirements Engineering* + +.. list-table:: + :widths: 20 25 25 30 + :header-rows: 1 + + * - 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) + - ๐Ÿ”„ 0% (0/5) + - โŒ Open + * - Security/Crypto + - โœ… Available (42/42) + - โŒ Open + - โŒ Open + +*Architecture Design* + +.. list-table:: + :widths: 20 25 25 30 + :header-rows: 1 + + * - 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 + +*Module Verification Report / Coverage* + +.. list-table:: + :widths: 25 40 20 15 + :header-rows: 1 + + * - Module + - C0/C1 Coverage + - Dynamic Analysis + - | Module Ver. + | Report + * - Baselibs + - ๐Ÿ”„ + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% + - โœ… 0 findings + + | `ASan/UBSan/LSan `__ + - โŒ Open + * - Communication + - ๐Ÿ”„ + + | **C0:** 87.9% + | **C1:** 58.8% (cpp) + - โœ… 0 findings + + | `ASan/UBSan/LSan `__ + | `TSan `__ + - โŒ Open + * - Logging + - ๐Ÿ”„ + + | **C0:** 79.5% + | **C1:** 42.4% (cpp) + | **Rust line:** 39.9% + - โŒ Open + - โŒ Open + * - Orchestrator + - โŒ Open + - โŒ Open + - โŒ Open + * - Persistency + - ๐Ÿ”„ + + | **C0:** 94.7% + | **C1:** 63.0% (cpp) + | **Rust line:** 92.7% + - โŒ Open + - โŒ Open + * - Time + - โŒ Open + - โŒ Open + - โŒ Open + * - Config Mgmt + - โŒ Open + - โŒ Open + - โŒ Open + * - Lifecycle + - ๐Ÿ”„ + + | **C0:** 77.2% + | **C1:** 45.8% (cpp) + | **Rust line:** 53.8% + - โŒ Open + - โŒ Open + * - Security/Crypto + - โŒ Open + - โŒ Open + - โŒ Open + +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 0000000000..91f1c81ffc --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi2.rst @@ -0,0 +1,179 @@ +.. + # ******************************************************************************* + # 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 (19 May 2026)** + +*Implementation* + +.. list-table:: + :widths: 20 20 20 20 20 + :header-rows: 1 + + * - Module + - SW Dev Plan + - Code + - Detailed Design + - Impl. Inspection + * - Baselibs + - โœ… Available + - โœ… Available (~119,400 LOC) + - โŒ Open + - ๐Ÿ”„ 0% (0/9) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `srs `__ + | `utils `__ + * - Communication + - โœ… Available + - โœ… Available (~71,300 LOC) + - โŒ Open + - โŒ Open + * - Logging + - โœ… Available + - โœ… Available (~22,900 LOC) + - โŒ Open + - โŒ Open + * - Orchestrator + - โœ… Available + - โœ… Available (~38,300 LOC) + - โŒ Open + - โŒ Open + * - Persistency + - โœ… Available + - โœ… Available (~8,700 LOC) + - โŒ Open + - ๐Ÿ”„ 0% (0/1) + + | `kvs `__ + * - Time + - โœ… Available + - โœ… Available (~11,700 LOC) + - โŒ Open + - โŒ Open + * - Config Mgmt + - โœ… Available + - โœ… Available (~5,400 LOC) + - โŒ Open + - โŒ Open + * - Lifecycle + - โœ… Available + - โœ… Available (~38,300 LOC) + - ๐Ÿ”„ 50% (1/2) + - โŒ Open + * - Security/Crypto + - โœ… Available + - โŒ Open + - โŒ Open + - โŒ Open + +*Verification Reports / Requirements Test Coverage* + +.. note:: + + Requirements test coverage is measured via ``FullyVerifies`` / ``PartiallyVerifies`` links in tests: + + - **Feature Req. Test Coverage** โ†’ tracked in the **Platform Verification Report**: + Feature Integration Tests link to ``feat_req__...`` IDs + (Python decorator: ``@add_test_properties(partially_verifies=["feat_req__..."])``). + - **Component Req. Test Coverage** โ†’ tracked in each module's **Module Verification Report**: + Unit tests and Component Integration Tests link to ``comp_req__...`` IDs + (C++: ``RecordProperty("FullyVerifies", "comp_req__...");``, + Rust: ``#[record_property("FullyVerifies", "comp_req__...")]``). + + The `docs-as-code `__ tool parses Bazel ``test.xml`` + output and creates ``testlink`` back-references on requirements. + A few FIT tests in ``reference_integration`` already use the decorator for Persistency feature requirements. + +.. list-table:: + :widths: 20 20 20 20 20 + :header-rows: 1 + + * - Module + - | Feature Req. + | Test Coverage + - | Platform Ver. + | Report + - | Component Req. + | Test Coverage + - | Module Ver. + | Report + * - Baselibs + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Communication + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Logging + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Orchestrator + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Persistency + - ๐Ÿ”„ 16% (6/37) + - โŒ Open + - โŒ Open + - โŒ Open + * - Time + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Config Mgmt + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Lifecycle + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + * - Security/Crypto + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open 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 0000000000..a3ccde07f0 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi3.rst @@ -0,0 +1,85 @@ +.. + # ******************************************************************************* + # 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 (19 May 2026)** + +.. list-table:: + :widths: 35 40 25 + :header-rows: 1 + + * - Module + - Static Code Analysis + - | Module Ver. + | Report + * - Baselibs + - โœ… 0 findings + + | `clang-tidy `__ + - โŒ Open + * - Communication + - ๐Ÿ”„ Configured + + | `clang-tidy `__ + | but no CI enforcement workflow yet + - โŒ Open + * - Logging + - โŒ Open + - โŒ Open + * - Orchestrator + - โœ… 0 findings + + | `Clippy `__ + - โŒ Open + * - Persistency + - โœ… 0 findings + + | `Clippy `__ + - โŒ Open + * - Time + - โŒ Open + - โŒ Open + * - Config Mgmt + - โœ… 0 findings + + | `clang-tidy `__ + - โŒ Open + * - Lifecycle + - โœ… 0 findings + + | `Clippy `__ + - โŒ Open + * - Security/Crypto + - โŒ Open + - โŒ Open 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 0000000000..f945e23c89 --- /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 0000000000..b6d3c220f8 --- /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/s_core_v_1/status/overall_status.rst b/docs/s_core_v_1/status/overall_status.rst new file mode 100644 index 0000000000..8feca331c5 --- /dev/null +++ b/docs/s_core_v_1/status/overall_status.rst @@ -0,0 +1 @@ +:orphan: diff --git a/docs/s_core_v_1/verification/coverage_summary.md b/docs/s_core_v_1/verification/coverage_summary.md new file mode 100644 index 0000000000..36c88db16b --- /dev/null +++ b/docs/s_core_v_1/verification/coverage_summary.md @@ -0,0 +1,3 @@ +# Coverage Analysis Summary + +## Template for a table with Coverage execution summary diff --git a/docs/s_core_v_1/verification/unit_test_summary.md b/docs/s_core_v_1/verification/unit_test_summary.md new file mode 100644 index 0000000000..05361c5a45 --- /dev/null +++ b/docs/s_core_v_1/verification/unit_test_summary.md @@ -0,0 +1,3 @@ +# Unit Test Execution Summary + +## Template for a table with Unit Test execution summary diff --git a/docs/s_core_v_1/verification/verification.rst b/docs/s_core_v_1/verification/verification.rst new file mode 100644 index 0000000000..4e29d6abdf --- /dev/null +++ b/docs/s_core_v_1/verification/verification.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 + # ******************************************************************************* + +Verification +============ + +.. toctree:: + :titlesonly: + + Unit Tests Summary + Coverage diff --git a/docs/sw_components.rst b/docs/sw_components.rst new file mode 100644 index 0000000000..3d58fd8dca --- /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/scripts/quality_runners.py b/scripts/quality_runners.py index c3786153f4..42ed8dd0dc 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())