# Fail-closed Deployment-Runbook

Dieses Runbook erzeugt keine Signatur und sendet keine Transaktion. Es ist die
verbindliche Reihenfolge für eine spätere, manuell freigegebene Veröffentlichung.

## 1. Source-Release prüfen

```bash
npm ci --ignore-scripts
npm run build
npm test
npm run release:verify
npm audit --omit=dev --audit-level=high
```

Alle Befehle müssen erfolgreich enden. Der Hash aus
`RELEASE-MANIFEST.sha256` wird von zwei Personen mit dem veröffentlichten Wert
verglichen.

## 2. Ausgewählten Branch erneut bestätigen

Chain ID `1404` reicht nicht. Für Release 0.6.0 ist ausschließlich die durch den
Engineering-Explorer, RMS ChainPulse und WelshDAG bestätigte
`engineering-lineage` ausgewählt. Referenzblock
`316002` muss unmittelbar vor der Signatur über beide veröffentlichten
Endpunkte exakt diesen Hash liefern:

`0xcd4d2568e9cba6725329e8cf6d96217ace7acb03d71d9b519c8b2560bb6bb781`

```bash
BDAG_RPC_URL="https://first.example" \
BDAG_EXPECTED_BLOCK_NUMBER="..." \
BDAG_EXPECTED_BLOCK_HASH="0x..." \
npm run preflight:bdag
```

Der gleiche Befehl wird mit `https://rms-bdag-rpc.de/api/rpc-live` und
`https://rpc.welshdag.trade` wiederholt. Zusätzlich muss
`https://explorer.blockdag.engineering/api/v2/blocks/316002` denselben
Referenzhash anzeigen. Neben Chain und Referenzhash muss auf beiden
RPC-Endpunkten auch die reale `eth_estimateGas`-Simulation des vollständigen
Deployment-Bytecodes erfolgreich sein. Dadurch werden nicht unterstützte
EVM-Opcodes vor jeder Signatur erkannt. `rpc.blockdag.works` und
`rpc.bdagscan.com` sind wegen ihres abweichenden Referenzhashes ausdrücklich
unzulässig. Die Ausgabe wird als neues, datiertes Evidence-Dokument
veröffentlicht. Eine Abweichung stoppt die Bereitstellung.

## 3. Unsigned BDAG-Deployment erzeugen

```bash
npm run prepare:transaction -- bdag-vault
```

Die Ausgabe enthält Chain ID `1404`, Wert `0`, Creation-Bytecode und erwarteten
Runtime-Hash. Erst nach Vergleich auf einem separaten Gerät darf eine
Hardware-Wallet oder freigegebene Deployment-Wallet diese Transaktion signieren.
Keine private Betreiberposition muss in den Vault eingezahlt werden.

## 4. BDAG-Deployment verifizieren

```bash
BDAG_RPC_URL="https://first.example" \
BDAG_VAULT_ADDRESS="0x..." \
npm run verify:bdag
```

Die Prüfung wird über beide freigegebenen RPCs wiederholt. Quellcode und
Compiler-Metadaten werden zusätzlich im verwendeten Explorer veröffentlicht.
Ein Kleinbetragstest ist nur mit einer ausdrücklich dafür bestimmten
Community-Test-Wallet und separater Freigabe zulässig; persönliche Coins des
Betreibers werden nicht verwendet.

## 5. Ethereum-Anker vorbereiten

Die Publisher-Adresse wird endgültig festgelegt. Sie steuert nur neue
Nachweise; sie besitzt keinerlei Zugriff auf BDAG im Vault.

```bash
ETH_PUBLISHER_ADDRESS="0x..." \
npm run prepare:transaction -- ethereum-anchor-deploy
```

Die ausgegebene Transaktion muss Chain ID `1`, Wert `0` und den freigegebenen
Publisher zeigen. Gas, Nonce und Gebühren werden erst in der Hardware-Wallet
oder Multisig ergänzt.

## 6. Ethereum-Anker verifizieren

```bash
ETH_RPC_URL="https://first.ethereum.rpc" \
ETH_ANCHOR_ADDRESS="0x..." \
ETH_PUBLISHER_ADDRESS="0x..." \
npm run verify:ethereum
```

Die Prüfung wird gegen einen zweiten unabhängigen Ethereum-RPC wiederholt.

## 7. Endgültige Publikation bilden und ankern

`PUBLICATION.template.json` wird als `PUBLICATION.json` mit den bestätigten
Adressen, Transaktionen, Branch-Daten, Release-Hashes und URLs ausgefüllt.

```bash
npm run validate:publication
PUBLICATION_FILE="./PUBLICATION.json" \
npm run prepare:transaction -- ethereum-anchor-release
```

Der ausgegebene `releaseSha256` wird bytegenau auf zwei Geräten geprüft. Erst
dann darf die Multisig die Transaktion auf Ethereum Mainnet signieren.

## 8. Öffentliche Aktivierung

Nach bestätigter Ethereum-Transaktion werden nur die separate Website-
Konfiguration und Explorer-Links ergänzt. Die bereits geankerte
`PUBLICATION.json` wird nie nachträglich verändert. Die Website darf erst dann
von `draft` auf `verified` wechseln. Erst dann werden Vertragsadresse,
Wallet-Verbindung und freiwillige Burn-Funktion angezeigt.
