Process Discovery — 05 KG/dot-kg Event Model (DRAFT live)
05 — KG / dot-kg Event Model (Workstream D) — DRAFT rows LIVE (inactive)
5.1 What existed
event_type_registry had 45 types, all generic (created, updated, output.created, output.failed, candidate.scan_completed, coverage.scan_completed, handoff.object_born, governance.blocked, …). None is a process lifecycle event. event_outbox/event_pending already carry correlation_id.
5.2 What was registered (DRAFT, active=false)
Generic, reusable-by-every-family process.* vocabulary (no-hardcode — not kg.*). Committed live as inactive drafts (domain system):
| event_type | stream | lane | severity | role |
|---|---|---|---|---|
process.run.started |
update | delayed | info | start |
process.step.started |
update | delayed | info | step |
process.step.completed |
update | delayed | info | producer/verifier completion |
process.run.completed |
update | delayed | info | end |
process.run.failed |
alert | immediate | warning | error |
process.evidence.missing |
alert | immediate | warning | gap |
process.correlation.missing |
alert | immediate | warning | gap |
Constraint-valid (stream ∈ {…update,alert…}, lane ∈ {immediate,delayed}, severity ∈ {info,warning,critical}). Live read-back: 7 process.% rows, 0 active. Rehearsed birth-free (1,158,148 before == after). Reversible: DELETE … WHERE event_domain='system' AND event_type LIKE 'process.%'.
5.3 Mapping to the 10 KG law processes A–J
Each law process emits the same lifecycle, scoped by correlation_id (one per run) and safe_payload.process_candidate_code:
- start =
process.run.startedwhen the producer (C·ấp B, on-demand) DOT begins. - step =
process.step.started/completedfor the producer half, then the verifier (C·ấp A, cron/dual) half. - end =
process.run.completedwhen the verifier confirms (the "C·ấp A IDLE = producer correct" structural double-check). - error/gap =
process.run.failed/process.evidence.missing/process.correlation.missing.
The KG family is one of the 10 (A–J); the same 7 events serve all of them — the law process is identified by payload, not by a distinct event type. kg.*-style naming, if ever wanted, would be event_domain='kg' instances of these same event_types.
5.4 Why DRAFT, not active
Activating an event type implies emitters exist and the wire is real. No DOT emits these yet. Activation is owner/operator-gated and pairs with the runtime observation substrate (doc 04) + the execution wrapper (doc 06). process.* active=0 is exactly why birth_readiness_v2.event_missing is true for every candidate — the flag stays honest until emitters go live. No fake active registration.
5.5 Anti-fake
No event rows were emitted into event_outbox/event_pending. Declaring a vocabulary ≠ producing runtime events. The model is ready; it is not running.