diff --git a/.github/skills/module-phase-tracker/SKILL.md b/.github/skills/module-phase-tracker/SKILL.md new file mode 100644 index 0000000000..a684f98805 --- /dev/null +++ b/.github/skills/module-phase-tracker/SKILL.md @@ -0,0 +1,1012 @@ +--- +name: module-phase-tracker +description: "Update the Feature and Process Status table in feature_and_process_status.rst. Use when: checking module status, updating feature status tracker, refreshing work product status, deriving completion status from eclipse-score GitHub repos for Baselibs, Communication, Logging, Orchestrator, Persistency, Time, Config Management, Lifecycle, Security/Crypto." +argument-hint: "optional: module name or 'all'" +--- + +# Feature and Process Status + +Derives and updates the completion status table in +`process/standards/feature_and_process_status.rst` by querying the live eclipse-score GitHub repositories. + +## When to Use + +- Refresh the tracker table with current data +- After a sprint/release to check progress +- When a module team reports a deliverable is done + +## RST File Structure + +`feature_and_process_status.rst` consists of a file header followed by 5 Process Area sections. Each section has this exact pattern: + +```rst +Process Area N โ€” +*********************** + + + +See :ref:``. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and '' in tags + type == 'gd_req' and is_external == False and status == 'draft' and '' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and '' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and '' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area() + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status() + +.. rubric:: Implementation status: ๐Ÿ”„ NN% (X/Y deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **** + - **** + + * - + - + ... +``` + +**Important rules:** +- `.. needpie::` does **NOT** support a `:title:` option โ€” omit it entirely (causes build errors) +- The pie chart table uses CSS class `compact-overview-table`; each cell needs `.. rst-class:: small-pie-cell` before its `.. needpie::` +- The module tracker table uses CSS class `module-phase-tracker-table` +- Both `.. rubric::` directives are plain inline text โ€” NOT RST section headings +- The `.. rubric:: Implementation status:` line is computed (see Step 4 in Procedure) and placed directly before the module tracker table + +| Process Area | sphinx-needs tag | +|---|---| +| PA 1 โ€” Change Management | `change_management` | +| PA 2 โ€” Requirements Engineering | `requirements_engineering` | +| PA 3 โ€” Architecture Design | `architecture_design` | +| PA 4 โ€” Implementation | `implementation` | +| PA 5 โ€” Verification | `verification` | + +The pie chart diagrams are computed live by sphinx-needs at build time โ€” they **never need manual updates**. Only update the filter `` when adding a new Process Area. + +## Modules and Repos + +> **IMPORTANT**: Each module has its own dedicated repo in the `eclipse-score` GitHub org AND content in `eclipse-score/score`. **Always check BOTH** the module's own repo and `eclipse-score/score` when counting needs elements. Never rely on `eclipse-score/score` alone. + +| Module | Own Repo (always check!) | Docs in `eclipse-score/score` | +|---|---|---| +| Baselibs | `eclipse-score/baselibs` (no sphinx-needs RST so far) | `docs/modules/baselibs/**`, `docs/features/baselibs/docs` | +| Communication | `eclipse-score/communication` (no sphinx-needs RST so far) | `docs/modules/communication/**`, `docs/features/communication/docs` | +| Logging | `eclipse-score/logging` (no sphinx-needs RST so far) | `docs/modules/logging/**`, `docs/features/analysis-infra/logging/docs` | +| Orchestrator | `eclipse-score/lifecycle` โ€” has `docs/module/health_monitor/` with comp_req/comp_arc | `docs/modules/orchestrator/**`, `docs/features/orchestration` | +| Persistency | `eclipse-score/persistency` โ€” has `docs/persistency/kvs/` with comp_req/comp_arc โœ… | `docs/features/persistency` | +| Time | `eclipse-score/inc_time` (no sphinx-needs RST so far) | `docs/features/time/docs` | +| Config Management | `eclipse-score/config_management` (no sphinx-needs RST so far) | `docs/features/configuration` | +| Lifecycle | `eclipse-score/lifecycle` โ€” has `docs/module/health_monitor/` (comp_arc_sta/dyn valid=15/16), `detailed_design/` (dd_sta/dyn valid=1/2), `tests/integration/` | `docs/modules/lifecycle/index.rst`, `docs/features/lifecycle/**` | +| Security/Crypto | `eclipse-score/inc_security_crypto` โ€” `src/` has no implementation yet; `docs/index.rst` with stkh_req | `docs/features/security_crypto/**` | + +**How to search all repos for a module:** +```python +for repo in ["eclipse-score/score", "eclipse-score/"]: + files = [p for p in get_tree(repo) if p.endswith(".rst") and "" in p] + for f in files: + v, t = count_needs_in_file(repo, f) +``` + +## Status Format + +- **``โœ… Available (valid/total)``** โ€” Artifact complete and approved: **100% of needs elements are `valid`** (valid == total). Always add the count in parentheses for requirements and architecture rows. +- **``๐Ÿ”„ NN% (valid/total)``** โ€” In Progress: at least one element is `valid` but not all. Always show count. +- **``โŒ Open``** โ€” Not started, not found, or 0% valid +- For binary rows (Code, SW Development Plan, Unit Tests, CR approved): no count needed, just ``โœ… Available`` or ``โŒ Open`` + +**Percentage calculation per deliverable:** +- **Feature Req / Feature Arch**: count individual needs elements (e.g. `.. feat_req::`, `.. feat_arc::`) inside the doc with `:status: valid`; `valid / total`; 100% (valid == total) โ†’ โœ… Available +- **Comp. Req / Comp. Arch**: count individual needs elements across all component docs; `valid / total`; 100% (valid == total) โ†’ โœ… Available +- **Req. Inspection / Arch. Inspection**: `valid / total` across all checklists (feature + component combined); 100% (valid == total) โ†’ โœ… Available +- **Detailed Design + Code / Impl. Inspection**: `valid / total` across all `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files +- **Binary deliverables** (CR approved, SW Dev Plan, Unit Tests, Integration Tests, Verification Report): no percentage +- **Detailed Design + Code / Impl. Inspection**: `valid / total` across all `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files +- **Binary deliverables** (CR approved, SW Dev Plan, Unit Tests, Integration Tests, Verification Report): no percentage + +## Status Criteria (per Deliverable) + +### Process Area 1 โ€” CR approved +- **โœ… Available**: A closed GitHub Issue with "Feature Request" or "Contribution Request" for the module exists in `eclipse-score/score` +- **โŒ Open**: No such issue found + +Known closed CRs: Baselibs (#549), Communication (#69), Logging (#68), Orchestrator (#273), Persistency (#95), Time (#910), Config Management (#754, #1764), Lifecycle (#909), Security/Crypto (#905) + +### Process Area 2 โ€” Feature Requirements +- **โœ… Available**: 100% of individual needs elements (e.g. `.. feat_req::`) inside the requirements doc have `:status: valid` +- **๐Ÿ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. **This includes `๐Ÿ”„ 0% (0/N)` when N elements exist but ALL are `:status: invalid` โ€” do NOT use `โŒ Open` in this case.** +- **โŒ Open**: no requirements file found, OR zero needs elements found (file is empty/missing `feat_req::` directives) + +> **Rule applies to ALL modules consistently**: if a requirements file exists and contains `.. feat_req::` directives (even if all are `:status: invalid`), always show `๐Ÿ”„ 0% (0/N)` with a link to the file and a note that entries are all invalid. Never collapse to `โŒ Open` when elements are present. + +### Process Area 2 โ€” Component Requirements +- **โœ… Available**: 100% of all individual needs elements across all component requirements `.rst` files (not just `index.rst` โ€” search all `.rst` files under `docs/modules//**/requirements/` and the module's own repo under `docs/module/**/requirements/`) have `:status: valid` +- **๐Ÿ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. **Includes `๐Ÿ”„ 0% (0/N)` when ALL elements are `:status: invalid` โ€” template placeholder files count as existing elements.** +- **โŒ Open**: no component requirement files found, OR all found files contain zero `.. comp_req::` directives (pure template stubs without even a dummy directive) + +> **Rule applies to ALL modules consistently**: template placeholder comp_req entries with `:status: invalid` still count as existing elements โ†’ show `๐Ÿ”„ 0% (0/N)`, not `โŒ Open`. + +### Process Area 2 โ€” Req. Inspection +- **โœ… Available**: 100% of all `chklst_req_inspection.rst` files (feature + component level) have `:status: valid` +- **๐Ÿ”„ In Progress**: checklists exist but not all are `valid` +- **โŒ Open**: no checklists found + +### Process Area 3 โ€” Feature Architecture +- **โœ… Available**: 100% of individual needs elements (e.g. `.. feat_arc::`) inside the architecture doc have `:status: valid` +- **๐Ÿ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. **Includes `๐Ÿ”„ 0% (0/N)` when all are `:status: invalid` โ€” do NOT use `โŒ Open` when elements exist.** +- **โŒ Open**: no architecture file found, OR zero `.. feat_arc::` directives found + +### Process Area 3 โ€” Component Architecture +- **โœ… Available**: 100% of all individual needs elements across all component architecture files have `:status: valid` +- **๐Ÿ”„ NN%**: elements exist but not all are `valid`; show `valid / total` percentage. **Includes `๐Ÿ”„ 0% (0/N)` when all are `:status: invalid` โ€” do NOT use `โŒ Open` when elements exist.** +- **โŒ Open**: no component architecture docs containing directives found + +### Process Area 3 โ€” Arch. Inspection +- **โœ… Available**: 100% of all architecture checklists (`chklst_arc_inspection.rst` / `chklst_arch_inspection.rst`) have `:status: valid` +- **๐Ÿ”„ In Progress**: checklists exist but not all are `valid` +- **โŒ Open**: no architecture checklists found + +### Process Area 4 โ€” SW Development Plan +- **โœ… Available**: `eclipse-score/score` contains `docs/platform_management_plan/software_development.rst` (project-wide) +- **โŒ Open**: file absent + +### Process Area 4 โ€” Code +- **โœ… Available**: source files (`.cpp`, `.h`, `.py`, `.rs` etc.) exist in the module's own repo outside of `docs/` +- **โŒ Open**: no source files found +- **Check**: `gh api repos/eclipse-score//git/trees/main?recursive=1 --jq '.tree[].path'` then filter for source extensions, exclude `docs/` +- **NOTE**: All currently active modules (Baselibs, Communication, Logging, Orchestrator, Persistency, Time, Config Mgmt) have source code โ†’ all โœ… Available + +### Process Area 4 โ€” Detailed Design +- **โœ… Available**: 100% of formal design doc needs elements (`.. dd_sta::`, `.. dd_dyn::`, `.. comp_dd::` or similar) in `detailed_design/` folders have `:status: valid` +- **๐Ÿ”„ NN%**: design docs exist and at least one element is `valid` but not all are `valid`; show `valid / total` %. **Includes `๐Ÿ”„ 0% (0/N)` when all design elements are `:status: invalid` โ€” do NOT use `โŒ Open` when actual design directives are present.** +- **โŒ Open**: no RST files with actual design directives found, OR all existing files contain only `:status: draft` wrapper `.. document::` directives (0 actual `dd_sta/dd_dyn` directives) +- **DO NOT count `chklst_impl_inspection.rst`** โ€” those are inspection checklists, not design documents +- **DO NOT count bare `.. document::` wrapper files** โ€” these are placeholders, not actual design content +- **Search both `eclipse-score/score` and the module's own repo** for `detailed_design/` folders + +### Process Area 4 โ€” Impl. Inspection +- **โœ… Available**: 100% of `chklst_impl_inspection.rst` / `chklst_dd_inspection.rst` files have `:status: valid` +- **๐Ÿ”„ In Progress**: checklists exist but not all are `valid` +- **โŒ Open**: no impl inspection checklists found + +### Process Area 5 โ€” Unit Tests +- **โœ… Available**: Source repo contains `_test.cpp`, `_test.py`, or `/test(s)/` directories (excluding docs/) +- **โŒ Open**: no test files found + +### Process Area 5 โ€” C0/C1 Coverage + +Coverage data is sourced from the `reference_integration` CI (`Code Quality & Documentation` workflow, job `test_and_docs`). +It runs `bazel coverage --config=ferrocene-coverage` per module and extracts C0 (line) and C1 (branch) coverage via `genhtml`/`lcov` for C++ and `cargo llvm-cov` for Rust. + +**Status criteria:** +- **โœ… Available**: C0 โ‰ฅ 100% AND C1 โ‰ฅ 100% (practically never for real modules โ€” use ๐Ÿ”„) +- **๐Ÿ”„ C0: XX% / C1: YY%**: Coverage data exists (regardless of %) +- **โŒ Open**: Module not in reference_integration CI, or coverage extraction disabled + +**How to fetch the latest values:** +```bash +# Find the latest successful run of the "Code Quality & Documentation" workflow (ID 234977097): +gh api "repos/eclipse-score/reference_integration/actions/workflows/234977097/runs?per_page=10" \ + --jq '.workflow_runs[] | select(.conclusion=="success") | {id: .id, created_at: .created_at}' | head -1 + +# Get the job ID for test_and_docs from that run: +RUN_ID= +JOB_ID=$(gh api "repos/eclipse-score/reference_integration/actions/runs/$RUN_ID/jobs" \ + --jq '.jobs[] | select(.name=="test_and_docs") | .id') + +# Extract the coverage summary from the job log: +gh api "repos/eclipse-score/reference_integration/actions/jobs/$JOB_ID/logs" \ + | grep -E "COVERAGE ANALYSIS SUMMARY|'score_.*_cpp'|'score_.*_rust'|lines|functions|branches" \ + | grep -A50 "COVERAGE ANALYSIS SUMMARY" +``` + +**Module โ†’ CI key mapping:** +| Tracker Module | CI key (CPP) | CI key (Rust) | +|---|---|---| +| Baselibs | `score_baselibs_cpp` | `score_baselibs_rust_rust` | +| Communication | `score_communication_cpp` | โ€” (disabled) | +| Logging | `score_logging_cpp` | `score_logging_rust` | +| Orchestrator | โ€” (disabled) | โ€” (disabled) | +| Persistency | `score_persistency_cpp` | `score_persistency_rust` | +| Time | not in CI | โ€” | +| Config Mgmt | not in CI | โ€” | +| Lifecycle | `score_lifecycle_health_cpp` | `score_lifecycle_health_rust` | +| Security/Crypto | not in CI | โ€” | + +**Format in table:** +- CPP + Rust: `๐Ÿ”„ C0: 92.4% / C1: 60.4% (cpp)\n\nRust line: 74.4%` +- CPP only: `๐Ÿ”„ C0: 87.9% / C1: 58.8% (cpp)` +- Not available: `โŒ Open` + +### Process Area 5 โ€” Comp. Integration Tests +- **โœ… Available**: Source repo contains integration test source files (`.cpp`/`.py` with "integration" in path) +- **๐Ÿ”„ In Progress**: integration test CI workflow exists but no test source files +- **โŒ Open**: no integration test artifacts + +### Process Area 5 โ€” Feature Integration Tests +- **๐Ÿ”„ In Progress**: `integration_test_scenarios` or `feature*test*` paths found in source repo +- **โŒ Open**: none found + +### Process Area 5 โ€” Static Code Analysis + +Static analysis CI exists at two levels: +1. **Per-module CI workflow** โ€” zero-tolerance enforcement on `main` (clang-tidy for C++, Clippy for Rust). A passing CI implies 0 open findings. +2. **Central CodeQL** โ€” runs in `eclipse-score/reference_integration` via `codeql-multiple-repo-scan.yml` across all pinned repos. Finding counts require the GitHub Security tab. + +**Status criteria:** +- **`โœ… 0 findings`**: A zero-tolerance CI workflow enforcing clang-tidy or Clippy exists in the module's own repo AND it passes on `main`. Link directly to the workflow file. +- **`๐Ÿ”„ Configured (...) but no CI enforcement workflow yet`**: Static analysis tools are configured in the repo (`.clang-tidy`, `static_analysis.bazelrc`, CodeQL config etc.) but no CI workflow enforces them on every PR/push. NOT `โŒ Open` โ€” the infrastructure exists. +- **`โŒ Open`**: No static analysis configuration found at all in the module's own repo. + +**Per-module static analysis status** (as of 2026-05): +| Module | Status | CI / Config link | +|---|---|---| +| Baselibs | `โœ… 0 findings` | [clang-tidy lint.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/lint.yml) | +| Communication | `๐Ÿ”„ Configured` | [static_analysis.bazelrc](https://github.com/eclipse-score/communication/blob/main/quality/static_analysis/static_analysis.bazelrc) + [CodeQL/MISRA](https://github.com/eclipse-score/communication/tree/main/quality/static_analysis) โ€” no CI enforcement yet | +| Logging | `โŒ Open` | โ€” | +| Orchestrator | `โœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/orchestrator/blob/main/.github/workflows/clippy.yml) | +| Persistency | `โœ… 0 findings` | [Clippy clippy.yml](https://github.com/eclipse-score/persistency/blob/main/.github/workflows/clippy.yml) | +| Time | `โŒ Open` | โ€” | +| Config Mgmt | `โœ… 0 findings` | [clang-tidy static-analysis.yml](https://github.com/eclipse-score/config_management/blob/main/.github/workflows/static-analysis.yml) | +| Lifecycle | `โœ… 0 findings` | [Clippy lint_clippy.yml](https://github.com/eclipse-score/lifecycle/blob/main/.github/workflows/lint_clippy.yml) | +| Security/Crypto | `โŒ Open` | โ€” | + +**Central CodeQL** (all modules): [codeql-multiple-repo-scan.yml](https://github.com/eclipse-score/reference_integration/blob/main/.github/workflows/codeql-multiple-repo-scan.yml) in `reference_integration`. Finding counts require the GitHub Security tab โ€” not tracked per-cell. + +### Process Area 5 โ€” Dynamic Code Analysis + +Dynamic analysis is performed via sanitizer CI workflows (Bazel `--config=asan_ubsan_lsan` for ASan/UBSan/LSan, `--config=tsan` for TSan). All workflows are zero-tolerance โ€” a passing `main` branch implies 0 sanitizer findings. + +**Status criteria:** +- **`โœ… 0 findings`**: A zero-tolerance sanitizer CI workflow exists in the module's own repo AND it passes on `main`. Link directly to the workflow file(s). +- **`โŒ Open`**: No sanitizer CI workflow found in the module's own repo. + +> There is NO `๐Ÿ”„ Configured but not enforced` category for dynamic analysis โ€” either a CI workflow runs and enforces sanitizers (โœ…) or it is absent (โŒ). + +**Per-module dynamic code analysis status** (as of 2026-05): +| Module | Status | CI link(s) | +|---|---|---| +| Baselibs | `โœ… 0 findings` | [sanitizers_linux.yml](https://github.com/eclipse-score/baselibs/blob/main/.github/workflows/sanitizers_linux.yml) โ€” ASan+UBSan+LSan | +| Communication | `โœ… 0 findings` | [ASan/UBSan/LSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/address_undefined_behavior_leak_sanitizer.yml), [TSan](https://github.com/eclipse-score/communication/blob/main/.github/workflows/thread_sanitizer.yml) | +| Logging | `โŒ Open` | โ€” | +| Orchestrator | `โŒ Open` | โ€” | +| Persistency | `โŒ Open` | โ€” | +| Time | `โŒ Open` | โ€” | +| Config Mgmt | `โŒ Open` | โ€” | +| Lifecycle | `โŒ Open` | โ€” | +| Security/Crypto | `โŒ Open` | โ€” | + +**How to verify**: Check `.github/workflows/` in each module repo for workflows referencing `asan_ubsan_lsan`, `tsan`, `valgrind`, or similar sanitizer configs. Also check `reference_integration` workflows for cross-module sanitizer runs. + +### Process Area 5 โ€” Module Verification Report +- **โœ… Available**: `verification/module_verification_report.rst` exists AND `:status: valid` **AND** the file contains actual verification data (test coverage lists, DFA results, static analysis results etc.) โ€” not just section headings +- **๐Ÿ”„ In Progress**: file exists with `:status: draft` +- **โŒ Open**: file does not exist, OR file is a template placeholder only (section headings with no content) +- **โš  Consistency check**: A Module Verification Report can only be โœ… Available if all prerequisite Phase 5 deliverables (Unit Tests, Comp. Integration Tests, Feature Integration Tests) are also โœ… Available. If any prerequisite is โŒ Open, mark the report โŒ Open regardless of `:status:` in the file. +- **Known pitfall โ€” Persistency**: `eclipse-score/persistency` has a `module_verification_report.rst` with `:status: valid` but it is an empty template. Feature Integration Tests are โŒ Open โ†’ report must be โŒ Open. + +## Procedure + +### Prerequisites +- `gh` CLI must be authenticated (`gh auth status`) +- Python 3.8+ + +### Steps + +1. **Fetch the repo tree** for `eclipse-score/score` and module source repos: + ```bash + gh api repos/eclipse-score/score/git/trees/main?recursive=1 --jq '.tree[].path' > /tmp/tree_score.txt + ``` + +2. **Count needs elements** in each requirements/architecture file using this pattern: + ```python + import re, base64, subprocess + def count_needs_status(repo, path): + content = base64.b64decode( + subprocess.run(["gh", "api", f"repos/{repo}/contents/{path}", + "--jq", ".content"], capture_output=True, text=True).stdout.strip() + ).decode() + statuses = re.findall(r'^\s+:status:\s+(\w+)', content, re.MULTILINE) + valid = sum(1 for s in statuses if s == 'valid') + return valid, len(statuses) + ``` + Aggregate `valid` and `total` across all files per deliverable. + Percentage = `valid * 100 // total`. 100% (valid == total) โ†’ โœ… Available, else ๐Ÿ”„ NN%. + +3. **Update the RST file** `process/standards/feature_and_process_status.rst` + with the computed values. + +4. **Compute the Implementation status per Process Area** and update the bold status line that appears directly before each table: + - Count how many deliverable cells (across all modules ร— all deliverables in that Process Area) are `โœ… Available` + - `complete = number of โœ… Available cells`, `total = number of module ร— deliverable cells` + - 100% โ†’ `โœ… Available (total/total deliverables complete)` + - >0% โ†’ `๐Ÿ”„ NN% (complete/total deliverables complete)` + - 0% โ†’ `โŒ Open (0/total deliverables complete)` + - Format: `**Implementation status: ๐Ÿ”„ NN% (complete/total deliverables complete)**` + - Binary rows (Code, SW Dev Plan, Unit Tests, CR): count each module cell as 1 deliverable + - Do NOT include an Overall row inside the table โ€” the status line is placed as plain text before the `.. list-table::` directive + +5. **Adding a new module** โ€” add a row to the Modules and Repos table above, define its `feature_path` and `docs_path`, then add a row to each tracker table (one `* - ` block per PA). + +## Interpretation Notes + +### Artifacts vs. Checklists โ€” Key Rule +- **Artifacts** (Feature Requirements, Component Requirements, Feature Architecture, Component Architecture, Detailed Design, Code): derive status by **directly inspecting the repos** โ€” look for sphinx-needs elements or source files. Do NOT rely on checklist presence/status. +- **Inspection rows** (Req. Inspection, Arch. Inspection, Impl. Inspection): these rows describe the checklists themselves โ€” report what is found in `chklst_*.rst` files (how many exist, valid vs. draft). Computed as `valid / total` checklist files. + +### Additional Notes +- **Requirements/Architecture rows**: count individual needs elements (`:status:` fields inside `.. feat_req::`, `.. feat_arc::`, `.. comp_req::`, `.. comp_arc_sta::`, `.. comp_arc_dyn::`, `.. real_arc_int::`, etc.) โ€” NOT the document-level `:status:` field. +- **Code row**: source files outside of `docs/` in the module's own repo. All active modules currently โœ… Available. +- **Detailed Design row**: actual design directives (`.. dd_sta::`, `.. dd_dyn::`) in `detailed_design/` folders โ€” not `chklst_impl_inspection.rst`, not bare `.. document::` wrappers. +- The SW Development Plan check is project-wide (not per-module) because S-CORE uses a single platform management plan. +- Verification report `status: valid` requires Committer approval in the PR merge. +- **Template vs. real report**: A file with `:status: valid` can still be an empty template. When checking `module_verification_report.rst`, look for actual content (tables, coverage numbers, test results) beyond section headings. If only headings are present, treat as โŒ Open even if `:status: valid`. +- **Phase 5 consistency**: The Module Verification Report cannot be complete if any prerequisite (Unit Tests, Integration Tests) is missing. + +## Limitations + +- Cannot detect whether requirements have 100% test coverage (needs needs.json analysis) +- **Static analysis findings**: Per-module CI enforcement workflows (clang-tidy/Clippy) are zero-tolerance โ€” a passing `main` branch implies 0 findings. For `Communication` (configured but not enforced), finding counts are unknown without manual clang-tidy run. +- Central CodeQL finding counts require GitHub Security tab access โ€” not available via `gh api` without special permissions. +- Feature integration tests heuristic is weak โ€” manual verification recommended + +## Complete RST Snapshot + +Full content of `process/standards/feature_and_process_status.rst` as of last update. +Use this to recreate the file from scratch if needed. + +```rst +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +Feature and Process Status +########################## + +This page tracks the completion status of all 5 process areas per module. +Update the status column for each module after completing the respective deliverable. + +**Process Status chart legend:** + +.. list-table:: + :header-rows: 1 + :widths: 30 30 40 + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - ๐ŸŸข Valid + + ๐ŸŸก Draft + + ๐Ÿ”ด Invalid + + โฌœ Other + - ๐ŸŸข Ok + + ๐Ÿ”ต Recommendation + + ๐ŸŸก Open + + ๐ŸŸ  Action + + ๐Ÿ”ด Deviation + + โฌœ N/A ยท โ—ป Other + - ๐ŸŸข Automated + + ๐ŸŸก Waiting for automation + + ๐Ÿ”ต Inspection list + + โฌœ Other + +**Implementation Status Values:** + +- ``โœ… Available`` โ€” Work product created, reviewed and approved +- ``๐Ÿ”„ NN%`` โ€” In Progress: artifact exists with at least one valid element, percentage shows valid/total +- ``โŒ Open`` โ€” Not yet started, not found, or 0% valid +- ``โ€”`` โ€” Not applicable for this module + +Process Area 1 โ€” Change Management +*********************************** + +A Change Request must be created and approved by the Architecture Community before module development begins. +See :ref:`chm_change_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'change_management' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'change_management' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'change_management' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'change_management' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(change_management) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(change_management) + +.. rubric:: Implementation status: โœ… Available (9/9 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **CR approved** + + * - Baselibs + - โœ… Available + + * - Communication + - โœ… Available + + * - Logging + - โœ… Available + + * - Orchestrator + - โœ… Available + + * - Persistency + - โœ… Available + + * - Time + - โœ… Available + + * - Config Mgmt + - โœ… Available + + * - Lifecycle + - โœ… Available + + * - Security/Crypto + - โœ… Available + +Process Area 2 โ€” Requirements Engineering +***************************************** + +Feature and component requirements must be written and inspected. +Work products: ``wp__requirements_feat``, ``wp__requirements_comp``, ``wp__requirements_inspect``. +See :ref:`requirements_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'requirements_engineering' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(requirements_engineering) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(requirements_engineering) + +.. rubric:: Implementation status: ๐Ÿ”„ 26% (7/27 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Feature Requirements** + - **Component Requirements** + - **Req. Inspection** + + * - Baselibs + - ๐Ÿ”„ 93% (14/15) + - ๐Ÿ”„ 93% (124/134) + - ๐Ÿ”„ 20% (2/10) + `bitmanipulation `__, + `concurrency `__, + `containers `__, + `filesystem `__, + `json `__, + `safecpp `__, + `result `__, + `srs `__, + `utils `__, + `feature-level `__ + + * - Communication + - โœ… Available (50/50) + - ๐Ÿ”„ 97% (34/35) + - โŒ Open + + * - Logging + - โœ… Available (46/46) + - โŒ Open + - โŒ Open + + * - Orchestrator + - ๐Ÿ”„ 84% (26/31) + - โŒ Open + - โŒ Open + `executor `__, + `orchestrator `__ + + * - Persistency + - โœ… Available (40/40) + - ๐Ÿ”„ 95% (36/38) + - โœ… Available (2/2) + `feature-level `__, + `kvs `__ + + * - Time + - โœ… Available (15/15) + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โœ… Available (13/13) + - โŒ Open + - โŒ Open + + * - Lifecycle + - โŒ Open + - โŒ Open + - โŒ Open + + * - Security/Crypto + - โœ… Available (42/42) + - โŒ Open + - โŒ Open + +Process Area 3 โ€” Architecture Design +************************************ + +Feature and component architecture must be designed and inspected. +Work products: ``wp__feature_arch``, ``wp__component_arch``, ``wp__sw_arch_verification``. +See :ref:`arch_workflow`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'architecture_design' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(architecture_design) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(architecture_design) + +.. rubric:: Implementation status: ๐Ÿ”„ 19% (5/27 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Feature Architecture** + - **Component Architecture** + - **Arch. Inspection** + + * - Baselibs + - โœ… Available (4/4) + - ๐Ÿ”„ 98% (172/175) + - ๐Ÿ”„ 80% (8/10) + `bitmanipulation `__, + `concurrency `__, + `containers `__, + `filesystem `__, + `json `__, + `safecpp `__, + `result `__, + `srs `__, + `utils `__, + `feature-level `__ + + * - Communication + - โœ… Available (3/3) + - ๐Ÿ”„ 94% (17/18) + - โŒ Open + + * - Logging + - โœ… Available (4/4) + - โœ… Available (3/3) + - โŒ Open + + * - Orchestrator + - ๐Ÿ”„ 66% (4/6) + - ๐Ÿ”„ 98% (42/43) + - โŒ Open + `executor `__, + `orchestrator `__ + + * - Persistency + - โœ… Available (12/12) + - ๐Ÿ”„ 25% (1/4) + - โŒ Open + `feature-level `__, + `kvs `__ + + * - Time + - โŒ Open + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โŒ Open + - โŒ Open + - โŒ Open + + * - Lifecycle + - ๐Ÿ”„ 94% (30/32) + - ๐Ÿ”„ 94% (15/16) + - โŒ Open + + * - Security/Crypto + - โŒ Open + - โŒ Open + - โŒ Open + +Process Area 4 โ€” Implementation +******************************** + +Source code and detailed design must be implemented and inspected. +Work products: ``wp__sw_development_plan``, ``wp__sw_implementation``, ``wp__sw_implementation_inspection``. +See :ref:`workflow_implementation`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'implementation' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'implementation' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'implementation' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'implementation' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(implementation) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(implementation) + +.. rubric:: Implementation status: ๐Ÿ”„ 47% (17/36 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **SW Development Plan** + - **Code** + - **Detailed Design** + - **Impl. Inspection** + + * - Baselibs + - โœ… Available + - โœ… Available (~119,400 LOC) `baselibs `__ + - โŒ Open + - โŒ Open + `bitmanipulation `__, + `concurrency `__, + `containers `__, + `filesystem `__, + `json `__, + `safecpp `__, + `result `__, + `srs `__, + `utils `__ + + * - Communication + - โœ… Available + - โœ… Available (~71,300 LOC) `communication `__ + - โŒ Open + - โŒ Open + + * - Logging + - โœ… Available + - โœ… Available (~22,900 LOC) `logging `__ + - โŒ Open + - โŒ Open + + * - Orchestrator + - โœ… Available + - โœ… Available (~38,300 LOC) `lifecycle `__ + - โŒ Open + - โŒ Open + + * - Persistency + - โœ… Available + - โœ… Available (~8,700 LOC) `persistency `__ + - โŒ Open + - โŒ Open + `kvs `__ + + * - Time + - โœ… Available + - โœ… Available (~11,700 LOC) `inc_time `__ + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โœ… Available + - โœ… Available (~5,400 LOC) `config_management `__ + - โŒ Open + - โŒ Open + + * - Lifecycle + - โœ… Available + - โœ… Available (~38,300 LOC) `lifecycle `__ + - ๐Ÿ”„ 50% (1/2) + - โŒ Open + + * - Security/Crypto + - โœ… Available + - โŒ Open + - โŒ Open + - โŒ Open + +Process Area 5 โ€” Verification +***************************** + +All tests must be implemented and a module verification report must be approved. +Work products: ``wp__verification_sw_unit_test``, ``wp__verification_comp_int_test``, ``wp__verification_feat_int_test``, ``wp__verification_module_ver_report``. +See :ref:`verification_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'verification' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'verification' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'verification' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'verification' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(verification) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(verification) + +.. rubric:: Implementation status: ๐Ÿ”„ 36% (13/36 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Unit Tests** + - **Comp. Integration Tests** + - **Feature Integration Tests** + - **Module Verification Report** + + * - Baselibs + - โœ… Available (4,663 tests) + - โœ… Available (13 tests) + - โŒ Open + - โŒ Open + + * - Communication + - โœ… Available (2,374 tests) + - โœ… Available (42 tests) + - โŒ Open + - โŒ Open + + * - Logging + - โœ… Available (619 tests) + - โŒ Open + - โœ… Available (1 test) `reference_integration `__ (cross-module) + - โŒ Open + + * - Orchestrator + - โœ… Available (2 tests) + - โœ… Available (9 tests) + - โœ… Available (3 tests) `reference_integration `__ (cross-module) + - โŒ Open + + * - Persistency + - โœ… Available (138 tests) + - โŒ Open + - โœ… Available (6 tests) `reference_integration `__ (cross-module) + - โŒ Open + + * - Time + - โœ… Available (296 tests) + - โœ… Available (11 tests) + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โœ… Available (143 tests) + - โŒ Open + - โŒ Open + - โŒ Open + + * - Lifecycle + - โœ… Available (2 tests) + - โœ… Available (9 tests) + - โŒ Open + - โŒ Open + + * - Security/Crypto + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + + +Done Criteria +************* + +A module is considered **complete** when all of the following are true: + +#. All ``valid`` component requirements have **100% test coverage** (linked via ``FullyVerifies`` or ``PartiallyVerifies``). +#. All CI metadata checks pass (``TestType``, ``DerivationTechnique``, ``Description`` set on every test). +#. Static analysis has no open ``Critical`` or ``High`` findings. +#. The **Module Verification Report** (``wp__verification_module_ver_report``) is generated and approved by a Committer. +``` diff --git a/process/_assets/custom.css b/process/_assets/custom.css index 02f31d9b5b..63c9c7dd0a 100644 --- a/process/_assets/custom.css +++ b/process/_assets/custom.css @@ -179,3 +179,37 @@ .score-grid .sd-card.card-ml4 .sd-card-footer a { color: var(--card-body-text-color) !important; } + +/* Compact process area overview charts */ +.compact-overview-wrapper { + overflow-x: auto; +} + +.compact-overview-table td:nth-child(1), +.compact-overview-table th:nth-child(1), +.compact-overview-table td:nth-child(5), +.compact-overview-table th:nth-child(5), +.compact-overview-table td:nth-child(6), +.compact-overview-table th:nth-child(6) { + text-align: center; + vertical-align: middle; +} + +.compact-overview-table td:has(img[id^="needpie-"]) { + min-width: 420px; + vertical-align: middle; + text-align: center; +} + +.compact-overview-table td:has(img[id^="needpie-"]) img { + width: 420px; + max-width: none; + height: auto; + display: block; + margin: 0 auto; +} + +/* Wider content area for pages that opt in via the "wide-content-page" body class */ +body.wide-content-page .bd-content .bd-article-container { + max-width: 100%; +} \ No newline at end of file diff --git a/process/conf.py b/process/conf.py index a5425b1780..6f06612706 100644 --- a/process/conf.py +++ b/process/conf.py @@ -35,5 +35,64 @@ html_static_path = ["_assets"] html_css_files = ["custom.css"] +# Hide the "On this page" secondary sidebar for wide-content pages +html_theme_options = { + "secondary_sidebar_items": { + "**": ["page-toc"], + "standards/process_reqs_list/process_area_status_summary": [], + "standards/process_reqs_list/process_status_overview": [], + } +} + # :need:`{title}` is used in the needs templates to display the title of the need needs_role_need_template = "{title}" + +# Make the process/ directory importable so that filter functions +# referenced via :filter-func: in sphinx-needs directives can be found. +import sys as _sys +import os as _os +_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. + + needpie auto-adds a legend whenever a slice is <5% or zero, even without + the :legend: option. Since a static legend is displayed above the table, + we replace axes.legend() with a no-op so no legend appears inside the charts. + + We also patch save_matplotlib_figure to always overwrite existing SVG files, + bypassing the sphinx-needs env.images cache which would otherwise skip + regenerating images when the Sphinx environment pickle exists from a prior build. + """ + try: + import matplotlib.axes + matplotlib.axes.Axes.legend = lambda self, *args, **kwargs: None + except Exception: + pass + + try: + import sphinx_needs.utils as _sn_utils + import sphinx_needs.directives.needpie as _needpie_mod + import os + + _orig_save = _sn_utils.save_matplotlib_figure + + def _save_always(app, figure, basename, fromdocname): # type: ignore[no-untyped-def] + # Remove cached entry so figure.savefig() is always called + builder = app.builder + for ext in ("svg", "png", "pdf"): + path = os.path.join(builder.outdir, builder.imagedir, f"{basename}.{ext}") + try: + del app.env.images[path] # type: ignore[attr-defined] + except (KeyError, TypeError, AttributeError): + pass + return _orig_save(app, figure, basename, fromdocname) + + _sn_utils.save_matplotlib_figure = _save_always + _needpie_mod.save_matplotlib_figure = _save_always + except Exception: + pass + + +_patch_needpie_suppress_legend() diff --git a/process/needs_filters.py b/process/needs_filters.py new file mode 100644 index 0000000000..1baa202f6c --- /dev/null +++ b/process/needs_filters.py @@ -0,0 +1,153 @@ +# ******************************************************************************* +# 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 +# ******************************************************************************* + +""" +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/process/standards/feature_and_process_status.rst b/process/standards/feature_and_process_status.rst new file mode 100644 index 0000000000..b35ad0cf88 --- /dev/null +++ b/process/standards/feature_and_process_status.rst @@ -0,0 +1,688 @@ +.. + # ******************************************************************************* + # 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 + # ******************************************************************************* + +.. raw:: html + + + +Feature and Process Status +########################## + +This page tracks the completion status of all 5 process areas per module. +Update the status column for each module after completing the respective deliverable. + +**Process Status chart legend:** + +.. list-table:: + :header-rows: 1 + :widths: 30 30 40 + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - ๐ŸŸข Valid + + ๐ŸŸก Draft + + ๐Ÿ”ด Invalid + + โฌœ Other + - ๐ŸŸข Ok + + ๐Ÿ”ต Recommendation + + ๐ŸŸก Open + + ๐ŸŸ  Action + + ๐Ÿ”ด Deviation + + โฌœ N/A ยท โ—ป Other + - ๐ŸŸข Automated + + ๐ŸŸก Waiting for automation + + ๐Ÿ”ต Inspection list + + โฌœ Other + +**Implementation Status Values:** + +- ``โœ… Available`` โ€” Work product created, reviewed and approved +- ``๐Ÿ”„ NN%`` โ€” In Progress: artifact exists with at least one valid element, percentage shows valid/total +- ``โŒ Open`` โ€” Not yet started, not found, or 0% valid +- ``โ€”`` โ€” Not applicable for this module + +Process Area 1 โ€” Change Management +*********************************** + +A Change Request must be created and approved by the Architecture Community before module development begins. +See :ref:`chm_change_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'change_management' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'change_management' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'change_management' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'change_management' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(change_management) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(change_management) + +.. rubric:: Implementation status: โœ… Available (9/9 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **CR approved** + + * - Baselibs + - โœ… Available + + * - Communication + - โœ… Available + + * - Logging + - โœ… Available + + * - Orchestrator + - โœ… Available + + * - Persistency + - โœ… Available + + * - Time + - โœ… Available + + * - Config Mgmt + - โœ… Available + + * - Lifecycle + - โœ… Available + + * - Security/Crypto + - โœ… Available + +Process Area 2 โ€” Requirements Engineering +***************************************** + +Feature and component requirements must be written and inspected. +Work products: ``wp__requirements_feat``, ``wp__requirements_comp``, ``wp__requirements_inspect``. +See :ref:`requirements_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'requirements_engineering' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'requirements_engineering' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(requirements_engineering) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(requirements_engineering) + +.. rubric:: Implementation status: ๐Ÿ”„ 26% (7/27 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Feature Requirements** + - **Component Requirements** + - **Req. Inspection** + + * - Baselibs + - ๐Ÿ”„ 93% (14/15) + - ๐Ÿ”„ 93% (124/134) + - ๐Ÿ”„ 20% (2/10) + `bitmanipulation `__, + `concurrency `__, + `containers `__, + `filesystem `__, + `json `__, + `safecpp `__, + `result `__, + `srs `__, + `utils `__, + `feature-level `__ + + * - Communication + - โœ… Available (50/50) + - ๐Ÿ”„ 97% (34/35) + - โŒ Open + + * - Logging + - โœ… Available (46/46) + - โŒ Open + - โŒ Open + + * - Orchestrator + - ๐Ÿ”„ 84% (26/31) + - โŒ Open + - โŒ Open + `executor `__, + `orchestrator `__ + + * - Persistency + - โœ… Available (40/40) + - ๐Ÿ”„ 95% (36/38) + - โœ… Available (2/2) + `feature-level `__, + `kvs `__ + + * - Time + - โœ… Available (15/15) + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โœ… Available (13/13) + - โŒ Open + - โŒ Open + + * - Lifecycle + - ๐Ÿ”„ 0% (0/92) + `requirements `__ + (all 92 entries `:status: invalid`) + - ๐Ÿ”„ 0% (0/1) + `health_monitor `__ + (template placeholder, `:status: invalid`) + - โŒ Open + + * - Security/Crypto + - โœ… Available (42/42) + - โŒ Open + - โŒ Open + +Process Area 3 โ€” Architecture Design +************************************ + +Feature and component architecture must be designed and inspected. +Work products: ``wp__feature_arch``, ``wp__component_arch``, ``wp__sw_arch_verification``. +See :ref:`arch_workflow`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'architecture_design' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'architecture_design' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(architecture_design) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(architecture_design) + +.. rubric:: Implementation status: ๐Ÿ”„ 19% (5/27 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Feature Architecture** + - **Component Architecture** + - **Arch. Inspection** + + * - Baselibs + - โœ… Available (4/4) + - ๐Ÿ”„ 98% (172/175) + - ๐Ÿ”„ 80% (8/10) + `bitmanipulation `__, + `concurrency `__, + `containers `__, + `filesystem `__, + `json `__, + `safecpp `__, + `result `__, + `srs `__, + `utils `__, + `feature-level `__ + + * - Communication + - โœ… Available (3/3) + - ๐Ÿ”„ 94% (17/18) + - โŒ Open + + * - Logging + - โœ… Available (4/4) + - โœ… Available (3/3) + - โŒ Open + + * - Orchestrator + - ๐Ÿ”„ 66% (4/6) + - ๐Ÿ”„ 98% (42/43) + - โŒ Open + `executor `__, + `orchestrator `__ + + * - Persistency + - โœ… Available (12/12) + - ๐Ÿ”„ 25% (1/4) + - โŒ Open + `feature-level `__, + `kvs `__ + + * - Time + - โŒ Open + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โŒ Open + - โŒ Open + - โŒ Open + + * - Lifecycle + - ๐Ÿ”„ 94% (30/32) + - ๐Ÿ”„ 94% (15/16) + - โŒ Open + + * - Security/Crypto + - โŒ Open + - โŒ Open + - โŒ Open + +Process Area 4 โ€” Implementation +******************************** + +Source code and detailed design must be implemented and inspected. +Work products: ``wp__sw_development_plan``, ``wp__sw_implementation``, ``wp__sw_implementation_inspection``. +See :ref:`workflow_implementation`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'implementation' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'implementation' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'implementation' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'implementation' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(implementation) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(implementation) + +.. rubric:: Implementation status: ๐Ÿ”„ 47% (17/36 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **SW Development Plan** + - **Code** + - **Detailed Design** + - **Impl. Inspection** + + * - Baselibs + - โœ… Available + - โœ… Available (~119,400 LOC) `baselibs `__ + - โŒ Open + - โŒ Open + `bitmanipulation `__, + `concurrency `__, + `containers `__, + `filesystem `__, + `json `__, + `safecpp `__, + `result `__, + `srs `__, + `utils `__ + + * - Communication + - โœ… Available + - โœ… Available (~71,300 LOC) `communication `__ + - โŒ Open + - โŒ Open + + * - Logging + - โœ… Available + - โœ… Available (~22,900 LOC) `logging `__ + - โŒ Open + - โŒ Open + + * - Orchestrator + - โœ… Available + - โœ… Available (~38,300 LOC) `lifecycle `__ + - โŒ Open + - โŒ Open + + * - Persistency + - โœ… Available + - โœ… Available (~8,700 LOC) `persistency `__ + - โŒ Open + - โŒ Open + `kvs `__ + + * - Time + - โœ… Available + - โœ… Available (~11,700 LOC) `inc_time `__ + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โœ… Available + - โœ… Available (~5,400 LOC) `config_management `__ + - โŒ Open + - โŒ Open + + * - Lifecycle + - โœ… Available + - โœ… Available (~38,300 LOC) `lifecycle `__ + - ๐Ÿ”„ 50% (1/2) + - โŒ Open + + * - Security/Crypto + - โœ… Available + - โŒ Open + - โŒ Open + - โŒ Open + +Process Area 5 โ€” Verification +***************************** + +All tests must be implemented and a module verification report must be approved. +Work products: ``wp__verification_sw_unit_test``, ``wp__verification_comp_int_test``, ``wp__verification_feat_int_test``, ``wp__verification_module_ver_report``. +See :ref:`verification_workflows`. + +.. rubric:: Process Status + +.. list-table:: + :header-rows: 1 + :class: compact-overview-table + + * - Process req. status + - ISO 26262 std_req status + - Req. verification status + * - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Valid, Draft, Invalid, Other + :colors: LimeGreen, Gold, LightCoral, LightGray + + type == 'gd_req' and is_external == False and status == 'valid' and 'verification' in tags + type == 'gd_req' and is_external == False and status == 'draft' and 'verification' in tags + type == 'gd_req' and is_external == False and status == 'invalid' and 'verification' in tags + type == 'gd_req' and is_external == False and status not in ['valid', 'draft', 'invalid'] and 'verification' in tags + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Ok, Recommendation, Open, Action, Deviation, N/A, Other + :colors: LimeGreen, LightBlue, Gold, Orange, LightCoral, LightGray, Silver + :filter-func: needs_filters.std_req_status_for_area(verification) + - + + .. rst-class:: small-pie-cell + + .. needpie:: + :labels: Automated, Waiting for automation, Inspection list, Other + :colors: LimeGreen, Gold, LightBlue, LightGray + :filter-func: needs_filters.area_verification_status(verification) + +.. note:: + + **C0/C1 Coverage** data is sourced from the `reference_integration `__ + CI (``Code Quality & Documentation`` workflow, ``bazel coverage --config=ferrocene-coverage``). + C0 = line coverage, C1 = branch coverage. Rust coverage reports line coverage only. + Modules not yet integrated into the reference_integration CI (Time, Config Mgmt) or with + disabled coverage extraction (Orchestrator) show โŒ Open. + +.. note:: + + **Static Code Analysis** is tracked per module via dedicated CI workflows (clang-tidy for C++, + Rust Clippy for Rust). All listed workflows are zero-tolerance (CI fails on any finding), + so a passing ``main`` branch implies **0 open findings**. Additionally, + `CodeQL `__ + runs centrally across all pinned repositories in ``reference_integration`` + (finding counts require the GitHub Security tab). + + **Dynamic Code Analysis** is tracked via sanitizer CI workflows (ASan/UBSan/LSan via + ``--config=asan_ubsan_lsan``, TSan via ``--config=tsan``). All listed workflows are + zero-tolerance, so a passing ``main`` branch implies **0 sanitizer findings**. + +.. rubric:: Implementation status: ๐Ÿ”„ 36% (23/63 deliverables complete) + +.. list-table:: + :header-rows: 1 + :stub-columns: 1 + :class: module-phase-tracker-table + + * - **Module** + - **Unit Tests** + - **C0/C1 Coverage** + - **Comp. Integration Tests** + - **Feature Integration Tests** + - **Static Code Analysis** + - **Dynamic Code Analysis** + - **Module Verification Report** + + * - Baselibs + - โœ… Available (4,663 tests) + - ๐Ÿ”„ **C0:** 92.4% / **C1:** 60.4% (cpp) + + **Rust line:** 74.4% + - โœ… Available (13 tests) + - โŒ Open + - โœ… 0 findings `clang-tidy `__ + - โœ… 0 findings `ASan/UBSan/LSan `__ + - โŒ Open + + * - Communication + - โœ… Available (2,374 tests) + - ๐Ÿ”„ **C0:** 87.9% / **C1:** 58.8% (cpp) + - โœ… Available (42 tests) + - โŒ Open + - ๐Ÿ”„ Configured (`clang-tidy `__, + `CodeQL/MISRA `__) + but no CI enforcement workflow yet + - โœ… 0 findings `ASan/UBSan/LSan `__, + `TSan `__ + - โŒ Open + + * - Logging + - โœ… Available (619 tests) + - ๐Ÿ”„ **C0:** 79.4% / **C1:** 42.4% (cpp) + + **Rust line:** 39.9% + - โŒ Open + - โœ… Available (1 test) `reference_integration `__ (cross-module) + - โŒ Open + - โŒ Open + - โŒ Open + + * - Orchestrator + - โœ… Available (2 tests) + - โŒ Open + - โœ… Available (9 tests) + - โœ… Available (3 tests) `reference_integration `__ (cross-module) + - โœ… 0 findings `Clippy `__ + - โŒ Open + - โŒ Open + + * - Persistency + - โœ… Available (138 tests) + - ๐Ÿ”„ **C0:** 94.7% / **C1:** 63.0% (cpp) + + **Rust line:** 92.7% + - โŒ Open + - โœ… Available (6 tests) `reference_integration `__ (cross-module) + - โœ… 0 findings `Clippy `__ + - โŒ Open + - โŒ Open + + * - Time + - โœ… Available (296 tests) + - โŒ Open + - โœ… Available (11 tests) + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + + * - Config Mgmt + - โœ… Available (143 tests) + - โŒ Open + - โŒ Open + - โŒ Open + - โœ… 0 findings `clang-tidy `__ + - โŒ Open + - โŒ Open + + * - Lifecycle + - โœ… Available (2 tests) + - ๐Ÿ”„ **C0:** 77.2% / **C1:** 45.8% (cpp) + + **Rust line:** 53.8% + - โœ… Available (9 tests) + - โŒ Open + - โœ… 0 findings `Clippy `__ + - โŒ Open + - โŒ Open + + * - Security/Crypto + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + - โŒ Open + +Done Criteria +************* + +A module is considered **complete** when all of the following are true: + +#. All ``valid`` component requirements have **100% test coverage** (linked via ``FullyVerifies`` or ``PartiallyVerifies``). +#. All CI metadata checks pass (``TestType``, ``DerivationTechnique``, ``Description`` set on every test). +#. Static analysis has no open ``Critical`` or ``High`` findings. +#. The **Module Verification Report** (``wp__verification_module_ver_report``) is generated and approved by a Committer. diff --git a/process/standards/index.rst b/process/standards/index.rst index b4576a7a18..80831b4356 100644 --- a/process/standards/index.rst +++ b/process/standards/index.rst @@ -24,6 +24,7 @@ Standards & Requirements isopas8926/isopas8926 aspice_40/index isosae21434/isosae21434 + feature_and_process_status process_reqs_list/index Standards Coverage statistics diff --git a/process/standards/process_reqs_list/index.rst b/process/standards/process_reqs_list/index.rst index 652fa580c4..23a8742e55 100644 --- a/process/standards/process_reqs_list/index.rst +++ b/process/standards/process_reqs_list/index.rst @@ -17,14 +17,12 @@ Process Requirements List ######################### -Automation Status via Process Requirement Table -*********************************************** +Feature Status Tracker +********************** -All process requirements should be labelled with the priorization of automation implementation: +For a detailed overview of deliverable status per module and process area, see +:doc:`../feature_and_process_status`. -- A label "manual" means nothing to do, because it must be fulfilled manually (e.g. by filling attributes). It can be added a prio (to denote that this req is a must for v0.5 add "prio_1") -- A label "done_automation" means nothing to do, because it already works. Note that in docs-as-code repository there are tool requirements linking to the process requirements with an "Implemented" attribute. -- A label "prio_*_automation" means the prio 1, 2, ... labelled requirement shall be implemented in this order. Prio 1 is everything we need for the re-audit, prio 2 could be done manually as a fallback, prio 3 is nice to have ... .. needtable:: :style: table