Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 30 Oct 2026. What's built · Install 0.1.0
jadpo
Reference: Policy

Policy

Actions

Most actions need no permission of their own: an action takes its permission from the entities it touches. Root policy.jadpo lists the few that can't, under actions::

  • an action that touches no entity, such as an operator's health report, which is otherwise refused;
  • an action that needs different people from its entity's grants, such as handing a todo to someone else, or creating a company together with its first owner's membership.

Each line names an action by its domain and name, and lists who may run it, with the same kinds of entry as a grant:

example
// policy.jadpopolicy {    tenant: Company    actions: {        todos.transfer_todo: [Todo.owner_id]        accounts.create_company: [Access.authenticated]        monitoring.health_report: [StaffRole.operator]    }}

Todo.owner_id means the current owner of the todo the action changes. For that action, the listed people replace the entity grants on what it reaches. Field restrictions and tenancy still apply.

Calling an integration, an outside service such as a payment provider, needs nothing extra: permission to run the action covers it.

Lines that depend on a record

A user field such as Todo.owner_id, or a role held in a record such as CompanyRole.owner, is checked on the records the action itself creates, changes or deletes. On an action that changes none of them, such as a report, it lets nobody in. The action is then checked as it starts against the line's other entries: anyone signed in, or a role held across the whole application. With none left, it refuses every caller, so its route is policy.effect_ungranted.

Markdown for agents: /docs/actions.md.Built from Jadpo main at a707efb.