DS10 — Das FES-Container-Paket (gcpn.zip)

Auslöser S4, Abschluss von Teil II

Der Prüfer (oder Geschäftspartner) will die Kette sehen — nicht nur zusammengefasst. Er erhält kein Repo, keinen Git-Zugang, keine Historie. Er erhält ein Paket: *.gcpn.zip — das physische Verifikations-Set des Signatur-Vorgangs.

Manifest und ZIP-Archiv — zwei getrennte Aufgaben

Aufgabe Träger Inhalt
Manifest die .gcpn.md selbst Führt alle Artefakte mit SHA-256 auf (Verifikationstabelle + eingebettete JSON-Artefakte) — sie identifiziert, was zum Vorgang gehört
ZIP-Archiv *.gcpn.zip Die physischen Dateien zur Auslieferung: die textbasierten Artefakte (aus der .gcpn.md als .json/.txt/.md/.v7g.md extrahiert) plus die binären Artefakte als separate Files

Textbasierte Artefakte (.json, .txt, .md, .v7g.md) leben in der .gcpn.md (MD-Fences) — im ZIP werden sie als Einzeldateien gezeigt (extrahierbar). Binäre Artefakte (PDF, PNG, SVG, …) können nicht in der MD-Datei leben — sie werden als separate Files ins ZIP aufgenommen; in aller Regel sind sie bereits in den JSON-Artefakt-Datenstrukturen referenziert bzw. als SHA-256-Hash identifiziert (z. B. evidence.facsimile_ref.sha256) — der Hash ist die Identifikation, das ZIP liefert den Körper.

Die Paket-Struktur

GCPN-SIG-260913-001.gcpn.zip
│
├── container.gcpn.md                      ← Manifest + textbasierte Artefakte (JSON-Fences) + .v7g.md
│                                            (identisch mit der Form im Git-Repo)
├── MANIFEST.json                          ← maschinen-lesbares Verzeichnis (alle SHA-256, package_sha256)
│
├── source/                                ← textbasiert: Quell-Dokument, aus dem Container extrahierbar
│   ├── gvb.md                             ← Quell-Dokument (referenced_doc)
│   └── gvb.md.v7g.md                      ← Sidecar
├── signature/                             ← textbasiert: Signatur-Doc + Events (aus MD-Fences)
│   ├── signature-doc.json                 ← Signatur-Doc (DS02) + .v7g.md
│   ├── event-offered.json                 ← Events (DS03) + .v7g.md
│   ├── event-accepted.json
│   ├── event-signed.json
│   ├── facsimile.svg                      ← BINÄR: Grafik physisch (Standard) — im JSON nur als SHA-256 referenziert
│   ├── facsimile.png                      ← BINÄR: Fallback
│   └── facsimile.sha256                   ← Checksums
├── fes/                                   ← binäre FES-Artefakte
│   ├── fes-envelope-report.json           ← Envelope-Report (DS09) + .v7g.md (textbasiert)
│   ├── contract-signed.pdf                ← BINÄR: signiertes PDF (PAdES)
│   ├── certificate-of-completion.pdf      ← BINÄR: Dienst-Report
│   └── pdfsig-report.txt                  ← Krypto-Prüfung (externes Tool)
└── README.md                              ← Verifikations-Anleitung (DS04-Routine)

Lesart: Das Manifest (.gcpn.md) nennt jedes Artefakt mit SHA-256 — das ZIP liefert die Körper dazu. Textbasierte Artefakte sind im Manifest selbst enthalten (und im ZIP zusätzlich als Einzeldateien extrahiert); binäre Artefakte sind nur im ZIP physisch vorhanden, im Manifest jedoch vollständig durch ihren SHA-256 identifiziert. Ein Prüfer kann also jeden Körper gegen die Hash-Angabe im Manifest verifizieren.

Das Verifikationsmanifest

MANIFEST.json bündelt alle SHA-256 des Pakets:

{
  "$schema": "https://gitcover.org/schemas/gcpn-manifest-1.0.schema.json",
  "uuidV7": "<deterministische uuidV7>",
  "package": "GCPN-SIG-260913-001",
  "created_at": "2026-09-13T16:45:00Z",
  "created_by": "E1",
  "artifacts": [
    {"path": "container.md", "sha256": "…"},
    {"path": "source/gvb.md", "sha256": "…"},
    {"path": "signature/signature-doc.json", "sha256": "…"},
    {"path": "signature/event-offered.json", "sha256": "…"},
    {"path": "signature/event-accepted.json", "sha256": "…"},
    {"path": "signature/event-signed.json", "sha256": "…"},
    {"path": "signature/facsimile.svg", "sha256": "8fcffe0b…1006"},
    {"path": "signature/facsimile.png", "sha256": "d330348e…81fef"},
    {"path": "fes/fes-envelope-report.json", "sha256": "…"},
    {"path": "fes/contract-signed.pdf", "sha256": "7a054fa5…272b"}
  ],
  "verification_routine": "siehe README.md (DS04-Routine)",
  "package_sha256": "<SHA-256 des ZIP selbst>"
}

Die Facsimile-Regel: physisch bei FES, Verweis sonst

Wichtig (Saga-Kernregel):

Verfahren Facsimile im Paket Begründung
Textform (Teil I) Verweis (SHA-256 + guid-Stempel) Grafik liegt im PII-Verzeichnis des Tenant-Repos; die Kette verweist, das Paket dokumentiert den Verweis
FES (Teil II) Physisch (SVG + PNG) Das Paket ist die vollständige Auslieferung; der Prüfer braucht die Grafik zur Prüfung, ohne Repo-Zugriff

Der Unterschied ist bewusst: Bei Textform bleibt das Asset dort, wo es GoBD-relevant gepflegt wird (PII-Verzeichnis, Sidecar, SHA-Verifikation); bei FES wird es kopiert — das Paket ist die vollständige Fassung (Originale bleiben unverändert im Repo; SHA-256 beweist Identität).

Die Verifikationsroutine im Paket

README.md führt den Prüfer durch die Routine (DS04, paket-nativ):

# 1. Manifest-Integrität
sha256sum -c <(jq -r '.artifacts[] | "\(.sha256)  \(.path)"' MANIFEST.json)
# 2. Kette prüfen (Quell-Dokument → Signatur-Doc → Events)
jq -r '.target.sha256' signature/signature-doc.json   # = sha256(source/gvb.md)
# 3. Event-Kette
jq -r '.prev_event_sha256' signature/event-*.json     # Verkettung prüfen
# 4. Facsimile
sha256sum signature/facsimile.svg                     # = 8fcffe0b…1006 (Tabelle)
# 5. PDF-Signatur (externes Tool, optional)
pdfsig fes/contract-signed.pdf                        # VALID, PAdES-B-T

Export-ZIP vs. Git-Repo: Manifest-Definition

Zwei Darstellungsformen desselben Containers:

Form Name Rolle
Im Git-Repo <Referenced-Doc-Basisname>.gcpn.md Der Container selbst — seine eingebetteten JSON-Artefakte + Verifikationstabelle sind das Manifest (das Repo zeigt den Inhalt direkt; ZIP-Dateien sind in Git nicht darstellbar)
Als Export <Referenced-Doc-Basisname>.gcpn.zip Physische Auslieferung (ZIP) — zusätzlich mit MANIFEST.json (alle SHA-256 + package_sha256) als Maschinen-lesbares Verzeichnis

Ist die Manifest-Definition damit gültig? Ja — in beiden Formen: Im Git-Repo erfüllt die .gcpn.md die Manifest-Funktion (sie führt jedes Artefakt mit SHA-256 auf, die Verifikationsroutine prüft gegen die eingebetteten Angaben); im Export-ZIP wird dieselbe Manifest-Funktion als MANIFEST.json zusätzlich physisch beigelegt, damit der Empfänger ohne MD-Parser prüfen kann (sha256sum -c). Beide Formen sind äquivalent — der SHA-256 der enthaltenen Artefakte ist die Identifikation (immer und überall).

Suffix Bedeutung
.gcpn GitCover-PrimaNota-Container (Geschäftsvorhaben gebündelt)
.md Markdown-basiert (JSON-Artefakte in MD-Fences, Typora-kompatibel) — Manifest-Funktion im Repo
.zip Export-Form (physische Auslieferung, MANIFEST.json beigefügt)

Die Saga schließt Teil II

Der Kreis ist geschlossen:

  1. Teil I: Textform-Kette (Quell-Dokument, Signatur-Doc, Events, Sidecars, GCPN-Container) — § 126b BGB, freie Beweiswürdigung.
  2. Teil II: FES-Andock (eIDAS-Stufen, Facsimile-Layer, Signaturplatte, Envelope-Report, physisches Paket).
  3. Teil III (geplant): PII/GPG-Kreis — Schlüssel-Verwaltung, Signing-Identity-JSON-Schemas, SSH-vs.-OpenPGP-Mechanik, Trust-Registry.

Die Saga zeigt: GitCover ersetzt Signaturdienste nicht — es verankert sie. Das Repo bleibt die Nachweis-Ebene; externe Verfahren docken an, ohne die Kette zu brechen.


Erstellt: 260913 | Teil II, Artikel DS10 | Serie: digital-signage