Repository navigation
Conversation
Add a draft RFC that decides between, and then combines, the two open permission drafts: actor views (what data an actor may see, as labels on rows and columns plus a fixed algebra, enforced at plan acceptance) and GQP capabilities (what computation a caller may run, as a Cedar-granted program or contract). An audience is a label on the data; a predicate that mentions the caller is a program. Written from first principles for a contributor new to the topic: goals from five situations, the design space against those goals, the design by example, a 27-pattern expressiveness ledger, costs, alternatives, and an implementation appendix for agents.
Audit against the new goal G11 (fewest primitives that compose): remove the capability object, its routes, configuration and three error codes; the contract language and the submitted mode; views.grants, views.internal and views.bypass; @group; the input-scope and caveat vocabulary; $actor in programs; the default placement of inserts. Add over on rules, credentials and stored queries; per-name invoke_query; the policy bridge row; the primitive audit. Retitle to "Access authority: views and reach".
This was referenced Oct 31, 2026
Third revision of the access authority RFC after an orthogonality review: placement is an @in edge type with a derived placement column, a node type marked @in is its own securable, securables and groups are derived from the edge types, over becomes view with per-action values all and caller on rules and stored queries only, policy groups may be defined from graph groups, invocation of a stored query is gated by its name alone, the bridge row, computed placement, @securable and the narrowing form are removed, and the ledger, primitive audit, costs, alternatives and appendix are updated.
ragnorc
added a commit
to ragnorc/omnigraph
that referenced
this pull request
Nov 1, 2026
Name the identity RFC and RFC 0003 sentences each would amend on acceptance, align the ceiling refusal with the HTTP conventions, note the open maintenance actions, record the identity conflict with ModernRelay#1210, and raise the per-member role bound to the managed role-set limit.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A draft RFC,
docs/rfcs/2026-10-30-access-authority-views-and-capabilities.md(titled "Access authority: views in the graph"; the filename is fixed by the registry convention), written from first principles for a contributor who has not read anything about permissions and has to judge whether this is the right design.It decides between, and then combines, the two open permission drafts, #951 (actor views) and #1197 (GQP query contracts and Cedar grants), and reduces the result to the fewest primitives that compose, in four layers:
@in,@member,@grant,@inherits,@requires,@deny) plus a time window on a property give the edges their meaning.@inhas one meaning in three places: on an edge type (the source is placed in the target), on a node type (the row is its own securable, which gives Drive-style item-level control beside containment), on a property (the column is in one fixed securable).repair, is the physical form the filter reads.members_of); the rules that can change authority (view: all,schema_apply,config_manage) name explicit actors only.One declaration,
view, is the only way a request's view differs from what the graph says: on a rule or on a stored query, per action, with the valuesallandcaller. A stored query is invoked by its name alone (bundle version 2), so a caller can be given an approved computation over data it cannot otherwise see, andview: { read: caller, change: all }lets a body match as the caller and write with reach.The rule behind it: who may see what is data in the graph; a rule that mentions the caller is a stored query.
The RFC states the goals (G1–G11) from five situations, surveys the design space against them, specifies the design by example, audits every primitive against G11, evaluates a 27-pattern expressiveness ledger (16 direct, 10 by a named modeling step, 1 declined), lists costs and alternatives, and ends with an implementation appendix for agents.
What it changes in the two drafts
@inwith a derived placement column; securables and groups are derived from the edge types; denial closes downward over inheritance; a principal owns its own securable; theviewspolicy block is replaced by graph-defined policy groups,viewon rules and cluster-configured limits; computed placement is dropped for an inheritance edge; the default placement of inserts becomes an explicit edge to$subject; definer-rights stored queries becomeviewon a stored query; Lance citations re-anchor to 13.0.0.invoke_queryand the fixed query text as the unit of disclosure survive; the contract language, guard proofs, per-operator obligations, the single-binding fragment, trusted attributes, the submitted mode and the capability binding do not.Both remain drafts; this RFC supersedes neither. Links to #951 point at its PR because its file is not on
mainyet.Revision history
over, the bridge row and a key-column placement.overrenamedview, per action, on rules and stored queries only, with the narrowing form and the credential attachment point removed; the bridge row and internal group replaced by graph-defined policy groups;@securableand@computedremoved; invocation gated by name alone; error codes reduced to three plus one temporary. The decision log records each step and the alternatives section records why each dropped shape failed.Checks
python3 scripts/check-docs.py: OK (438 files)typos docs/rfcs/: clean