KB-38C0

Process Discovery — 05 KG/dot-kg Event Model (DRAFT live)

3 min read Revision 1
process-discoveryevent-modelevent-type-registrydraft2026-06-04

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.started when the producer (C·ấp B, on-demand) DOT begins.
  • step = process.step.started/completed for the producer half, then the verifier (C·ấp A, cron/dual) half.
  • end = process.run.completed when 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.

Back to Knowledge Hub knowledge/dev/reports/architecture/process-discovery-correlation-runtime-inventory-fix-2026-06-04/05-kg-dot-kg-event-model.md