Skip to content

docs(access): warn_only — trial a resource ACL before enforcing it - #401

Open
maximelb wants to merge 2 commits into
docs/resource-acl-user-guidefrom
docs/acl-warn-only
Open

docs(access): warn_only — trial a resource ACL before enforcing it#401
maximelb wants to merge 2 commits into
docs/resource-acl-user-guidefrom
docs/acl-warn-only

Conversation

@maximelb

@maximelb maximelb commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Documents the new warn_only flag on an acl hive scope record.

A warn-only scope is not enforced — everything tagged with it behaves exactly as if the tag were not there — and every access it would have blocked is filed as an organization error naming the principal and the resource. It is the dry run for a resource ACL: the hard part of one is not writing it, it is finding out who it breaks.

What's in the page

A new Trying a scope out first: warn_only section covering the whole loop — set the flag, tag the resources for real, leave it a working day or two, read limacharlie org errors, add the people who legitimately need the data, dismiss, repeat until the entry stops coming back, then clear the flag — with a sample of the org error text.

Then two subsections on the things a reader will otherwise get wrong:

  • What to expect from the warnings. One entry per scope under component acl/<scope> rather than one per person (organization errors hold one entry per component and each violation replaces the last), repeats debounced to roughly one every fifteen minutes, members never reported so a quiet list genuinely means nobody depends on the access, warnings best-effort while non-enforcement is exact, and the trial costing what enforcement costs — it is a state to pass through, not to live in.
  • What warn_only does not change. It does not relax who may edit acl: tags (acl.set still required, D&R rules still refused). It is the opposite of disabling the scope, which locks everything. It does not suppress the audit trail.

Smaller edits elsewhere on the page:

  • A row in the disable/delete table — the one place on this page where the intuitive expectation is backwards, so the contrast with "disable the scope record → everything locks" belongs there.
  • A pointer from the setup steps, so somebody following the guide top to bottom meets the flag before they enable a scope for real.
  • A note on Outputs: warn_only covers them too, which matters because an ACL quietly removing records from a SIEM feed is the effect most likely to catch you out — and outputs are the one place where the flag takes a couple of minutes rather than applying immediately.

Notes

Implementation: refractionPOINT/go-essentials#935.

🤖 Generated with Claude Code

Documents the warn_only flag on an acl hive scope record: the scope stops being
enforced entirely and every access it would have blocked is filed as an
organization error instead, so an admin can find out who a new ACL breaks
before it breaks them.

Covers the full loop (set the flag, tag the resources, read `limacharlie org
errors`, add the people who legitimately need the data, dismiss, repeat, then
clear the flag), what to expect from the warnings (one entry per scope under
component acl/<scope>, debounced, members never reported, best-effort delivery
against exact non-enforcement, and that a trial still costs what enforcement
costs), and what the flag does NOT change: it does not relax who may edit acl:
tags, it is the opposite of disabling a scope, and it does not suppress the
audit trail.

Also adds the flag to the disable/delete table — the one place in this page
where the intuitive expectation is backwards — a pointer from the setup steps,
and a note on the Outputs section, since an ACL quietly removing records from a
SIEM feed is the effect users are most likely to be caught out by and outputs
are the one place the flag takes a couple of minutes rather than applying
immediately.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@maximelb

maximelb commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

/lc-review

A configuration written during a trial outlives it: an output opted into the
scope keeps exporting that scope's records once enforcement is on. So naming a
scope in an output's or a rule's acl_scopes still needs real membership even
while the scope is unenforced, and the trial stays reversible. A temporary live
stream is the exception, since it is a read that ends with the connection rather
than a saved configuration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@maximelb

Copy link
Copy Markdown
Contributor Author

/lc-review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants