diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index b8da12f..0d79fc0 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -11,7 +11,7 @@ | workplan | RISK-WP-0001 | active | — | workplans/RISK-WP-0001-make-the-register-decidable.md | | workplan | RISK-WP-0002 | proposed | — | workplans/RISK-WP-0002-publication-handover.md | | workplan | RISK-WP-0003 | proposed | — | workplans/RISK-WP-0003-regulatory-intake.md | -| workplan | RISK-WP-0004 | active | — | workplans/RISK-WP-0004-run-the-register.md | +| workplan | RISK-WP-0004 | finished | — | workplans/RISK-WP-0004-run-the-register.md | | task | RISK-WP-0001-T01 | done | — | workplans/RISK-WP-0001-make-the-register-decidable.md | | task | RISK-WP-0001-T02 | done | — | workplans/RISK-WP-0001-make-the-register-decidable.md | | task | RISK-WP-0001-T03 | progress | — | workplans/RISK-WP-0001-make-the-register-decidable.md | @@ -27,7 +27,7 @@ | task | RISK-WP-0003-T02 | todo | — | workplans/RISK-WP-0003-regulatory-intake.md | | task | RISK-WP-0003-T03 | todo | — | workplans/RISK-WP-0003-regulatory-intake.md | | task | RISK-WP-0003-T04 | todo | — | workplans/RISK-WP-0003-regulatory-intake.md | -| task | RISK-WP-0004-T01 | progress | — | workplans/RISK-WP-0004-run-the-register.md | +| task | RISK-WP-0004-T01 | done | — | workplans/RISK-WP-0004-run-the-register.md | | task | RISK-WP-0004-T02 | done | — | workplans/RISK-WP-0004-run-the-register.md | | task | RISK-WP-0004-T03 | done | — | workplans/RISK-WP-0004-run-the-register.md | | task | RISK-WP-0004-T04 | done | — | workplans/RISK-WP-0004-run-the-register.md | diff --git a/activity-definitions/hourly-register-inbox-watch.md b/activity-definitions/hourly-register-inbox-watch.md index c862533..9d556f6 100644 --- a/activity-definitions/hourly-register-inbox-watch.md +++ b/activity-definitions/hourly-register-inbox-watch.md @@ -14,7 +14,6 @@ trigger: cron_expression: "5 * * * *" timezone: Europe/Berlin misfire_policy: skip -dedupe_key_strategy: skip context_sources: - type: state-hub query: hub_inbox @@ -49,6 +48,31 @@ 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. +## It will repeat, and that is the deliberate choice + +`activity-core` corrected us on 2026-08-20: `dedupe_key_strategy` governs +Temporal schedule overlap, not per-message suppression, and cron workflow ids +include `scheduled_for` — so an unread message re-emits an instruction **every +hour until it is read**. There is no dedupe at the sink either. + +We removed the field rather than leave it there implying a guarantee it does +not give. + +The repetition is kept, on purpose. An unread message addressed to this +register is a claim that something in it may have moved, and the failure this +activity exists to prevent — grading `RISK-F-0001` `critical` while its fix +notice sat unread — cost a wrong grade and a nearly-sent escalation. An hourly +line in the progress log is a cheap price for that, and it stops the moment +somebody reads the message. + +**Reading a message includes marking it read.** That is what clears the nag, +and it is part of question zero rather than a courtesy. + +If this ever becomes real noise — an unattended weekend, a message nobody can +action — the fix `activity-core` named is a stable completion key gating the +rule, not a longer interval. A longer interval would trade a visible cost for +an invisible one. + ## What it does not do It does not grade, close, publish or escalate anything. Severity, disclosure