Files
Orchestrator/bahn/project-audit/scripts/confluence-push-meilensteinplan.py
ankn a5f8fb49ab Migrate all repos into monorepo context folders
Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
2026-06-30 20:39:52 +02:00

441 lines
28 KiB
Python

"""Pusht Meilensteinplan 12 Monate als Confluence-Seite 27."""
import urllib.request, json, ssl, urllib.parse
from pathlib import Path
secrets = {}
with open("project-audit/.secrets", "r", encoding="utf-8-sig") as f:
for line in f:
if "=" in line and not line.startswith("#"):
k, v = line.strip().split("=", 1)
secrets[k.strip()] = v.strip()
TOKEN = secrets.get("CONFLUENCE_TOKEN", "")
BASE = "https://arija-confluence.jaas.service.deutschebahn.com/rest/api"
SPACE = "BES"
PARENT = "581013135"
TITLE = "27. Meilensteinplan 12 Monate (Jun 2026 - Mai 2027)"
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
html = """<h1>Meilensteinplan pathOS &mdash; 12 Monate</h1>
<p><strong>Stand:</strong> 2026-05-12 | <strong>Status:</strong> ENTWURF<br/>
<strong>Vision:</strong> pathOS als Kernplattform eines integrierten InfraGO-Bestellportals<br/>
<strong>Priorit&auml;ten:</strong> Stabilit&auml;t &rarr; Regulatorik &rarr; Kunden-Features<br/>
<strong>Kapazit&auml;t:</strong> ~400 Issues/Monat (alle Teams), ~35 Personen</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p><strong>4 Phasen, 13 Meilensteine:</strong> Stabilisieren &rarr; Normalbetrieb + Regulatorik &rarr; Skalieren + Reorg &rarr; Integrieren + Vision</p>
</ac:rich-text-body></ac:structured-macro>
<h2>Grafische &Uuml;bersicht: Timeline</h2>
<table style="width:100%; border-collapse:collapse; font-size:12px;">
<tr style="background:#f0f0f0;">
<th style="width:18%; padding:4px; border:1px solid #ccc;">Meilenstein</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Jun</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Jul</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Aug</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Sep</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Okt</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Nov</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Dez</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Jan</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Feb</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">M&auml;r</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Apr</th>
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Mai</th>
</tr>
"""
html += """<tr style="background:#fff3e0; font-weight:bold;">
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 1: STABILISIEREN</td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M1: Spring Boot 4 &#9888;</td>
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M2: Bug-Rate &lt;25%</td>
<td style="background:#ff9800; border:1px solid #ccc;"></td>
<td style="background:#ff9800; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M3: F&uuml;hrungswechsel</td>
<td style="border:1px solid #ccc;"></td>
<td style="background:#1565c0; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
"""
html += """<tr style="background:#e3f2fd; font-weight:bold;">
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 2: NORMALBETRIEB + REGULATORIK</td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M4: SL Silber Plus &#9888;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M5: Abrechnung TTT</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#ff9800; border:1px solid #ccc;"></td>
<td style="background:#ff9800; border:1px solid #ccc;"></td>
<td style="background:#ff9800; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M6: NA&Auml; produktiv</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#4caf50; border:1px solid #ccc;"></td>
<td style="background:#4caf50; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M7: OpsDev formiert</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#7b1fa2; border:1px solid #ccc;"></td>
<td style="background:#7b1fa2; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
"""
html += """<tr style="background:#e8f5e9; font-weight:bold;">
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 3: SKALIEREN + REORG</td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M8: FplJ 28 &#9888;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#e53935; border:1px solid #ccc;"></td>
<td style="background:#e53935; border:1px solid #ccc;"></td>
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M9: Rechnungsbeginn TTT &#9888;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M10: Reorg abgeschlossen</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#7b1fa2; border:1px solid #ccc;"></td>
<td style="background:#7b1fa2; border:1px solid #ccc;"></td>
<td style="background:#7b1fa2; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
"""
html += """<tr style="background:#fce4ec; font-weight:bold;">
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 4: INTEGRIEREN + VISION</td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M11: TrassenOrder-Integr.</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#1565c0; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M12: Plattform-Vision</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#1565c0; border:1px solid #ccc;"></td>
<td style="background:#1565c0; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
</tr>
<tr>
<td style="padding:4px; border:1px solid #ccc;">M13: Kundenzufriedenheit</td>
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
<td style="background:#4caf50; border:1px solid #ccc;"></td>
<td style="background:#4caf50; border:1px solid #ccc;"></td>
<td style="background:#4caf50; border:1px solid #ccc; text-align:center; color:white;">&#9733;</td>
</tr>
</table>
<p><strong>Legende:</strong> &#9733; = Deadline | &#9888; = Harte externe Deadline |
<span style="background:#e53935; color:white; padding:2px 6px;">MUSS</span>
<span style="background:#ff9800; color:white; padding:2px 6px;">HOCH</span>
<span style="background:#4caf50; color:white; padding:2px 6px;">Feature</span>
<span style="background:#1565c0; color:white; padding:2px 6px;">Strategie</span>
<span style="background:#7b1fa2; color:white; padding:2px 6px;">Reorg</span></p>
"""
html += """
<h2>Phase 1: STABILISIEREN (Jun &ndash; Jul 2026)</h2>
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
<p>Technische Schulden abbauen, Hypercare beenden, F&uuml;hrungswechsel vorbereiten</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M1: Spring Boot 4 abgeschlossen (30. Jun 2026) &#9888;</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>SV, AV, IFP auf Spring Boot 4</td><td>CIB (Saurav, Hans-Henning)</td><td>&#128260; In Arbeit</td></tr>
<tr><td>CI, AV-Trasse auf Spring Boot 4</td><td>Zero (O2CZERO-7043)</td><td>&#128260; In Arbeit</td></tr>
<tr><td>Alle Services auf Java 21</td><td>Alle</td><td>Teilweise</td></tr>
<tr><td>Regressionstests nach Upgrade</td><td>QA + Teams</td><td>Offen</td></tr>
</table>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Risiko:</strong> EOL 3.5 ist Juni 2026 &mdash; kein Security-Support mehr danach. MUSS-Termin.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M2: Bug-Rate Portal unter 25% (31. Jul 2026)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>Entkopplung Zuglaufpunkte/Zugcharakteristik (Hauptursache)</td><td>404</td><td>Offen</td></tr>
<tr><td>Fehlermeldungen-Konzept umsetzen</td><td>404</td><td>Offen</td></tr>
<tr><td>E2E-Tests (Playwright) f&uuml;r Top-10-Flows</td><td>404</td><td>Offen</td></tr>
<tr><td>Testumgebung mit TPN dauerhaft verf&uuml;gbar</td><td>404 + OPs</td><td>Offen</td></tr>
</table>
<h3>M3: F&uuml;hrungswechsel + Hypercare-Ende (Jul 2026)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>Neue F&uuml;hrung eingesetzt</td><td>Management</td><td>Offen</td></tr>
<tr><td>Hypercare-Kriterien definiert und erf&uuml;llt</td><td>PO + BO</td><td>Offen</td></tr>
<tr><td>&Uuml;bergang zu Normalbetrieb dokumentiert</td><td>Alle</td><td>Offen</td></tr>
<tr><td>Support-Prozesse definiert (Eskalation, SLAs)</td><td>BSSUPPORT + OPs</td><td>Offen</td></tr>
</table>
"""
html += """
<h2>Phase 2: NORMALBETRIEB + REGULATORIK (Aug &ndash; Nov 2026)</h2>
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
<p>Vertragliche Pflichten erf&uuml;llen, Abrechnung stabilisieren, Team-Reorg starten</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M4: Service Level Silber Plus (31. Aug 2026) &#9888;</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>Netcool-Anbindung produktiv</td><td>OPs</td><td>&#128260; In Arbeit</td></tr>
<tr><td>Monitoring-Konzept abgeschlossen</td><td>OPs + Zero</td><td>&#128260; In Arbeit</td></tr>
<tr><td>Disaster-Recovery-Test 3 bestanden</td><td>OPs</td><td>&#128260; Validierung</td></tr>
<tr><td>Deployment-Automatisierung (Smoketests)</td><td>OPs/DevOps</td><td>&#128260; In Arbeit</td></tr>
<tr><td>Secret-Rotation implementiert</td><td>OPs</td><td>Offen</td></tr>
<tr><td>Kubernetes-Namespaces umgestellt</td><td>OPs</td><td>&#128260; In Arbeit</td></tr>
</table>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Risiko:</strong> Vertragsverletzung bei Vers&auml;umnis. Keine Verhandlungsmasse.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M5: Abrechnung TTT produktionsreif (31. Okt 2026)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>20h-Zug Abrechnung (TTTSOL-2149) entblockt</td><td>CIB</td><td>&#10060; Blocked</td></tr>
<tr><td>Zugtrasse mit Umleitung ohne VT-Wechsel (TTTSOL-2147)</td><td>CIB</td><td>Offen</td></tr>
<tr><td>Abrechnung fremde Infrastruktur (TTTSOL-2148)</td><td>CIB</td><td>Offen</td></tr>
<tr><td>Neue Zugnummer Umleitungsfall (TTTSOL-2035)</td><td>CIB</td><td>&#128260; In Arbeit</td></tr>
<tr><td>VDV-Erweiterung f&uuml;r AC Trasse (strategisch)</td><td>CIB + Zero</td><td>Offen</td></tr>
<tr><td>Alle 41 Abrechnungs-Tickets priorisiert</td><td>CIB PO</td><td>Offen</td></tr>
</table>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<p>Rechnungsbeginn TTT ist Januar 2027. Bis Oktober m&uuml;ssen kritische F&auml;lle gel&ouml;st sein. Nov/Dez = Buffer f&uuml;r Regressionstests.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M6: NA&Auml; implizite Annahme produktiv (30. Sep 2026)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>O2CCIB-6931 assigned und implementiert</td><td>CIB</td><td>&#9888; Geschoben</td></tr>
<tr><td>Prozess-Design mit Fachbereich abgestimmt</td><td>CIB BA</td><td>Offen</td></tr>
<tr><td>E2E-Test NA&Auml;-Szenario</td><td>CIB + 404</td><td>Offen</td></tr>
</table>
<h3>M7: Team-Reorg Phase 1 &mdash; OpsDev formiert (30. Sep 2026)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>OpsDev-Team definiert (~6 Personen)</td><td>Management + Leads</td><td>Offen</td></tr>
<tr><td>OpsDev-Lead benannt</td><td>Management</td><td>Offen</td></tr>
<tr><td>Jan Lubenow Wissenstransfer (50% abgeschlossen)</td><td>DevOps</td><td>&#9888; Kritisch</td></tr>
<tr><td>Bug-Triage-Prozess definiert</td><td>OpsDev-Lead</td><td>Offen</td></tr>
<tr><td>OPs-Rotation beendet (feste Zuordnung)</td><td>Management</td><td>Offen</td></tr>
</table>
"""
html += """
<h2>Phase 3: SKALIEREN + REORG (Dez 2026 &ndash; Feb 2027)</h2>
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
<p>Fahrplanwechsel absichern, Team-Umstellung abschlie&szlig;en, Plattform-Denken etablieren</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M8: Fahrplanwechsel FplJ 28 (Dez 2026) &#9888;</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>GelV-Erweiterungen (TTT-Meilenstein)</td><td>CIB + Zero</td><td>Offen</td></tr>
<tr><td>OTN-Vergabe Fpl 2027 (TTTSOL-1683)</td><td>CIB</td><td>&#128260; In Arbeit</td></tr>
<tr><td>ujBau Funktionalit&auml;t</td><td>Alle</td><td>&#128260; In Arbeit</td></tr>
<tr><td>FplJ-28-spezifische Validierungen getestet</td><td>QA</td><td>Offen</td></tr>
<tr><td>Daten-Partitionierung (Performance)</td><td>CIB/Zero</td><td>Offen</td></tr>
</table>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Risiko:</strong> Fahrplanwechsel ist harter externer Termin. Kein Verschieben m&ouml;glich.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M9: Rechnungsbeginn TTT (Jan 2027) &#9888;</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>Alle kritischen Abrechnungsf&auml;lle gel&ouml;st (aus M5)</td><td>CIB</td><td>Abh&auml;ngig von M5</td></tr>
<tr><td>Rechnungslauf erfolgreich getestet (Staging)</td><td>CIB + QA</td><td>Offen</td></tr>
<tr><td>Monitoring f&uuml;r Abrechnungsfehler aktiv</td><td>OPs/OpsDev</td><td>Offen</td></tr>
<tr><td>Fallback-Prozess bei Abrechnungsfehlern definiert</td><td>CIB + BO</td><td>Offen</td></tr>
</table>
<h3>M10: Team-Reorg abgeschlossen (31. Jan 2027)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>2 fachliche Teams formiert (&quot;Bestellen&quot; + &quot;Verarbeiten&quot;)</td><td>Management</td><td>Offen</td></tr>
<tr><td>Service-Ownership klar zugeordnet</td><td>Team-Leads</td><td>Offen</td></tr>
<tr><td>PO-Struktur definiert</td><td>Management</td><td>Offen</td></tr>
<tr><td>Wissenstransfer abgeschlossen</td><td>Alle</td><td>Offen</td></tr>
<tr><td>Erste Sprints in neuer Struktur erfolgreich</td><td>Teams</td><td>Offen</td></tr>
<tr><td>Metriken definiert (Bug-Rate, Durchlaufzeit, Deploy-Freq.)</td><td>BO + Leads</td><td>Offen</td></tr>
</table>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<p>Reorg NACH Fahrplanwechsel abschlie&szlig;en &mdash; nicht w&auml;hrend des kritischen Zeitraums umbauen.</p>
</ac:rich-text-body></ac:structured-macro>
"""
html += """
<h2>Phase 4: INTEGRIEREN + VISION (Feb &ndash; Mai 2027)</h2>
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
<p>TrassenOrder-Learnings integrieren, Plattform-Architektur vorbereiten, Kundenzufriedenheit steigern</p>
</ac:rich-text-body></ac:structured-macro>
<h3>M11: TrassenOrder-Integration definiert (28. Feb 2027)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>TrassenOrder Livegang evaluiert (Q4 2026)</td><td>TraPo + BO</td><td>Offen</td></tr>
<tr><td>Abgrenzung pathOS/TrassenOrder dokumentiert</td><td>POs + Architektur</td><td>Offen</td></tr>
<tr><td>API-Vertrag zwischen pathOS und TrassenOrder</td><td>CIB/Zero + TraPo</td><td>Offen</td></tr>
<tr><td>Entscheidung: GelV bei pathOS oder TraPo?</td><td>BO + Management</td><td>Offen</td></tr>
<tr><td>&Uuml;bernahme-Szenario TraPo &rarr; pathOS-Team bewertet</td><td>Management</td><td>Offen</td></tr>
</table>
<h3>M12: Plattform-Architektur-Vision (31. M&auml;rz 2027)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>Architektur-Vision &quot;Integriertes Bestellportal&quot; dokumentiert</td><td>Architektur + BO</td><td>Offen</td></tr>
<tr><td>Kernkomponenten als integrierbare Module identifiziert</td><td>Architektur</td><td>Offen</td></tr>
<tr><td>Schnittstellen-Strategie (API-First) definiert</td><td>Architektur + Teams</td><td>Offen</td></tr>
<tr><td>Roadmap f&uuml;r Anlage + Nebenleistungen (n&auml;chste 12M)</td><td>BO + POs</td><td>Offen</td></tr>
<tr><td>TPN-Abl&ouml;sung Zeitplan konkretisiert</td><td>POs + Kunden</td><td>Offen</td></tr>
</table>
<h3>M13: Kundenzufriedenheit messbar verbessert (Mai 2027)</h3>
<table>
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
<tr><td>Bug-Rate Portal unter 15% (von 33%)</td><td>Team &quot;Bestellen&quot;</td><td>Offen</td></tr>
<tr><td>Vorpr&uuml;fung Portal produktiv</td><td>CIB + 404</td><td>Offen</td></tr>
<tr><td>Expertenmodus verf&uuml;gbar</td><td>404</td><td>Offen</td></tr>
<tr><td>&Uuml;bersichtsseite Vorg&auml;nge live</td><td>404</td><td>Offen</td></tr>
<tr><td>Kundenfeedback-Loop etabliert</td><td>PO + UX</td><td>Offen</td></tr>
<tr><td>NPS oder CSAT Baseline gemessen</td><td>PO + BO</td><td>Offen</td></tr>
</table>
"""
html += """
<h2>Kritischer Pfad &amp; Abh&auml;ngigkeiten</h2>
<table>
<tr><th>Pfad</th><th>Abh&auml;ngigkeit</th><th>Konsequenz bei Verz&ouml;gerung</th></tr>
<tr><td>M1 &rarr; M4</td><td>Spring Boot 4 muss fertig sein f&uuml;r SL Silber+ (Security-Compliance)</td><td>Vertragsverletzung</td></tr>
<tr><td>M5 &rarr; M9</td><td>Abrechnung muss bis Okt stehen f&uuml;r Rechnungsbeginn Jan</td><td>Falsche Rechnungen an Kunden</td></tr>
<tr><td>M3 &rarr; M7 &rarr; M10</td><td>F&uuml;hrungswechsel erm&ouml;glicht Reorg, Reorg nach FplJ abschlie&szlig;en</td><td>Produktivit&auml;tsverlust</td></tr>
<tr><td>M8 (extern)</td><td>Fahrplanwechsel ist Fixpunkt &mdash; alles andere drumherum planen</td><td>Fahrplan gef&auml;hrdet</td></tr>
</table>
<h2>Risiko-Matrix</h2>
<table>
<tr><th>Risiko</th><th>Wahrscheinlichkeit</th><th>Impact</th><th>Mitigation</th></tr>
<tr style="background:#ffcdd2;"><td>Abrechnung bleibt blocked (20h-Zug)</td><td>HOCH</td><td>KRITISCH</td><td>Eskalation an TTT-Programm, Workaround</td></tr>
<tr style="background:#ffcdd2;"><td>Bug-Rate 404 steigt weiter</td><td>HOCH</td><td>HOCH</td><td>Entkopplung Zuglaufpunkte priorisieren</td></tr>
<tr><td>SL Silber+ Deadline gerissen</td><td>Mittel</td><td>HOCH</td><td>Fr&uuml;h mit UKA abstimmen, Teilabnahme?</td></tr>
<tr><td>Reorg destabilisiert Teams</td><td>Mittel</td><td>HOCH</td><td>Sukzessiv, nicht Big Bang. Nach FplJ.</td></tr>
<tr><td>Jan Lubenow f&auml;llt aus (SPOF)</td><td>Niedrig</td><td>KRITISCH</td><td>Wissenstransfer ab sofort priorisieren</td></tr>
<tr><td>TrassenOrder scheitert/pivotiert</td><td>Mittel</td><td>MITTEL</td><td>pathOS bleibt autark, GelV intern weiter</td></tr>
<tr><td>Spring Boot 4 nicht rechtzeitig</td><td>Niedrig</td><td>KRITISCH</td><td>Fokus, keine Ablenkung</td></tr>
</table>
<h2>Reorg-Zeitplan (sukzessiv)</h2>
<table>
<tr><th>Zeitraum</th><th>Schritt</th><th>Risiko</th></tr>
<tr><td><strong>Jul 2026</strong></td><td>F&uuml;hrungswechsel, Vision kommunizieren</td><td>Niedrig</td></tr>
<tr><td><strong>Aug-Sep 2026</strong></td><td>OpsDev-Team formieren (aus OPs + DevOps-Teilen)</td><td>Mittel</td></tr>
<tr><td><strong>Okt 2026</strong></td><td>OPs-Rotation beenden, feste Zuordnung</td><td>Niedrig</td></tr>
<tr><td><strong>Nov 2026</strong></td><td>Fachliche Teams vorbereiten (Service-Mapping, Wissenstransfer)</td><td>Mittel</td></tr>
<tr><td><strong>Jan 2027</strong></td><td>Umstellung auf 2 fachliche Teams (&quot;Bestellen&quot; + &quot;Verarbeiten&quot;)</td><td>Hoch</td></tr>
<tr><td><strong>Feb 2027</strong></td><td>Erste Sprints in neuer Struktur, Nachjustierung</td><td>Mittel</td></tr>
<tr><td><strong>M&auml;rz 2027</strong></td><td>TrassenOrder-Team-Integration bewerten</td><td>Mittel</td></tr>
</table>
<h2>Metriken zur Erfolgsmessung</h2>
<table>
<tr><th>Metrik</th><th>Baseline (Mai 2026)</th><th>Ziel Sep 2026</th><th>Ziel Jan 2027</th><th>Ziel Mai 2027</th></tr>
<tr><td>Bug-Rate Portal</td><td>33%</td><td>25%</td><td>20%</td><td>&lt;15%</td></tr>
<tr><td>Bug-Rate Gesamt</td><td>20%</td><td>18%</td><td>15%</td><td>&lt;12%</td></tr>
<tr><td>Deployment-Frequenz</td><td>? (messen!)</td><td>1x/Woche</td><td>2x/Woche</td><td>T&auml;glich m&ouml;glich</td></tr>
<tr><td>Mean Time to Recovery</td><td>? (messen!)</td><td>&lt;4h</td><td>&lt;2h</td><td>&lt;1h</td></tr>
<tr><td>Offene Highest-Tickets</td><td>8+</td><td>&lt;5</td><td>&lt;3</td><td>0</td></tr>
<tr><td>SPOF-Index (&gt;30%)</td><td>2 (Jan, Steven)</td><td>1</td><td>0</td><td>0</td></tr>
<tr><td>Kundenzufriedenheit</td><td>Nicht gemessen</td><td>Baseline</td><td>+10 Pkt</td><td>+20 Pkt</td></tr>
</table>
<h2>Offene Entscheidungen</h2>
<table>
<tr><th>#</th><th>Entscheidung</th><th>Deadline</th><th>Wer</th></tr>
<tr><td>1</td><td>Wer wird neue F&uuml;hrung?</td><td>Jun 2026</td><td>Management</td></tr>
<tr><td>2</td><td>OpsDev-Lead: Intern oder extern?</td><td>Jul 2026</td><td>Management</td></tr>
<tr><td>3</td><td>SV-Monolith: Aufteilen oder einem Team zuordnen?</td><td>Okt 2026</td><td>Architektur + BO</td></tr>
<tr><td>4</td><td>PO-Struktur: 1 pro Team oder &uuml;bergreifend?</td><td>Nov 2026</td><td>BO</td></tr>
<tr><td>5</td><td>TrassenOrder: Eigenes Team oder Integration?</td><td>Feb 2027</td><td>BO + Management</td></tr>
<tr><td>6</td><td>GelV-Ownership: pathOS oder TraPo?</td><td>Feb 2027</td><td>BO</td></tr>
<tr><td>7</td><td>N&auml;chste Dom&auml;ne nach Trasse (Anlage? Nebenleistungen?)</td><td>M&auml;rz 2027</td><td>BO + Strategie</td></tr>
</table>
<hr/>
<p><em>Erstellt im Rahmen des pathOS Portfolio-Audits. Kontakt: Andre Knie</em></p>
"""
# Push to Confluence
def api_request(url, method="GET", data=None):
req = urllib.request.Request(url, method=method)
req.add_header("Authorization", f"Bearer {TOKEN}")
req.add_header("Content-Type", "application/json")
if data:
req.data = json.dumps(data).encode("utf-8")
return json.loads(urllib.request.urlopen(req, context=ctx, timeout=30).read().decode("utf-8"))
# Check if page exists
search_url = f"{BASE}/content?spaceKey={SPACE}&title={urllib.parse.quote(TITLE)}&type=page"
req = urllib.request.Request(search_url)
req.add_header("Authorization", f"Bearer {TOKEN}")
resp = urllib.request.urlopen(req, context=ctx, timeout=30)
search_data = json.loads(resp.read().decode("utf-8"))
if search_data.get("results"):
# Update existing page
page_id = search_data["results"][0]["id"]
ver_url = f"{BASE}/content/{page_id}?expand=version"
req2 = urllib.request.Request(ver_url)
req2.add_header("Authorization", f"Bearer {TOKEN}")
ver_data = json.loads(urllib.request.urlopen(req2, context=ctx, timeout=30).read().decode("utf-8"))
version = ver_data["version"]["number"] + 1
body = json.dumps({
"version": {"number": version},
"title": TITLE,
"type": "page",
"body": {"storage": {"value": html, "representation": "storage"}}
}).encode("utf-8")
req3 = urllib.request.Request(f"{BASE}/content/{page_id}", method="PUT", data=body)
req3.add_header("Authorization", f"Bearer {TOKEN}")
req3.add_header("Content-Type", "application/json")
result = json.loads(urllib.request.urlopen(req3, context=ctx, timeout=30).read().decode("utf-8"))
print(f"Aktualisiert: https://arija-confluence.jaas.service.deutschebahn.com/pages/viewpage.action?pageId={result['id']}")
else:
# Create new page
body = json.dumps({
"type": "page",
"title": TITLE,
"space": {"key": SPACE},
"ancestors": [{"id": PARENT}],
"body": {"storage": {"value": html, "representation": "storage"}}
}).encode("utf-8")
req3 = urllib.request.Request(f"{BASE}/content", method="POST", data=body)
req3.add_header("Authorization", f"Bearer {TOKEN}")
req3.add_header("Content-Type", "application/json")
result = json.loads(urllib.request.urlopen(req3, context=ctx, timeout=30).read().decode("utf-8"))
print(f"Erstellt: https://arija-confluence.jaas.service.deutschebahn.com/pages/viewpage.action?pageId={result['id']}")