Files
demo-epb/docs/diagrams/SWA-001-2.svg
T
Stefan Lohmaier 4351dfa4e1
Validate / build-and-test (push) Successful in 30s
feat: Safety Manager + Traceability + PlantUML in CI
- Implement Safety Manager (SWA-001, ASIL-D): Hill-Hold + Auto-Apply
  state machine, 13 unit tests
- Update SWA-002 + SWA-001 link coverage so all SWE reqs are covered
- New tool: tools/traceability.py — Markdown-frontmatter-basierter
  Traceability-Checker + HTML/JSON-Matrix-Generator (Doorstop-Format ohne
  Doorstop-Dependency)
- New tool: tools/render_plantuml.py — extrahiert PlantUML-Bloecke aus
  arch/**.md und rendert via plantuml.com zu SVG
- validate.yml: neue Steps Traceability-Check, Matrix-Publish, PlantUML-
  Render; uploaded als Gitea-Artefakte
2026-05-11 23:51:55 -07:00

1 line
7.2 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="STATE" height="405px" preserveAspectRatio="none" style="width:537px;height:405px;background:#FFFFFF;" version="1.1" viewBox="0 0 537 405" width="537px" zoomAndPan="magnify"><?plantuml 1.2026.4beta2?><defs/><g><g class="start_entity" data-qualified-name=".start." data-source-line="1" id="ent0002"><ellipse cx="257.47" cy="16" fill="#222222" rx="10" ry="10" style="stroke:#222222;stroke-width:1;"/></g><g class="entity" data-qualified-name="Idle" id="ent0003"><rect fill="#F1F1F1" height="50" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:0.5;" width="50" x="232.47" y="87"/><line style="stroke:#181818;stroke-width:0.5;" x1="232.47" x2="282.47" y1="113.2969" y2="113.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="25.5186" x="244.7107" y="104.9951">Idle</text></g><g class="entity" data-qualified-name="HillHoldArmed" id="ent0005"><rect fill="#F1F1F1" height="50" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:0.5;" width="120.5361" x="117.2" y="214"/><line style="stroke:#181818;stroke-width:0.5;" x1="117.2" x2="237.7361" y1="240.2969" y2="240.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="100.5361" x="127.2" y="231.9951">HillHoldArmed</text></g><g class="entity" data-qualified-name="HillHoldActive" id="ent0007"><rect fill="#F1F1F1" height="50" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:0.5;" width="117.6172" x="70.66" y="341"/><line style="stroke:#181818;stroke-width:0.5;" x1="70.66" x2="188.2772" y1="367.2969" y2="367.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="97.6172" x="80.66" y="358.9951">HillHoldActive</text></g><g class="entity" data-qualified-name="AutoApplyArmed" id="ent0010"><rect fill="#F1F1F1" height="50" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:0.5;" width="138.501" x="294.22" y="214"/><line style="stroke:#181818;stroke-width:0.5;" x1="294.22" x2="432.721" y1="240.2969" y2="240.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="118.501" x="304.22" y="231.9951">AutoApplyArmed</text></g><g class="entity" data-qualified-name="AutoApplyTriggered" id="ent0012"><rect fill="#F1F1F1" height="50" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:0.5;" width="159.8701" x="298.54" y="341"/><line style="stroke:#181818;stroke-width:0.5;" x1="298.54" x2="458.4101" y1="367.2969" y2="367.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="139.8701" x="308.54" y="358.9951">AutoApplyTriggered</text></g><!--link *start* to Idle--><g class="link" data-entity-1="ent0002" data-entity-2="ent0003" data-link-type="dependency" data-source-line="1" id="lnk4"><path d="M257.47,26.36 C257.47,40.29 257.47,60.95 257.47,80.65" fill="none" id="*start*-to-Idle" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="257.47,86.65,261.47,77.65,257.47,81.65,253.47,77.65,257.47,86.65" style="stroke:#181818;stroke-width:1;"/></g><!--link Idle to HillHoldArmed--><g class="link" data-entity-1="ent0003" data-entity-2="ent0005" data-link-type="dependency" data-source-line="2" id="lnk6"><path d="M232.43,117.51 C206.33,123.69 166.74,137.57 148.47,167 C139.42,181.59 143.4839,194.5432 153.0939,208.7232" fill="none" id="Idle-to-HillHoldArmed" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="156.46,213.69,154.7221,203.9957,153.6549,209.551,148.0996,208.4838,156.46,213.69" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="170.0791" x="149.47" y="180.0669">grade&gt;5% &amp; v=0 &amp; brake</text></g><!--link HillHoldArmed to HillHoldActive--><g class="link" data-entity-1="ent0005" data-entity-2="ent0007" data-link-type="dependency" data-source-line="3" id="lnk8"><path d="M168.1,264.4 C159.65,286.42 149.4213,313.0589 140.9713,335.0589" fill="none" id="HillHoldArmed-to-HillHoldActive" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="138.82,340.66,145.781,333.6926,140.6128,335.9925,138.3129,330.8242,138.82,340.66" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="97.1636" x="157.47" y="307.0669">brake released</text></g><!--link HillHoldActive to Idle--><g class="link" data-entity-1="ent0007" data-entity-2="ent0003" data-link-type="dependency" data-source-line="4" id="lnk9"><path d="M95.23,340.6 C57.59,310.69 6,258.47 34.47,214 C78.82,144.74 177.5871,123.306 226.0771,116.566" fill="none" id="HillHoldActive-to-Idle" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="232.02,115.74,222.555,113.0172,227.0676,116.4284,223.6564,120.941,232.02,115.74" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="63.8003" x="35.47" y="243.5669">v&gt;2 km/h</text></g><!--link Idle to AutoApplyArmed--><g class="link" data-entity-1="ent0003" data-entity-2="ent0010" data-link-type="dependency" data-source-line="5" id="lnk11"><path d="M282.73,129.7 C296.22,139.48 312.48,152.69 324.47,167 C336.21,181.01 343.5094,193.6833 350.3794,208.1033" fill="none" id="Idle-to-AutoApplyArmed" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="352.96,213.52,352.7002,203.6746,350.8095,209.0061,345.4779,207.1154,352.96,213.52" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="113.2041" x="337.47" y="180.0669">engine_off &amp; v=0</text></g><!--link AutoApplyArmed to AutoApplyTriggered--><g class="link" data-entity-1="ent0010" data-entity-2="ent0012" data-link-type="dependency" data-source-line="6" id="lnk13"><path d="M366.4,264.4 C369.04,286.42 372.1951,312.7027 374.8351,334.7027" fill="none" id="AutoApplyArmed-to-AutoApplyTriggered" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="375.55,340.66,378.4492,331.2475,374.9543,335.6956,370.5062,332.2007,375.55,340.66" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="41.9263" x="372.47" y="307.0669">t&gt;=2s</text></g><!--link AutoApplyTriggered to Idle--><g class="link" data-entity-1="ent0012" data-entity-2="ent0003" data-link-type="dependency" data-source-line="7" id="lnk14"><path d="M403.06,340.65 C440.05,301.06 501.43,221.65 459.47,167 C437.92,138.93 337.9511,123.0547 288.6911,116.7247" fill="none" id="AutoApplyTriggered-to-Idle" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="282.74,115.96,291.1568,121.0745,287.6992,116.5973,292.1764,113.1397,282.74,115.96" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="47.9438" x="473.47" y="243.5669">applied</text></g><?plantuml-src ROun2y8m48Nt_8fRT12AKd0H6iZMxcuY4iqrXbwRaiQ0_zuOAPhYyk1utyUzq-OCHS6XKOJi7Ucg3L5jIGdNeu83Q2SLylqArX2gNSohanso7Cl4cpS1evb0S4We9rHiqS-V8nXu2Ls_lNz7Y8UtOXpfEQ_0GPi1BxPjFplOWiYaepDQeqkYvrKviJ_LptyP6uFg1G00?></g></svg>