____14DS — Eventos como enum de flags y events_result
Desencadenante S6, hallazgo AP7
La cadena de eventos de DS03 (máquina de estados con prev_event_sha256) permaneció en su primer uso como archivos individuales — el hallazgo (Repo-Bloat) y la corrección condujeron a la representación de flags en el contenedor: los pasos son bits, el resultado es una máscara de bits.
La definición del enum
Anclada normativamente en el esquema (no repetida en cada contenedor):
| Paso | Bit | Significado |
|---|---|---|
offered |
1 | Firma solicitada (documento presentado para firmar) |
accepted |
2 | El destinatario ha tomado conocimiento (§ 126b Abs. 1 BGB: acceso) |
denied |
4 | El destinatario rechaza (excluye sign) |
sign |
8 | Firma ejecutada (referencia a facsímil/clave) |
withdraw |
16 | Firma retirada (excluye sign) |
El conjunto de flags
"events": {
"enum_definition": {
"offered": 1, "accepted": 2, "denied": 4, "sign": 8, "withdraw": 16
},
"flags_set": {
"offered": { "set": true, "timestamp_utc": "2026-09-13T17:31:00Z", "uuidV7": "…", "sha256": "f1358236…" },
"accepted": { "set": true, "timestamp_utc": "2026-09-13T17:33:00Z", "uuidV7": "01a09bd4…", "sha256": "71905eea…" },
"denied": { "set": false, "timestamp_utc": null, "uuidV7": null, "sha256": null },
"sign": { "set": true, "timestamp_utc": "2026-09-13T17:35:00Z", "uuidV7": "01a09bd6…", "sha256": "dab7ddfe…" },
"withdraw": { "set": false, "timestamp_utc": null, "uuidV7": null, "sha256": null }
},
"events_result": 11,
"chain_valid": true
}
El resultado: events_result = 11
offered(1) + accepted(2) + sign(8) = 11
| Resultado | Interpretación |
|---|---|
| 1 | solo offered — pending |
| 2 | solo accepted — sin offered (irregular, verificar) |
| 3 | offered + accepted — listo para firmar |
| 11 | offered + accepted + sign — firmado por completo |
| 4 | denied — rechazado (sin sign) |
| 16 | withdrawn — retirado |
| 7 | offered + accepted + denied — contradicción (chain_valid=false) |
La máscara de bits es verificable de forma determinista — un verificador comprueba el cálculo:
jq -r '.events.events_result' container.gcpn.md
jq -r '[.events.flags_set[] | select(.set == true)] | length' container.gcpn.md
# → Anzahl der gesetzten Bits muss mit Popcount(events_result) übereinstimmen
Sin posibilidad de contradicción
La máquina de estados (DS03) y la semántica de bits impiden conjuntamente las secuencias irregulares:
denied(4) excluyesign— tras el rechazo no es posible firmar.withdraw(16) excluyesign— tras la retirada, el proceso queda terminado.chain_valid: false= encadenamientoprev_event_sha256con lagunas — valor probatorio reducido (DS04).
Protocolo de hallazgos de investigación (AP7)
| AP | Hallazgo | Implementación |
|---|---|---|
| AP7 | Eventos como archivos individuales → Bloat; secuencia de estados como texto | enum de flags con máscara de bits events_result + chain_valid |
El encadenamiento prev_event_sha256 se mantiene (resumido como confirmación chain_valid) — los bits sustituyen la repetición de la máquina de estados, no la verificación de integridad.
Creado: 260913 | Parte III, artículo ____14DS | Serie: digital-signage