ADR-0052: Addressees & Read-Acknowledgement (REQ-TRN Realization)¶
- Status: accepted
- Amended by: ADR-0053 (addressees per document, not per type; + process owner)
- Date: 2026-07-07
- Deciders: Nicolas Burri ("use the recommended options for K-1 to K-4")
- Refines: ADR-0022 (the as-built acknowledgement contract), ADR-0019 (release fan-out reuse), ADR-0016 (ack records are controlled), ADR-0049 (categories gate who requires ack); relates to the DECIDED checkpoint addressees-acknowledgement-design.md
Context¶
The document's addressees (who must know / be trained on it) are the bridge from document control to training assignment. Contributors (author/reviewer/releaser) already exist as audited lifecycle acts; addressees are a forward, role-based declaration resolved to people at release — "a process, not free text" (Nicolas, 2026-07-07). ADR-0022 + REQ-TRN-001..006 already commit to this; this ADR fixes the realization. Out of scope (ADR-0022, unchanged): competence matrices, course catalogs, exam engines, training scheduling.
Decisions (K-1a..K-4a + the three defaults)¶
- Addressee policy on the TYPE, overridable per document (K-1a). New
acknowledgement_policy— scope+type keyed (content-plane, RLS):{requiresAck, addressee role-set, questionnaire ref (later)}. A specific document may narrow/extend the inherited role-set (adocument.ack_overrideor a per-document policy row). Most documents inherit; exceptions are explicit and audited. Typically PRESCRIPTIVE types require ack; RECORD/TEMPLATE default off. - Release-triggered, role-resolved, event-driven fan-out (K-2a). On RELEASE of a version
whose document requires ack (REQ-TRN-005), the post-commit relay (the ADR-0050
TransactionPostCommit + event path) resolves addressee roles to current holders in scope and
fans out one
ACKNOWLEDGEMENT_REQUIREDtask per person (reminders via the ADR-0037 scheduler). Re-acknowledgement: on EVERY new released version (default adopted — regulatorily safest; a "minor change, no re-ack" flag is a deferred process decision). Superseding a version cancels its open ack tasks. Late joiners: a periodic sweep resolves newly-assigned role holders into open obligations (no snapshot-at-release gap). - Explicit acknowledgement, a retained controlled record (K-3a). The reader opens the
released version and acknowledges (read & understood); recorded as
acknowledgement(user, document VERSION, timestamp, optional questionnaire result) — controlled/retained (ADR-0016), version-precise (acknowledging v2 never satisfies v3). Inbox gains "Awaiting your acknowledgement"; the detail page shows the affordance when the caller has an open task. Addressees receive tasks; any VIEW-holder may also voluntarily acknowledge and it is recorded (default adopted). Read-tracking (REQ-TRN-002, mere opening) and questionnaires (REQ-TRN-004) are later slices (T2/T3). - Dedicated MANAGE_TRAINING permission + status view (K-4a). Configuring ack policies is its
own grant (a training/QM officer, distinct from authoring and review-policy governance);
MANAGE_TRAININGseeded into the closed set. Acknowledgement status is reportable per document/role/scope (REQ-TRN-006) as a coverage-style view (gaps listed first), ready to feed the future REQ-REP wave.
Consequences¶
- Migration:
acknowledgement_policy+acknowledgementtables (both RLS/retention as appropriate),MANAGE_TRAININGpermission seed, ack task type. No new infrastructure — reuses role resolution, the post-commit fan-out, the scheduler, and controlled-record retention. - Separation: policy + ack rows scope-keyed; the fan-out is the SECURITY-DEFINER/relay pattern already proven for source events — a cross-scope leak test joins the suite.
- Requirements: realizes REQ-TRN-001..003/005/006 (002 read-tracking + 004 questionnaire = T2/T3); v1.7 citations, no new REQ rows (a refinement if the as-built narrows wording).
- Slices: T1 (this — policy + fan-out + acknowledge + inbox + status), T2 (questionnaire gate), T3 (read-tracking + effectiveness reporting).