Together, permissions and obligations give NPL "deontic logic". What does that mean, and how is an obligation written?
Deontic logic is the logic of permission and duty — of what agents may, must, and must-not do — and NPL builds it in so a workflow's rules of conduct are enforced by the engine itself.
* An obligation is a duty with a deadline: fulfil it → verified; miss it → the engine runs otherwise → rejected. *
"Deontic" comes from the philosophy of obligation: statements about what ought to happen rather than what is. NPL encodes exactly two deontic modalities — the permitted (permission) and the required (obligation) — as first-class parts of a protocol. A time-bound obligation reads roughly:
obligation[operator] confirmCreditCheck(documentsLink: Text) before endDate | requested {
// business logic
become verified;
} otherwise become rejected;
Read it as: the operator party must confirm the credit check before endDate while the protocol is in the requested state; if they do, it becomes verified; if the deadline lapses, the engine runs otherwise and it becomes rejected. The duty and its consequence are both explicit and machine-enforced.
Go deeper:
Deontic logic (Wikipedia) — the philosophical logic of obligation, permission, and prohibition that NPL's
permission/obligationmodalities operationalise.Time and obligations (Noumena documentation) — how an obligation adds a mandatory
beforedeadline and anotherwisefallback to a permission.