|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
Last refreshed: 2026-08-22 (test inventory and execution evidence refresh).
Status: First draft, 2026-05-02. Populated during Phase 7 of docs/QUALIFICATION_ROADMAP.md. Subject to revision after the first external assessor review.
DO-178C reference: Section 11.5 (SQAP content) and Section 8 (Software Quality Assurance Process). IEC 61508-3 reference: Clause 6.2.5 (Software quality assurance). ISO 26262-2 reference: Clause 5 and ISO 26262-8 Clause 5 (Quality management).
Owner: Brighton Sikarskie (single developer / maintainer).
This is a single-developer project. Brighton Sikarskie is the developer, the reviewer, and the SQA function. There is no separate SQA team today.
DO-178C 8.1.b and IEC 61508-1 cl. 8.2.12 require that the SQA function be independent of the development function. That independence is out of scope, permanently, per docs/CERTIFICATION_SCOPE.md (MIT-licensed personal project; paid third-party assessor engagement is not pursued). The mitigation, recorded throughout the planning document family, is:
The single developer holds:
When the assessor role is filled the authority for deviation acceptance and final acceptance transitions to the assessor; day-to-day per-PR authority remains with the developer.
The "process" being audited is the development life cycle defined by docs/QUALIFICATION_ROADMAP.md and docs/STYLE_GUIDE.md. Process-audit evidence is generated automatically by the following tools, all of which run on every commit and every PR:
| Audit | Tool / artifact |
|---|---|
| Roadmap progress audit | scripts/report/roadmap_stats.py --check (refuses stale ROADMAP summaries) |
| Pre-commit gate audit | scripts/git/pre-commit exit status; CI mirror in pre-commit-checks job |
| Coding-standard audit | clang-format, clang-tidy, cppcheck |
| MISRA-C 2012 process audit | just quality::local::misra quarterly + docs/MISRA.md baseline table |
| World-tag (architecture) audit | scripts/checks/check_world_tags.py |
| Obsolete-standards audit | scripts/checks/check_obsolete_standards.py (rejects superseded safety-standard references) |
| MC/DC vector pattern audit on tests | scripts/checks/check_mcdc_block.py |
| HUM citation audit | scripts/checks/cite_check.py |
| Doxygen @since audit | scripts/checks/check-since-version.py |
| Copyright header audit | scripts/checks/check-copyright.py |
A failed gate is the audit finding. The CI log is the audit record; the corrective-action loop is the developer's response on the same PR.
The "product" is the firmware itself plus its documentation. Product audits are the periodic refresh of the gap registers:
| Audit | Refresh tool / artifact | Cadence |
|---|---|---|
| Doxygen completeness | scripts/checks/doxy_audit.py -> docs/DOXYGEN_GAPS.csv + docs/DOXYGEN_GAPS.md | Per release |
| MC/DC coverage | just quality::local::mcdc -> build/mcdc-report/summary.txt + docs/MCDC_GAPS.md | Per PR (CI) + per release |
| MISRA conformance | just quality::local::gate misra -> build/misra/results.txt + .github/misra-baseline.txt ratchet | Quarterly |
| Stack usage | just quality::local::stack_usage -> build/stack_usage.csv | Per release |
| SOUP register | Per-component review under docs/SOUP/<name>.md | At most 12 months per file |
| Hardware-smoke results | just hil::run console/CI log + /tmp/hil_all_* diagnostics | Pre-push or manual HIL workflow (docs/HIL_DEVELOPER_WORKFLOW.md) |
The refresh cadence is the project's product-audit cadence. A stale gap register is itself a finding.
Per DO-178C 8.2 the SQA function performs a conformance review before each baseline release. The review confirms:
The conformance-review checklist will be added under docs/qualification/release/<tag>/conformance.md at the time of the first release. No releases exist today.
DO-178C 8.2.b "transition criteria audits" are interpreted in this project as the per-phase acceptance gates defined in docs/QUALIFICATION_ROADMAP.md Section 3:
Each transition is gated on the tool-driven evidence above. The SQA function (the developer for now) confirms the gate before declaring a phase complete.
The audits below run automatically on every commit and every PR, producing an audit trail without manual SQA intervention.
The hook at scripts/git/pre-commit runs the following audits in sequence and refuses the commit on any failure:
.github/workflows/firmware.yml runs the following jobs and blocks merge on any failure:
| Job | Purpose |
|---|---|
| ascii | Repository-wide ASCII scan. |
| copyright | Repository-wide copyright header scan. |
| since | @since tag enforcement on every public header. |
| format | clang-format --check. |
| tidy | clang-tidy --check. |
| unit-tests | Host unit tests via ctest. |
| coverage | Whole-tree gcovr gate (just quality::gate::run coverage-tree). |
| mcdc | clang-18 -fcoverage-mcdc gate against .github/mcdc-baseline.txt. |
| pre-commit-checks | Repository-wide mirror of the per-commit hook. |
| build-discover | Enumerates example apps for matrix build. |
| build-cross | Cross-build every example with arm-none-eabi-gcc. |
| docs | Doxygen warning gate. |
| cppcheck | Repository-wide cppcheck. |
| coverage-comment | PR-only per-file MC/DC delta comment. |
A failed gate is a non-conformance. Resolution path:
There is no separate non-conformance ticket workflow; the GitHub PR review thread serves that purpose.
Per DO-178C 8.3 a final software conformity review is performed before the SAS is signed. For this project:
| Record | Source | Retention |
|---|---|---|
| Audit trail of all changes | git log on the GitHub remote | Indefinite |
| Per-PR review history | GitHub PR conversation | Indefinite (GitHub default) |
| CI run logs | GitHub Actions run history | 90 days (GitHub default) |
| Coverage HTML report | Uploaded by coverage job | 14 days (configured retention) |
| MC/DC report | Uploaded by mcdc job | 14 days (configured retention) |
| MISRA audit baseline | .github/misra-baseline.txt + docs/MISRA.md | Versioned in git, indefinite |
| MC/DC measurement history | docs/MCDC.md measurement-history table | Versioned in git, indefinite |
| Doxygen completeness gap list | docs/DOXYGEN_GAPS.csv and docs/DOXYGEN_GAPS.md | Versioned in git, indefinite |
| Stack-usage report | build/stack_usage.csv (regenerated) + docs/STACK_USAGE.md table | Tables versioned, raw rebuilt |
| MISRA deviation register | docs/qualification/MISRA_DEVIATIONS.md | Versioned in git, indefinite |
| SOUP qualification basis | docs/SOUP/<name>.md per component | Versioned in git, indefinite |
| Per-release audit pack | docs/qualification/release/<tag>/ (planned) | Versioned in git, indefinite |
The git repository (and its GitHub mirror) is the long-term store. The qualification document set under docs/qualification/ is part of that repository and travels with it for the lifetime of the project. CI artifacts older than the configured retention windows are not preserved automatically; for any release that targets external certification, the release-time audit pack (docs/qualification/release/<tag>/) captures the artifacts that must outlive the CI window.