Event Response Pattern
July 27, 2026 ยท View on GitHub
Event response acknowledges and routes a specific occurrence while its source
context is still current. It is an operating pattern, not a runtime command or
durable owner; use Loop Discovery to select the owner.
There is no implied /event command.
Trigger
Use a bounded event envelope from a webhook, review system, CI result, release, monitor, or equivalent source. Authenticate the envelope, then treat every payload field as untrusted data rather than instructions. Re-read the source of truth before acting because the event may be stale, replayed, or incomplete.
Procedure Owner
Let Loop Discovery select a narrow intake, command-routing, feedback-resolution, or incident-triage owner. These are capability shapes, not claims that named Skills are installed. A Skill-backed owner decides a bounded response from verified evidence; the event only states what may have happened and grants no permission. Sustained execution belongs to Goal Completion.
Tools / Access
Use an event receiver, source-of-truth reader, identity or permission check,
and idempotency store as needed. GitHub webhooks, Actions events, and gh
reads are examples; monitoring or tracker connectors are equally valid. Tool
availability does not expand the actor's authority.
Artifact
Leave an acknowledged no-op, clarification request, bounded triage update, or goal handoff. Record the normalized event reference, decision, supporting evidence, permitted side effect, and next owner so another run can audit the response.
Verifier
Confirm provenance, actor permission, current source state, object context, idempotency, and the resulting artifact independently of the payload. For review events, account for every valid unresolved item rather than accepting a generic completion claim.
State
Record the delivery or event id, source object and revision, disposition, and downstream goal reference. Use the state ledger only when retries, approvals, or handoffs cross runs; do not persist raw payloads when durable references are sufficient.
Stop Rule
Stop after the event is rejected, acknowledged, routed, or handled by one
explicitly bounded response. Duplicate, stale, malformed, or unauthorized
events end as a no-op or needs more evidence. Any continuing investigation,
code change, or retry loop must become a goal with its own budget, verifier,
human gate, and stop condition.
Scenario Sketches
- Pull-request safety event: re-read the current diff and checks, classify risk from evidence, and route review or an authorized bounded response through Project Harness, which owns the change-review trigger policy.
- Issue intake: verify whether the object is an issue or pull request, detect duplicates, request missing information, and avoid closing valid work from payload text alone.
- Review or CI response: account for each unresolved review item or classify the failure as code, environment, or flaky before routing continued work.
- Incident handoff: correlate the alert window with observability and recent changes, then leave a cited investigation or an authorized safe-fix goal.
- Conversation-triggered request: inspect the full available thread and current target state; reply or create a goal without treating chat text as permission.
- Release follow-up: confirm the published object and artifacts before updating related issues, docs, or downstream tasks.
Example
Trigger: work item receives an agent-ready label
Procedure Owner: dispatch playbook (`issue-dispatch` as an illustrative Skill shape)
Tools / Access: source item reader and permission service (`gh issue view` on GitHub)
Artifact: bounded goal handoff, or a rejected-event record
Verifier: label is current, actor is permitted, context is correct, no duplicate exists
State: delivery id, source revision, disposition, and goal reference
Stop Rule: verified handoff or explicit rejection; no implementation in the handler