@@ -75,8 +75,11 @@ and only when, they appear in all capitals, as shown here.
7575- ** CPL** : Capability Programming Language.
7676- ** Program (CPL/0):** A monotone policy evaluated by CEPs, composed of Checks
7777 (OR of Queries), Queries (AND of Literals), and Literals that are pure,
78- bounded Builtins over ground Terms (Str/Int/Bytes/Bool). CPL/0 has no
79- user-defined atoms, symbols, or variables.
78+ bounded Builtins over ground Terms (` Str ` /` Int ` /` Bytes ` /` Bool ` ). CPL/0 has no
79+ user-defined atoms, symbols, or variables. The "/0" suffix denotes that this
80+ is the first, deterministic core of the Capability Programming Language
81+ family; later editions (e.g., CPL/1) may extend the language while preserving
82+ existing semantics.
8083- ** Declarations:** Finite sets/relations used by programs: PairSet of (action,
8184 resource), ActionSet, and ResourceSet.
8285- ** Program Canonical Form (PCF):** The normalized, deterministically encoded
@@ -213,7 +216,9 @@ Deterministic Evaluation and PSP-4).
213216 - A Check succeeds if and only if at least one of its Queries succeeds.
214217 - A Query succeeds if and only if all of its Literals succeed.
215218- Literals and Terms
216- - Uses builtin literals only: Builtin(op_id, [ arg...] ).
219+ - Uses builtin literals only: Builtin(` op ` , [ args…] ). Here ` op ` is the textual
220+ identifier of the builtin operation (see Appendix B for the registry of
221+ builtins).
217222 - Terms are ground: Str | Int | Bool | Bytes. No variables. No user-defined
218223 atoms.
219224 - Int is arbitrary-precision integer. Floats are not permitted.
@@ -225,13 +230,13 @@ Deterministic Evaluation and PSP-4).
225230
226231#### Builtins and registries
227232
228- - Each builtin op_id, its type signature, and its tightening rule are defined in
229- the Builtins registry (PSP-4). The exact set in use is pinned by ` builtinsId `
230- in the Grant.
231- - Channel comparisons (e.g., ` channel_geq ` ) consult the pinned
232- ` channelLatticeId ` , which defines the set of recognized channel profile
233- identifiers and their partial order. Unknown profiles or an unknown lattice
234- MUST cause deny.
233+ - Each builtin operation is identified by a string ` op ` . Its semantics, type
234+ signature, and tightening rule are defined in the Builtins registry (PSP‑4).
235+ The exact set in use is pinned by ` builtinsId ` in the Grant.
236+ - Channel comparisons (e.g., ` channel_geq ` ) consult the pinned
237+ ` channelLatticeId ` , which defines the set of recognized channel profile
238+ identifiers and their partial order. Unknown profiles or an unknown lattice
239+ MUST cause deny.
235240- Resource subset checks in declaration-aware builtins (e.g., in_pairset)
236241 consult the scheme comparator selected by the resource's scheme name.
237242- If a builtin, lattice, or comparator required by the Program is unknown or
@@ -274,9 +279,9 @@ Deterministic Evaluation and PSP-4).
274279 considered. Any presence of rules, variables, non-ground terms, or
275280 unsupported predicates MUST cause conversion to fail (out of scope for
276281 CPL/0 interop).
277- 2 . All predicate identifiers MUST be recognized builtin op_ids in the pinned
278- ` builtinsId ` ; argument arity/types MUST match; strings are NFC; Bytes are
279- exact octets.
282+ 2 . All predicate identifiers MUST correspond to recognized builtin operations
283+ ( ` op ` strings) in the pinned ` builtinsId ` ; argument arity and types MUST
284+ match; strings are NFC; Bytes are exact octets.
280285 3 . The resulting CPL/0 Program is constructed as ` all(check_i) ` ; each Biscuit
281286 check yields one CPL/0 Check; each Biscuit query yields one CPL/0 Query;
282287 each recognized predicate yields one CPL/0 Literal.
@@ -849,7 +854,10 @@ verification.
849854
850855The following illustrates only the Grant payload structure relevant to PSP-1.
851856Envelope fields, signatures, canonical claim bytes, and multihash details are
852- defined in PSP-3.
857+ defined in PSP-3. Field names in the JSON projection use camelCase for
858+ readability. These labels are illustrative only; the normative field names and
859+ encodings are defined in PSP-3. Implementers MUST NOT rely on these example
860+ names.
853861
854862``` json
855863{
@@ -1922,7 +1930,7 @@ Query = {
19221930 literals: [1* Literal]
19231931}
19241932
1925- ; Literal = Builtin(op_id , args...)
1933+ ; Literal = Builtin(op , args...)
19261934Literal = {
19271935 op: tstr, ; operator id (e.g., "within_time", "in_pairset")
19281936 args: [* Term]
@@ -2041,9 +2049,8 @@ definitions.
20412049
20422050General rules:
20432051
2044- -- Unknown builtin op_id referenced by a Program under the pinned ` builtinsId `
2045- MUST cause deny.
2046-
2052+ - Unknown builtin operation (` op ` ) referenced by a Program under the pinned
2053+ ` builtinsId ` MUST cause deny.
20472054- Types are enforced at evaluation; ill-typed invocations MUST cause deny.
20482055- Equality of strings uses NFC; comparator logic never performs network I/O.
20492056
0 commit comments