version: 1
status: target_canonical
enforcement: Enforced
event_classes:
  - name: approval_required
    actionability: actionable
    may_request_reply: true
    may_request_approval: true
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: approval prompt with tap-safe yes/no commands and approved-action context
    reply_wording: Reply with the approval commands shown for this question.
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/standards/operator-questions.md

  - name: operator_decision_required
    actionability: actionable
    may_request_reply: true
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: bounded decision prompt with explicit options
    reply_wording: Reply with one of the listed options.
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/standards/operator-questions.md

  - name: freeform_input_required
    actionability: actionable
    may_request_reply: true
    may_request_approval: false
    may_request_freeform: true
    suppress_by_default: false
    telegram_rendering: explicit data-entry prompt with purpose, validation, and no execution semantics
    reply_wording: Reply with the requested data only.
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/standards/operator-questions.md

  - name: informational_note
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: compact note with no reply block
    docs:
      - ai/standards/runtime-event-semantics.md

  - name: architectural_note
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: compact architecture note with no reply block
    docs:
      - ai/standards/runtime-event-semantics.md

  - name: runtime_note
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: compact runtime note with no reply block
    docs:
      - ai/standards/runtime-event-semantics.md

  - name: governance_note
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: compact governance note with no reply block
    docs:
      - ai/standards/runtime-event-semantics.md

  - name: operator_warning
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: compact warning with concrete next diagnostic or recovery action
    docs:
      - ai/standards/runtime-event-semantics.md

  - name: validation_failure
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: failure summary with next diagnostic command
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/standards/qa-gates.md

  - name: runtime_warning
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: warning summary with recovery command when available
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/standards/local-dev-runtime.md

  - name: stale_runtime_artifact
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: true
    telegram_rendering: suppressed by default; details/timeline may show stale ignored context
    docs:
      - ai/standards/runtime-event-semantics.md

  - name: codex_internal_context
    actionability: suppressed
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: true
    telegram_rendering: suppressed or informational only; never asks for input
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/tools/codex-io-bridge/README.md

  - name: lifecycle_transition
    actionability: informational
    may_request_reply: false
    may_request_approval: false
    may_request_freeform: false
    suppress_by_default: false
    telegram_rendering: transition result summary with no reply block
    docs:
      - ai/standards/runtime-event-semantics.md
      - ai/chunks/README.md
rules:
  non_actionable_must_not_request_reply: true
  approval_events_use_approval_language: true
  codex_internal_context_is_not_operator_question: true
  stale_runtime_artifacts_are_informational: true
  stale_approvals_hidden_from_actionable_default: true
  run_summary_before_close_approval: true
  routine_fixable_bugs_do_not_notify: true
  notes_never_request_freeform: true
approval_states:
  - pending
  - approved
  - denied
  - consumed
  - stale
  - ignored
  - superseded
  - invalid
notification_policy:
  notify_by_default:
    - approval_required
    - operator_decision_required
    - architectural_note
    - runtime_note
    - governance_note
    - operator_warning
    - validation_failure
    - runtime_warning
  suppress_by_default:
    - stale_runtime_artifact
    - codex_internal_context
  never_freeform:
    - approval_required
    - informational_note
    - architectural_note
    - runtime_note
    - governance_note
    - operator_warning
    - validation_failure
    - runtime_warning
    - stale_runtime_artifact
    - codex_internal_context
    - lifecycle_transition
