risk-nexus/activity-definitions/hourly-register-inbox-watch.md
tegwick 5b9a0e98fe RISK-WP-0004-T01: schedule the checks on activity-core
Two activity definitions, in the shape activity-core's own definitions
use. hourly-register-inbox-watch fires only when an unread message waits
for risk-nexus — the inbox is the trigger rather than the clock, because
an unread message is by construction a claim that something may have
moved, and 2026-08-19 proved the register will otherwise grade without
looking. daily-register-check-sweep is the unconditional floor at 07:15.

Both emit an instruction to a session that can exercise judgement, and
both say in their own text that they must never grow the ability to
record an outcome: stamping clean without doing the five questions
produces a 1q rung that is a lie about stability.

RISK-WP-0004 is finished.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 08:55:48 +02:00

2.4 KiB

id name type version enabled owner governance status created updated trigger dedupe_key_strategy context_sources report_sinks
hourly-register-inbox-watch Hourly Register Inbox Watch activity-definition 1.0 true risk-nexus custodian active 2026-08-20 2026-08-20
type cron_expression timezone misfire_policy
cron 5 * * * * Europe/Berlin skip
skip
type query required params bind_to
state-hub hub_inbox true
to_agent unread_only
risk-nexus true
context.inbox
type event_type author
state-hub-progress risk_register_inbox activity-core

Hourly Register Inbox Watch

Runs hourly at :05 Berlin time. Fires only when something is actually waiting.

Why hourly, and why the inbox specifically

docs/method/review.md sets an adaptive cadence whose shortest rung is one hour, so hourly is the finest granularity the register can act on. Anything faster would report work that cannot yet be due.

The inbox is the trigger rather than the clock because of what happened on 2026-08-19: this register graded RISK-F-0001 critical and prepared an escalation while two messages sat unread — one narrowing the exposure, one reporting the fix. Both changed the grade. Reading the inbox is now question zero of every check (docs/method/check-procedure.md), and this activity is the mechanism that stops it depending on somebody remembering.

An unread message addressed to risk-nexus is, by construction, a claim that something in the register may have moved.

What it does not do

It does not grade, close, publish or escalate anything. Severity, disclosure and escalation are judgements this repo makes with a human or an agent session doing the reading — never a cron. This activity's entire job is to make sure somebody looks.

id: inbox-has-spoken
for_each: context.inbox
bind_as: message
condition: 'context.message.read_at == None'
action:
  task_template: 'risk-nexus: read {context.message.from_agent} before checking'
  description: >-
    Unread message to risk-nexus from {context.message.from_agent}:
    "{context.message.subject}". Read it before any check or grading — this is
    question zero in docs/method/check-procedure.md. Then run `make due` in
    risk-nexus and work the list, recording each outcome with
    `make checked ARGS="<finding-id> clean|moved"`.
  target_repo: risk-nexus
  priority: high
  labels: ["risk-register", "inbox", "question-zero"]