Integrated manufacturing quality platform — FMEA, SPC, and Control Plan tools over a shared core, aligned with the AIAG / IATF-16949 core quality toolset.
Why: the AIAG core quality tools are normally scattered across disconnected spreadsheets and one-off apps. This platform brings them under one URL, one theme, and one quality bar — risk analysis (FMEA) and process control (SPC) side by side, sharing a typed core.
Shared by both tools: a single quality_core/io library (covered at 100%, CI-gated) owns
CSV/Excel/PDF export and validated CSV/Excel ingest — written once and reused across FMEA and SPC,
so formula-injection escaping and friendly upload validation are guaranteed identical in both.
🔗 Live demo: https://quality-platform-nplyhc6rvsd3bfw6q9vvkd.streamlit.app/ — one URL, Home + FMEA + the three SPC workflows.
This is a monorepo. Two previously standalone apps now live here with their full commit history preserved (the histories are part of the engineering story):
| App | Path | What it does |
|---|---|---|
| FMEA Risk Analyzer | apps/fmea/ |
Failure Mode & Effects Analysis — RPN / AIAG-VDA Action Priority, exports |
| Manufacturing SPC Dashboard | apps/spc/ |
Statistical Process Control — control charts (incl. c-chart), capability with a stability gate, live simulation |
Migrated from the standalone repos
fmea-risk-analyzerandmanufacturing-spc-dashboard, which are now archived → moved here.
Each app still runs unchanged from its own directory:
cd apps/fmea && streamlit run app.py
cd apps/spc && streamlit run app.pyBoth apps are also mounted under one st.navigation shell — a single URL with a landing page,
FMEA, and the three SPC workflows:
uv run streamlit run app.pyapp.py # unified platform shell (st.navigation)
shell/ # landing page + shared chrome
packages/
quality-core/ # shared schema, IO, and theme
apps/
fmea/ # FMEA Risk Analyzer (full original history)
spc/ # Manufacturing SPC Dashboard (full original history)
The whole workspace shares one quality bar (ruff.toml, mypy.ini, pytest config in
pyproject.toml). The gate runs locally and in CI:
uv sync # install workspace + dev tools (locked)
uv run ruff check . # lint
uv run mypy # type-check
uv run pytest --cov # tests + coverage across packages + appsCI (.github/workflows/ci.yml) runs exactly this gate on every push and pull request to main,
on Python 3.11 via astral-sh/setup-uv. It also enforces
a dedicated SPC coverage gate — the testable SPC surface (engine + simulation + visualizer) must
stay ≥95% covered.
Branch protection:
mainshould require the CI / gate status check to pass before merging (GitHub → Settings → Branches → add a rule formain, require status checks). This makes the gate mandatory — the protection SPC never had as a standalone repo.