Problem/Motivation

Operator export, history erasure and hard-bounce recovery already write a local postmark_operator_audit row (action, hashed subject, uid, optional target). Sites that already run audit_chain have no tamper-evident copy of those actions.

Webhook intake is high-frequency and must not be written to the chain.

Proposed resolution

Optional File Gate-style dual-write from the operator audit service:

  • Composer suggest for drupal/audit_chain. No hard dependency on Key or Encrypt.
  • Inject @?audit_chain.logger. When the service is absent, keep current local-only behaviour.
  • Channel postmark_webhooks. Operations match the local action codes: export_requested, erase_history_batch, recover_hard.
  • Metadata is the hashed subject, uid and optional target. Never a mailbox, never free text, never secrets.
  • Call log(), not logKeyed(). Fail open: a chain write error is logged and does not undo the local row or the operator action.
  • Keep postmark_operator_audit as the local store. Retention still does not delete those rows.

Remaining tasks

  • Implement the soft adapter and tests.
  • Document the optional enable path.

User interface changes

None.

API changes

No change to SuppressionPolicyInterface. The operator audit service remains internal.

Data model changes

None in this module. Chain rows are written only when audit_chain is installed.

Comments

jmcerda created an issue. See original summary.

jmcerda’s picture

Implementation is ready on 1.x: optional File Gate-style dual-write from the operator audit service, fail open, local table kept, no mailbox in chain metadata. Status stays Active until that lands on 1.x.

  • jmcerda committed 64107827 on 1.x
    Issue #3621495: Capitalize the chain channel constant doc
    

  • jmcerda committed 13221a62 on 1.x
    Issue #3621495: Dual-write operator audits to audit_chain
    
    Optional File...
jmcerda’s picture

Status: Active » Fixed

Fixed on 1.x at f3ffe6c31033986692828d58efc0f025a782a426. Operator export, erasure and hard-bounce recovery dual-write to audit_chain when that module is installed (channel postmark_webhooks, hashed subject, uid and optional target). Chain write failure is logged and does not undo the local row. Webhook intake is not written to the chain.

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

  • 57aa945a committed on 1.x
    Issue #3621495: Prepare 1.1.0 release (#36)
    
    Issue #3621495: Prepare 1.1...

  • jmcerda committed 6e38392d on 1.x
    Issue #3621495: Spell out Composer and align 10007 upgrade wording
    

  • jmcerda committed a1a53452 on 1.x
    Issue #3621495: Prepare 1.1.0 release
    
    Document optional audit_chain...
jmcerda’s picture

1.1.0 is published.

The project page now documents the optional audit_chain dual-write (fail-open, no mailbox, webhook intake is not chained). There is no new update hook. Sites on 1.0.1 need a cache rebuild only.