diff --git a/.github/skills/overall-status/SKILL.md b/.github/skills/overall-status/SKILL.md new file mode 100644 index 00000000000..9219325ed0d --- /dev/null +++ b/.github/skills/overall-status/SKILL.md @@ -0,0 +1,1079 @@ +--- +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, Persistency, Time, Config Management, Lifecycle, Security/Crypto." +argument-hint: "optional: module name or 'all'" +--- + +# Feature and Process Status Tracker + +Refreshes the table in `docs/s_core_v_1/roadmap/overall_status.rst` from +live `eclipse-score` GitHub repositories pinned via `known_good.json`. + +--- + +## 1. Scope + +Tracked modules (one table row each, in this order): + +``` +Baselibs · Communication · Logging · Persistency · Time · Config Mgmt +Lifecycle · Security/Crypto · Diagnostic Services · NM · Some/IP +``` + +Excluded: **Orchestrator** — never add a row for it. + +Five process areas, each with its own table: + +| PA | Title | sphinx-needs tag | Columns | +|---|---|---|---| +| PA1 | Change Management | `change_management` | CR approved | +| PA2 | Requirements Engineering | `requirements_engineering` | Feature Req · Component Req · Req. Inspection | +| PA3 | Architecture Design | `architecture_design` | Feature Arch · Component Arch · Arch. Inspection | +| PA4 | Implementation | `implementation` | SW Dev Plan · Code · Detailed Design · Impl. Inspection | +| PA5 | Verification | `verification` | Unit Tests · C0/C1 Cov · Comp. IT · Feat. IT · Static · Dynamic · Module Ver. Rpt | + +--- + +## 2. Repos and pinned refs + +Each module has content in **`eclipse-score/score`** (feature-level) and in its +**own repo** (component-level). Always query both. + +| Module | `known_good.json` key | Own repo | Score-side path | +|---|---|---|---| +| Baselibs | `score_baselibs` | `eclipse-score/baselibs` | `docs/{features,modules}/baselibs/**` | +| Communication | `score_communication` | `eclipse-score/communication` | `docs/{features,modules}/communication/**` | +| Logging | `score_logging` | `eclipse-score/logging` | `docs/features/analysis-infra/logging/**`, `docs/modules/logging/**` | +| Persistency | `score_persistency` | `eclipse-score/persistency` (`docs/persistency/kvs/**`) | `docs/features/persistency/**` | +| Time | — | `eclipse-score/inc_time` | `docs/features/time/**` | +| Config Mgmt | — | `eclipse-score/config_management` | `docs/features/configuration/**` | +| Lifecycle | `score_lifecycle_health` | `eclipse-score/lifecycle` (`docs/module/health_monitor/**`) | `docs/features/lifecycle/**` | +| Security/Crypto | — | `eclipse-score/inc_security_crypto` | `docs/features/security_crypto/**` | +| Some/IP | — | `eclipse-score/inc_someip_gateway` | `docs/features/communication/some_ip_gateway/**` | + +> `eclipse-score/score` itself is pinned under key **`score_platform`** in the +> **`tooling`** section of `known_good.json` (not `target_sw`). Use the helper +> `pinned_ref()` in §6 below. + +> **TRLC files** (`.trlc`) are not parsed by this skill. `eclipse-score/communication` +> keeps real component requirements in +> `score/mw/com/requirements/component_requirements/component_requirements_ipc.trlc`; +> render them in the cell as `0/0 comp_req [TRLC]` plus a link. + +--- + +## 3. Counting model + +For each deliverable column a set of allowed directive types is defined +(see §3.1). For every RST file under the deliverable's path filter, count +the `.. ::` directive blocks whose immediately-following indented +`:status:` field equals `valid` (= **valid**) and the total number of such +blocks regardless of status (= **total**). Sum both numbers across all files. + +The cell renders as: + +| Condition | Output | +|---|---| +| total = 0 | `❌ Open` | +| valid = total > 0 | `✅ Available (valid/total)` | +| 0 ≤ valid < total | `🔄 NN% (valid/total)`, `NN = floor(100 · valid / total)` | + +> valid = 0 with total > 0 renders as `🔄 0% (0/total)`, **never** `❌ Open`. +> `❌ Open` means *no files / no directives found at all*. + +### 3.1 Allowed directive types per deliverable + +| Deliverable | Directive types in `A` | +|---|---| +| Feature Requirements | `feat_req` | +| Component Requirements | `comp_req`, `aou_req` | +| Feature Architecture | `feat`, `feat_arc`, `feat_arc_sta`, `feat_arc_dyn` | +| Component Architecture | `comp`, `comp_arc`, `comp_arc_sta`, `comp_arc_dyn`, `logic_arc_int`, `logic_arc_int_op`, `real_arc_int`, `real_arc_int_op` | +| Detailed Design | `dd`, `dd_sta`, `dd_dyn` | +| Req./Arch./Impl. Inspection | document-level `:status:` of each `chklst_*.rst` (one per file) | + +Never counted as Req/Arch directives: `stkh_req`, `tool_req`, `document`, +`needtable`, `needpie`, `needextend`, `figure`, `uml`, `note`, `attention`, +`toctree`, `grid`. AoUs (`aou_req`) count for **Component** Req only, never for +Feature Req. + +### 3.2 Component Requirements split format + +Component Requirements counts both `comp_req` and `aou_req` but **renders them +split** so the reader sees what fraction is real component requirements vs. +Assumptions of Use: + +``` +✅ Available (84/84 comp_req + 32/32 AoU) +✅ Available (0/0 comp_req [TRLC] + 33/33 AoU) ← Communication: comp_req live in .trlc +✅ Available (35/35 comp_req) ← no AoUs +🔄 0% (0/1 comp_req + 0/1 AoU) ← mixed, none valid +``` + +If both subtotals are zero → `❌ Open`. + +### 3.3 Inspections + +Each `chklst_*.rst` file contains a single `.. document::` directive whose +indented `:status:` field is treated as the document status. Each file +contributes `(1, 1)` if `:status: valid`, else `(0, 1)`. Files without any +`:status:` field contribute `(0, 0)`. + +### 3.4 Lines of Code (PA4 Code column) + +LOC counts every line in source files (`.cpp .h .c .rs .py`) outside `docs/`, +`third_party/`, and `bazel-*/`, then rounds to the nearest 100. Format: + +```rst + - ✅ Available (~12,500 LOC) ` >`__ +``` + +The link label MUST be the bare repository name (e.g. `baselibs`, +`communication`, `inc_time`), not the literal word `repo`. + +--- + +## 4. Per-deliverable status criteria + +| Deliverable | `✅ Available` | `🔄 …` | `❌ Open` | +|---|---|---|---| +| **PA1** CR approved | At least one matching `feature_request` issue **scoped to milestone v0.5 or v1.0** has Status `Accepted` (or `Done`) in Project V2 #4 "Feature Requests / Modification" (see §4.0); cell lists every matching FR with its individual project status and milestone tag | At least one in-scope FR in `In Progress`/`In Review`/`Ready for Review`/`Changes Requested`/`Draft`/`POC Needed` and none Accepted | No matching FR in scope, or all matching FRs `Rejected` | +| **PA2** Feature Req | `valid = total` per §3 | files exist, not all valid | no `feat_req` directives in `docs/features//**` | +| **PA2** Component Req | `valid = total` per §3.2 | mixed | no `comp_req`/`aou_req` directives, and no TRLC stand-in | +| **PA2** Req. Inspection | every `chklst_req_inspection.rst` has `:status: valid` | mixed | no checklists | +| **PA3** Feature Arch | `valid = total` per §3 | mixed | no matching directives | +| **PA3** Component Arch | `valid = total` per §3 | mixed | no matching directives | +| **PA3** Arch. Inspection | every `chklst_arc_inspection.rst` valid | mixed | no checklists | +| **PA4** SW Dev Plan | `eclipse-score/score` has `docs/platform_management_plan/software_development.rst` (project-wide; same status in every row) | — | file absent | +| **PA4** Code | source files exist outside `docs/` | — | none found | +| **PA4** Detailed Design | `valid = total` per §3 over `dd*` directives | mixed | none | +| **PA4** Impl. Inspection | every `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` valid | mixed | no checklists | +| **PA5** Unit Tests | repo has `_test.cpp` / `_test.py` / `tests/` | — | none | +| **PA5** C0/C1 Coverage | C0 = C1 = 100 % | data exists (any %) | not in `reference_integration` CI | +| **PA5** Comp. Integration Tests | tests in module's own repo | — | none | +e| **PA5** Static Analysis | zero-tolerance per-module CI workflow passes on `main` (clang-tidy / Clippy) | tools configured but no CI enforcement | no static-analysis config | _no link_ — Static cells render the **status only**, no source-code link. Same convention as Dynamic Analysis (§4.2). | +| **PA5** Dynamic Analysis | zero-tolerance sanitizer CI passes on `main` | — | no sanitizer CI | +| **PA5** Module Ver. Report | `verification/module_verification_report.rst` `:status: valid` and contains data | `:status: draft` | absent or template only | +| **PA5** Platform Ver. Report | _no column_ — the platform verification report exists **once** for the entire platform; do not render it as a per-module column. Add it as a **bold one-liner immediately after the PA5 table** (see §5.2). | | | + +### 4.0 PA1 — Feature Request issue lookup + +PA1 "CR approved" tracks **Feature Request** issues in `eclipse-score/score`. +The label name is **`feature_request`** (lowercase, with underscore). Use +`state=all` (some FRs are still open) and combine the topical +`ft:` label with a title-keyword pass; **always union both result +sets** (deduplicated by issue number) so that older FRs which pre-date the +`ft:*` label scheme are still attributed to a module — see the attribution +note below. + +**Milestone scope.** Only Feature Requests targeted at the **v0.5** or +**v1.0** release milestones are counted. The GitHub milestone titles that +currently qualify are: + +- `SCORE v0.5 Feature Complete` +- `S-CORE v0.5 Certifiable` +- `v1.0` + +The match is performed by substring on the milestone title with whitespace +stripped (`"0.5" in title` or `"1.0" in title`, case-insensitive). FRs with +no milestone, or with any other milestone (`v0.6`…`v0.10`), are excluded +from PA1 — even if they carry a matching `ft:*` label. Each rendered FR is +tagged with its short milestone in square brackets (e.g. `[v1.0]`, +`[v0.5 Certifiable]`). + +The issues fetch must therefore include the milestone field in the jq +projection. + +For each issue, fetch its **`Status`** field from the org-level project +**"Feature Requests / Modification"** (Project V2, id +`PVT_kwDOCy9hX84Auo7w`, number `#4`). The PA1 cell renders **one entry per +Feature Request**, each annotated with its individual project status — not a +single aggregate "Available". The cell headline is the **best** status +across all FRs for that module (so a module with at least one Accepted FR +still shows ✅ in summaries). + +```python +# 1. List feature requests via the issue label (incl. milestone) +def fetch_frs(): + s = gh_raw( + "repos/eclipse-score/score/issues?state=all" + "&labels=feature_request&per_page=100 --paginate", + '.[] | [(.number|tostring), .title,' + ' ((.labels // []) | map(.name) | join(",")),' + ' ((.milestone.title // ""))] | @tsv') + return [tuple(line.split("\t")) for line in s.splitlines() if line] + +def in_scope(milestone: str) -> bool: + s = milestone.lower().replace(" ", "") + return ("0.5" in s) or ("1.0" in s) + +# 2. Pull Status per issue from Project V2 #4 +PROJECT_FR_ID = "PVT_kwDOCy9hX84Auo7w" +def fetch_fr_project_status() -> dict[str, str]: + q = ('query($endCursor:String){node(id:"' + PROJECT_FR_ID + '"){' + '... on ProjectV2{items(first:100, after:$endCursor){' + 'pageInfo{hasNextPage endCursor} ' + 'nodes{content{... on Issue{number repository{nameWithOwner}}} ' + 'fieldValues(first:20){nodes{... on ProjectV2ItemFieldSingleSelectValue' + '{name field{... on ProjectV2SingleSelectField{name}}}}}}}}}}') + out = subprocess.run( + ["gh","api","graphql","--paginate","-f", "query="+q, + "--jq", + '.data.node.items.nodes[] | ' + 'select(.content.repository.nameWithOwner=="eclipse-score/score") | ' + '[(.content.number|tostring), ' + '((.fieldValues.nodes[]|select(.field.name=="Status")|.name) // "—")] | @tsv'], + capture_output=True, text=True, timeout=120) + return dict(line.split("\t",1) for line in out.stdout.splitlines() if "\t" in line) +``` + +Status-field options (from project schema) and the recommended emoji / +ranking the cell uses to pick the headline: + +| Project Status | Emoji | Rank | +|---------------------|:-----:|:----:| +| `Accepted` / `Done` | ✅ | 0 | +| `In Progress` | 🔄 | 1 | +| `In Review` | 🔄 | 1 | +| `Ready for Review` | 🔄 | 1 | +| `Changes Requested` | 🔄 | 1 | +| `Draft` | 📝 | 2 | +| `POC Needed` | 🧪 | 3 | +| `Rejected` | ❌ | 4 | +| _not in project_ | ❔ | 5 | + +Cell layout (RST): + +```rst + - ✅ Accepted + + | `#914 `__ — ✅ Accepted [v1.0] — Feature Request for SOME/IP Gateway + | `#549 `__ — ✅ Accepted [v0.5 Certifiable] — Feature request: common libraries for IPC and Logging +``` + +Each FR line is `\`#NNN \`__ — [] — `. +The issue title is taken verbatim from the GitHub `.title` field (already +fetched by `fetch_frs()`). + +Module attribution mapping. **Always** combine the label-based hits and +the title-keyword hits (deduplicated by issue number) — do **not** treat +the keyword set as a fallback that only fires when the `ft:*` query is +empty. Older feature requests pre-date the `ft:*` label scheme and only +match by title keyword (e.g. `#69 "Feature Request for IPC"` for +Communication carries `feature_request` + `community:architecture` + +`planned-for:0.5` but no `ft:communication`); skipping the keyword pass +when `ft:*` already produced hits causes such issues to silently disappear +from PA1. + +```python +FT_LABEL = { + "Baselibs": "ft:baselibs", + "Communication": "ft:communication", + "Logging": "ft:logging", + "Persistency": "ft:persistency", + "Config Mgmt": "ft:config_management", + "Lifecycle": "ft:health&lifecycle", + "Security/Crypto": "ft:security&crypto", +} +KW_FALLBACK = { + "Baselibs": ["baselib", "common librar", "abi compatible", "json parser"], + "Communication": ["ipc", "streaming", "record and replay"], + "Logging": ["logging"], + "Persistency": ["persistency", " kvs"], + "Time": [" time"], + "Some/IP": ["some/ip", "someip", "some_ip"], + "Diagnostic Services": ["diagnos"], + "NM": ["network management"], +} +``` + +Render up to ~6 hits per cell. If a module has zero matches, render +`❌ Open`. The older label `contribution request` exists too but tracks +formal contribution intent, not feature scope — **do not** use it for PA1. + +> **Manual overrides — apply *after* the automated label∪keyword union +> has produced its hit set:** +> +> - **`#549` "common libraries for IPC and Logging"** is rendered **only +> under Baselibs**, even though its title contains both "IPC" and +> "Logging" (which would otherwise match Communication and Logging). +> Drop `#549` from the Communication and Logging cells. +> - **`#757` "Feature request for qualified json-parser"** belongs to +> **Baselibs** (label `ft:baselibs`). It has **no GitHub milestone**, +> so the standard milestone filter (`"0.5"|"1.0" in title`) excludes +> it; force-include it for Baselibs and render it without the `[…]` +> milestone bracket. +> - **Communication scope is local IPC only.** Drop `#914` (SOME/IP +> Gateway → Some/IP module) and `#917` (ABI compatible datatypes → +> Baselibs) from the Communication cell, even though their title +> keywords (`some/ip`, `abi compatible`) or labels could attribute +> them. Communication renders only `#69 — Feature Request for IPC`. + +### 4.1 PA5 — coverage CI keys + +Coverage data is read from the latest successful run of workflow id +`234977097` (`Code Quality & Documentation`), job `test_and_docs`, in +`eclipse-score/reference_integration`. + +| Tracker module | CPP key | Rust key | +|---|---|---| +| Baselibs | `score_baselibs_cpp` | `score_baselibs_rust_rust` | +| Communication | `score_communication_cpp` | — | +| Logging | `score_logging_cpp` | `score_logging_rust` | +| Persistency | `score_persistency_cpp` | `score_persistency_rust` | +| Lifecycle | `score_lifecycle_health_cpp` | `score_lifecycle_health_rust` | +| Time / Config Mgmt / Security/Crypto | not in CI | — | + +```bash +RUN_ID=$(gh api "repos/eclipse-score/reference_integration/actions/workflows/234977097/runs?per_page=10" \ + --jq '[.workflow_runs[] | select(.conclusion=="success")][0].id') +JOB_ID=$(gh api "repos/eclipse-score/reference_integration/actions/runs/$RUN_ID/jobs" \ + --jq '.jobs[] | select(.name=="test_and_docs") | .id') +gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ + | grep -A50 "COVERAGE ANALYSIS SUMMARY" +``` + +The log emits a single Python-dict dump after the +`=== QR: COVERAGE ANALYSIS SUMMARY ===` banner, e.g. + +```text +{'score_baselibs_cpp': {'branches': '60.3%', 'exit_code': 0, 'functions': '85.4%', 'lines': '92.3%'}, + 'score_logging_rust': {'branches': 'NA', 'exit_code': 0, 'functions': '99.5%', 'lines': '74.4%'}, + ...} +``` + +Parse it with this regex (works for both cpp and rust keys; either field may be `'NA'`): + +```python +COV_RE = re.compile( + r"'(score_[a-z_]+)':\s*\{[^}]*'branches':\s*'([^']*)'" + r"[^}]*'functions':\s*'([^']*)'" + r"[^}]*'lines':\s*'([^']*)'") +``` + +### 4.2 PA5 — static / dynamic analysis CI table + +> **Reader notes (rendered in the RST as `.. note::` blocks placed +> immediately after the PA5 `Implementation status:` rubric and before +> the PA5 list-table — keep them in sync when regenerating):** +> +> 1. **C0/C1 Coverage source.** Coverage data comes from the +> `reference_integration` CI (*Code Quality & Documentation* workflow, +> `bazel coverage --config=ferrocene-coverage`). C0 = line coverage, +> C1 = branch coverage. Rust coverage reports **line only**. Modules +> not yet integrated into the `reference_integration` CI render +> `❌ Open` (currently: Time, Config Mgmt, Security/Crypto, Some/IP — +> update list each regen). +> 2. **Static / Dynamic semantics.** Static = per-module clang-tidy +> (C++) / Clippy (Rust) workflows; Dynamic = sanitizer workflows +> (`--config=asan_ubsan_lsan`, `--config=tsan`). All listed workflows +> are **zero-tolerance** → a passing `main` ⇒ `✅ 0 findings`. +> Central CodeQL runs in +> `reference_integration/.github/workflows/codeql-multiple-repo-scan.yml` +> (finding counts require the GitHub Security tab). + +| Module | Static | Dynamic | +|---|---|---| +| Baselibs | ✅ `lint.yml` (clang-tidy) | ✅ `sanitizers_linux.yml` (ASan/UBSan/LSan) | +| Communication | 🔄 Configured (no CI) | ✅ ASan/UBSan/LSan + TSan | +| Logging | ❌ | ❌ | +| Persistency | ✅ `clippy.yml` | ❌ | +| Time | ❌ | ❌ | +| Config Mgmt | ✅ `static-analysis.yml` (clang-tidy) | ❌ | +| Lifecycle | ✅ `lint_clippy.yml` | ❌ | +| Security/Crypto | ❌ | ❌ | + +Central CodeQL runs in `reference_integration/.github/workflows/codeql-multiple-repo-scan.yml`. + +> **Link discipline:** The **Static** column renders the workflow YAML +> as a line-block link below the status emoji (so reviewers can click +> through to the actual configuration). The **Dynamic** column renders +> the **status only** (no link) — the dynamic-analysis CI is more +> heterogeneous (multiple sanitizer runs per repo, sometimes split across +> several workflow files) and listing one representative file would be +> misleading. Keep this asymmetry when regenerating. + +--- + +## 5. RST formatting rules + +### 5.0 Cross-reference labels (mandatory) + +Each `Process Area N — …` heading **must** be preceded by an explicit +target label so that `pi1.rst`, `pi2.rst`, `pi3.rst` (and any future +release-gate page) can link back via `:ref:\`overall_status_paN\``: + +```rst +.. _overall_status_pa2: + +Process Area 2 — Requirements Engineering +----------------------------------------- +``` + +Required labels: `overall_status_pa2`, `overall_status_pa3`, +`overall_status_pa4`, `overall_status_pa5`. Omitting any of them +produces six Sphinx `WARNING: undefined label` messages from the PI +release-gate pages — a clean build is the success criterion. + +### 5.1 Cell layout + +Status emoji + label on the **first line**; everything else (counts, links, +notes) goes on a **line-block** (`| `) after a blank line. + +> **Pluralisation.** When emitting test counts, write `1 test` (singular) +> and `N tests` (plural). A naive `f"{n} tests"` will produce the wrong +> `1 tests` for Logging Feat. IT and any other 1-test cell: +> +> ```python +> def plur(n, s="test"): +> return f"{n} {s}" if n == 1 else f"{n} {s}s" +> ``` + +```rst + - ✅ Available (37/37) + + | `feature-level `__ + | `abi-compatible-data-types `__ +``` + +```rst + - 🔄 + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.4% +``` + +> **PA5 test counts on a new line.** For the **Unit Tests**, **Comp. IT** +> and **Feat. IT** columns, the test count goes on its **own line-block +> line** below the status — never on the same line as `✅ Available`: +> +> ```rst +> - ✅ Available +> +> | 5376 tests +> ``` +> +> Do **not** emit `✅ Available (5376 tests)` on a single line. The +> `(valid/total)` parenthetical form (§3, requirements/AoU columns) is +> unaffected. + +> **Line-blocks inside table cells render flush-left.** Sphinx wraps an +> indented `| ...` continuation in a `
` +> which by default carries a left border + tinted background — visually +> noisy inside a status table. `docs/_assets/custom.css` neutralises this +> for `table … blockquote` and `table … .line-block` (zero margin/padding, +> `border: none`, `background: transparent`). Do **not** add per-cell +> raw-HTML wrappers to fight the styling — let the CSS rule do it. + +When mentioning `:status: invalid` in prose, **always use double backticks**: +`` ``:status: invalid`` `` (single backticks are RST hyperlink syntax → parse warning). + +### 5.2 Source links — mandatory + +Every Req / Arch / Detailed-Design / Code / Inspection cell that is **not** +`❌ Open` **MUST** carry one or more source links directly below the count +line. Rules: + +- One bullet per source RST file or per logical group (e.g. per module + subfolder). **List every matching source** — Feature Req, Component Req, + Feature Arch, Component Arch, Detailed Design, **and** Inspection cells + use no link cap. Earlier revisions capped non-Inspection cells at ~4 + links; that rule is obsolete because the truncated cells (e.g. Baselibs + with 10 components) hid components from the reader. +- **Link labels MUST be the component (or feature) name**, derived from + the URL path. This applies to **all** cells with source links — + Feature Req, Component Req, Feature Arch, Component Arch, + Detailed Design, **and** Inspection cells. Do **not** use the bare + filename (`index`, `requirements`, `aou_req`, `mw-fr_logging_req`, + `chklst_req_inspection`, …) as the label. +- Algorithm to derive the label from a path: + 1. drop the filename; + 2. drop trailing segments `requirements` / `architecture` / + `detailed_design` / `docs` / `component_requirements` / + `feature_requirements`; + 3. use the last remaining path segment. + + Examples: + + | Path | Label | + |---|---| + | `docs/features/baselibs/docs/requirements/index.rst` | `baselibs` | + | `docs/modules/baselibs/concurrency/docs/requirements/index.rst` | `concurrency` | + | `docs/features/communication/ipc/docs/requirements/index.rst` | `ipc` | + | `docs/persistency/kvs/requirements/index.rst` | `kvs` | + | `docs/module/health_monitor/requirements/index.rst` | `health_monitor` | + | `score/mw/com/requirements/component_requirements/component_requirements_ipc.trlc` | `com` | + | `docs/features/baselibs/docs/requirements/chklst_req_inspection.rst` | `baselibs` | + | `docs/modules/baselibs/concurrency/docs/requirements/chklst_req_inspection.rst` | `concurrency` | + +- Inspection cells (`Req. Inspection`, `Arch. Inspection`, + `Impl. Inspection`) link the underlying `chklst_*_inspection.rst` files, + not the parent index — readers want to click directly into the checklist + whose `:status:` drives the cell. +- URLs **MUST** point to the pinned ref (40-char SHA from `known_good.json`), + not `blob/main` — counts come from the pinned ref, and `main` may have been + restructured. For repos not in `known_good.json` (`inc_time`, + `config_management`, `inc_security_crypto`, `inc_someip_gateway`), + `blob/main` is acceptable. +- For Communication `comp_req` link the `.trlc` file marked `[TRLC]`. +- **PA4 Code cell** links the **repository root** (e.g. + `https://github.com/eclipse-score/baselibs`). The link label MUST be the + repository name (last URL segment), **not** the literal word `repo` — + e.g. `baselibs`, `communication`, `inc_time`, `config_management`, + `inc_security_crypto`, `inc_someip_gateway`. +- **PA5 Static Analysis cell** is **status-only** — do NOT add links to + CI workflow files or `quality/static_analysis` directories under the + status. Same rule as Dynamic Analysis (§4.2). +- **PA5 Platform Verification Report** is a **single project-wide + deliverable** — it does **not** get a per-module column. Render it as + a prominent admonition immediately after the PA5 list-table (styled + via `.platform-ver-report` in `docs/_assets/custom.css` — larger font, + blue accent, so it can't be missed): + + ```rst + .. admonition:: Platform Verification Report + :class: important platform-ver-report + + `platform_ver_report + / + docs/score_releases/verification/platform_ver_report.rst>`__ + — 🔄 **Draft** (single project-wide deliverable) + ``` + + Update the status emoji + label to match the report's current + `:status:` field (✅ **Valid** / 🔄 **Draft**). Do **not** revert this + to a plain `**bold paragraph**` — the admonition class is what makes + it visually prominent. + +### 5.3 Per-PA progress figures + +Each Process Area embeds one SVG figure under `docs/_assets/`: + +| PA | File | `:width:` | +|-----|-----------------------------------|------------| +| PA2 | `pa2_impl_progress.svg` | `720px` | +| PA3 | `pa3_arch_progress.svg` | `720px` | +| PA4 | `pa4_impl_progress.svg` | `720px` | +| PA5 | `pa5_verification_progress.svg` | `1080px` | + +The PA5 verification figure is rendered at **1.5× the standard width** +(`1080px` instead of `720px`) because it carries four series across four +release columns and a 720px render makes the per-module test counts hard +to read. All other PAs keep the default 720px width. + +```rst +.. figure:: /_assets/pa5_verification_progress.svg + :alt: PA5 verification progress + :width: 1080px + + Test counts and coverage across the 11 PA2 modules per release + (v0.5.0-beta → v0.6.0 → v0.7.0 → current main). +``` + +### 5.4 Pie chart row (Process Status) + +Each PA section starts with a pie chart row. + +```rst +.. 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() +``` + +Hard rules: +- `.. needpie::` does **not** support `:title:` (build error). +- Each cell needs `.. rst-class:: small-pie-cell` before its `.. needpie::`. +- Pie chart sizing is governed by `_assets/custom.css` (class + `compact-overview-table`, fluid 33% per column, `!important` img override). + Do not add explicit pixel sizes. + +### 5.4 Implementation status rubric + +Directly above the module tracker table: + +```rst +.. rubric:: Implementation status: 🔄 NN% (X/Y deliverables complete) +``` + +`X` = number of `✅ Available` cells in the table; `Y` = number of cells in +the table excluding the leftmost stub column. Both rubrics in a PA section +(`Process Status` and `Implementation status`) are inline text, not headings. + +--- + +## 6. Procedure + +### Step 0 — Resolve pinned refs + +```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): + return json.loads(base64.b64decode(gh_raw(api_path, ".content")).decode()) + +known_good = gh_json_file( + "repos/eclipse-score/reference_integration/contents/known_good.json") + +def pinned_ref(module_key): + """`score_platform` lives in `tooling`; everything else in `target_sw`.""" + all_mods = {**known_good["modules"]["target_sw"], + **known_good["modules"]["tooling"]} + entry = all_mods.get(module_key) + return entry["hash"] if entry else "main" + +REFS = { + "score": pinned_ref("score_platform"), + "baselibs": pinned_ref("score_baselibs"), + "communication": pinned_ref("score_communication"), + "logging": pinned_ref("score_logging"), + "persistency": pinned_ref("score_persistency"), + "lifecycle": pinned_ref("score_lifecycle_health"), + "inc_time": "main", + "config_management": "main", + "inc_security_crypto": "main", +} +``` + +### Step 1 — Fetch repo trees + +```python +def get_tree(repo, ref): + out = subprocess.run( + ["gh", "api", f"repos/{repo}/git/trees/{ref}?recursive=1", + "--jq", ".tree[].path"], + capture_output=True, text=True) + paths = [p for p in out.stdout.strip().split("\n") if p] + assert paths, f"empty tree for {repo}@{ref}" + return paths +``` + +### Step 2 — Count directives + +```python +DIRECTIVE_TYPES = { + "feat_req": ("feat_req",), + "comp_req": ("comp_req", "aou_req"), + "feat_arc": ("feat", "feat_arc", "feat_arc_sta", "feat_arc_dyn"), + "comp_arc": ("comp", "comp_arc", "comp_arc_sta", "comp_arc_dyn", + "logic_arc_int", "logic_arc_int_op", + "real_arc_int", "real_arc_int_op"), + "dd": ("dd", "dd_sta", "dd_dyn"), +} + +def fetch_file(repo, path, ref): + 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_directives_with_status(content, allowed): + """Return (valid, total) for `.. ::` blocks where type ∈ allowed, + using the *indented* :status: field of each block. Document-level + :status: at column 0 is ignored.""" + pat = re.compile(r'^\.\.\s+(' + '|'.join(allowed) + r')::', re.MULTILINE) + valid = total = 0 + for m in pat.finditer(content): + tail = content[m.end():] + nxt = re.search(r'^\.\.\s+\w', tail, re.MULTILINE) + block = tail[:nxt.start()] if nxt else tail + st = re.search(r'^\s+:status:\s+(\w+)', block, re.MULTILINE) + total += 1 + if st and st.group(1) == 'valid': + valid += 1 + return valid, total + +def count_checklist_status(content): + """Status of the `.. document::` directive in a chklst_*.rst file. + The :status: is indented inside the directive body, not at column 0.""" + m = re.search(r'^\.\.\s+document::', content, re.MULTILINE) + if not m: + return 0, 0 + tail = content[m.end():] + nxt = re.search(r'^\.\.\s+\w', tail, re.MULTILINE) + block = tail[:nxt.start()] if nxt else tail + st = re.search(r'^\s+:status:\s+(\w+)', block, re.MULTILINE) + if not st: + return 0, 0 + return (1 if st.group(1) == 'valid' else 0), 1 + +def count_files(repo, paths, ref, path_filter, kind): + """kind ∈ {'feat_req','comp_req','feat_arc','comp_arc','dd','chklst'}.""" + matched = [p for p in paths if path_filter(p)] + tv = tt = 0 + for path in matched: + content = fetch_file(repo, path, ref) + if kind == 'chklst': + v, t = count_checklist_status(content) + else: + v, t = count_directives_with_status(content, DIRECTIVE_TYPES[kind]) + tv += v; tt += t + return tv, tt +``` + +### Step 3 — Render cells + +```python +def cell(v, t): + if t == 0: return "❌ Open" + if v == t: return f"✅ Available ({v}/{t})" + return f"🔄 {v*100//t}% ({v}/{t})" + +def comp_req_cell(contents, *, trlc=False): + cv = ct = av = at = 0 + for c in contents: + v, t = count_directives_with_status(c, ('comp_req',)); cv+=v; ct+=t + v, t = count_directives_with_status(c, ('aou_req',)); av+=v; at+=t + parts = [] + if ct or trlc: parts.append(f"{cv}/{ct} comp_req" + (" [TRLC]" if trlc else "")) + if at: parts.append(f"{av}/{at} AoU") + if not parts: return "❌ Open" + body = " + ".join(parts) + tot_v, tot_t = cv + av, ct + at + if tot_t == 0 or tot_v == tot_t: return f"✅ Available ({body})" + return f"🔄 {tot_v*100//tot_t}% ({body})" +``` + +### Step 4 — Path filters (reference) + +> **Component-level data may live in two repos at once.** Baselibs and +> Logging keep `comp_arc` directives both in `eclipse-score/score` +> (`modules//**`) **and** in their own repo (`docs//**`). +> Always query both filters and **sum** the `(valid, total)` tuples; never +> drop one source. The same is true for Persistency `kvs` (uses both +> `score/kvs/docs/` and the older `docs/persistency/kvs/`). +> Some/IP keeps `comp_req` partly in `docs/requirements/component/**` and +> partly in `docs/tc8_conformance/requirements.rst` — combine both. + +| Module | Deliverable | Repo | Filter (`lambda p: ...`) | +|---|---|---|---| +| Baselibs | Feat. Req | score | `'features/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Comp. Req | score | `'modules/baselibs' in p and 'requirements' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Feat. Arch | score | `'features/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | Comp. Arch | score | `'modules/baselibs' in p and 'architecture' in p and p.endswith('.rst') and 'chklst' not in p` | +| Baselibs | *Inspections | score | `'baselibs' in p and 'chklst_' in p` | +| Communication | Feat. Req/Arch | score | `'features/communication' in p and '' in p and …` | +| Communication | Comp. Req/Arch | score | `'modules/communication' in p and …` | +| Logging | Feat. Req/Arch | score | `('features/logging' in p or 'features/analysis-infra/logging' in p) and …` | +| Logging | Comp. Req/Arch | score | `'modules/logging' in p and …` | +| Persistency | Feat. Req/Arch | score | `'features/persistency' in p and …` | +| Persistency | Comp. Req/Arch/DD | persistency | `'kvs' in p and …` | +| Lifecycle | Feat. Req/Arch | score | `'features/lifecycle' in p and …` *(must walk subfolders)* | +| Lifecycle | Comp. Req/Arch/DD | lifecycle | `'module' in p and …` | +| Time / Config Mgmt / Sec.Crypto | Feat. Req/Arch | score | `'features/' in p and …` | + +> **Lifecycle is the most complex module** — feature-level lives in +> `eclipse-score/score`, component-level (`docs/module/health_monitor/**`) in +> `eclipse-score/lifecycle`. Always query both and aggregate. + +### Step 5 — Sanity checks (run **before** writing the RST) + +#### 5a Structural — same modules, same columns + +```python +def parse_rst_structure(rst_path): + text = open(rst_path).read() + parts = re.split(r'Process Area (\d+) —', text)[1:] + out = {} + for i in range(0, len(parts) - 1, 2): + pa, body = f"PA{parts[i].strip()}", parts[i+1] + hdr = re.search(r'\* - \*\*Module\*\*(.*?)(?=\n \* -\s+\w)', body, re.DOTALL) + cols = [c.strip() for c in re.findall(r'\*\*([^*]+)\*\*', hdr.group(0) if hdr else "") if c.strip() != 'Module'] + mods = [m.strip() for m in re.findall(r'\n \* - ((?![\*\s])[\w][^\n]+)', body)] + out[pa] = {'modules': mods, 'columns': cols} + return out +``` + +Stop and investigate if: +- a module present before is missing now, or +- a column changed. + +#### 5b Plausibility — diff each cell + +| Old → New | Action | +|---|---| +| `✅` → `❌` or `🔄 NN%` → `❌` | 🛑 stop — almost certainly a filter bug | +| `✅` → `🔄` | ⚠️ investigate (regression) | +| `🔄 NN%` → `🔄 MM%`, MM 50 % | ⚠️ filter likely too strict | + +### Step 6 — Write the RST + +Update each PA's module table and the `.. rubric:: Implementation status:` +line. Source links as in §5.2. Pie-chart row stays unchanged unless the +sphinx-needs tag changes. + +### Step 7 — Adding a new module + +1. Append to §1 module list and §2 repo table (with key + path filter). +2. Add a row to every PA table. +3. Re-run §6. + +--- + +## 6a. Progress graphics (per-PA SVG charts above each table) + +Above the module-tracker table of **PA2, PA3, PA4 and PA5** sits a `figure::` +that renders an inline SVG showing how the totals evolved across the four +most recent releases (`v0.5.0-beta → v0.6.0 → v0.7.0 → current main`). +Files live in `docs/_assets/`: + +| PA | File | Bars | +|---|---|---| +| PA2 | `pa2_impl_progress.svg` | Feature Req (`#1f77b4`), Component Req (`#ff7f0e`) | +| PA3 | `pa3_arch_progress.svg` | Feature Arch (`#1f77b4`), Component Arch (`#ff7f0e`) | +| PA4 | `pa4_impl_progress.svg` | Estimated LOC (`#1f77b4`) | +| PA5 | `pa5_verification_progress.svg`| 3 panels: Unit Tests, Integration Tests (Component `#ff7f0e` + Feature `#9467bd`), Coverage now (`#17becf`) | + +Each figure embeds in RST as + +```rst +.. figure:: /_assets/.svg + :alt: ... + :width: 720px + + +``` + +### 6a.1 Release pinning + +Resolve the four release SHAs once via the GitHub tag refs (annotated tags +must be dereferenced): + +```python +def resolve_tag(repo, tag): + d = json.loads(gh_raw(f"repos/{repo}/git/refs/tags/{tag}")) + sha = d["object"]["sha"] + if d["object"]["type"] == "tag": + d2 = json.loads(gh_raw(f"repos/{repo}/git/tags/{sha}")) + sha = d2["object"]["sha"] + return sha +``` + +For each release tag of `eclipse-score/reference_integration`, fetch its +`known_good.json` and read the per-module hash. Schemas differ: + +- v0.5 / v0.6: `modules..{hash,version}` flat +- v0.7+: `modules.{target_sw,tooling}..hash` +- v0.7.0 itself only carries `version` for some entries → fall back to + `resolve_tag(, "v"+version)`. + +`now` is the per-module SHA from `known_good.json` on the **`main` branch of +`eclipse-score/reference_integration`** (not the working tree). Fetch it via +`gh api repos/eclipse-score/reference_integration/contents/known_good.json` — +this keeps the charts reproducible regardless of local uncommitted changes +or temporary ref bumps in the workspace. + +Module repos used for the charts: + +``` +score: eclipse-score/score (key: score_platform / "score") +baselibs: eclipse-score/baselibs (key: score_baselibs) +communication: eclipse-score/communication (key: score_communication) +logging: eclipse-score/logging (key: score_logging) +persistency: eclipse-score/persistency (key: score_persistency) +lifecycle: eclipse-score/lifecycle (key: score_lifecycle_health) +inc_time: eclipse-score/inc_time (only "now") +config_management: eclipse-score/config_management (only "now") +inc_security_crypto: eclipse-score/inc_security_crypto (only "now") +inc_someip_gateway: eclipse-score/inc_someip_gateway (only "now") +``` + +### 6a.2 Metrics — what each chart sums + +All four charts sum across the **11 PA2 modules** (Baselibs, Communication, +Logging, Persistency, Time, Config Mgmt, Lifecycle, Security/Crypto, +Diagnostic Services, NM, Some/IP). Modules whose data isn't in a release +contribute 0. + +> **Communication vs. Some/IP — never double-count.** +> Some/IP and Communication are **separate** modules even though Some/IP +> lives at `docs/features/communication/some_ip_gateway/**` inside the score +> repo. Whenever a path filter for Communication includes +> `'features/communication' in p` (or its `modules/` counterpart), it +> **MUST also exclude** `some_ip_gateway`: +> +> ```python +> def is_comm(p): +> return ('features/communication' in p +> and 'some_ip_gateway' not in p) +> ``` +> +> Some/IP gets its own filter that requires `some_ip_gateway` in the path +> plus its own repo `eclipse-score/inc_someip_gateway` for component-level +> data. The rule applies to **every** PA — PA2 (FR/CR), PA3 (FA/CA), +> PA4 (LOC, DD, code links) and PA5 (unit tests, integration tests, coverage). +> For PA4/PA5 the separation is usually automatic because Some/IP code lives +> in its own repo (`inc_someip_gateway`); but whenever a counter walks the +> Communication module repo (`eclipse-score/communication`) or the score +> repo's `features/communication/**` / `modules/communication/**` subtree, +> the `'some_ip_gateway' not in p` guard MUST be present. + +| Chart | Metric | Source | +|---|---|---| +| PA2 — Feature Req | sum of `count_directives_with_status(..., DIRECTIVE_TYPES["feat_req"])` totals (denominator) | per-module `path_filter` from §4 | +| PA2 — Component Req | analogous, `comp_req` + `aou_req` | per-module `path_filter` | +| PA3 — Feature Arch | analogous, `DIRECTIVE_TYPES["feat_arc"]` | per-module under `architecture` | +| PA3 — Component Arch | analogous, `DIRECTIVE_TYPES["comp_arc"]` | per-module under `architecture` | +| PA4 — LOC | `sum(blob.size for path in tree if is_src(path)) / 30` (rounded) | each module's own repo at the release SHA | +| PA5 — Unit Tests (historical) | count of `TEST(`, `TEST_F(`, `TEST_P(`, `TYPED_TEST(`, `TYPED_TEST_P(` macros plus Rust `#[test]` and Python `^def test_` in files matching `is_test_path` | each module's own repo | +| PA5 — Comp. IT (historical) | same counters in files where path contains `integration` | each module's own repo | +| PA5 — Feat. IT (historical) | same counters in `feature_integration_tests/` and `platform_integration_tests/` | `eclipse-score/reference_integration` at the release tag | +| PA5 — Unit / Comp. IT / Feat. IT (**now** column) | **column sum** of the corresponding cells in the PA5 RST table (the `| N tests` line-block annotations) | parsed from `overall_status.rst` | +| PA5 — C0/C1 now | weighted mean of per-module C0 and C1 from the current PA5 RST table, weights = unit-test count per module | parsed from `overall_status.rst` | + +> **PA5 test counts: table is the source of truth for "now".** +> The four releases use **two different sources** for the test-count bars: +> - `v0.5.0-beta`, `v0.6.0`, `v0.7.0` → macro-based regex over module repo +> sources (Best-Effort, no curated table available for past tags). +> - `now` → **sum of the `| N tests` line-block annotations in the PA5 RST table** +> (`Unit Tests`, `Comp. Integration Tests`, `Feature Integration Tests` +> columns), because the curated table is what users see. +> +> The two methods diverge for several reasons that are NOT bugs: +> 1. Some/IP integration tests are named `stress_tests/` not `integration*`, +> so the historical regex misses them; the table includes them. +> 2. Feature-Integration counts in the table are **per module** (i.e. how +> many of the cross-module `reference_integration` tests exercise that +> module), not the total `feature_integration_tests/` tree size — so +> the table sum (≈7) is much smaller than the tree-walk total (≈59). +> 3. Some modules have CI test-run counts in the table that don't match +> `TEST(...)` macro counts (parameterized tests count as one macro but +> many runs). +> +> Practical rule: when updating the SVG, run both the §6a recipe **and** +> sum the `| N tests` line-block cells from the RST. Use the recipe values for the +> three release bars and the **table sum** for `now`. Note the divergence +> in the caption / commit message if it's >10 %. + +> **Charts count TOTAL, not valid-only.** +> The progress bars must use the **total** count of directives (denominator +> from §3) — i.e. every `feat_req` / `comp_req` / `feat_arc` / `comp_arc` +> block irrespective of `:status:`. This is intentional and differs from +> the per-cell tracker logic in the tables, which renders `valid/total`. +> Rationale: the charts visualise *scope growth* across releases, not +> validation maturity. Drafts and invalids count. +> +> Practical consequence: use `count_directives(...)` (returns total only), +> **never** `count_directives_with_status(...)` for chart numbers. This is +> particularly important for Lifecycle, whose feature-level requirements +> were largely `:status: draft` or `:status: invalid` in v0.5/v0.6 — a +> valid-only counter would report 0 instead of ~92. + +LOC source-file filter: + +```python +SRC_EXT = (".cpp", ".cc", ".cxx", ".c", ".h", ".hpp", ".hh", ".rs", ".py") +def is_src(p): + pl = p.lower() + if not pl.endswith(SRC_EXT): return False + if pl.startswith("docs/") or "/docs/" in pl: return False + if pl.startswith("third_party/") or "/third_party/" in pl: return False + if pl.startswith("bazel-"): return False + return True + +def is_test_path(p): + pl = p.lower() + if any(pl.startswith(x) or "/"+x in "/"+pl + for x in ("docs/","third_party/","bazel-",".git/")): + return False + return any(t in pl for t in + ("_test.","/test/","/tests/","_tests.","gtest","unit_test","unittest")) +``` + +### 6a.3 Generating / updating the SVGs + +The SVGs are hand-written (no toolchain). Workflow: + +1. Compute totals (one Python script per chart, using `gh api` with the + on-disk cache `/tmp/status_cache/`). Write `/tmp/release_totals.json`, + `/tmp/release_totals_pa3_pa4.json`, `/tmp/release_totals_pa5.json`. +2. Update the bar `y`/`height` values and the printed numbers inside the + existing SVG. The chart frames stay fixed; only the bars and labels + change. +3. Bar heights use linear scale anchored at the panel's plot area. For PA2 + `viewBox="0 0 720 320"` with plot area `x=70..690, y=50..260` (height + 210 px), max value 400 → `y = 260 − value · 0.525`, + `height = 260 − y`. PA3 uses max 240 (`× 0.875`), PA4 uses max 900 000 + (`× 0.0002333`), PA5 panels: Unit `× 0.021`, Integration `× 2.1`, + Coverage `× 2.1`. + +When a metric goes out of the chart's current range, raise the y-axis max +and rescale **all four bars** of that panel; do not crop. + +### 6a.4 Caption discipline + +Caption template per chart: + +> ` across the 11 PA2 modules per release +> (v0.5.0-beta → v0.6.0 → v0.7.0 → current main).` + +Always write "across the 11 PA2 modules" (not "across all modules") — the +charts intentionally exclude orchestrator, baselibs_rust, score_platform, +docs_as_code, kyron and other repos that don't appear in the PA tables. + +--- + +## 7. Limitations + +- Test coverage of requirements (link analysis) is not detected — needs + `needs.json`. +- Per-module CI workflows are zero-tolerance; "passing on `main` ⇒ 0 findings" + is the only signal used for static / dynamic analysis. +- Central CodeQL finding counts require the GitHub Security tab. +- Feature-Integration-Test heuristic is path-based and weak — confirm + manually. +- TRLC content is not parsed; cells reference the `.trlc` file via link only. +- PA4 LOC bars are an estimate (`tree blob bytes ÷ 30`) since `gh api` + exposes blob sizes but not line counts; expect ±10 % vs `cloc`. +- PA5 historical coverage is not available — only the current snapshot. +- PA5 test-count bars use **two sources**: the three release bars come + from a TEST-macro regex over module repos (Best-Effort), the `now` bar + is the **column sum of the RST table cells**. Expect divergences of + 10–20 % between the methods (parameterized tests, naming conventions + like Some/IP `stress_tests/`, per-module cross-feature attribution). + Lifecycle has only C0; modules without coverage in CI (Time, Config Mgmt, + Security/Crypto, Some/IP, NM, Diagnostic Services) are excluded from the + weighted mean. diff --git a/docs/_assets/custom.css b/docs/_assets/custom.css new file mode 100644 index 00000000000..674fd1cdba7 --- /dev/null +++ b/docs/_assets/custom.css @@ -0,0 +1,232 @@ +/* ******************************************************************************* + * Copyright (c) 2026 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * *****************************************************************************/ + +/* --------------------------------------------------------------------------- + * Compact process-area overview tables (used in feature_and_process_status.rst) + * ---------------------------------------------------------------------------*/ + +.compact-overview-wrapper { + overflow-x: auto; +} + +.compact-overview-table td:nth-child(1), +.compact-overview-table th:nth-child(1), +.compact-overview-table td:nth-child(5), +.compact-overview-table th:nth-child(5), +.compact-overview-table td:nth-child(6), +.compact-overview-table th:nth-child(6) { + text-align: center; + vertical-align: middle; +} + +.compact-overview-table { + width: 100%; + table-layout: fixed; + max-width: 100%; +} + +.compact-overview-table td { + width: 33%; + overflow: hidden; +} + +.compact-overview-table td:has(img[id^="needpie-"]) { + vertical-align: middle; + text-align: center; +} + +/* Override the fixed pixel size sphinx-needs writes into the img attributes */ +.small-pie-cell img, +.compact-overview-table td img, +img[id^="needpie-"] { + width: 100% !important; + max-width: 100% !important; + height: auto !important; + display: block; + margin: 0 auto; +} + +/* --------------------------------------------------------------------------- + * Module phase tracker table (also used in feature_and_process_status.rst) + * ---------------------------------------------------------------------------*/ + +.module-phase-tracker-table td, +.module-phase-tracker-table th { + vertical-align: middle; + white-space: nowrap; +} + +.module-phase-tracker-table td:first-child { + font-weight: 600; +} + +/* --------------------------------------------------------------------------- + * Wide content area: pages that opt in via a `wide-content-page` body class + * get a full-width article container. + * ---------------------------------------------------------------------------*/ + +body.wide-content-page .bd-content .bd-article-container { + max-width: 100%; +} + +/* --------------------------------------------------------------------------- + * Process-area cards (used in roadmap.rst — Qualifiable State section) + * ---------------------------------------------------------------------------*/ + +.card-pa-grey { + background-color: #e8e8e8 !important; + border-color: #c8c8c8 !important; + font-size: 0.82rem; +} + +.card-pa-grey .sd-card-header { + background-color: #e8e8e8 !important; + border-color: #c8c8c8 !important; + font-size: 0.82rem; + font-weight: 600; + padding: 0.4rem 0.6rem; +} + +.card-pa-grey .sd-card-body { + background-color: #e8e8e8 !important; + color: #444; + padding: 0.4rem 0.6rem; + font-size: 0.78rem; +} + +/* Thin border around each process-area grid group (Management / Development / Support) */ +.score-grid { + border: 1px solid #c0c8d4; + border-radius: 6px; + padding: 0.6rem 0.6rem 0.2rem 0.6rem; + margin-bottom: 1.2rem; +} + +/* Compact card grid (Management section) — approximately half the visual size */ +.score-grid-compact .sd-card { + min-height: unset; +} + +.score-grid-compact .sd-card-header { + padding: 0.2rem 0.35rem !important; + font-size: 0.68rem !important; +} + +.score-grid-compact .sd-card-body { + padding: 0.2rem 0.35rem !important; + font-size: 0.62rem !important; +} + +/* Highlighted process-area cards (Requirements Engineering, Architecture Design, + Implementation, Verification) */ +.card-pa-highlight { + background-color: #1a5fa8 !important; + border-color: #134a87 !important; + font-size: 0.82rem; +} + +.card-pa-highlight .sd-card-header { + background-color: #1a5fa8 !important; + border-color: #134a87 !important; + font-size: 0.82rem; + font-weight: 600; + padding: 0.4rem 0.6rem; + color: #ffffff !important; +} + +.card-pa-highlight .sd-card-header a, +.card-pa-highlight .sd-card-header a:visited { + color: #ffffff !important; +} + +.card-pa-highlight .sd-card-body { + background-color: #1a5fa8 !important; + color: #e8f0fc !important; + padding: 0.4rem 0.6rem; + font-size: 0.78rem; +} + +/* --------------------------------------------------------------------------- + * Landing-page grid cards (docs/index.rst): white text, original background. + * ---------------------------------------------------------------------------*/ + +.landing-grid .sd-card *, +.landing-grid .sd-card a, +.landing-grid .sd-card a:visited, +.landing-grid .sd-card a:hover { + color: #ffffff !important; +} + +/* --------------------------------------------------------------------------- + * RST line-blocks inside list-tables (used in overall_status.rst PA cells): + * Sphinx wraps the indented "| ..." continuation in a
, which + * adds a left border and a tinted background. Inside a status table we want + * those secondary lines (test counts, coverage values, links) to look like + * regular text — same color, no border, no inset background. + * ---------------------------------------------------------------------------*/ + +table.docutils blockquote, +table blockquote { + margin: 0 !important; + padding: 0 !important; + border: none !important; + background: transparent !important; + box-shadow: none !important; +} + +table.docutils blockquote > div, +table blockquote > div { + margin: 0 !important; + padding: 0 !important; +} + +table.docutils .line-block, +table .line-block { + margin: 0 !important; + padding: 0 !important; + border: none !important; + background: transparent !important; +} + +table.docutils .line-block .line, +table .line-block .line { + margin: 0 !important; + padding: 0 !important; + border: none !important; + background: transparent !important; +} + +/* --------------------------------------------------------------------------- + * Platform Verification Report admonition (overall_status.rst PA5): + * make this single project-wide deliverable visually prominent. + * ---------------------------------------------------------------------------*/ + +.admonition.platform-ver-report { + font-size: 1.15rem; + border-left: 6px solid #1a5fa8; + background-color: #eef4fb; + padding: 0.8rem 1rem; + margin: 1.2rem 0; +} + +.admonition.platform-ver-report > .admonition-title { + font-size: 1.25rem; + font-weight: 700; + color: #1a5fa8; + margin-bottom: 0.3rem; +} + +.admonition.platform-ver-report p { + margin: 0; + font-size: 1.1rem; +} diff --git a/docs/_assets/pa2_impl_progress.svg b/docs/_assets/pa2_impl_progress.svg new file mode 100644 index 00000000000..211feb8d708 --- /dev/null +++ b/docs/_assets/pa2_impl_progress.svg @@ -0,0 +1,75 @@ + + PA2 Implementation — total Feature and Component Requirements per release + + + + PA2 Implementation — total requirements per release (sum of all modules) + + + + + + + + + + + + + + + + 0 + 100 + 200 + 300 + 400 + + + + + + + + + + 313 + 80 + v0.5.0-beta + + + + + + + 315 + 160 + v0.6.0 + + + + + + + 316 + 186 + v0.7.0 + + + + + + + 361 + 194 + now + + + + + + Feature Requirements + + Component Requirements + + diff --git a/docs/_assets/pa3_arch_progress.svg b/docs/_assets/pa3_arch_progress.svg new file mode 100644 index 00000000000..17ac6141111 --- /dev/null +++ b/docs/_assets/pa3_arch_progress.svg @@ -0,0 +1,70 @@ + + PA3 Architecture Design — total Feature and Component Architecture items per release + + + PA3 Architecture — total architecture items per release (sum of all modules) + + + + + + + + + + + + + + 0 + 60 + 120 + 180 + 240 + + + + + + + + + 16 + 83 + v0.5.0-beta + + + + + + + 19 + 151 + v0.6.0 + + + + + + + 21 + 203 + v0.7.0 + + + + + + + 21 + 228 + now + + + + + Feature Architecture + + Component Architecture + + diff --git a/docs/_assets/pa4_impl_progress.svg b/docs/_assets/pa4_impl_progress.svg new file mode 100644 index 00000000000..78d1c67ced3 --- /dev/null +++ b/docs/_assets/pa4_impl_progress.svg @@ -0,0 +1,61 @@ + + PA4 Implementation — estimated total Lines of Code per release + + + PA4 Implementation — estimated total Lines of Code per release + + + + + + + + + + + + + + 0 + 200k + 400k + 600k + 800k + + + + + + + + ~570k + v0.5.0-beta + + + + + + ~651k + v0.6.0 + + + + + + ~690k + v0.7.0 + + + + + + ~809k + now + + + + + Estimated from GitHub tree blob sizes (.cpp / .h / .c / .rs / .py outside docs/, third_party/, bazel-*) ÷ 30 + + + diff --git a/docs/_assets/pa5_verification_progress.svg b/docs/_assets/pa5_verification_progress.svg new file mode 100644 index 00000000000..e2d68f46076 --- /dev/null +++ b/docs/_assets/pa5_verification_progress.svg @@ -0,0 +1,143 @@ + + PA5 Verification — tests per release and current code coverage + + + PA5 Verification — test counts per release and current code coverage (sum of all 11 PA2 modules) + + + + + Unit Tests + + + + + + + + + + + + + 0 + 3k + 6k + 9k + + + + + + 8399 + v0.5.0-beta + + + 8409 + v0.6.0 + + + 8718 + v0.7.0 + + + 9430 + now + + + + + Integration Tests + + + + + + + + + + + + + 0 + 30 + 60 + 90 + + + + + + + v0.5.0-beta + 15 + 3 + + + + v0.6.0 + 43 + 13 + + + + v0.7.0 + 63 + 12 + + + + now + 96 + 54 + + + + + Component + + Feature + + + + + + Code Coverage (now, weighted by # tests) + + + + + + + + + + + + + 0% + 30% + 60% + 90% + + + + 100% + + + + + 90.1% + C0 (line) + + + 58.7% + C1 (branch) + + + + + Test counts: GTEST macros (TEST/TEST_F/TEST_P/TYPED_TEST), Rust #[test], Python def test_* • Coverage: weighted by unit-test count across modules with reported numbers + + diff --git a/docs/_assets/pi_timeline_2026.drawio.svg b/docs/_assets/pi_timeline_2026.drawio.svg new file mode 100644 index 00000000000..fc166c4f579 --- /dev/null +++ b/docs/_assets/pi_timeline_2026.drawio.svg @@ -0,0 +1,299 @@ + + + + + + + + + + + + + Rel v0.8 · May 13–Jul 13 + + + + + + + + + + Rel v0.9 · Jul 14–Sep 7 + + + + + + + + + + Rel v0.10 · Sep 8–Nov 2 + + + + + + + + + + Rel v1.0 · Nov 3–Dec 15 + + + + + + + + + + + + + + + + +
+
+
+ May +
+
+
+
+ + May + +
+
+
+ + + + + + + + + + +
+
+
+ Jun +
+
+
+
+ + Jun + +
+
+
+ + + + + + + + + + +
+
+
+ Jul +
+
+
+
+ + Jul + +
+
+
+ + + + + + + + + + +
+
+
+ Aug +
+
+
+
+ + Aug + +
+
+
+ + + + + + + + + + +
+
+
+ Sep +
+
+
+
+ + Sep + +
+
+
+ + + + + + + + + + +
+
+
+ Oct +
+
+
+
+ + Oct + +
+
+
+ + + + + + + + + + +
+
+
+ Nov +
+
+
+
+ + Nov + +
+
+
+ + + + + + + + + + +
+
+
+ Dec +
+
+
+
+ + Dec + +
+
+
+ + + + + + + +
+
+
+ 2026 +
+
+
+
+ + 2026 + +
+
+
+ + + + + + + + + + + + + +
+
+
+ 🚀 v1.0 +
+
+
+
+ + 🚀 v1.0 + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + +
diff --git a/docs/_assets/sw_arch_v_1.drawio.svg b/docs/_assets/sw_arch_v_1.drawio.svg new file mode 100644 index 00000000000..47a9590ae43 --- /dev/null +++ b/docs/_assets/sw_arch_v_1.drawio.svg @@ -0,0 +1,1253 @@ + + + + + + + + + + + +
+
+
+ C++ Base Libraries +
+
+
+
+ + C++ Base Libraries + +
+
+
+ + + + + + + +
+
+
+ System Services +
+
+
+
+ + System Services + +
+
+
+ + + + + + + +
+
+
+ Communication +
+
+
+
+ + Communication + +
+
+
+ + + + + + + +
+
+
+ Operating System +
+
+
+
+ + Operating System + +
+
+
+ + + + + + + +
+
+
+ Hypervisor / Hardware +
+
+
+
+ + Hypervisor / Hardware + +
+
+
+ + + + + + + +
+
+
+ Rust Base Libraries +
+
+
+
+ + Rust Base Libraries + +
+
+
+ + + + + + + +
+
+
+ BaseLibs Rust +
+
+
+
+ + BaseLibs Rust + +
+
+
+ + + + + + + +
+
+
+ Platform API (native APIs for Rust and C++) +
+
+
+
+ + Platform API (native APIs for Rust and C++) + +
+
+
+ + + + + + + +
+
+
+ Logging API +
+
+
+
+ + Logging API + +
+
+
+ + + + + + + +
+
+
+ S-CORE Architecture v1.0 +
+
+
+
+ + S-CORE Architecture v1.0 + +
+
+
+ + + + + + + +
+
+
+ S-Core v1.0 +
+
+
+
+ + S-Core v1.0 + +
+
+
+ + + + + + + +
+
+
+ Part of OS or HW specific implementation +
+
+
+
+ + Part of OS or HW speci... + +
+
+
+ + + + + + + +
+
+
+ to be discussed for future releases +
+
+
+
+ + to be discussed for... + +
+
+
+ + + + + + + +
+
+
+ Video API +
+
+
+
+ + Video API + +
+
+
+ + + + + + + +
+
+
+ Crypto API +
+
+
+
+ + Crypto API + +
+
+
+ + + + + + + +
+
+
+ HW Acceleration API +
+
+
+
+ + HW Acceleration... + +
+
+
+ + + + + + + +
+
+
+ Persistency API +
+
+
+
+ + Persistency API + +
+
+
+ + + + + + + +
+
+
+ Communication API +
+
+
+
+ + Communication API + +
+
+
+ + + + + + + +
+
+
+ Lifecycle & Health API +
+
+
+
+ + Lifecycle & Heal... + +
+
+
+ + + + + + + +
+
+
+ Configuration API +
+
+
+
+ + Configuration API + +
+
+
+ + + + + + + +
+
+
+ Time API +
+
+
+
+ + Time API + +
+
+
+ + + + + + + +
+
+
+ Fault API +
+
+
+
+ + Fault API + +
+
+
+ + + + + + + +
+
+
+ Runtime orchestrator API +
+
+
+
+ + Runtime orchestr... + +
+
+
+ + + + + + + +
+
+
+ User / Capability management +
+
+
+
+ + User / Capabilit... + +
+
+
+ + + + + + + +
+
+
+ Mandatory Access Control +
+
+
+
+ + Mandatory Access... + +
+
+
+ + + + + + + +
+
+
+ Key / Certificate Mgmt +
+
+
+
+ + Key / Certificat... + +
+
+
+ + + + + + + +
+
+
+ Intrusion Detection System +
+
+
+
+ + Intrusion Detecti... + +
+
+
+ + + + + + + +
+
+
+ Config Mgmt +
+
+
+
+ + Config Mgmt + +
+
+
+ + + + + + + +
+
+
+ Storage Mgmt +
+
+
+
+ + Storage Mgmt + +
+
+
+ + + + + + + +
+
+
+ Video Frame-server +
+
+
+
+ + Video Frame-serv... + +
+
+
+ + + + + + + +
+
+
+ Fault Mgmt. +
+
+
+
+ + Fault Mgmt. + +
+
+
+ + + + + + + +
+
+
+ Lifecycle & Health Mgmt +
+
+
+
+ + Lifecycle & Heal... + +
+
+
+ + + + + + + +
+
+
+ HW Health Mgmt +
+
+
+
+ + HW Health Mgmt + +
+
+
+ + + + + + + +
+
+
+ Logging / Data Collection +
+
+
+
+ + Logging / Data C... + +
+
+
+ + + + + + + +
+
+
+ Software Update +
+
+
+
+ + Software Update + +
+
+
+ + + + + + + +
+
+
+ Firewall +
+
+
+
+ + Firewall + +
+
+
+ + + + + + + +
+
+
+ Tunneling +
+
+
+
+ + Tunneling + +
+
+
+ + + + + + + +
+
+
+ zero-copy communication +
+
+
+
+ + zero-copy commun... + +
+
+
+ + + + + + + +
+
+
+ SOME/IP Gateway +
+
+
+
+ + SOME/IP Gateway + +
+
+
+ + + + + + + +
+
+
+ NM +
+
+
+
+ + NM + +
+
+
+ + + + + + + +
+
+
+ Kernel +
+
+
+
+ + Kernel + +
+
+
+ + + + + + + +
+
+
+ Time Sync +
+
+
+
+ + Time Sync + +
+
+
+ + + + + + + +
+
+
+ Hardware Supervision +
+
+
+
+ + Hardware Supervi... + +
+
+
+ + + + + + + +
+
+
+ Container Support +
+
+
+
+ + Container Support + +
+
+
+ + + + + + + +
+
+
+ Video / Camera Support +
+
+
+
+ + Video / Camera S... + +
+
+
+ + + + + + + +
+
+
+ Audio Support +
+
+
+
+ + Audio Support + +
+
+
+ + + + + + + +
+
+
+ Peripheral Support +
+
+
+
+ + Peripheral Suppo... + +
+
+
+ + + + + + + +
+
+
+ Ethernet (TCP/IP) +
+
+
+
+ + Ethernet (TCP/IP) + +
+
+
+ + + + + + + +
+
+
+ AVB +
+
+
+
+ + AVB + +
+
+
+ + + + + + + +
+
+
+ Board Support Package +
+
+
+
+ + Board Support Pa... + +
+
+
+ + + + + + + +
+
+
+ Secure Boot +
+
+
+
+ + Secure Boot + +
+
+
+ + + + + + + +
+
+
+ Hardware Acceleration Support +
+
+
+
+ + Hardware Acceleration... + +
+
+
+ + + + + + + +
+
+
+ Hardware Security Support +
+
+
+
+ + Hardware Securit... + +
+
+
+ + + + + + + +
+
+
+ Startup +
+
+
+
+ + Startup + +
+
+
+ + + + + + + +
+
+
+ Inter-Partition Communication +
+
+
+
+ + Inter-Partition... + +
+
+
+ + + + + + + +
+
+
+ Hardware Virtualization Support +
+
+
+
+ + Hardware Virtualizatio... + +
+
+
+ + + + + + + +
+
+
+ Diagnostic Handler (SOVD, UDS) +
+
+
+
+ + Diagnostic Handle... + +
+
+
+ + + + + + + +
+
+
+ BaseLibs C++ +
+
+
+
+ + BaseLibs C++ + +
+
+
+ + + + + + + +
+
+
+ System launch and monitor +
+
+
+
+ + System launch an... + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + +
diff --git a/docs/conf.py b/docs/conf.py index f2057673436..3b5499d6a20 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,6 +13,26 @@ # Configuration file for the Sphinx documentation builder. +import os as _os +import sys as _sys + +# Make docs/ importable so needs_filters.py (and similar helpers) can be used +# as :filter-func: targets in sphinx-needs directives. +_sys.path.insert(0, _os.path.dirname(_os.path.abspath(__file__))) + + +def _patch_needpie_suppress_legend() -> None: + """Suppress all in-chart legends in sphinx-needs needpie charts.""" + try: + import matplotlib.axes + + matplotlib.axes.Axes.legend = lambda self, *args, **kwargs: None + except Exception: + pass + + +_patch_needpie_suppress_legend() + project = "REF_INT" project_url = "https://eclipse-score.github.io/reference_integration" version = "0.1" @@ -30,3 +50,18 @@ ".rst": "restructuredtext", ".md": "markdown", } + +# Custom static assets (CSS, etc.) +html_static_path = ["_assets"] +html_css_files = ["custom.css"] + + +html_theme_options = { + "secondary_sidebar_items": { + "**": ["page-toc"], + "feature_and_process_status": [], + "s_core_v_1/roadmap/overall_status": [], + }, + "show_toc_level": 2, + "navigation_with_keys": False, +} diff --git a/docs/index.rst b/docs/index.rst index 325467e0885..58904495804 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -15,46 +15,69 @@ Reference Integration Documentation =================================== -Current Integration Status Overview ------------------------------------ +The **Reference Integration** is the central integration repository of the +eclipse-score project. It combines all +S-CORE software modules — including Communication, Logging, Orchestrator, +Persistency, Time, Config Management, Lifecycle, and Security/Crypto — into a +single, consistently versioned workspace. -`View dashboard (points always to main for now) `_ +Its purpose is to verify that all modules build, integrate, and pass their +tests together, providing a stable baseline for downstream projects. The +repository also hosts the consolidated documentation, verification reports, +and release notes for each S-CORE release. -Explore the documentation -------------------------- +Beyond validation, the **Reference Integration** also serves as a technical +blueprint for future commercial distributions. It demonstrates how S-CORE +modules can be combined into a coherent, releaseable platform baseline, +including the expected integration structure, verification artifacts, and +documentation set that downstream product distributions can build on. -.. toctree:: - :glob: - :caption: S-CORE Releases - :maxdepth: 2 +.. grid:: 1 1 3 3 + :gutter: 3 + :class-container: landing-grid - score_releases/index + .. grid-item-card:: 📊 Status & Roadmap + :link: s_core_v_1/roadmap/roadmap + :link-type: doc -.. toctree:: - :caption: Software Components - :titlesonly: - :maxdepth: 1 + :doc:`S-Core v1.0 Roadmap ` and PI planning. + .. grid-item-card:: 📖 Process, Methods & Tools + :link: process_methods_tools + :link-type: doc - _collections/score_persistency/docs/index - _collections/score_orchestrator/docs/index - _collections/score_kyron/docs/index - _collections/score_baselibs_rust/docs/index - _collections/score_logging/docs/index + S-CORE process description, platform standards, and documentation toolchain. -.. toctree:: - :caption: Process, Methods, and Tools - :titlesonly: - :maxdepth: 1 + .. grid-item-card:: ✅ Code Quality + :link: verification_report/platform_verification_report + :link-type: doc - _collections/score_platform/docs/index - _collections/score_process/process/index - _collections/score_docs_as_code/docs/index + Platform verification report and test coverage results. -.. toctree:: - :caption: Code Quality - :titlesonly: - :glob: + .. grid-item-card:: Integration + Reference Integration workflow and health overview with links to + :doc:`Integration Process ` and + `Integration Status `_. + + .. grid-item-card:: Modules + :link: sw_components + :link-type: doc - verification_report/platform_verification_report + Central overview for all integrated modules. See :doc:`All Modules `. + + .. grid-item-card:: 📝 Release Notes + :link: s_core_v_1/releases/releases + :link-type: doc + + Overview of published S-CORE releases and their release notes. + +.. toctree:: + :hidden: + Modules + Integration Process + Integration Status + Process & Tools + S-Core v1.0 + Releases + Verification Report diff --git a/docs/integration_process/integration_process.rst b/docs/integration_process/integration_process.rst new file mode 100644 index 00000000000..2468fba0860 --- /dev/null +++ b/docs/integration_process/integration_process.rst @@ -0,0 +1,16 @@ +.. + # ******************************************************************************* + # Copyright (c) 2026 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Integration Process +################### diff --git a/docs/needs_filters.py b/docs/needs_filters.py new file mode 100644 index 00000000000..6c1a4d14328 --- /dev/null +++ b/docs/needs_filters.py @@ -0,0 +1,139 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +""" +Custom filter functions for use with sphinx-needs :filter-func: option. +""" + + +def std_req_status_for_area(needs, results, arg1=""): + """ + filter_func for needpie: counts the tag-based compliance status distribution + of std_req needs referenced via `complies` from gd_req needs tagged with the + given process area tag. + + Recognized tags (in priority order): ok, recommendation, open, action, + deviation, n/a. Needs with none of these tags are counted as "other". + + arg1 = process area tag (e.g. requirements_engineering) + """ + area_tag = arg1.strip() + std_req_ids = set() + needs_by_id = {n["id"]: n for n in needs} + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False) and area_tag in need.get("tags", []): + for ref_id in need.get("complies", []): + if ref_id.startswith("std_req__iso26262__"): + std_req_ids.add(ref_id) + ok = recommendation = open_ = action = deviation = na = other = 0 + for sid in std_req_ids: + n = needs_by_id.get(sid) + if n: + t = set(n.get("tags", [])) + if "deviation" in t: + deviation += 1 + elif "action" in t: + action += 1 + elif "open" in t: + open_ += 1 + elif "ok" in t: + ok += 1 + elif "recommendation" in t: + recommendation += 1 + elif "n/a" in t: + na += 1 + else: + other += 1 + results += [ok, recommendation, open_, action, deviation, na, other] + + +def wp_tag_status(needs, results, arg1=""): + """ + filter_func for needpie: counts the tag-based verification status distribution + of gd_req needs associated with one or more workflows (pipe-separated in arg1). + + Tags (in priority order): + - done_automation → Automated + - prio__automation → Waiting for automation + - manual_prio_ → Inspection list + - (none of the above) → Other + + arg1 = workflow id(s), pipe-separated (e.g. wf__foo or wf__foo|wf__bar) + """ + workflow_ids = [w.strip() for w in arg1.split("|") if w.strip()] + automated = waiting = inspection = other = 0 + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False): + satisfies = need.get("satisfies", []) + if any(wf in satisfies for wf in workflow_ids): + tags = set(need.get("tags", [])) + if "done_automation" in tags: + automated += 1 + elif any(t.startswith("prio_") and t.endswith("_automation") for t in tags): + waiting += 1 + elif any(t.startswith("manual_prio_") for t in tags): + inspection += 1 + else: + other += 1 + results += [automated, waiting, inspection, other] + + +def area_verification_status(needs, results, arg1=""): + """ + filter_func for needpie: counts the tag-based verification status distribution + of gd_req needs tagged with the given process area tag, aggregated across all + workflows for that area. + + Tags (in priority order): + - done_automation → Automated + - prio__automation → Waiting for automation + - manual_prio_ → Inspection list + - (none of the above) → Other + + arg1 = process area tag (e.g. requirements_engineering) + """ + area_tag = arg1.strip() + automated = waiting = inspection = other = 0 + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False) and area_tag in need.get("tags", []): + tags = set(need.get("tags", [])) + if "done_automation" in tags: + automated += 1 + elif any(t.startswith("prio_") and t.endswith("_automation") for t in tags): + waiting += 1 + elif any(t.startswith("manual_prio_") for t in tags): + inspection += 1 + else: + other += 1 + results += [automated, waiting, inspection, other] + + +def wp_done_automation_status(needs, results, arg1=""): + """ + filter_func for needpie: counts gd_req needs associated with one or more + workflows and splits them into done_automation vs. remaining requirements. + + arg1 = workflow id(s), pipe-separated (e.g. wf__foo or wf__foo|wf__bar) + """ + workflow_ids = [w.strip() for w in arg1.split("|") if w.strip()] + done = rest = 0 + for need in needs: + if need.get("type") == "gd_req" and not need.get("is_external", False): + satisfies = need.get("satisfies", []) + if any(wf in satisfies for wf in workflow_ids): + tags = set(need.get("tags", [])) + if "done_automation" in tags: + done += 1 + else: + rest += 1 + results += [done, rest] diff --git a/docs/process_methods_tools.rst b/docs/process_methods_tools.rst new file mode 100644 index 00000000000..b46d895f910 --- /dev/null +++ b/docs/process_methods_tools.rst @@ -0,0 +1,24 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Process, Methods, and Tools +============================ + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + _collections/score_platform/docs/index + _collections/score_process/process/index + _collections/score_docs_as_code/docs/index diff --git a/docs/s_core_v_1/index.rst b/docs/s_core_v_1/index.rst new file mode 100644 index 00000000000..fdeb53d50df --- /dev/null +++ b/docs/s_core_v_1/index.rst @@ -0,0 +1,23 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +S-Core v1.0 +=========== + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + Releases + Roadmap diff --git a/docs/score_releases/_assets/architecture.drawio.svg b/docs/s_core_v_1/releases/_assets/architecture.drawio.svg similarity index 100% rename from docs/score_releases/_assets/architecture.drawio.svg rename to docs/s_core_v_1/releases/_assets/architecture.drawio.svg diff --git a/docs/score_releases/_assets/architecture_0_6.drawio.svg b/docs/s_core_v_1/releases/_assets/architecture_0_6.drawio.svg similarity index 100% rename from docs/score_releases/_assets/architecture_0_6.drawio.svg rename to docs/s_core_v_1/releases/_assets/architecture_0_6.drawio.svg diff --git a/docs/score_releases/_assets/score_process_area_overview.drawio.svg b/docs/s_core_v_1/releases/_assets/score_process_area_overview.drawio.svg similarity index 100% rename from docs/score_releases/_assets/score_process_area_overview.drawio.svg rename to docs/s_core_v_1/releases/_assets/score_process_area_overview.drawio.svg diff --git a/docs/score_releases/index.rst b/docs/s_core_v_1/releases/index.rst similarity index 100% rename from docs/score_releases/index.rst rename to docs/s_core_v_1/releases/index.rst diff --git a/docs/score_releases/release_note_score_v0_5_alpha.rst b/docs/s_core_v_1/releases/release_note_score_v0_5_alpha.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_5_alpha.rst rename to docs/s_core_v_1/releases/release_note_score_v0_5_alpha.rst diff --git a/docs/score_releases/release_note_score_v0_5_beta.rst b/docs/s_core_v_1/releases/release_note_score_v0_5_beta.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_5_beta.rst rename to docs/s_core_v_1/releases/release_note_score_v0_5_beta.rst diff --git a/docs/score_releases/release_note_score_v0_6.rst b/docs/s_core_v_1/releases/release_note_score_v0_6.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_6.rst rename to docs/s_core_v_1/releases/release_note_score_v0_6.rst diff --git a/docs/score_releases/release_note_score_v0_7.rst b/docs/s_core_v_1/releases/release_note_score_v0_7.rst similarity index 100% rename from docs/score_releases/release_note_score_v0_7.rst rename to docs/s_core_v_1/releases/release_note_score_v0_7.rst diff --git a/docs/s_core_v_1/releases/releases.rst b/docs/s_core_v_1/releases/releases.rst new file mode 100644 index 00000000000..af111240b0a --- /dev/null +++ b/docs/s_core_v_1/releases/releases.rst @@ -0,0 +1,22 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Releases +============ + +.. toctree:: + :titlesonly: + :glob: + + * diff --git a/docs/s_core_v_1/roadmap/overall_status.rst b/docs/s_core_v_1/roadmap/overall_status.rst new file mode 100644 index 00000000000..dc2026b0727 --- /dev/null +++ b/docs/s_core_v_1/roadmap/overall_status.rst @@ -0,0 +1,846 @@ +:hide-toc: + +Overall Status +============== + +.. note:: + + This status overview is generated with AI assistance and is **not yet + fully accurate**. It is intended as a directional snapshot — the trend and + structure are correct, but individual figures and statuses may still be + off. Treat the numbers as indicative until the underlying data sources are + fully validated. + +This page tracks feature and process status across the SCORE platform modules. +It is regenerated from live `eclipse-score` GitHub repositories pinned via +``known_good.json``. + + +Process Area 1 — Change Management +---------------------------------- + +.. 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: 🔄 90% (10/11 deliverables complete) + + +.. list-table:: + :header-rows: 1 + + * - **Module** + - **CR approved** + * - Baselibs + - ✅ Accepted + + | `#549 `__ — ✅ Accepted [v0.5 Certifiable] — Feature request: common libraries for IPC and Logging + | `#757 `__ — ✅ Accepted — Feature request for qualified json-parser + | `#917 `__ — ✅ Accepted [v1.0] — Feature Request for ABI compatible datatypes + * - Communication + - ✅ Accepted + + | `#69 `__ — ✅ Accepted [v0.5 Certifiable] — Feature Request for IPC + * - Logging + - ✅ Accepted + + | `#68 `__ — ✅ Accepted [v0.5 Certifiable] — Feature Request for Logging + * - Persistency + - ✅ Accepted + + | `#95 `__ — ✅ Accepted [v0.5 Certifiable] — Feature Request for Persistency + * - Time + - ✅ Accepted + + | `#910 `__ — ✅ Accepted [v1.0] — Feature Request for Time + * - Config Mgmt + - ✅ Accepted + + | `#754 `__ — ✅ Accepted [v1.0] — Feature Request for Config Management + * - Lifecycle + - ✅ Accepted + + | `#909 `__ — ✅ Accepted [v1.0] — Feature Request for Health & Lifecycle + * - Security/Crypto + - ✅ Accepted + + | `#905 `__ — ✅ Accepted [v1.0] — Feature Request for Security & Crypto + * - Diagnostic Services + - ✅ Accepted + + | `#911 `__ — ✅ Accepted [v1.0] — Feature Request for Diagnostic Services & Fault Management + * - NM + - ❌ Open + * - Some/IP + - ✅ Accepted + + | `#914 `__ — ✅ Accepted [v1.0] — Feature Request for SOME/IP Gateway + + +.. _overall_status_pa2: + +Process Area 2 — Requirements Engineering +----------------------------------------- + +.. 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) + + +.. figure:: /_assets/pa2_impl_progress.svg + :alt: PA2 implementation progress + :width: 720px + + Total Feature and Component Requirements across the 11 PA2 modules per release (v0.5.0-beta → v0.6.0 → v0.7.0 → current main). + + +.. rubric:: Implementation status: 🔄 39% (13/33 deliverables complete) + + +.. list-table:: + :header-rows: 1 + + * - **Module** + - **Feature Req** + - **Component Req** + - **Req. Inspection** + * - Baselibs + - ✅ Available (37/37) + + | `abi_compatible_data_types `__ + | `baselibs `__ + - ✅ Available (84/84 comp_req + 32/32 AoU) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ + - 🔄 20% (2/10) + + | `baselibs `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ + * - Communication + - ✅ Available (53/53) + + | `communication `__ + | `ipc `__ + - ✅ Available (0/0 comp_req [TRLC] + 33/33 AoU) + + | `com `__ + | `communication `__ + - ❌ Open + * - Logging + - ✅ Available (46/46) + + | `logging `__ + - ❌ Open + - ❌ Open + * - Persistency + - ✅ Available (37/37) + + | `persistency `__ + - ✅ Available (35/35 comp_req) + + | `kvs `__ + - 🔄 50% (1/2) + + | `persistency `__ + | `kvs `__ + * - Time + - ✅ Available (15/15) + + | `time `__ + - ❌ Open + - ❌ Open + * - Config Mgmt + - ✅ Available (13/13) + + | `config_mgmt `__ + - ❌ Open + - ❌ Open + * - Lifecycle + - 🔄 0% (0/92) + + | `lifecycle `__ + - 🔄 0% (0/1 comp_req + 0/1 AoU) + + | `health_monitor `__ + - ❌ Open + * - Security/Crypto + - ✅ Available (41/41) + + | `security_crypto `__ + - ❌ Open + - ❌ Open + * - Diagnostic Services + - ✅ Available (22/22) + + | `diagnostics `__ + - ❌ Open + - ❌ Open + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + * - Some/IP + - ✅ Available (5/5) + + | `some_ip_gateway `__ + - ✅ Available (8/8 comp_req) + + | `tc8_conformance `__ + - ❌ Open + + +.. _overall_status_pa3: + +Process Area 3 — Architecture Design +------------------------------------ + +.. 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) + + +.. figure:: /_assets/pa3_arch_progress.svg + :alt: PA3 architecture progress + :width: 720px + + Total Feature and Component Architecture elements across the 11 PA2 modules per release (v0.5.0-beta → v0.6.0 → v0.7.0 → current main). + + +.. rubric:: Implementation status: 🔄 24% (8/33 deliverables complete) + + +.. list-table:: + :header-rows: 1 + + * - **Module** + - **Feature Arch** + - **Component Arch** + - **Arch. Inspection** + * - Baselibs + - ✅ Available (3/3) + + | `baselibs `__ + - 🔄 98% (164/166) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ + - 🔄 80% (8/10) + + | `baselibs `__ + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ + * - Communication + - ✅ Available (3/3) + + | `communication `__ + | `ipc `__ + - ✅ Available (16/16) + + | `configuration `__ + | `frontent `__ + | `ipc_binding `__ + | `message_passing `__ + - ❌ Open + * - Logging + - ✅ Available (1/1) + + | `logging `__ + - ✅ Available (3/3) + + | `logging `__ + - ❌ Open + * - Persistency + - ✅ Available (9/9) + + | `persistency `__ + - 🔄 0% (0/3) + + | `kvs `__ + - 🔄 0% (0/2) + + | `persistency `__ + | `kvs `__ + * - Time + - ❌ Open + - ❌ Open + - ❌ Open + * - Config Mgmt + - ❌ Open + - ❌ Open + - ❌ Open + * - Lifecycle + - 🔄 60% (3/5) + + | `lifecycle `__ + | `lifecycle `__ + - ✅ Available (15/15) + + | `health_monitor `__ + - ❌ Open + * - Security/Crypto + - ❌ Open + - 🔄 0% (0/23) + + | `crypto `__ + | `crypto `__ + | `crypto `__ + - ❌ Open + * - Diagnostic Services + - ❌ Open + - ❌ Open + - ❌ Open + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + * - Some/IP + - ❌ Open + - ✅ Available (2/2) + + | `docs/architecture/components.rst `__ + - ❌ Open + + +.. _overall_status_pa4: + +Process Area 4 — 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) + + +.. figure:: /_assets/pa4_impl_progress.svg + :alt: PA4 implementation progress + :width: 720px + + Estimated Lines of Code across the 11 PA2 modules per release (v0.5.0-beta → v0.6.0 → v0.7.0 → current main). + + +.. rubric:: Implementation status: 🔄 47% (21/44 deliverables complete) + + +.. list-table:: + :header-rows: 1 + + * - **Module** + - **SW Dev Plan** + - **Code** + - **Detailed Design** + - **Impl. Inspection** + * - Baselibs + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~315,200 LOC) + + | `baselibs `__ + - ❌ Open + - 🔄 0% (0/9) + + | `bitmanipulation `__ + | `concurrency `__ + | `containers `__ + | `filesystem `__ + | `json `__ + | `safecpp `__ + | `result `__ + | `static_reflection_with_serialization `__ + | `utils `__ + * - Communication + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~253,700 LOC) + + | `communication `__ + - ❌ Open + - ❌ Open + * - Logging + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~50,800 LOC) + + | `logging `__ + - ❌ Open + - ❌ Open + * - Persistency + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~18,000 LOC) + + | `persistency `__ + - ❌ Open + - 🔄 0% (0/1) + + | `kvs `__ + * - Time + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~23,200 LOC) + + | `inc_time `__ + - ❌ Open + - ❌ Open + * - Config Mgmt + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~20,400 LOC) + + | `config_management `__ + - ❌ Open + - ❌ Open + * - Lifecycle + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~51,800 LOC) + + | `lifecycle `__ + - ✅ Available (1/1) + + | `health_monitor `__ + - ❌ Open + * - Security/Crypto + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~51,600 LOC) + + | `inc_security_crypto `__ + - ❌ Open + - ❌ Open + * - Diagnostic Services + - ✅ Available + + | `platform_management_plan `__ + - ❌ Open + - ❌ Open + - ❌ Open + * - NM + - ✅ Available + + | `platform_management_plan `__ + - ❌ Open + - ❌ Open + - ❌ Open + * - Some/IP + - ✅ Available + + | `platform_management_plan `__ + - ✅ Available (~24,500 LOC) + + | `inc_someip_gateway `__ + - ❌ Open + - ❌ Open + + +.. _overall_status_pa5: + +Process Area 5 — Verification +----------------------------- + +.. 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) + + +.. figure:: /_assets/pa5_verification_progress.svg + :alt: PA5 verification progress + :width: 1080px + + Test counts and coverage across the 11 PA2 modules per release (v0.5.0-beta → v0.6.0 → v0.7.0 → current main). + + +.. rubric:: Implementation status: 🔄 28% (25/88 deliverables complete) + +.. note:: + + **C0/C1 Coverage** data is sourced from the ``reference_integration`` + CI (*Code Quality & Documentation* workflow, + ``bazel coverage --config=ferrocene-coverage``). C0 = line coverage, + C1 = branch coverage. Rust coverage reports line coverage only. + Modules not yet integrated into the ``reference_integration`` CI + (Time, Config Mgmt, Security/Crypto, Some/IP) show ❌ Open. + +.. 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**. + + +.. list-table:: + :header-rows: 1 + + * - **Module** + - **Unit Tests** + - **C0/C1 Cov** + - **Comp. IT** + - **Feat. IT** + - **Static** + - **Dynamic** + - **Module Ver. Rpt** + * - Baselibs + - ✅ Available + + | 5376 tests + - 🔄 + + | **C0:** 92.3% + | **C1:** 60.3% (cpp) + | **Rust line:** 74.35% + - ✅ Available + + | 13 tests + - ❌ Open + - ✅ 0 findings + - ✅ 0 findings + - ❌ Open + * - Communication + - ✅ Available + + | 2585 tests + - 🔄 + + | **C0:** 87.9% + | **C1:** 58.8% (cpp) + - ✅ Available + + | 42 tests + - ❌ Open + - 🔄 Configured (no CI) + - ✅ 0 findings + - ❌ Open + * - Logging + - ✅ Available + + | 617 tests + - 🔄 + + | **C0:** 79.3% + | **C1:** 42.1% (cpp) + | **Rust line:** 39.86% + - ❌ Open + - ✅ Available + + | 1 test + - ❌ Open + - ❌ Open + - ❌ Open + * - Persistency + - ✅ Available + + | 138 tests + - 🔄 + + | **C0:** 94.7% + | **C1:** 63.0% (cpp) + | **Rust line:** 92.66% + - ✅ Available + - ✅ Available + + | 53 tests + - ✅ 0 findings + - ❌ Open + - ✅ Available + + | `verification `__ + * - Time + - ✅ Available + + | 296 tests + - ❌ Open + - ✅ Available + + | 11 tests + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + * - Config Mgmt + - ✅ Available + + | 179 tests + - ❌ Open + - ❌ Open + - ❌ Open + - ✅ 0 findings + - ❌ Open + - ❌ Open + * - Lifecycle + - ✅ Available + + | 2 tests + - 🔄 + + | **C0:** 77.2% + | **C1:** 45.8% (cpp) + | **Rust line:** 53.81% + - ✅ Available + + | 8 tests + - ❌ Open + - ✅ 0 findings + - ❌ Open + - ❌ Open + * - Security/Crypto + - ✅ Available + - ❌ Open + - ✅ Available + + | 5 tests + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + * - Diagnostic Services + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + * - NM + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + * - Some/IP + - ✅ Available + + | 237 tests + - ❌ Open + - ✅ Available + + | 17 tests + - ❌ Open + - ❌ Open + - ❌ Open + - ❌ Open + +.. admonition:: Platform Verification Report + :class: important platform-ver-report + + `platform_ver_report `__ + — 🔄 **Draft** (single project-wide deliverable) + 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..8a7013f0b70 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi1.rst @@ -0,0 +1,82 @@ +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +🚀 Release Gate v0.8 — 13 May – 13 July 2026 +================================================= + +Milestone: `score/v0.8 `__ + +Focus: Requirements Engineering (PA2) + Architecture Design (PA3) +------------------------------------------------------------------ + +- Complete feature and component requirements for all modules (no open TBDs, status ``valid``) +- Fill in and approve ``chklst_req_inspection.rst`` for all modules and features — each checklist point + is either completed or the finding is noted in the checklist with a tracked issue; + each tracked issue must have the **component** set and the **milestone** set +- Complete feature and component architecture for all modules (no open TBDs, status ``valid``) +- Fill in and approve ``chklst_arc_inspection.rst`` for all modules and features — each checklist point + is either completed or the finding is noted in the checklist with a tracked issue; + each tracked issue must have the **component** set and the **milestone** set +- All requirements relevant for v1.0 must be explicitly marked as such +- Implementation of functionality must be planned via tickets in the + `main S-CORE GitHub project `__ — + each ticket must have the **component** set and the **milestone** set +- A Module Verification Report must be created for every module, tracking at minimum + that unit-test coverage (C0/C1) reaches at least **90%** and dynamic code analysis + (sanitizers: ASan/UBSan/LSan, TSan) passes with **0 findings** + +Current State +------------- + +See the relevant tables in :doc:`overall_status`: + +- :ref:`overall_status_pa2` — Requirements Engineering +- :ref:`overall_status_pa3` — Architecture Design +- :ref:`overall_status_pa5` — Verification / Coverage + +Feasibility Check +----------------- + +Do we have everything in place to deliver the Release Gate v0.8 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 Release Gate v0.8 review meeting confirms sign-off by module owners and process responsible + +**Integration in Reference Integration** + +- [ ] All modules with completed requirements and architecture are integrated in this reference integration repository +- [ ] The reference integration build passes (no broken imports, no unresolved need IDs) +- [ ] The documentation (this site) builds without warnings for all Release Gate v0.8 modules +- [ ] The Release Gate v0.8 status table in ``overall_status.rst`` is updated to reflect the final state diff --git a/docs/s_core_v_1/roadmap/pi2.rst b/docs/s_core_v_1/roadmap/pi2.rst new file mode 100644 index 00000000000..d504f195a11 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi2.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 + # ******************************************************************************* + +Release Gate v0.9 — 14 July – 7 September 2026 +============================================== + +Milestone: `score/v0.9 `__ + +**Focus: Implementation (PA4)** + +- A Module Verification Report must be extended for every module, showing at least **75%** + **component requirement test coverage** (linked via ``FullyVerifies`` / ``PartiallyVerifies`` + on ``comp_req__...`` IDs in unit tests and component integration tests) +- A Platform Verification Report must be created, showing at least **75%** + **feature requirement test coverage** (linked via ``FullyVerifies`` / ``PartiallyVerifies`` + on ``feat_req__...`` IDs in Feature Integration Tests) +- Detailed design documented for all modules (no open TBDs, status ``valid``) +- Fill in and approve ``chklst_impl_inspection.rst`` for all modules — each checklist point + is either completed or the finding is noted in the checklist with a tracked issue +- Remaining requirements (the ~20%) must have tracked tickets in the + `main S-CORE GitHub project `__ — + each ticket must have the **component** set and the **milestone** set + +**Current State** + +See the relevant tables in :doc:`overall_status`: + +- :ref:`overall_status_pa4` — Implementation +- :ref:`overall_status_pa5` — Verification / Coverage diff --git a/docs/s_core_v_1/roadmap/pi3.rst b/docs/s_core_v_1/roadmap/pi3.rst new file mode 100644 index 00000000000..85ab0c41f85 --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi3.rst @@ -0,0 +1,42 @@ +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +Release Gate v0.10 — 8 September – 2 November 2026 +=================================================== + +Milestone: `score/v0.10 `__ + +**Focus: Verification (PA5)** + +- Implementation of all v1.0-relevant modules is **100% feature complete** — all ``valid`` feature + and component requirements are implemented and code is merged to ``main`` +- The ``chklst_req_inspection.rst`` (Requirements Inspection Checklist) is ``valid`` and complete + for all v1.0-relevant features and modules — all findings are fixed +- The ``chklst_arc_inspection.rst`` (Architecture Inspection Checklist) is ``valid`` and complete + for all v1.0-relevant features and modules — all findings are fixed +- The ``chklst_impl_inspection.rst`` (Implementation Inspection Checklist) is ``valid`` and complete + for all v1.0-relevant modules — all findings are fixed +- Component requirement test coverage (``FullyVerifies``/``PartiallyVerifies`` on ``comp_req__...``) + is at least **100%** for all modules — documented and approved in each module's + **Module Verification Report** (``wp__verification_module_ver_report``) +- Feature requirement test coverage (``FullyVerifies``/``PartiallyVerifies`` on ``feat_req__...``) + is at least **100%** for all modules — documented and approved in the + **Platform Verification Report** (``wp__verification_platform_ver_report``) +- Static code analysis tracking is set up for all modules + +**Current State** + +See the relevant tables in :doc:`overall_status`: + +- :ref:`overall_status_pa5` — Verification / Coverage diff --git a/docs/s_core_v_1/roadmap/pi4.rst b/docs/s_core_v_1/roadmap/pi4.rst new file mode 100644 index 00000000000..1ff54cd51df --- /dev/null +++ b/docs/s_core_v_1/roadmap/pi4.rst @@ -0,0 +1,42 @@ +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +Release Gate v1.0 — 3 November – 15 December 2026 +================================================== + +Milestone: `score/v1.0 `__ + +**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..7546882f4ee --- /dev/null +++ b/docs/s_core_v_1/roadmap/roadmap.rst @@ -0,0 +1,201 @@ +.. + # ******************************************************************************* + # 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**: + +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 + * - `NM `__ + - Network management + * - `Some/IP `__ + - SOME/IP communication middleware + +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 + :gutter: 4 + + .. 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 + :gutter: 4 + + .. 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-highlight + + 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 + :gutter: 4 + + .. 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 + Release Gate v0.8 — Requirements Engineering + Architecture Design + Release Gate v0.9 — Implementation + Release Gate v0.10 — Verification + Release Gate v1.0 — Hardening & Release + diff --git a/docs/sw_components.rst b/docs/sw_components.rst new file mode 100644 index 00000000000..3d58fd8dca5 --- /dev/null +++ b/docs/sw_components.rst @@ -0,0 +1,26 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Modules +======= + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + _collections/score_persistency/docs/index + _collections/score_orchestrator/docs/index + _collections/score_kyron/docs/index + _collections/score_baselibs_rust/docs/index + _collections/score_logging/docs/index diff --git a/docs/verification_report/platform_verification_report.rst b/docs/verification_report/platform_verification_report.rst index 63822f371e3..0889c4e696c 100644 --- a/docs/verification_report/platform_verification_report.rst +++ b/docs/verification_report/platform_verification_report.rst @@ -75,6 +75,7 @@ The following referenced summary pages exist only. .. toctree:: :titlesonly: + :hidden: Unit Tests Summary Coverage Analysis Summary diff --git a/scripts/quality_runners.py b/scripts/quality_runners.py index c3786153f48..e7c21f24d68 100644 --- a/scripts/quality_runners.py +++ b/scripts/quality_runners.py @@ -284,6 +284,7 @@ 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.mkdir(parents=True, exist_ok=True) known = load_known_good(args.known_good_path.resolve())