Concept · access
Use when
You share part of a project with a client, an agent or a key, or you need to know what a limited credential can read.
Looking for something else?
A group of Files (card Collection). Who has access, what their agents may do and what they did (card Brain). Which credential you hold (card Credential).
For
A View names part of a project: collections and single Files, Shapes, and the entity and relationship types to show. A person, an API key or an agent that is limited to a View reads only that part and can never write. Each read leaves a read receipt. Everyone else reads the whole project as their role allows. The limit belongs to the person, key or agent, and not to a URL. You publish a View as numbered versions. A limit either follows the newest version or stays on one version you pinned. A Brain gives a View a name, agents and a list of who has access (card brain). Use a View alone when the person needs only the limit.Use when
- A client, an agent or a key must read some Files and entities, and nothing else.
- You must tell the person exactly what a limited credential can read.
- A limited credential reads less than the person expects.
Not this
- A group of Files you extract from or search together: use a collection (card Collection).
- Naming the agents, the instructions and the people who have access to one View: use a Brain (card Brain).
- Finding out which credential you hold: use card Credential.
Rules
view.1You publish a View as numbered versions, and a limit reads only published versions. Your job: an edit to the draft withpenumbra context slice updatechanges nothing for anyone until you runpenumbra context slice publish. A new definition replaces the old one in full, so repeat every collection, Shape and type that must stay.view.2A View limits Files only when it names a collection or a File. Your job: name at least one collection or File. A View with neither shows every File in the project, even when it limits types. Penumbra publishes such a View without a warning.penumbra context slice showprints its scope as “the whole project” only when the View names nothing. A View that names only types or Shapes prints those, and still shows every File.view.3Collections are read when someone reads, and types are fixed when you publish. Your job: a File that joins an included collection appears at once, and a File that leaves it disappears at once (card rule collection.9). A type that a Shape gains later stays hidden until you publish the View again (problem view-needs-republish).view.4A limit follows the newest published version unless you pin it. Your job: pass--version <number|id>topenumbra access attach,penumbra keys createorpenumbra kits connections createonly when the person wants the content frozen. A pinned limit ignores later publishes.view.5The graph mode decides which entities a limited credential sees. Your job: leave the defaultbacked, which shows an entity with no File citations or with at least one citation inside the View. Choosetypesonly when the person accepts that an entity of those types may repeat text from a File outside the View. Both modes hide citations to Files outside the View.view.6A limited credential can only read. Enforced: attaching a View to a key or agent with a write scope is refused withview_requires_read_only. Giving a limited credential a write scope, or raising a limited login above viewer, is refused withview_bounded_read_only. Your job: remove the limit first only when the person means to widen access (rule view.10).view.7Only a client can be limited. Enforced: a member of the organization is refused withview_requires_client, and a project editor or admin is refused withview_requires_viewer. A client is a project viewer who belongs to no organization.view.8Creating, editing and publishing a View take more than read access. Enforced: a person below editor is refused withview_change_requires_editor. A key or agent without the scopecontext.view.writeis refused withview_change_requires_scope. A publish by a key or agent also waits for approval (card approval).view.9Attaching, removing, retiring and reading read receipts take a signed-in person who manages access. Enforced: a key or agent is refused withhuman_session_required, and any other person withpermission_denied. Managers are organization owners and admins, and project owners and admins who belong to the organization.view.10Removing a limit widens access. Enforced:penumbra access removereturns the key, agent or login to whole-project reads at once, and it asks to confirm. Without a terminal it needs--yesand otherwise exits withconfirmation_required. Your job: to end someone’s access, usepenumbra brains remove-doororpenumbra keys revoke, neverpenumbra access remove.view.11Retiring a View cuts off everyone limited to it. Enforced:penumbra context slice retireasks to confirm. After it, every read by a limited credential fails withview_unavailableuntil you publish the View again. Publishing a retired View restores it.view.12A publish is refused when a type name inside the View is also the name of a type outside it. Enforced: the refusal issemantic_scope_ambiguous, and its message names the labels. Your job: rename one of the types in its Shape, or choose the Shapes and types so that the names differ.view.13Some reads are not part of any View. Enforced: a limited credential is refused withview_operation_unavailablefor Graph workspaces, extraction runs, Graph history, the project ontology, Shape authoring and ad hoc Context. Your job: do that work with an unlimited credential.view.14When a View limits types, a limited credential reads only the Shapes the View names. Your job: name the Shape, and not only its types, when the client’s agent must read it. A View that names types without a Shape makes no Shape readable. A readable Shape shows its whole definition, including types the View leaves out.view.15An item outside the View reads as missing. Your job: never tell the person that a File or entity does not exist when a limited credential could not find it (problem hidden-reads-as-missing).view.16Each read by a limited credential leaves a read receipt. Your job: usepenumbra access receipts <limit-id>to show what was read. Take<limit-id>from the id thatpenumbra access listprints under “Limited to a View”. A receipt holds the operation, the interface that made the read (the CLI prints it asdoor), the version and the count returned. It does not hold the question. Clients cannot read their own read receipts.
Failure signs
- Every read by a limited credential fails with
view_republish_required: problem view-needs-republish. - A limited credential gets not found for something the person says exists: problem hidden-reads-as-missing.
- Counts under a View look small: problem hidden-reads-as-missing.
- You do not know what a credential can see: problem what-can-this-credential-see.
- A publish exited with code 4: problem change-waits-for-approval.
- A client sees a File they should not: recipe share-with-a-view.
Doors
No CLI command invites a client. Ask the person to invite the client in the App
under Give access, and choose Invite a client.
The CLI word
The CLI calls a View a Context Slice. The usage lines ofpenumbra access receipts and penumbra access remove call
the id of a limit <boundary-id>.
penumbra access list prints it under “Limited to a View”.
HTTP reference
- List views
- Create view
- Get view
- Update view draft
- List view versions
- Publish view version
- Get view version
- Read view context
- Get context receipt
- Get context packet
- Retire view