From d1129bf5c9143b5f7b232326b5941ef108ef4239 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Fri, 15 May 2026 11:52:09 +0000 Subject: [PATCH 1/2] docs: add feature and process status tracker - Add feature_and_process_status.rst with PA1-PA5 implementation status for all 9 modules (Baselibs, Communication, Logging, Orchestrator, Persistency, Time, Config Mgmt, Lifecycle, Security/Crypto) - Add needs_filters.py for sphinx-needs pie chart filter functions - Add process_tools.rst and sw_components.rst - Add release_notes.rst and score_07 release notes - Add module-phase-tracker SKILL for automated status updates - Add custom CSS (_assets/custom.css) - Update docs/conf.py, index.rst and verification.rst to integrate new pages --- .github/skills/module-phase-tracker/SKILL.md | 697 +++++++++++++++++ docs/_assets/custom.css | 67 ++ docs/conf.py | 33 + docs/feature_and_process_status.rst | 754 +++++++++++++++++++ docs/index.rst | 10 +- docs/needs_filters.py | 153 ++++ docs/process_tools.rst | 24 + docs/release_notes.rst | 22 + docs/sw_components.rst | 26 + 9 files changed, 1780 insertions(+), 6 deletions(-) create mode 100644 .github/skills/module-phase-tracker/SKILL.md create mode 100644 docs/_assets/custom.css create mode 100644 docs/feature_and_process_status.rst create mode 100644 docs/needs_filters.py create mode 100644 docs/process_tools.rst create mode 100644 docs/release_notes.rst create mode 100644 docs/sw_components.rst diff --git a/.github/skills/module-phase-tracker/SKILL.md b/.github/skills/module-phase-tracker/SKILL.md new file mode 100644 index 00000000000..1bc2b168eee --- /dev/null +++ b/.github/skills/module-phase-tracker/SKILL.md @@ -0,0 +1,697 @@ +--- +name: module-phase-tracker +description: "Update the Feature and Process Status table in feature_and_process_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/feature_and_process_status.rst` by querying the live eclipse-score GitHub +repositories. + +## 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/feature_and_process_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::` +- 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** + +**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 (C0 on first line, C1 and Rust each as `| ` line-blocks):** +- 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 + +## 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/feature_and_process_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 + +## Complete RST Snapshot + +Full content of `docs/feature_and_process_status.rst` as of last update (2026-05). +Use this to recreate the file from scratch if needed. + +See the file directly at `docs/feature_and_process_status.rst` in `eclipse-score/reference_integration`. diff --git a/docs/_assets/custom.css b/docs/_assets/custom.css new file mode 100644 index 00000000000..70ceb2c5a62 --- /dev/null +++ b/docs/_assets/custom.css @@ -0,0 +1,67 @@ +/* ******************************************************************************* + * 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 td:has(img[id^="needpie-"]) { + min-width: 420px; + vertical-align: middle; + text-align: center; +} + +.compact-overview-table td:has(img[id^="needpie-"]) img { + width: 420px; + max-width: none; + height: auto; + 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%; +} diff --git a/docs/conf.py b/docs/conf.py index f2057673436..b8a24791c57 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,16 @@ ".rst": "restructuredtext", ".md": "markdown", } + +# Custom static assets (CSS, etc.) +html_static_path = ["_assets"] +html_css_files = ["custom.css"] + +# 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": [], + }, +} diff --git a/docs/feature_and_process_status.rst b/docs/feature_and_process_status.rst new file mode 100644 index 00000000000..f6d464b3857 --- /dev/null +++ b/docs/feature_and_process_status.rst @@ -0,0 +1,754 @@ +.. + # ******************************************************************************* + # 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 + + + +Feature and Process 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** + + * - 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 + + * - 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 + + * - 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 + + * - Orchestrator + - ✅ Available + + | (2 tests) + - ❌ Open + - ✅ Available + + | (9 tests) + - ✅ Available (3 tests) + + | `reference_integration `__ (cross-module) + - ✅ 0 findings + + | `Clippy `__ + - ❌ 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 + + * - Time + - ✅ Available + + | (296 tests) + - ❌ Open + - ✅ Available + + | (11 tests) + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + + * - Config Mgmt + - ✅ Available + + | (143 tests) + - ❌ Open + - ❌ Open + - ❌ Open + - ✅ 0 findings + + | `clang-tidy `__ + - ❌ 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 + + * - Security/Crypto + - ❌ 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/index.rst b/docs/index.rst index bbc08312fe4..7b66174f883 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -28,16 +28,14 @@ Current Integration Status Overview Explore the documentation ------------------------- .. toctree:: - :caption: Software Components :titlesonly: :maxdepth: 1 + Modules + PMT + Release Notes + 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 diff --git a/docs/needs_filters.py b/docs/needs_filters.py new file mode 100644 index 00000000000..697cfcf085e --- /dev/null +++ b/docs/needs_filters.py @@ -0,0 +1,153 @@ +# ******************************************************************************* +# 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 00000000000..0f271b1c3b7 --- /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/release_notes.rst b/docs/release_notes.rst new file mode 100644 index 00000000000..b9724f994f0 --- /dev/null +++ b/docs/release_notes.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 + # ******************************************************************************* + +Release Notes +============= + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + release_notes/score_07 diff --git a/docs/sw_components.rst b/docs/sw_components.rst new file mode 100644 index 00000000000..3d58fd8dca5 --- /dev/null +++ b/docs/sw_components.rst @@ -0,0 +1,26 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Modules +======= + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + _collections/score_persistency/docs/index + _collections/score_orchestrator/docs/index + _collections/score_kyron/docs/index + _collections/score_baselibs_rust/docs/index + _collections/score_logging/docs/index From 2a256c1a9e25609d044835905097e81cdd54e374 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Mon, 18 May 2026 12:57:29 +0000 Subject: [PATCH 2/2] page restructuring --- .../SKILL.md | 79 +- .github/skills/pi-tracker/SKILL.md | 464 ++++++ .github/workflows/test_and_docs.yml | 12 +- docs/_assets/custom.css | 147 +- docs/_assets/pi_timeline_2026.drawio.svg | 299 ++++ docs/_assets/sidebar-toggle.js | 48 + docs/_assets/sw_arch_v_1.drawio.svg | 1253 +++++++++++++++++ docs/_templates/sidebar-root-nav.html | 28 + docs/conf.py | 16 + docs/index.rst | 32 +- .../integration_process.rst | 16 + docs/needs_filters.py | 22 +- docs/s_core_v_1/index.rst | 24 + .../releases/releases.rst} | 7 +- .../releases/score_07.rst} | 0 .../roadmap/overall_status.rst} | 13 +- docs/s_core_v_1/roadmap/pi1.rst | 272 ++++ docs/s_core_v_1/roadmap/pi2.rst | 179 +++ docs/s_core_v_1/roadmap/pi3.rst | 85 ++ docs/s_core_v_1/roadmap/pi4.rst | 40 + docs/s_core_v_1/roadmap/roadmap.rst | 192 +++ docs/s_core_v_1/status/overall_status.rst | 1 + .../verification/coverage_summary.md | 3 + .../verification/unit_test_summary.md | 3 + docs/s_core_v_1/verification/verification.rst | 22 + scripts/quality_runners.py | 2 +- 26 files changed, 3196 insertions(+), 63 deletions(-) rename .github/skills/{module-phase-tracker => overall-status}/SKILL.md (87%) create mode 100644 .github/skills/pi-tracker/SKILL.md create mode 100644 docs/_assets/pi_timeline_2026.drawio.svg create mode 100644 docs/_assets/sidebar-toggle.js create mode 100644 docs/_assets/sw_arch_v_1.drawio.svg create mode 100644 docs/_templates/sidebar-root-nav.html create mode 100644 docs/integration_process/integration_process.rst create mode 100644 docs/s_core_v_1/index.rst rename docs/{release_notes.rst => s_core_v_1/releases/releases.rst} (90%) rename docs/{score_releases/release_note_score_07.rst => s_core_v_1/releases/score_07.rst} (100%) rename docs/{feature_and_process_status.rst => s_core_v_1/roadmap/overall_status.rst} (99%) create mode 100644 docs/s_core_v_1/roadmap/pi1.rst create mode 100644 docs/s_core_v_1/roadmap/pi2.rst create mode 100644 docs/s_core_v_1/roadmap/pi3.rst create mode 100644 docs/s_core_v_1/roadmap/pi4.rst create mode 100644 docs/s_core_v_1/roadmap/roadmap.rst create mode 100644 docs/s_core_v_1/status/overall_status.rst create mode 100644 docs/s_core_v_1/verification/coverage_summary.md create mode 100644 docs/s_core_v_1/verification/unit_test_summary.md create mode 100644 docs/s_core_v_1/verification/verification.rst diff --git a/.github/skills/module-phase-tracker/SKILL.md b/.github/skills/overall-status/SKILL.md similarity index 87% rename from .github/skills/module-phase-tracker/SKILL.md rename to .github/skills/overall-status/SKILL.md index 1bc2b168eee..56ce784e041 100644 --- a/.github/skills/module-phase-tracker/SKILL.md +++ b/.github/skills/overall-status/SKILL.md @@ -1,15 +1,21 @@ --- -name: module-phase-tracker -description: "Update the Feature and Process Status table in feature_and_process_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." +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/feature_and_process_status.rst` by querying the live eclipse-score GitHub +`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 @@ -18,7 +24,7 @@ repositories. ## RST File Structure -`docs/feature_and_process_status.rst` consists of a file header followed by 5 +`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 @@ -87,6 +93,7 @@ See :ref:``. **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 @@ -99,8 +106,9 @@ See :ref:``. | (4,663 tests) ``` ```rst - - 🔄 **C0:** 92.3% + - 🔄 + | **C0:** 92.3% | **C1:** 60.3% (cpp) | **Rust line:** 74.4% ``` @@ -261,7 +269,7 @@ See :ref:`verification_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** +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 @@ -353,18 +361,20 @@ gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ | Lifecycle | `score_lifecycle_health_cpp` | `score_lifecycle_health_rust` | | Security/Crypto | not in CI | — | -**Format in table (C0 on first line, C1 and Rust each as `| ` line-blocks):** +**Format in table (status emoji alone on first line, all coverage metrics as `| ` line-blocks below):** - CPP + Rust: ```rst - - 🔄 **C0:** 92.3% + - 🔄 + | **C0:** 92.3% | **C1:** 60.3% (cpp) | **Rust line:** 74.4% ``` - CPP only: ```rst - - 🔄 **C0:** 87.9% + - 🔄 + | **C0:** 87.9% | **C1:** 58.8% (cpp) ``` - Not available: `❌ Open` @@ -455,6 +465,15 @@ Dynamic analysis is performed via sanitizer CI workflows (ASan/UBSan/LSan for C+ - **🔄 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 @@ -662,7 +681,7 @@ Before updating the file, verify these invariants: ### Step 6 — Update the RST file -Write the computed values to `docs/feature_and_process_status.rst` following the formatting rules in the RST File Structure section above. Update the `.. rubric:: Implementation status:` line for each PA. +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. --- @@ -689,9 +708,45 @@ Add a row to the Modules and Repos table above (with known_good.json key and pat - 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/feature_and_process_status.rst` as of last update (2026-05). +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/feature_and_process_status.rst` in `eclipse-score/reference_integration`. +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 00000000000..205ac72fc3a --- /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 d6088fd0ee5..c25c643e0b9 100644 --- a/.github/workflows/test_and_docs.yml +++ b/.github/workflows/test_and_docs.yml @@ -74,16 +74,16 @@ jobs: - name: Publish build summary if: always() run: | - if [ -f docs/verification_report/unit_test_summary.md ]; then - cat docs/verification_report/unit_test_summary.md >> "$GITHUB_STEP_SUMMARY" + if [ -f docs/s_core_v_1/verification/unit_test_summary.md ]; then + cat docs/s_core_v_1/verification/unit_test_summary.md >> "$GITHUB_STEP_SUMMARY" else - echo "No build summary file found (docs/verification_report/unit_test_summary.md)" >> "$GITHUB_STEP_SUMMARY" + echo "No build summary file found (docs/s_core_v_1/verification/unit_test_summary.md)" >> "$GITHUB_STEP_SUMMARY" fi echo "" >> "$GITHUB_STEP_SUMMARY" # Add a newline for better formatting - if [ -f docs/verification_report/coverage_summary.md ]; then - cat docs/verification_report/coverage_summary.md >> "$GITHUB_STEP_SUMMARY" + if [ -f docs/s_core_v_1/verification/coverage_summary.md ]; then + cat docs/s_core_v_1/verification/coverage_summary.md >> "$GITHUB_STEP_SUMMARY" else - echo "No coverage summary file found (docs/verification_report/coverage_summary.md)" >> "$GITHUB_STEP_SUMMARY" + echo "No coverage summary file found (docs/s_core_v_1/verification/coverage_summary.md)" >> "$GITHUB_STEP_SUMMARY" fi - name: Create archive of test reports if: github.ref_type == 'tag' diff --git a/docs/_assets/custom.css b/docs/_assets/custom.css index 70ceb2c5a62..f9d46479a86 100644 --- a/docs/_assets/custom.css +++ b/docs/_assets/custom.css @@ -29,16 +29,29 @@ 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-"]) { - min-width: 420px; vertical-align: middle; text-align: center; } -.compact-overview-table td:has(img[id^="needpie-"]) img { - width: 420px; - max-width: none; - height: auto; +/* 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; } @@ -65,3 +78,127 @@ 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 00000000000..f108e686516 --- /dev/null +++ b/docs/_assets/pi_timeline_2026.drawio.svg @@ -0,0 +1,299 @@ + + + + + + + + + + + + + PI 1 v0.8 · May 13–Jul 13 + + + + + + + + + + PI 2 v0.9 · Jul 14–Sep 7 + + + + + + + + + + PI 3 v1.0 · Sep 8–Nov 2 + + + + + + + + + + PI 4 Final · Nov 3–Dec 15 + + + + + + + + + + + + + + + + +
+
+
+ May +
+
+
+
+ + May + +
+
+
+ + + + + + + + + + +
+
+
+ Jun +
+
+
+
+ + Jun + +
+
+
+ + + + + + + + + + +
+
+
+ Jul +
+
+
+
+ + Jul + +
+
+
+ + + + + + + + + + +
+
+
+ Aug +
+
+
+
+ + Aug + +
+
+
+ + + + + + + + + + +
+
+
+ Sep +
+
+
+
+ + Sep + +
+
+
+ + + + + + + + + + +
+
+
+ Oct +
+
+
+
+ + Oct + +
+
+
+ + + + + + + + + + +
+
+
+ Nov +
+
+
+
+ + Nov + +
+
+
+ + + + + + + + + + +
+
+
+ Dec +
+
+
+
+ + Dec + +
+
+
+ + + + + + + +
+
+
+ 2026 +
+
+
+
+ + 2026 + +
+
+
+ + + + + + + + + + + + + +
+
+
+ 🚀 v1.0 Final +
+
+
+
+ + 🚀 v1.0 Final + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + +
diff --git a/docs/_assets/sidebar-toggle.js b/docs/_assets/sidebar-toggle.js new file mode 100644 index 00000000000..5e6d44b44a8 --- /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 00000000000..47a9590ae43 --- /dev/null +++ b/docs/_assets/sw_arch_v_1.drawio.svg @@ -0,0 +1,1253 @@ + + + + + + + + + + + +
+
+
+ C++ Base Libraries +
+
+
+
+ + C++ Base Libraries + +
+
+
+ + + + + + + +
+
+
+ System Services +
+
+
+
+ + System Services + +
+
+
+ + + + + + + +
+
+
+ Communication +
+
+
+
+ + Communication + +
+
+
+ + + + + + + +
+
+
+ Operating System +
+
+
+
+ + Operating System + +
+
+
+ + + + + + + +
+
+
+ Hypervisor / Hardware +
+
+
+
+ + Hypervisor / Hardware + +
+
+
+ + + + + + + +
+
+
+ Rust Base Libraries +
+
+
+
+ + Rust Base Libraries + +
+
+
+ + + + + + + +
+
+
+ BaseLibs Rust +
+
+
+
+ + BaseLibs Rust + +
+
+
+ + + + + + + +
+
+
+ Platform API (native APIs for Rust and C++) +
+
+
+
+ + Platform API (native APIs for Rust and C++) + +
+
+
+ + + + + + + +
+
+
+ Logging API +
+
+
+
+ + Logging API + +
+
+
+ + + + + + + +
+
+
+ S-CORE Architecture v1.0 +
+
+
+
+ + S-CORE Architecture v1.0 + +
+
+
+ + + + + + + +
+
+
+ S-Core v1.0 +
+
+
+
+ + S-Core v1.0 + +
+
+
+ + + + + + + +
+
+
+ Part of OS or HW specific implementation +
+
+
+
+ + Part of OS or HW speci... + +
+
+
+ + + + + + + +
+
+
+ to be discussed for future releases +
+
+
+
+ + to be discussed for... + +
+
+
+ + + + + + + +
+
+
+ Video API +
+
+
+
+ + Video API + +
+
+
+ + + + + + + +
+
+
+ Crypto API +
+
+
+
+ + Crypto API + +
+
+
+ + + + + + + +
+
+
+ HW Acceleration API +
+
+
+
+ + HW Acceleration... + +
+
+
+ + + + + + + +
+
+
+ Persistency API +
+
+
+
+ + Persistency API + +
+
+
+ + + + + + + +
+
+
+ Communication API +
+
+
+
+ + Communication API + +
+
+
+ + + + + + + +
+
+
+ Lifecycle & Health API +
+
+
+
+ + Lifecycle & Heal... + +
+
+
+ + + + + + + +
+
+
+ Configuration API +
+
+
+
+ + Configuration API + +
+
+
+ + + + + + + +
+
+
+ Time API +
+
+
+
+ + Time API + +
+
+
+ + + + + + + +
+
+
+ Fault API +
+
+
+
+ + Fault API + +
+
+
+ + + + + + + +
+
+
+ Runtime orchestrator API +
+
+
+
+ + Runtime orchestr... + +
+
+
+ + + + + + + +
+
+
+ User / Capability management +
+
+
+
+ + User / Capabilit... + +
+
+
+ + + + + + + +
+
+
+ Mandatory Access Control +
+
+
+
+ + Mandatory Access... + +
+
+
+ + + + + + + +
+
+
+ Key / Certificate Mgmt +
+
+
+
+ + Key / Certificat... + +
+
+
+ + + + + + + +
+
+
+ Intrusion Detection System +
+
+
+
+ + Intrusion Detecti... + +
+
+
+ + + + + + + +
+
+
+ Config Mgmt +
+
+
+
+ + Config Mgmt + +
+
+
+ + + + + + + +
+
+
+ Storage Mgmt +
+
+
+
+ + Storage Mgmt + +
+
+
+ + + + + + + +
+
+
+ Video Frame-server +
+
+
+
+ + Video Frame-serv... + +
+
+
+ + + + + + + +
+
+
+ Fault Mgmt. +
+
+
+
+ + Fault Mgmt. + +
+
+
+ + + + + + + +
+
+
+ Lifecycle & Health Mgmt +
+
+
+
+ + Lifecycle & Heal... + +
+
+
+ + + + + + + +
+
+
+ HW Health Mgmt +
+
+
+
+ + HW Health Mgmt + +
+
+
+ + + + + + + +
+
+
+ Logging / Data Collection +
+
+
+
+ + Logging / Data C... + +
+
+
+ + + + + + + +
+
+
+ Software Update +
+
+
+
+ + Software Update + +
+
+
+ + + + + + + +
+
+
+ Firewall +
+
+
+
+ + Firewall + +
+
+
+ + + + + + + +
+
+
+ Tunneling +
+
+
+
+ + Tunneling + +
+
+
+ + + + + + + +
+
+
+ zero-copy communication +
+
+
+
+ + zero-copy commun... + +
+
+
+ + + + + + + +
+
+
+ SOME/IP Gateway +
+
+
+
+ + SOME/IP Gateway + +
+
+
+ + + + + + + +
+
+
+ NM +
+
+
+
+ + NM + +
+
+
+ + + + + + + +
+
+
+ Kernel +
+
+
+
+ + Kernel + +
+
+
+ + + + + + + +
+
+
+ Time Sync +
+
+
+
+ + Time Sync + +
+
+
+ + + + + + + +
+
+
+ Hardware Supervision +
+
+
+
+ + Hardware Supervi... + +
+
+
+ + + + + + + +
+
+
+ Container Support +
+
+
+
+ + Container Support + +
+
+
+ + + + + + + +
+
+
+ Video / Camera Support +
+
+
+
+ + Video / Camera S... + +
+
+
+ + + + + + + +
+
+
+ Audio Support +
+
+
+
+ + Audio Support + +
+
+
+ + + + + + + +
+
+
+ Peripheral Support +
+
+
+
+ + Peripheral Suppo... + +
+
+
+ + + + + + + +
+
+
+ Ethernet (TCP/IP) +
+
+
+
+ + Ethernet (TCP/IP) + +
+
+
+ + + + + + + +
+
+
+ AVB +
+
+
+
+ + AVB + +
+
+
+ + + + + + + +
+
+
+ Board Support Package +
+
+
+
+ + Board Support Pa... + +
+
+
+ + + + + + + +
+
+
+ Secure Boot +
+
+
+
+ + Secure Boot + +
+
+
+ + + + + + + +
+
+
+ Hardware Acceleration Support +
+
+
+
+ + Hardware Acceleration... + +
+
+
+ + + + + + + +
+
+
+ Hardware Security Support +
+
+
+
+ + Hardware Securit... + +
+
+
+ + + + + + + +
+
+
+ Startup +
+
+
+
+ + Startup + +
+
+
+ + + + + + + +
+
+
+ Inter-Partition Communication +
+
+
+
+ + Inter-Partition... + +
+
+
+ + + + + + + +
+
+
+ Hardware Virtualization Support +
+
+
+
+ + Hardware Virtualizatio... + +
+
+
+ + + + + + + +
+
+
+ Diagnostic Handler (SOVD, UDS) +
+
+
+
+ + Diagnostic Handle... + +
+
+
+ + + + + + + +
+
+
+ BaseLibs C++ +
+
+
+
+ + BaseLibs C++ + +
+
+
+ + + + + + + +
+
+
+ System launch and monitor +
+
+
+
+ + System launch an... + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + +
diff --git a/docs/_templates/sidebar-root-nav.html b/docs/_templates/sidebar-root-nav.html new file mode 100644 index 00000000000..5f02cc869e8 --- /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 b8a24791c57..f0e28820540 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,6 +54,19 @@ def _patch_needpie_suppress_legend() -> None: # 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). @@ -61,5 +74,8 @@ def _patch_needpie_suppress_legend() -> None: "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 7b66174f883..fbaa40d7130 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -15,26 +15,26 @@ 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: Status & Roadmap :titlesonly: :maxdepth: 1 Modules - PMT - Release Notes - Status + S-Core v1.0 + Integration Process + Integration Status .. toctree:: @@ -55,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 00000000000..2468fba0860 --- /dev/null +++ b/docs/integration_process/integration_process.rst @@ -0,0 +1,16 @@ +.. + # ******************************************************************************* + # Copyright (c) 2026 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Integration Process +################### diff --git a/docs/needs_filters.py b/docs/needs_filters.py index 697cfcf085e..6c1a4d14328 100644 --- a/docs/needs_filters.py +++ b/docs/needs_filters.py @@ -31,11 +31,7 @@ def std_req_status_for_area(needs, results, arg1=""): 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", []) - ): + 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) @@ -83,10 +79,7 @@ def wp_tag_status(needs, results, arg1=""): 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 - ): + 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 @@ -112,18 +105,11 @@ def area_verification_status(needs, results, arg1=""): 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", []) - ): + 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 - ): + 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 diff --git a/docs/s_core_v_1/index.rst b/docs/s_core_v_1/index.rst new file mode 100644 index 00000000000..8ed87af0527 --- /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/release_notes.rst b/docs/s_core_v_1/releases/releases.rst similarity index 90% rename from docs/release_notes.rst rename to docs/s_core_v_1/releases/releases.rst index b9724f994f0..ed2ef1343af 100644 --- a/docs/release_notes.rst +++ b/docs/s_core_v_1/releases/releases.rst @@ -12,11 +12,10 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -Release Notes -============= +Releases +============ .. toctree:: :titlesonly: - :maxdepth: 1 - release_notes/score_07 + 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/feature_and_process_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst similarity index 99% rename from docs/feature_and_process_status.rst rename to docs/s_core_v_1/roadmap/overall_status.rst index f6d464b3857..1e95bb4fa12 100644 --- a/docs/feature_and_process_status.rst +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -16,7 +16,7 @@ -Feature and Process Status +Overall Status ########################## This page tracks the completion status of all 5 process areas per module. @@ -596,6 +596,8 @@ See :ref:`verification_workflows`. - **Dynamic Code Analysis** - | **Module Verification** | **Report** + - | **Platform Verification** + | **Report** * - Baselibs - ✅ Available @@ -616,6 +618,7 @@ See :ref:`verification_workflows`. | `ASan/UBSan/LSan `__ - ❌ Open + - ❌ Open * - Communication - ✅ Available @@ -638,6 +641,7 @@ See :ref:`verification_workflows`. | `ASan/UBSan/LSan `__ | `TSan `__ - ❌ Open + - ❌ Open * - Logging - ✅ Available @@ -654,6 +658,7 @@ See :ref:`verification_workflows`. - ❌ Open - ❌ Open - ❌ Open + - ❌ Open * - Orchestrator - ✅ Available @@ -671,6 +676,7 @@ See :ref:`verification_workflows`. | `Clippy `__ - ❌ Open - ❌ Open + - ❌ Open * - Persistency - ✅ Available @@ -689,6 +695,7 @@ See :ref:`verification_workflows`. | `Clippy `__ - ❌ Open - ❌ Open + - ❌ Open * - Time - ✅ Available @@ -702,6 +709,7 @@ See :ref:`verification_workflows`. - ❌ Open - ❌ Open - ❌ Open + - ❌ Open * - Config Mgmt - ✅ Available @@ -715,6 +723,7 @@ See :ref:`verification_workflows`. | `clang-tidy `__ - ❌ Open - ❌ Open + - ❌ Open * - Lifecycle - ✅ Available @@ -733,6 +742,7 @@ See :ref:`verification_workflows`. | `Clippy `__ - ❌ Open - ❌ Open + - ❌ Open * - Security/Crypto - ❌ Open @@ -742,6 +752,7 @@ See :ref:`verification_workflows`. - ❌ Open - ❌ Open - ❌ Open + - ❌ Open Done Criteria ************* diff --git a/docs/s_core_v_1/roadmap/pi1.rst b/docs/s_core_v_1/roadmap/pi1.rst new file mode 100644 index 00000000000..837ff736321 --- /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 00000000000..91f1c81ffcd --- /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 00000000000..a3ccde07f09 --- /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 00000000000..f945e23c89f --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi4.rst @@ -0,0 +1,40 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +PI 4 — 3 November – 15 December 2026 · v1.0 Final *(milestone TBD)* +===================================================================== + +**Focus: Hardening & Release** + +- All inspection checklists are ``valid`` and complete for all v1.0-relevant features and modules: + + - ``chklst_req_inspection.rst`` — Requirements Inspection + - ``chklst_arc_inspection.rst`` — Architecture Inspection + - ``chklst_impl_inspection.rst`` — Implementation Inspection +- All module verification reports (``wp__verification_module_ver_report``) are approved by a Committer, containing: + + - **Requirements coverage**: all ``valid`` component requirements are linked to at least one test + via ``FullyVerifies`` / ``PartiallyVerifies`` — pass/fail verdict per requirement documented + - **Architecture coverage**: all component architecture elements are linked to at least one test — verdict documented + - **Structural coverage**: C0 (line) and C1 (branch) coverage per unit listed and meets targets + - **Static code analysis**: 0 open ``Critical`` or ``High`` findings + - **Dynamic code analysis**: 0 sanitizer findings (ASan/UBSan/LSan, TSan) +- The Platform Verification Report (``wp__verification_platform_ver_report``) is approved by a Committer, containing: + + - **Feature requirements coverage**: all ``valid`` feature requirements are linked to at least one + Feature Integration Test via ``FullyVerifies`` / ``PartiallyVerifies`` — pass/fail verdict per requirement documented + - **Feature architecture coverage**: all feature architecture elements are linked to at least one test — verdict documented + - **Feature Integration Test results**: pass/fail/not_run result per test case documented + - **Feature Integration Test logs**: test logs per test case attached +- Release notes and changelog for v1.0 finalised diff --git a/docs/s_core_v_1/roadmap/roadmap.rst b/docs/s_core_v_1/roadmap/roadmap.rst new file mode 100644 index 00000000000..b6d3c220f8e --- /dev/null +++ b/docs/s_core_v_1/roadmap/roadmap.rst @@ -0,0 +1,192 @@ +.. + # ******************************************************************************* + # Copyright (c) 2024 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +.. _v1_0_release_plan: + +S-CORE v1.0 Roadmap +==================== + +This document describes the release planning for **S-CORE v1.0**, organized around the +`eclipse-score/score milestones `__, +and covers **two overarching project goals**: + +**1. Feature Completeness** — Selected modules are fully implemented and tested. + + .. image:: ../../_assets/sw_arch_v_1.drawio.svg + :alt: S-CORE v1.0 Software Architecture + :align: center + :width: 100% + +.. list-table:: + :widths: 30 70 + :header-rows: 1 + + * - Module + - Notes + * - `Baselibs `__ + - Base libraries (C++) + * - `Baselibs Rust `__ + - Base libraries (Rust) + * - `Communication `__ + - IPC / service-oriented communication + * - `Logging `__ + - Platform logging + * - `Persistency `__ + - Data persistence + * - `Time `__ + - Time services + * - `Config Management `__ + - Configuration management + * - `Lifecycle `__ + - Lifecycle management + * - `Security/Crypto `__ + - Cryptographic services + * - `Diagnosis `__ + - On-board diagnostics / DTC management + * - `Some/IP `__ + - SOME/IP communication middleware + +**2. Qualifiable State** + +All modules follow the S-CORE process and use S-CORE tools for +artifact generation across the following process areas: **Requirements Engineering**, **Architecture Design**, **Implementation**, **Verification**. + +Management +^^^^^^^^^^ + +.. grid:: 2 4 4 4 + :class-container: score-grid score-grid-compact + + .. grid-item-card:: `Platform Management `__ + :class-card: card-pa-grey + + Manage the common platform, its modules and integration. + + .. grid-item-card:: `Safety Management `__ + :class-card: card-pa-grey + + Plan and oversee safety activities across the project lifecycle. + + .. grid-item-card:: `Security Management `__ + :class-card: card-pa-grey + + Plan and oversee cybersecurity activities across the project lifecycle. + + .. grid-item-card:: `Quality Management `__ + :class-card: card-pa-grey + + Define and monitor quality objectives, measures and improvements. + + .. grid-item-card:: `Change Management `__ + :class-card: card-pa-grey + + Control and track changes to work products and configurations. + + .. grid-item-card:: `Problem Resolution `__ + :class-card: card-pa-grey + + Identify, analyse and resolve problems found during development. + + .. grid-item-card:: `Release Management `__ + :class-card: card-pa-grey + + Plan, prepare and control the release of deliverables. + + .. grid-item-card:: `Process Management `__ + :class-card: card-pa-grey + + Define, deploy and improve the organisational process. + +Development +^^^^^^^^^^^ + +.. grid:: 1 2 3 4 + :class-container: score-grid + + .. grid-item-card:: `Requirements Engineering `__ + :class-card: card-pa-highlight + + Elicit, specify and manage stakeholder and system requirements. + + .. grid-item-card:: `Architecture Design `__ + :class-card: card-pa-highlight + + Define and document the system and software architecture. + + .. grid-item-card:: `Implementation `__ + :class-card: card-pa-highlight + + Develop and unit-test software units according to the design. + + .. grid-item-card:: `Verification `__ + :class-card: card-pa-highlight + + Verify that work products fulfil their specified requirements. + + .. grid-item-card:: `Safety Analysis `__ + :class-card: card-pa-grey + + Identify and assess safety hazards and derive mitigation measures. + + .. grid-item-card:: `Security Analysis `__ + :class-card: card-pa-grey + + Identify and assess security threats and derive mitigation measures. + +Support +^^^^^^^ + +.. grid:: 1 2 3 4 + :class-container: score-grid + + .. grid-item-card:: `Configuration Management `__ + :class-card: card-pa-grey + + Control versions and baselines of all project artefacts. + + .. grid-item-card:: `Tool Management `__ + :class-card: card-pa-grey + + Qualify and manage tools used in the development process. + + .. grid-item-card:: `Documentation Management `__ + :class-card: card-pa-grey + + Plan, create and maintain project and product documentation. + +.. note:: + + We will also work on the other process areas, but they are not in the main focus for S-CORE v1.0 + (shown grayed out above). + +Status & Next Steps +------------------- + +.. raw:: html + :file: ../../_assets/pi_timeline_2026.drawio.svg + +.. raw:: html + +
+ +.. toctree:: + :titlesonly: + :maxdepth: 1 + + Overall Status + PI 1 — Requirements Engineering + Architecture Design + PI 2 — Implementation + PI 3 — Verification + PI 4 — Hardening & Release + diff --git a/docs/s_core_v_1/status/overall_status.rst b/docs/s_core_v_1/status/overall_status.rst new file mode 100644 index 00000000000..8feca331c5d --- /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 00000000000..36c88db16bb --- /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 00000000000..05361c5a457 --- /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 00000000000..4e29d6abdf4 --- /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/scripts/quality_runners.py b/scripts/quality_runners.py index c3786153f48..42ed8dd0dc4 100644 --- a/scripts/quality_runners.py +++ b/scripts/quality_runners.py @@ -283,7 +283,7 @@ def parse_arguments() -> argparse.Namespace: def main() -> bool: args = parse_arguments() args.coverage_output_dir.mkdir(parents=True, exist_ok=True) - path_to_docs = Path(__file__).parent.parent / "docs/verification_report" + path_to_docs = Path(__file__).parent.parent / "docs/s_core_v_1/verification" known = load_known_good(args.known_good_path.resolve())